钱包设计

4,671 阅读2分钟
落魄江湖载酒行,楚腰纤细掌中轻。
十年一觉扬州梦,赢得青楼薄幸名。
《遣怀》—— 杜牧

功能点

功能接口
充值/recharge
冻结/frozen
解冻/unfrozen
扣减/dedubt
查询余额/query-balance
账户明细/detail

数据库设计

t_wallet(钱包表)
功能类型说明
wallet_idvarchar钱包标识
user_idvarchar用户标识
balancelong总余额,单位:分可用余额 = balance - frozen_amount
frozen_amountlong冻结金额,单位:分
stateint钱包状态:0-停用;1-正常
give_amountlong赠送金额,单位:分
t_wallet_detail(钱包明细记录)
功能类型说明
wallet_idvarchar钱包标识
trade_typeint交易类型,1-转入(充值、返还等);2-转出(扣减、服务费结算等)
change_amount变动金额,充值为正数,扣减为负数,单位:分
after_change_amountlong变动后金额,单位:分
give_amountlong赠送金额,充值时使用,单位:分
give_amountlong赠送金额,单位:分
change_notevarchar备注,系统自动备注
t_wallet_order(钱包订单)
功能类型说明
order_idvarchar订单标识
order_stateint订单状态,1-冻结;2-解冻(返还余额);3-扣减;4-充值;
order_novarchar订单号,业务方传递
change_amountlong变动金额,充值为正数,扣减为负数,单位:分
give_amountlong赠送金额,充值时使用,单位:分
give_amountlong赠送金额,单位:分

钱包订单变化

冻结请求:
 1)t_wallet_order 增加新记录,状态为 冻结(1)

 2)t_wallet  增加冻结金额(frozen_amount)

 3)t_wallet_detail  增加新转出记录(待定是否需要)
解冻请求:
1)t_wallet_order 更新状态为 解冻(2)

2)t_wallet 减去冻结金额

3)t_wallet_detail  增加转入记录(待定是否需要)
扣减请求:
1)t_wallet_order 如果存在冻结记录,则更新状态为 扣减(4)

2)t_wallet_order 如果不存在记录,则增加新记录,状态为 扣减(4)

3)t_wallet 余额减去订单金额,冻结金额减去订单金额

4)t_wallet_detail 增加一条转出记录
充值请求:
1)t_wallet_order 增加新记录,状态为 充值(3)

2)t_wallet 余额加上订单金额

3)t_wallet_detail 增加一条转入记录

组合支付时的流程图

用户同时使用在线支付和余额支付结合的方式付款