一、对账的定义:
为了保证账簿记录的真实性、完整性、准确性,在记账以后结账之前,定期或不定期地对有关数据进行检查、核对。
二、对账的价值:
1、对账系统作为支付系统中的基石系统,处于整个支付环节中的最后一层,主要用来保证我方支付数据与第三方支付渠道或银行的数据一致性。同时让业务比较容易理解实际的收支和业务订单的收支的一致性,保证做账数据的正确性,反向可以校验业务数据的准确性,发现业务数据的问题,及时修正;规避财务风险,进而更好的服务用户。通过系统自动进行交易数据的核对,财务只需要每天关注系统的对账记录,从而解放了财务、运营人员的工作时间,让他们可以专注于可以公司创造更多价值的工作上;释放了生产力。
2、自动完成大量交易数据的核对工作,订单数据量很大的情况,单靠人工无法完成交易数据核对并定位差错;
3、可以在第一时间发现差错交易,并及时进行处理。不用等到客户投诉来了,再定位问题进行处理,提高了用户体验。
三、设计思路:
上游:各个业务系统与支付云对账,可根据业务渠道类型
下游:支付云与支付渠道对账。每个金融账户分开独立对账,指微信和支付宝
四、对账流程
五、系统整体设计:
1、渠道数据处理模块(上游渠道:业务系统,下游渠道:支付机构、银行)
2、数据处理模块
3、核对模块
4、差错数据处理模块
5.1 渠道数据处理模块
数据重点字段提取
【商户号,商户订单号,渠道流水号,交易日期,记账日期,交易金额,付款账号,收款账号,借贷标识,交易类型、交易状态】
注意点:
1、同一渠道若申请了多个商户号。这种情况下,每个商户号若前一日都存在交易,第三方渠道会为每个商户号都会产生一份对账文件。所以这里系统设计时候需要考虑到多份对账文件处理的情况。
2、对账文件需要考虑重复下载的情况。一般情况下,渠道的对账文件一旦生成,就不会改变。但是第三方渠道也可能发生异常,导致我方收到对账文件数据不完整。这种情况下,需要有机制重新下载解析入库。
3、每个第三方渠道下载文件时间都不一样。
5.2 数据处理模块
1,渠道数据准备,解析文件
解析文件主要是将下载的对账文件解析成我们可以对账的数据类型并且入库。解析的文件不同渠道有不同的类型,因此也可以设计成不同的解析模板,使用工厂模式将不同格式的文件解析成可以对账的统一数据类型。解析的文件类型一般包括:json、text、cvs、excle等,另外部分银行会对账单做加密或者提供zip打包的格式,这里就需要额外开发zip工具类和加解密工具类进行处理。
对账文件中包含的主要信息有:
【商户号,商户订单号,渠道流水号,交易日期,记账日期,交易金额,付款账号,收款账号,借贷标识,交易类型、交易状态】
2、平台数据准备,查询平台数据
查询平台对账日期的所有交易订单数据
查询平台差错数据
加载渠道对账日期的交易数据
5.3 核对模块
核对处理也是对账的核心逻辑,具体分为以下的几个步骤来实现:
1、开始以平台交易数据为准对账逻辑:
以平台所有交易成功的订单为基准,遍历渠道所有数据,找出订单号相同的订单,对比订单的金额、订单状态是否一致。如果一致跳过,并记录对账结果;如果不一致,将该数据记入差错数据中,并记录对账结果;如果在渠道数据中没有找到此笔交易,该订单数据记入差错数据,并记录该数据差错类型(平台长款),并记录对账结果。
2、以渠道数据为基准对账逻辑:
以渠道交易数据为基准,遍历所有平台的交易(包括未成功的订单),找出订单号相同但支付状态不一致的订单,再进行对比金额记入差错数据中,并记录对账结果。如果没有在平台的交易中找到此订单,再从差错数据中遍历查找,找到对应的平台订单验证金额是否一致,不一致记入差错数据,记录对账结果。如果在差错数据中依然没有找到对应的订单,直接记入差错数据中,记录差错类型平台短款(漏单),同时统计对账结果。
3、对账统计
根据对账处理中,统计的相关信息包括:对账完成时间、对账是否成功、平账的金额和订单数、差错的金额和订单数、差错金额和订单数等。
5.4 差错数据处理模块
平台产生差错:长款、短款、金额错误
在平台中,差错处理分为两种,一种人工处理,一种系统自动处理。
主要有如下情况:
1,本地未支付,支付渠道已支付。这主要是本地未正确接收到渠道下发的异步通知导致。一般处理是将本地状态修改为已支付,并做响应的后续处理,比如通知业务方等。
2,本地已支付,支付渠道已支付,但是金额不同,这个需要人工核查。
3,本地已支付,但是支付渠道中无记录;或者本地无记录,支付渠道有记录。在排除跨日因素外,这种情况非常少见,需要了解具体原因后做处理。
六 、技术方案:
spring batch + mysql
简介:4W+1H
what + why + who +where +how
what?
A lightweight, comprehensive batch framework designed to enable the development of robust batch applications vital for the daily operations of enterprise systems.
一个轻量级的、全面的批处理框架,旨在帮助企业建立健壮、高效的批处理应用。
why?
1,spring 家族成员
2,特性:
事务管理
基于块的处理过程
声明式的输入/输出操作
启动、终止、重启任务
重试/跳过任务
基于Web的管理员接口
3,数据处理能力(100W数据普通对账一般10分钟内可以处理完成,与业务逻辑有关)
1)能够定义不同job之间的依赖关系,这样可以进行不同job的顺序调整了和依赖关系设定;
2)能够定义job中的步骤,并且能够对每个步骤的输入、输出数据进行操作;
3)能够支持对多种数据源进行操作,不但能批量操作文件,也能够对数据库进行批量操作;
4)对于批量异常数据能够有接口进行自定义处理;
5)支持对job进行重跑;
6)支持对job失败后自动重试等容错处理机制;
7)支持对每个job的输入数据源进行校验;
who?
支付宝、银行
where star?
官网:https://spring.io/projects/spring-batch
how?
https://kimmking.gitbooks.io/springbatchreference/content/03_domain_language/index.html
七、问题讨论:
1,对账后长款处理逻辑?
2,对账后短款处理逻辑?
3,对账后金额不一致处理逻辑?
4,系统异常处理逻辑?
5,上游系统的对账处理逻辑?
6,T日切时间点确定?