我正在参加「启航计划」
前语
继上一篇积分收取&耗费&收回 之后, 基本上就能满足大部分公司的事务需求了; 但是, 还有有部分公司事务可能会涉及到冻住&解冻(比方金融交易公司), 再配合上收回能够说处理杂乱度又上了一层;
结构规划
表接口仍是继续沿用之前的规划, 只需要增加对应枚举即可;
用户积分key(redis)
积分为了确保功能用redis的hash进行存储, 每个用户一个key, 保护可用积分, 冻住积分, 可用相关的流水以及总收取积分数的状态;
IntegralInfo struct {
Available int64 `json:"available"` // 可用
AvailableStream []*IntegralItem `json:"availableStream"` // 可用流水
Total int64 `json:"total"` // 总收取
Frozen int64 `json:"frozen"` // 冻住
}
IntegralItem struct {
StreamId uint `json:"streamId"` // 流水Id
TaskId string `json:"taskId"` // 使命Id
Available int64 `json:"available"` // 可用
OutTime int64 `json:"outTime"` // 过期时间
Frozen map[string]int64 `json:"frozen"` // 冻住积分数
}
耗费功用
需求
- 答应多端多点一起进行积分运用;
- 实时进行抵扣, 不答应后置;
- 删去redis中无效的可用流水(含有冻住的保留);
- 不影响当前的功能;
流程图
冻住功用
需求
- 答应多端多点一起进行积分冻住;
- 积分冻住期间不触发收回;
- 冻住的积分不可再被运用;
流程图
解冻功用
需求
- 单笔冻住积分悉数解冻;
- 解冻后如果过期则直接触发收回;
- 解冻后未过期则康复可用;
流程图
冻住扣除功用
需求
- 单笔冻住积分悉数扣除(不处理过期);
- 删去redis中无效的可用流水;
流程图
结语
至此应该便是整体的使命中心积分逻辑了, 暂时想不到更杂乱的场景了, 大家有什么更杂乱的需求能够提出来一块讨论一下, 或者有什么功能更优的处理计划欢迎共享;