看了之前一个答主的回答,https://segmentfault.com/q/10...
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
这里有个疑问:
每次完成任务插入记录的时候,这个taskid从哪里获取。比如新手任务中完善个人资料,难道是每次点击保存的时候将taskid传到后台去插入任务记录?如果不是从任务中心点击进去的话,完善个人资料没有taskid,这种情况算不算完成任务,后台怎么去记录这个任务?
业务逻辑里埋点写死啊。
可以写成事件进行触发。