近期完成一个积分(钱)系统的搭建,可用于兑换实体奖品,具备价值符号。其中遇到的问题和积累的方案进行小小的总结和思考。
功能设计
-
绑定与账户
1、标识同一个用户,在积分系统外部并没有暴露账户id,而是由其他能标识用户身份的信息W组合而成,如手机号、微信号、邮箱。通过将多个外部信息W映射(绑定)到唯一的内部账号id,就认同为是同一个账号。同时支持同类外部信息绑定,如多个手机号绑定同一账号id(但同一个手机只能属于一个账号id)。通过绑定关系,积分系统内部屏蔽掉外部信息的复杂性,而且外部无感知账户id,也是一种保护措施。账户信息存储账户最基本的属性,如可用余额、发放总额、过期总额、余额更新时间等。
2、账号的唯一确认需要通过积分产品id+外部信息W来唯一确定,
也就意味着不同的积分产品id会有不同的账号,比如通用积分产品、临时活动专用积分产品来隔离不同积分账户。 -
积分发放
1、如果系统不提供账号绑定和创建功能,发放时候还要负责账号的创建和绑定。即不存在时候创建账号,要注意下这里同一用户同一时刻多笔(不同业务流水)发放可能创建多个账户的问题,通过唯一键+事务失败回滚+重试保证发放成功。
2、发放、消费、退还等交易类请求,同一前提都是先在事务外入库流水表,这样在事务失败时候也能保证有记录,即失败也会更新流水表&#x