积分系统设计与开发

近期在做APP的积分模块,有一些总结,希望能帮助到大家。

概念介绍:

积分事件: 获取/消费积分的行为称之为积分事件

积分获取: 由APP相关系统触发,或其他系统触发

积分消费: 用积分兑换产品

积分到期: 积分时效性,定时跑批处理

表设计:

积分事件表: 有些基础字段就没有在此列出了

event_code 事件编码
event_type 事件类型 获取积分 | 消费积分
event_subject 事件主题
event_describe 事件描述
constraint_rule 事件约束规则 日/周/天 (时间单位) 主要是用来限制用户获取操作该事件的限制
constraint_rule_value 约束值 int 例: 100 200 300 与如上字段组合使用
effective_rule 生效规则 立即生效/手动生效 大多数积分事件由用户触发后,积分并不会立即增加用户积分,需要用户手动领取。而有些如签到,初始化等级时赠送的积分就会立即添加积分了
main_process_event 是否为主事件 例如: 用户登录积分事件 有对外暴露的事件, 也有对内处理的事件,当外部接口触发时,我们需要根据逻辑去找到对内的处理事件,通过该字段来表示该事件是否需要执行此逻辑 (其实最主要的是,目前设计的思路需要把用户获取积分的行为完全透明出来,否则话这些逻辑在代码里写就行了)
integral_value_rule 积分定义规则 有些积分事件需要赠送多少积分,是我们这边定义的,但有些我们控制不了。比如用户购买商品需要赠送 金额*10这种外部定义的,所以增加该字段来定义该事件的积分值要怎么算
integral_value 积分值

积分流水表:

integral_code 积分编码
customer_id 会员id
customer_name 会员名称
event_code
event_type 事件类型 新增/消费
event_subject
integral_value 该流水操作积分值
history_integral_value 历史积分
avaliable_integral_value 可用积分
status 流水类型:0,“待领取”,
1,“已领取”,
2,“使用”,
3,“退回”;
4, 过期
expire_time 积分有效时间(针对于status=1),有效时间规则可自定义
source_system 来源系统
effective_time 积分生效时间(针对于status=2)
is_deleted

积分消费表

customer_id 会员id
integral_code 积分编码(对应积分消费流水)
consumer_integral_code 消费的积分流水编码
consumer_integral_value 消费积分流水的积分值
consumer_type 消费类型 正常消费/过期消费

积分订单表: 后续订单数据如订单兑换信息可在此表扩展 或新加表

customer_id 客户id
integral_code 订单对应的积分流水编码
order_no 订单号
source_system
status 订单状态 正常/回退

用户积分信息表

customer_id 会员id
avaliable_integral_value 可用积分
gain_integral_value 总获取积分
expire_integral_value 过期积分
used_integral_value 已使用积分

表关系

在这里插入图片描述

考虑要点

  1. ​ 以用户维度对积分操作并发。 目前采用乐观锁来控制

  2. ​ 积分流水规则,目前只要涉及到对积分的操作都会在积分流水表插入数据,目前设计方式符合当前业务。且积分流水表的定义规则一旦插入便不会更改。目前status字段会由0-1的调整

  3. ​ 积分消费 积分消费单独定义表,也就是说一笔获取积分的流水可能会对应多比积分消费记录

  4. ​ 积分订单回退 目前设计方式只需根据订单号,找到对应的积分消费编码并将关联的积分消费表的数据逻辑删除即可

  5. ​ 定时跑批:

    1. ​ 积分自动签收
    2. ​ 积分自动过期(积分过期理论上归属于消费范畴,所以也会记录,方便追溯)
    3. ​ 会员等级升级积分赠送
    4. ​ 财务积分数据推送

猜你喜欢

转载自blog.csdn.net/qq_43504447/article/details/120507210