博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
美的支付-对账系统实现
阅读量:5173 次
发布时间:2019-06-13

本文共 1879 字,大约阅读时间需要 6 分钟。

对账,可以发现渠道方与我方交易中的差异。根据差异的不同,再做具体的操作。随着美的支付接入的渠道增多,日交易量逐渐增大的情况下,人工对账已经不能满足财务的要求,系统对账提上日程

 

待解决的问题

01

替代人工对账,解放人工对账的工作量,提升对账效率,实现系统自动化

02

对账差异可自动进行对应处理,输出对账结果

 

 1人工对账

 

2对账系统V1.01

 

系统自动从渠道下载对账单

查询系统交易流水

以渠道对账单为准,对比美的支付交易流水

以美的支付交易流水为准,对比渠道对账单

获得对账差异、对账结果‍

系统架构

对账流程

明细对账

 

    弊端

单线程分页查询渠道账单数据库中数据、分页查询银行流水数据、分页查询支付流水数据;对账速度慢,对账5000笔交易需要耗时5小时以上;对账不准确,漏单‍

 

 

3、对账系统V1.02

引入Redis,使用Redis的交集特性,可快速完成对账处理

引入多线程

将所有历史差异都查询出来重新对账,避免漏单

只需要查询一次渠道账单数据和我司交易流水

速度快,对账2W笔,耗时15分钟‍

优化之后的对账流程

 

     弊端

对账过程中所有链路都是同步调用,数据量过大的情况下导致RPC调用超时;渠道对账单中的数据存储至数据库中,量大的情况下,会导致数据插入耗时较长,且有大量RPC调用;人工对账时,需要回滚删除历史对账数据,做一次回滚操作

 

 

4、对账系统V2.0

系统拆分

引入MQ

异步化

账单数据不入库‍

 

拆分之后的架构

 

 

对账前置系统

渠道账单下载配置:按照下载配置,IT自动按时到各自渠道下载原始账单

渠道账单与标准账单映射:按照映射关系,系统自动将渠道原始账单,转换为预先定义的标准账单

 

 

内部转换系统

对账单下载配置:按照下载配置,系统自动执行SQL映射中的SQL语句,组织为原始账单

对账单SQL映射:获取内部账单的SQL语句映射,根据SQL语句,查询数据库

内部账单与标准账单映射:若配置的SQL映射非标准账单,则配置与标准账单的映射关系。系统自动按照映射关系,转换为标准账单

 

 

对账核心系统

对账主流程:

1:加载对账左方的标准账单,以订单号为key,订单金额等其他信息为value,存储至Redis的Map对象中;加载所有订单号存储至Redis的Set对象中

2:加载对账右方的标准账单,以订单号为key,订单金额等其他信息为value,存储至Redis的Map对象中;加载所有订单号存储至Redis的Set对象中

3:加载历史差异数据,以订单号为key,订单金额等其他信息为value,存储至Redis的Map对象中;加载所有订单号存储至Redis的Set对象中

4:对比对账左方和对账右方的订单总金额、总笔数

5:获得对账结果,插入对账结果

6:异步调用明细对账流程

7:主流程结束

 

明细对账流程:

1:利用Redis的Set集合对象,取交集;获得订单号一致的数据集合

2:利用Redis的Set集合对象,取差集;获得订单号不一致的数据集合

3:订单号一致的数据集合,取Redis中对应的Map对象中的订单信息,对比订单的金额是否一致。若一致,则账平;否则为差异,差异类型:金额不一致

4:订单号不一致的数据集合,与历史差异数据集合再次进行取交集操作,获得订单号一致的数据集合和订单号不一致的数据集合

5:订单号一致的数据集合,取Redis中对应的Map对象中的订单信息,对比订单的金额是否一致。若一致,则账平,类型为日切差账平;否则为差异,不做更新操作

6:订单号不一致的数据集合,判断是否新增差异。若为新增差异,则差异类型为:左有右无、左无右有

7:根据明细对账的最终结果,更新对账结果数据

8:将差异数据信息发送MQ消息,进入差错处理流程

 

对账差异处理流程:

对账差异数据发送至MQ之后,由对账核心消费,将对账差异数据存储至数据库

 

差错处理系统(V2.0未实现)

对账差异数据发送至MQ之后,由对账核心消费,将对账差异数据存储至数据库

    成果

每日对账流水近30w数据,对账核心流程耗时不超过20秒

发薪日对账流水近50w数据,对账核心流程耗时不超过30秒

 

 

5、对账系统V3.0(进行中)

实现差错处理

账平数据不入库

实现其他优化‍

 

6、结语

经过对账系统的逐步优化,对账完全实现系统自动化

对账的效率大幅提升

转载:https://mp.weixin.qq.com/s/orSKCephD7qynp5tn32cKA

转载于:https://www.cnblogs.com/duanxz/p/9204367.html

你可能感兴趣的文章
高性能MySQL --- 读书笔记(2) - 2016/8/2
查看>>
梯度下降~ML
查看>>
深入C++的new
查看>>
为什么一个object_id在dba_objects中为什么查不到记录?
查看>>
Git 过滤文件,控制上传
查看>>
正则化方法:L1和L2 regularization、数据集扩增、dropout
查看>>
git冲突解决办法
查看>>
201621123031 《Java程序设计》第14周学习总结
查看>>
数据库操作优化一例
查看>>
java中Integer i1= 0; Integer i2= 0; 为什么可以用 == 符号呢
查看>>
新版elasticsearch的插件安装
查看>>
php简易页面内调试技巧
查看>>
ivr
查看>>
IntelliJ IDEA 简体中文专题教程
查看>>
[Git] Git基础
查看>>
03 通过Button打开另一个的frm
查看>>
Dilworth定理,链还是反链?
查看>>
Web API配置自定义路由
查看>>
ASP.NET MVC程序中动态修改form的Action值
查看>>
静态内部类,匿名内部类,lambda推导式,方法内部类的使用方法
查看>>