支付系统和结算系统关系很密切,在钱收到自己的账户里面,不可能就放在那里不管了,在用户用完产品之后,大家要对对账,看看用户用了我们的什么服务,有哪些要收费的项目,用户需要付那些钱,钱有没有付清楚,钱有没有算错,等用户觉得这些收费没错,确认账单了。
大家进行结算,这些结算的数据,后面可供财务制作报表,当然财务有另外一套逻辑,但是起码要提供结算的数据。
这里给出一个结算模块关键部分的参考设计
设计
需要保存的内容
账单
账单历史
账单细节
结算单
结算单历史
发票
除了正常的收费之外还有其他的结算项目,那么再增加一些其他的收费信息表
详细的数据
账单:
- 订单id
- 应收
- 实收
- 价格类型(有时候由于不同的规则,计算应收的方式不同)
- 会员id
- 是否确认(账单要展示给用户看,需要用户确认,或者自己人工确认,定时任务确认)
- 账单确认时间
- 确认账单来源
- 结算单id(有账单,一般最终都会进行结算)
- 结算类型(收费种类不一样,有时候一些结算的方式也进行归类)
账单明细:
- 收费项目,收费项目的编码,收费项目的名称
- 订单id
- 会员id
- 结算类型
- 账单id(因为是账单的细节,所以这些细节都会对应到某一个账单上)
- 结算单id(冗余字段,为了找到对应的结算单)
- 单价(因为是明细,总有一些收费的基本信息)
- 数量
- 减免金额(有的时候,想少收点钱,可以减掉一些钱)
- 减免类型
- 应收
- 实收
- 排序号
- 关联id(有时候因为某些收费种类,需要有关联的信息)
- 关联时间
- 来源id(有时候要发现账单弄错了,或者需要进行调账,记录上一笔账单的来源)
结算单:
- 结算单id
- 结算单号
- 订单id
- 结算次数
- 会员id
- 结算类型
- 应收
- 实收
- 欠款
- 退款
- 各种收款方式的收费金额(微信支付,支付宝支付,银行卡支付,余额支付,押金抵扣,优惠券抵扣),真正收到我们的账户里面的钱
- 返现积分
- 一些基本费用类型应收(产品使用费,服务费)
- 是否冻结(结算单冻结之后不能再操作)
- 冻结时间
- 结算时间
开票信息:
- 订单id
- 产品可开票金额
- 服务费可开票金额
- 产品已开票金额
- 服务费已开票金额
- 是否确认
一些注意点
账单什么时候结算?
- 确认账单24h之后,定时任务
- 订单状态变成完成之后
- 后台手动,生成结算单按钮
结算单什么时候冻结?
- 首次结算立刻冻结
- 定时任务15天进行冻结(二次结算单,非首次结算都叫做二次结算)
- 手工冻结
如果已经冻结的结算单,我们再次进行调账的时候,会生成新的结算单,二次结算单一般不会直接冻结,再二次结算单冻结之前,每次进行账单的调整直接更新数据库数据即可,但是最好有个历史数据表,记录每一次数据的更改。
账单在超过一定的时间之后不能进行调整,时间可通过配置中心控制。
最后
本设计仅供参考