背景

积分回滚

针对特定的积分操作回滚,避免用户使用回滚刷新积分有效期。例如积分加钱购买商品。

之前发生退单时,需要重新赠送积分,会导致原来使用的积分重置有效期。

积分冻结

有的平台用户消耗积分需要先冻结,在确认使用或者取消,两阶段。

如果直接采用积分加减操作,再逆向操作,会产生两笔积分日志。

设计

要求

  • 积分回滚需要支持特定积分回滚,过期时间不刷新
  • 赠送的回滚,需要优先扣减同一笔赠送,再差值补齐
  • 扣减的回滚,需要回滚每一笔当时扣减的积分和有效期
  • 积分冻结后,支持按照唯一标识进行实际扣减或者取消扣减

实现

赠送积分回滚

  1. 限制特定业务类型支持回滚
  2. 回滚记录到明细表
  3. 回滚时优先扣减特定记录,可能已经被使用
  4. 再走正常扣减,产生多条记录

扣减回滚

  1. 限制特定业务支持回滚
  2. 扣减记录到回滚明细,包含具体扣减的guid、积分值、过期时间
  3. 回滚时赠送积分,并按照具体的回滚记录还原明细

冻结积分

扣减时不产生日志,但是更新用户积分值,并记录预扣记录。

冻结最长时效1天,一天后自动返还,由定时任务处理。

实际扣减

按照预扣记录积分值执行扣减,删除预扣记录

取消预扣

更新用户积分值,删除预扣记录