背景#
积分回滚
针对特定的积分操作回滚,避免用户使用回滚刷新积分有效期。例如积分加钱购买商品。
之前发生退单时,需要重新赠送积分,会导致原来使用的积分重置有效期。
积分冻结
有的平台用户消耗积分需要先冻结,在确认使用或者取消,两阶段。
如果直接采用积分加减操作,再逆向操作,会产生两笔积分日志。
设计#
要求#
积分回滚需要支持特定积分回滚,过期时间不刷新
赠送的回滚,需要优先扣减同一笔赠送,再差值补齐
扣减的回滚,需要回滚每一笔当时扣减的积分和有效期
积分冻结后,支持按照唯一标识进行实际扣减或者取消扣减
实现#
赠送积分回滚
限制特定业务类型支持回滚
回滚记录到明细表
回滚时优先扣减特定记录,可能已经被使用
再走正常扣减,产生多条记录
扣减回滚
限制特定业务支持回滚
扣减记录到回滚明细,包含具体扣减的guid、积分值、过期时间
回滚时赠送积分,并按照具体的回滚记录还原明细
冻结积分
扣减时不产生日志,但是更新用户积分值,并记录预扣记录。
冻结最长时效1天,一天后自动返还,由定时任务处理。
实际扣减
按照预扣记录积分值执行扣减,删除预扣记录
取消预扣
更新用户积分值,删除预扣记录