现金抽奖活动 的设计

现金抽奖活动,对用户来说,主要有中奖(获得现金),以及提现操作。
提现活动,一般是 用户发起提现,然后等待组织方审核,打款。
(每人一次的独立现金抽奖活动)
具体流程如下

抽奖
中奖
发起提现
等待审核
通过审核
打款
打款到账

需要用到的表

抽奖记录表--  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(保持统一),那样会增加很多复杂性。
谢谢您的观看,欢迎关注我的公众号。

image.png


海生
104 声望34 粉丝

与黑夜里,追求那一抹萤火。