现金抽奖活动 的设计
现金抽奖活动,对用户来说,主要有中奖(获得现金),以及提现操作。
提现活动,一般是 用户发起提现,然后等待组织方审核,打款。
(每人一次的独立现金抽奖活动)
具体流程如下
抽奖
中奖
发起提现
等待审核
通过审核
打款
打款到账
需要用到的表
抽奖记录表-- choujiang (一般抽奖结果,大转盘是及时,还有是定时开奖(晚上定时脚本出结果,第二天开奖展示))
user_id 用户id
result_type 抽奖结果 0未中奖 1中10元 2中20元 3中30元 4中50元 5中100元
time 抽奖时间
+-----+--------------------------------------------+
| id | user_id | result_type | time
+-----+--------------------------------------------+
| 138 | 1581796000 | 0 |
+-----+--------------------------------------------+
| 139 | 1581796020 | 2 |
+-----+--------------------------------------------+
中奖表-- zhongjiang/cash状态表
choujiang_id 抽奖表id
result_type 抽奖结果 0未中奖 1中10元 2中20元 3中30元 4中50元 5中100元
status 0已中奖 1申请提现 2审核通过 3审核拒绝 4打款中 5打款成功 6打款失败
+-----+--------------------------------------------+
| id | choujiang_id | result_type | status
+-----+--------------------------------------------+
| 1 | 138 | 3 | 0
+-----+--------------------------------------------+
| 2 | 139 | 2 | 1
+-----+--------------------------------------------+
中奖记录表/提现记录表 -- cash(cash records 记录从0到6的记录log,多条对应1条zhongjiang_id)
zhongjiang_id 中奖表id
status 0已中奖 1申请提现 2审核通过 3审核拒绝 4打款中 5打款成功 6打款失败
extra 其他备注信息,比如审核author,微信order,打款失败原因等
time
+-----+--------------------------------------------+
| id | zhongjiang_id | status | extra
+-----+--------------------------------------------+
| 18 | 1 | 0 |
+-----+--------------------------------------------+
| 19 | 1 | 1 |
+-----+--------------------------------------------+
| 20 | 1 | 2 | {'审核人:hisheng','微信openid:sd33d'}
+-----+--------------------------------------------+
| 20 | 1 | 3 | {'打款金额:20元','打款方式:微信'}
+-----+--------------------------------------------+
| 20 | 1 | 4 | {'微信订单号:134455'}
+-----+--------------------------------------------+
| 20 | 1 | 5 |
+-----+--------------------------------------------+
| 20 | 1 | 6 | {'失败原因:'}
+-----+--------------------------------------------+
再说一下关系
用户每次抽奖,直接写入 choujiang 结果
如果中奖,什么时候写入 zhongjiang 表?首先需要关联 choujiang_id
我们可以异步,也可以同步。中奖表,和提现表cash关系 ?
当写入中奖的时候,可以异步写入一条 status 0 到 cash表
然后等每次操作cash的时候,写入log到 cash表,再把结果同步到 zhongjiang 表
疑问
1.为什么不把cash表拆分为 cash和cash_records 表
表设计原则一就是去除冗余,以及唯一性
维持status最好在一处,现在把status的维护放在 zhongjiang表里维护,
如果再建一个表,那么就需要同时同步维护 zhongjiang和cash 两张表里的同一个 status(保持统一),那样会增加很多复杂性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。