我正在参加「启航计划」

前语

继上一篇积分收取&耗费&收回 之后, 基本上就能满足大部分公司的事务需求了; 但是, 还有有部分公司事务可能会涉及到冻住&解冻(比方金融交易公司), 再配合上收回能够说处理杂乱度又上了一层;

结构规划

接口仍是继续沿用之前的规划, 只需要增加对应枚举即可;

用户积分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"`    // 冻住积分数
}

耗费功用

需求

  1. 答应多端多点一起进行积分运用;
  2. 实时进行抵扣, 不答应后置;
  3. 删去redis中无效的可用流水(含有冻住的保留);
  4. 不影响当前的功能;

流程图

手摸手教你写任务中心-积分冻结&解冻&消耗

冻住功用

需求

  1. 答应多端多点一起进行积分冻住;
  2. 积分冻住期间不触发收回;
  3. 冻住的积分不可再被运用;

流程图

手摸手教你写任务中心-积分冻结&解冻&消耗

解冻功用

需求

  1. 单笔冻住积分悉数解冻;
  2. 解冻后如果过期则直接触发收回;
  3. 解冻后未过期则康复可用;

流程图

手摸手教你写任务中心-积分冻结&解冻&消耗

冻住扣除功用

需求

  1. 单笔冻住积分悉数扣除(不处理过期);
  2. 删去redis中无效的可用流水;

流程图

手摸手教你写任务中心-积分冻结&解冻&消耗

结语

至此应该便是整体的使命中心积分逻辑了, 暂时想不到更杂乱的场景了, 大家有什么更杂乱的需求能够提出来一块讨论一下, 或者有什么功能更优的处理计划欢迎共享;

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。