自动对账系统的设计实现
需求背景
现在每个月大概有几百万个订单,来自十几个不同的渠道,同时区分货币和子渠道,财务在进行对账的时候只能从对方后台下载excel对账账单,然后从我方统计出相应时间内的订单数,然后挨个excel进行累加求和,最后对比总单数和总金额。
痛点
- 这样整体进行对账无法确认差异明细,一旦出现差异很难在上百万的订单中找出差异的订单。
- 每个渠道散落在不同的国家,渠道后台导出的时间和我方后台使用的时间时区并不一致,可能会导致由于时区产生的几小时数据误差(比如我方是UTC,对方是UTC+8,对方以UTC+8的标准导出2月份数据实际上和我方的2月份数据有8小时的数据是不准确的)。
- 手动对账耗时时间长,有些渠道为了每个账单大小适中,会将一个月的数据分成几个甚至几十个账单,人工计算慢并且容易出错
解决方案
- 获得渠道方的账单,通过手动上传或者sftp,ftps等方法获得并存储到我们自己的对象存储云上,并且将账单的渠道名称,账单类型,时区,云下载链接入库
- 解析已经入库的账单,抽取出重要的字段,比如金额,渠道费,税,货币,订单时间等等,将这些数据导入到新的表里。
- 将2里面创建的表和我方后台的表按照时间和渠道进行逐条比对,确认出无差异,我方缺订单,对方缺订单,双方都有但是金额有差异等情况
- 每对比一条数据就会产生一条新的对比数据,将数据插入到新的表中供后续报表展示使用
- 根据4中产出的明细表按照时间和渠道来计算出各个月每个渠道的总体差异值,得到各个渠道在各个月的总差异笔数和总差异金额。
遇到的问题
首先最麻烦的事情是时区,每个渠道给出的对账单的时区都不太一样,当我们想要进行对账的时候就很有可能有误差。
比如我方时区为UTC,对方时区为UTC+8
对方给出的1月份账单中订单从2022-01-01 00:00:00 到 2022-02-01 00:00:00
但是这个时间实际上是UTC+8的时间,对应到我们这边,订单时间其实是2021-12-30 16:00:00 到 2022-01-31 16:00:00,这样就会有8个小时的数据有差异。
解决方法:每个渠道都用对方的时区来对账,在上述的问题中,我们拿到订单之后不再以我方的“1月份”为标准来进行对账,而是从我方取出2021-12-30 16:00:00 到 2022-01-31 16:00:00来进行对。其他时区也以此类推。每个渠道给出的账单格式不同,需要独立处理
运行时间较慢,主要耗时在从云端下载对账文件以及解决方法第3步中的数据逐条比对,逐条比对本质上是将两张表进行外链接来实现的,累得到双方都有的,只有对方/我方有的数据,这个过程是两个较大的表进行链接,比较耗时
注意事项
- join语句执行很慢,最好使用离线库来执行,不要影响线上业务
- 尽可能复用代码,同时注意可扩展性,因为不同渠道的账单差别非常大,很多地方都需要重新format,保证每个字段都能够直接或者间接拿到或者找到合理的默认值
- 每次解析要做到幂等,同一个文件多次解析后结果相同
- 上传文件时进行格式检验,一旦错误的数据插入到数据集中很难将其挑选出来
- 即便是解决了时区的问题,依旧存在时间上不可解决的误差,因为对方记录的“订单时间”和我方记录的“订单时间不是一码事”,有可能我方记录的是订单生成时间/发起支付请求的时间,但是对方给出的时间是在对方后台建立交易的时间,这中间有一些误差,而且每个渠道都不一样。
自动对账系统的设计实现相关推荐
- 基于单片机的自动追日系统设计_基于单片机的自动浇花系统的设计
龙源期刊网 http://www.qikan.com.cn 基于单片机的自动浇花系统的设计 作者:吴蓓 张阳 来源:<现代信息科技> 2018 年第 03 期 摘 要:为了解决人们生活中由 ...
- 毕设--自动浇花系统的设计
目录 毕设--自动浇花系统的设计 1.作品实物图 2.PCB原理图 3.元器件清单 4.土壤温湿度采集与显示 5.硬件电路设计 6.程序源码 7.资料获取 毕设–自动浇花系统的设计 注:本毕设资源可在 ...
- 自动分账系统怎么开通?
目前,自动分账系统被广泛运用于电商.酒店.美容.汽车.零售.餐饮.物流等各个行业,很多企业早已借助自动分账系统转型升级,加速业务高质量发展,而有的企业才开始加码入局,跑步入场.在对自动分账系统充分了解 ...
- 基于matlab的自动人脸识别系统GUI设计
基于matlab的自动人脸识别系统GUI设计 之前做的一个课设项目半成品,一边网上找资料一边自己瞎捣鼓,完成了GUI界面的设计,实时视频中的人脸检测和追踪,PCA算法训练,单张人脸识别.但是识别率比较 ...
- 自动分账系统哪家好?
自动分账系统哪家好?很多涉及到多方分账的平台型企业,都想使用自动分账系统,将每一笔的订单收益进行按比例自动化分账,解决人工分账工作量大.效率低以及监管合规性等问题,那么自动分账系统哪家好呢? 一.银行 ...
- 基于python的12306自动抢票系统的设计与实现
铁路售票系统12306网站作为一个广受人们的日常使用工具,受大极大的关注.铁路售票的管理者都主要考虑降低成本,提升售票服务满意度.一年一度的春运和节假日出行高峰期,给众多的出行群众者带来了极大的烦恼, ...
- java计算机毕业设计作业自动评阅系统的设计和开发源程序+mysql+系统+lw文档+远程调试
java计算机毕业设计作业自动评阅系统的设计和开发源程序+mysql+系统+lw文档+远程调试 java计算机毕业设计作业自动评阅系统的设计和开发源程序+mysql+系统+lw文档+远程调试 本源码技 ...
- diy 单片机 自动浇花_基于单片机的自动浇花系统的设计
中图分类号:TP368.12文献标识码:A 文章编号:2096-4706(2018)03-0000-03 Design of Automatic Watering System Basedon Sin ...
- 火车站信号自动语音播报系统的设计
在现代工业控制过程中,广泛应用了工作状态和故障状态报警装置,通常它以声.光形式提醒操作者及时处理出现的问题.随着新技术的发展,人们又开始将语音技术应用到这一领域.它以更直观.易懂.更方便.准确的形式向 ...
最新文章
- Shell编程之case语句
- linux下文件无法删除不能编辑
- fscokopen php,详解PHP fsockopen的使用方法
- django的环境搭建(一)
- python做游戏代码_利用Python基础代码语句,实现2G时代文字小游戏,世界如此简单!...
- MongoDB与python交互
- javasrcipt的作用域和闭包(二)续篇之:函数内部提升机制与Variable Object
- “程序员不会数据分析,有什么影响?”资深程序员:基本等于自废武功!
- 代的划分是根据计算机的运算速度来划分,计算机的发展经历了四代,代的划分是根据计算机的运算速度来划分....
- HTTP协议抓包分析
- XMind 8 Pro
- 怎样配置文件存储服务器,服务器搭建存储配置文件
- 操作系统--虚拟内存
- The server time zone value 'xxx' is unrecognized or represents more than one time zone 问题的解决方法
- 什么是大数据(Big Data)?
- lua attempt to index field ? a nil
- 字典类型用于表示一维和二维数据?
- HTML -超文本标记语言
- 刀片服务器仿真项目,技术详解:刀片服务器I/O的课题
- 请TMD别再意淫乔布斯了!