用php给app每日任务写接口思路

新手上路,请多包涵

图片描述

`要做上面的这些功能,而且有些任务是每天都要可以做的,没有思路..有没有大神指导一下思路

阅读 3.7k
3 个回答

tasks[任务表]

id name key desc num type reward status created_at updated_at
1 每日分享视频 share:video 每日分享视频任务描述 10 day 1 0 2019-01-01 11:11:11 2019-01-01 11:11:11

task_logs[任务日志表]

id user_id task_id progress reward created_at updated_at
1 1 1 2 2 2019-01-01 11:11:11 2019-01-01 11:11:11

任务表 字段描述:

id 主键ID
name 任务名称
key 任务触发的唯一标示 针对不通的业务进行触发,比如签到 key 为 sign:in 比如分享视频key为share:video
num 任务可完成次数
type 任务类型 once 比如一次任务也就是任务只能完成一次那么比如填写邀请码 day-每日任务 每天可完成的 比如签到 每日分享
reward 完成任务每次奖励数值
status 任务状态 开启或者关闭 比如1-关闭 0-默认开启

任务日志表 字段描述:

id 主键id
user_id 用户id
task_id 任务id
progress 完成进度 针对不通任务进行累加 比如每日观看视频 根据时间纬度查询出当日用户是否完成过该任务 如存在记录在该记录做更新操作
reward 已获取的奖励 如每日任务该字段累加记录

任务如何触发

如签到任务你可以单独出一个签到接口或者聚合一个接口包含比如:分享视频 观看视频都在次接口触发
如果需要在某个业务中触发那么需要单独处理 比如填写邀请码后需要触发一个填写邀请码任务

大致思路你你可以封装的一个公用方法 如果任务触发 如下是伪码:

function executeTask(key, user) {
    $task = selct * from tasks where key ....
    // 任务不存在或被关闭
    if (!$task || $task->status) {
        return;
    }
    // 每日任务
    if ($task->type == 'day') {
        $log = 根据task_id user date 查询日志记录
    // 一次性
    } else {
        $log = 根据task_id user_id 查询日志记录
    }
    // 任务是否完成
    if ($log->progress >= $task->num) {
        return;
    }

    记录日志|增加奖励操作....
}

调用

executeTask('share:video', 1)

建个用户任务表,其中1个字段date,存是当天时间Ymd

例如:

task

id task_name need_number
1 每日签到 1
2 观看视频 30

user_task

user_id date task_id finished_number
1 20190620 1 1
1 20190620 2 2

最近也做到过这种场景,给个思路吧

  1. 你需要有个基础任务类型表,记录任务名称,任务类型,次数,奖励id(如果你的奖励只是金币的话,可以只存金币值就好)等
  2. 一个用户任务表,包含用户id,任务id,完成日期,完成时间等

楼上那位相当于手把手教了...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏