首页 > 其他分享 >系统里的资金交易如何与银行通道对账?我们这样设计

系统里的资金交易如何与银行通道对账?我们这样设计

时间:2023-12-09 21:57:26浏览次数:30  
标签:账单 银行 拉取 JOB 设计 对账 交易 通道

以系统里的出金交易为例, 与银行对账不外乎做两件事:①T+1日拉取银行账单,保存银行账单交易流水;②银行账单交易流水与本系统里的通道交易流水比对并记录差异。

 

数据表设计

数据表表名comment主要字段
银行账单批次表 bank_bill_batch 银行账单表,每银行每天一条记录

batchNo-批次号(PK)

bankId-系统里记录的银行通道编号

trans_date-交易日期

createTIme-记录创建时间,即账单的首次拉取时间

updateTime-最后更新时间

checkState-对账处理状态 - IPS(初始待对账/对账中/对账完成)

银行账单交易流水 bank_bill_detail 银行账单交易明细

batchNo-批次号(PK)

bankId-系统里记录的银行通道编号

transOrderNo-系统里的交易单号

bankTransOrderNo-银行侧交易单号

bankTransState-银行侧交易状态(程序里转换为系统里的交易状态)

bankTransAmount-交易金额,以分为单位存储

bankTransTime-银行侧交易完成时间

createTIme-记录创建时间

银行对账记录表 bank_bill_check_result 银行账单与系统交易对账结果  

 

 

 

 

 

如何实现对账?

毋庸置疑,实现方案是使用定时任务。如,每隔30分钟从系统对接的各银行获取账单,再进行对账。

拉取银行账单JOB银行对账JOB

获取需要拉取账单的银行通道列表-bankList

依次遍历 bankList

查询bank_bill_batch,获取待对账的账单批次-batchList

依次遍历batchList

 ↓

拉取银行账单方法(){

  防重复执行控制

  组装银行请求参数,拉取银行账单

  持久化入库,包括银行账单批次表和账单明细表(事务)

}

银行对账方法(){

  防重复执行控制

  更新batch的checkState=P

  对该批次与系统里的T-1日交易进行check

  完成后,标记batch的checkState=S

 

细节

银行账单是在T+1日生成T日账单。不同银行的对账单的具体生成时间点有所不同,有的是01:00,有的可能是09:00,甚至有的是中午11:00。1因此,定时任务的开始时间可以从00:30开始,每隔半小时触发。银行账单一旦拉取完成,后续触发时不再重复拉取。

上面表格里的方案是两个定时任务,即将拉取银行账单与银行对账分开了。 这是有缺点的。——可能出现对账不及时的情况。

那么,如何优化呢? 保留一个JOB即可。 拉取银行账单的业务完成后,则异步触发银行对账,保证银行对账及时性。

 

 

【花絮】

我组起初也是2个定时任务,拉取银行账单JOB是整点每隔1小时执行(cron=0 0 1-12/1 * * ?),银行对账JOB是整半点点每隔1小时执行(cron=0 30 1-12/1 * * ?)。后来,产品经理和结算人员反馈对账不及时。开发人员就不断调整这2个cron表达式,让其触发时间间隔更接近。 例如,变更银行对账JOB的cron=cron=0 15 1-12/1 * * ?。 但这样依然无法根本解决对账不及时的问题。 因此,更合适的实现方案是,拉取到对账单后就异步触发对账。

 

【EOF】知识就是力量,但更重要的是...。欢迎关注我的微信公众号「靠谱的程序员」,解密靠谱程序员的日常,让我们一起做靠谱的程序员。

标签:账单,银行,拉取,JOB,设计,对账,交易,通道
From: https://www.cnblogs.com/buguge/p/17891549.html

相关文章

  • springboot023学生宿舍管理系统的设计与开发-计算机毕业设计源码+LW文档
    学生宿舍管理系统的设计与开发摘要:随着信息技术的日益发展深入到社会的各个角落,学生宿舍管理也不例外。为了适应现代社会人们高度强烈的时间观念,学生宿舍管理系统为学校的教学管理带来了极大的方便。我所开发的系统采用JAVA语言和IntelliJ软件作为开发工具,利用HTML、CSS,SpringM......
  • 2023-2024-1 20231410刘珈岐《计算机基础与程序设计》第11周学习总结
    2023-2024-120231410刘珈岐《计算机基础与程序设计》第11周学习总结作业信息这个作业属于哪个课程(https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP)这个作业要求在哪里(https://www.cnblogs.com/rocedu/p/9577842.html#WEEK11)这个作业的目标自学教材《......
  • 学期2023-2024-1 20231401 《计算机基础与程序设计》第十一周学习总结
    学期2023-2024-120231401《计算机基础与程序设计》第十一周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计)这个作业要求在哪里2023-2024-1计算机基础与程序设计第十一周作业这个作业的目标自学计算机科学概论第15,16章,《C语言程序设计......
  • 2023-2024-1 20231320 《计算机基础与程序设计》第十一周学习总结
    2023-2024-120231320《计算机基础与程序设计》第十一周学习总结作业信息这个作业属于哪个课程<班级的链接>(2023-2024-1计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2022-2023-1计算机基础与程序设计第十一周作业)这个作业的目标<自学《计算机基......
  • 2023-2024-1 20231405《计算机基础与程序设计》第十一周学习总结
    2023-2024-120231405《计算机基础与程序设计》第十一周学习总结作业信息作业属于哪个课程https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP作业要求在哪里https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/homework/13009作业的目标自学《......
  • 黑盒测试用例设计方法--等价类划分法
    概念某个输入域的集合,在这个集合中每个输入条件都是等效的。如果其中一个输入并不能导致问题发生,那么集合中其他输入条件进行测试也不可能发生错误。有效等价类:有效等价类是程序规格说明有意义,合理的输入数据无效等价类:无效等价类是程序规格说明无意义,不合理的输入数据等价......
  • 2023-2024-1 20231403 《计算机基础与程序设计》第十一周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这个作业要求在哪里2023-2024-1计算机基础与程序设计第十一周作业)这个作业的目标自学《计算机科学概论》第15,16章,《C语言程序设计》第10章作业正文https://www.cnblogs.com/lsrmy......
  • 『江鸟中原』鸿蒙——设计聊天软件界面并实现登录跳转
    环境搭建软件要求 DevEcoStudio版本:DevEcoStudio4.0Beta1BuildVersion:4.0.0.201,builtonJune10,2023。 HarmonyOSSDK版本:APIversion9。硬件要求设备类型:华为手机或运行在DevEcoStudio上的华为手机设备模拟器。HarmonyOS系统:3.1.0DeveloperRelease。简要介......
  • 程序设计
    任务异步执行//定时任务设计思路://1、先把任务修改为执行中即可结束此方法,同时异步调用任务执行方法//2、定时任务扫描执行中的任务,遍历任务执行privateThreadPoolExecutorthreadPoolExecutor=newThreadPoolExecutor(1,1,0,TimeUnit.SECONDS,newLinkedBlock......
  • 23种设计模式——适配器模式
    今天开始我们就要进入到结构型的设计模式学习之中了,今天讲的设计模式是23种设计模式的第六种——适配器模式。通俗的讲,适配器的作用就是将两个互不兼容的东西进行一个适配的操作,它作为中间的桥梁。下面我们进入适配器模式的学习。应用前景:在现实生活中,适配器这样的例子随处可......