热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

自动对账系统的设计实现

需求背景现在每个月大概有几百万个订单,来自十几个不同的渠道,同时区分货币和子渠道,财务在进行对账的时候只能从对方后台下载excel对账账

需求背景

现在每个月大概有几百万个订单,来自十几个不同的渠道,同时区分货币和子渠道,财务在进行对账的时候只能从对方后台下载excel对账账单,然后从我方统计出相应时间内的订单数,然后挨个excel进行累加求和,最后对比总单数和总金额。


痛点


  1. 这样整体进行对账无法确认差异明细,一旦出现差异很难在上百万的订单中找出差异的订单。
  2. 每个渠道散落在不同的国家,渠道后台导出的时间和我方后台使用的时间时区并不一致,可能会导致由于时区产生的几小时数据误差(比如我方是UTC,对方是UTC+8,对方以UTC+8的标准导出2月份数据实际上和我方的2月份数据有8小时的数据是不准确的)。
  3. 手动对账耗时时间长,有些渠道为了每个账单大小适中,会将一个月的数据分成几个甚至几十个账单,人工计算慢并且容易出错

解决方案


  1. 获得渠道方的账单,通过手动上传或者sftp,ftps等方法获得并存储到我们自己的对象存储云上,并且将账单的渠道名称,账单类型,时区,云下载链接入库
  2. 解析已经入库的账单,抽取出重要的字段,比如金额,渠道费,税,货币,订单时间等等,将这些数据导入到新的表里。
  3. 将2里面创建的表和我方后台的表按照时间和渠道进行逐条比对,确认出无差异,我方缺订单,对方缺订单,双方都有但是金额有差异等情况
  4. 每对比一条数据就会产生一条新的对比数据,将数据插入到新的表中供后续报表展示使用
  5. 根据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,保证每个字段都能够直接或者间接拿到或者找到合理的默认值
  • 每次解析要做到幂等,同一个文件多次解析后结果相同
  • 上传文件时进行格式检验,一旦错误的数据插入到数据集中很难将其挑选出来
  • 即便是解决了时区的问题,依旧存在时间上不可解决的误差,因为对方记录的“订单时间”和我方记录的“订单时间不是一码事”,有可能我方记录的是订单生成时间/发起支付请求的时间,但是对方给出的时间是在对方后台建立交易的时间,这中间有一些误差,而且每个渠道都不一样。

推荐阅读
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • centos ftp服务器搭建_CentOS7服务搭建搭建FTP服务器(下)
    FTP服务器搭建接上篇:CentOS7服务搭建----搭建FTP服务器(上)一、FTP相关配置文件说明相关配置文件:etcvsftpdvsftpd.co ... [详细]
  • 本文详细介绍了在CentOS 6.5 64位系统上使用阿里云ECS服务器搭建LAMP环境的具体步骤。首先,通过PuTTY工具实现远程连接至服务器。接着,检查当前系统的磁盘空间使用情况,确保有足够的空间进行后续操作,可使用 `df` 命令进行查看。此外,文章还涵盖了安装和配置Apache、MySQL和PHP的相关步骤,以及常见问题的解决方法,帮助用户顺利完成LAMP环境的搭建。 ... [详细]
  • 体积小巧的vsftpd与pureftpd Docker镜像在Unraid系统中的详细配置指南:支持TLS加密及IPv6协议
    本文详细介绍了如何在Unraid系统中配置体积小巧的vsftpd和Pure-FTPd Docker镜像,以支持TLS加密和IPv6协议。通过这些配置,用户可以实现安全、高效的文件传输服务,适用于各种网络环境。配置过程包括镜像的选择、环境变量的设置以及必要的安全措施,确保了系统的稳定性和数据的安全性。 ... [详细]
  • 蜘蛛表格:全面解析与应用指南
    蜘蛛表格:全面解析与应用指南 ... [详细]
  • 服务器监控系统大概多少钱,服务器监控系统 报价
    服务器监控系统报价内容精选换一换设置“云服务器名称”。名称可自定义,但需符合命名规则:只能由中文字符、英文字母、数字及“_”、“-”、“.”组成。如果同 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • Python 序列图分割与可视化编程入门教程
    本文介绍了如何使用 Python 进行序列图的快速分割与可视化。通过一个实际案例,详细展示了从需求分析到代码实现的全过程。具体包括如何读取序列图数据、应用分割算法以及利用可视化库生成直观的图表,帮助非编程背景的用户也能轻松上手。 ... [详细]
  • 帝国CMS中的信息归档功能详解及其重要性
    本文详细解析了帝国CMS中的信息归档功能,并探讨了其在内容管理中的重要性。通过归档功能,用户可以有效地管理和组织大量内容,提高网站的运行效率和用户体验。此外,文章还介绍了如何利用该功能进行数据备份和恢复,确保网站数据的安全性和完整性。 ... [详细]
  • 华为AP3010DNAGN从胖AP转换为瘦AP的过程及版本升级详细记录
    华为AP3010DNAGN从胖AP模式转换为瘦AP模式的过程及其版本升级的详细记录如下:首先,需要了解胖AP与瘦AP的区别。瘦AP(FIT)模式下,设备无法独立运行Wi-Fi功能,必须与AC控制器配合使用,适用于企业多AP的集中管理场景。本文将详细介绍转换步骤和版本升级的具体操作,帮助用户顺利完成配置。 ... [详细]
  • 解决SWFUpload在本地测试成功但服务器上出现404或500错误的方法
    在使用SWFUpload进行图片批量上传时,尽管本地测试一切正常,但在部署到服务器后却遇到了404和500错误。经过详细排查,发现404错误的原因在于`flash_url`和`upload_url`需要配置为绝对路径。此外,500错误可能是由于服务器端的权限设置或脚本错误导致,建议检查服务器日志以获取更多调试信息。通过这些调整,最终成功解决了问题。 ... [详细]
  • 深入解析OSI七层架构与TCP/IP协议体系
    本文详细探讨了OSI七层模型(Open System Interconnection,开放系统互连)及其与TCP/IP协议体系的关系。OSI模型将网络通信过程划分为七个层次,每个层次负责不同的功能,从物理层到应用层逐步实现数据传输和处理。通过对比分析,本文揭示了OSI模型与TCP/IP协议在结构和功能上的异同,为理解现代网络通信提供了全面的视角。 ... [详细]
  • ;etcftpusers的设定是限制系统上的某些用户不能使用FTP传送文件,etcftphosts的设定是限制不允许某些主机连接到你的FTP服务器,这样做是为了保证系统的安全性。e ... [详细]
author-avatar
红颜弹指老a刹那芳华_623
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有