用户消费明细设计思路 php,社交软件中虚拟金币(货币),消费明细数据库设计和思路?...

tasks[任务表]idnamekeydescnumtyperewardstatuscreated_atupdated_at1每日分享视频share:video每日分享视频任务描述10day102019-01-01 11:11:112019-01-01 11:11:11

task_logs[任务日志表]iduser_idtask_idprogressrewardcreated_atupdated_at111222019-01-01 11:11:112019-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)

金币建立一个用户钱包数据表

wallets:

id user_id balance .......

balance-金额余额

消费明细

wallet_logs:

id user_id amount type action extend......

amount-金额

type-流水类型比如是签到获取还是点赞获取

action-收支状态:收入/支出

extend-扩展字段使用josn

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值