背景
之前讲了手续费有手续费账户的情况,这次讲没有手续费账户的情况。
其实就是两种不同的架构设计。
而且是基于公司zf的工作使用来讲,都是实战。
表
订单表
金额相关字段:
1、订单金额
2、手续费
记账流水表
核心字段:
1、订单金额
2、手续费
3、账户id
何时插入记录?
支付之后的时候:
1、更新订单状态为成功
2、记账
先插入记账流水,后异步轮询。
账户表
核心字段:
1、总金额
2、冻结金额
3、可提现金额
4、账户id
流程
支付
主要是计算手续费
渠道通知支付成功
渠道通知支付成功,核心业务:
1、更新订单状态为成功
2、记账
先插入记账流水,后异步轮询。
1和2是不同数据库,1是订单库,2是账户库。但是1和2是同一个分布式事务。
账户jar
账户jar不是独立的服务,即不是作为独立的服务启动,而是作为jar引入到支付服务。说白了,就是spring bean,而不是dubbo服务。
虽然部署的时候不是独立服务,但是项目代码是独立的,相当于解耦,方便开发。
异步轮询
最核心的就是加钱,加钱的时候,是加多少呢?订单金额减手续费。因为没有独立的手续费账户,所以入账金额就要减去手续费。
另外,为了提高性能,每次给某个商户加钱的时候,是批量处理,即一次性加多笔记账流水的钱。
最后,具体加钱的字段是:
1、总金额字段
2、不可提现字段
即这两个字段,都要加,而且加的钱都是一样的:订单金额减手续费。
可提现金额字段,不加,因为这个时候只是支付成功。只有清结算对账成功,才能给可提现金额字段加钱,这个时候,商家就可以提现了。