Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
3.7k views
in Technique[技术] by (71.8m points)

请问 任务中心 应该如何设计?

最近公司要做一个积分任务系统,做任务获取积分。 但是在表如何设计这块找不到相似的例子,百度上也搜不到,希望各位能提供下思路

需求:任务中心页面,可以查看当前所有的任务和进度。类似如下:
image.png

任务分为新人任务,每日任务,永久任务等,每日任务又有限制次数,比如每天只能收藏 5 次,签到 5 次等

现在我的想法是设计一个 任务表,一个 用户-任务关联表

但是用户每次进任务中心页面是需要查看自己的任务完成进度的,那难道是在每次进任务中心时初始化关联表吗? 这样的话如果用户没有进任务中心,直接收藏,该怎么加这个积分? 如果用户一注册就初始化用户-任务关联数据,好像也不太对,所以希望能够提供下思路,谢谢


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

tasks(任务表):
id name desc icon cate type num reward.....
id 主键ID
name 任务名称
desc 任务描述
icon 任务图标
cate 任务分类 比如官网、线上、游戏
type 任务类型 比如新手、每日
num 任务次数
reward 积分奖励数值

task_notes(任务日志):
id uid tid progress time...
id 主键ID
uid 用户ID
tid 任务ID
progress 完成进度
date 完成时间

任务为主表,后台可以动态添加和修改任务

任务日志表,用户完成一次向数据查询一条数据,需要注意如果num>1那么,插入了日志记录在完成直接做更新,更新progress字段

例如任务(插入然后做更新 更新progress字段):
id uid tid progress time
1 1 1 2 2020-09-11 11:11:11

新手任务:

num=1一次性任务 做完一次直接奖励 是否完成直接查询根据uid tid查询记录即可 存在为完成
num>=1 证明是新手多次任务(也就是该任务需要完成多次才为完成) 那么就做查询更新progress字段操作直到 task_notes.progress >= tasks.num 即为完成

每日任务:

根据 uid tid date 去查询 task_notes 表,存在记录证明今日做了该任务,是否完成 task_notes.progress >= tasks.num

API接口返回

{
    "id": 1,
    "name": "分享任务",
    "desc": "完成一次奖励1积分",
    "cate": "官网", 
    "num": 20,
    "type": "day",/*day-每日任务 novice-新手任务*/
    "reward": 1,
    "note": {
        "id": 1,
        "tid": 1,
        "uid": 1,
        "progress": 20,/*progress>=num 前端根据这个判断是否完成,如果note不存在直接返回null前端也可以判断*/
    }

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...