解决系统间交易实时对账的实现方法、装置及存储介质与流程

文档序号:32945480发布日期:2023-01-14 10:39阅读:172来源:国知局
解决系统间交易实时对账的实现方法、装置及存储介质与流程

1.本发明涉及数据处理领域,提供一种解决系统间交易实时对账的实现方法、装置及存储介质。


背景技术:

2.目前银行所有涉及账务相关业务系统,基本都有对账模块,而传统的对账方式有两种:第一种是隔日对账,比如支付系统发一笔实时记账请求到核心系统,但是由于网络超时或其它异常,导致支付系统无法拿到请求的最终结果,支付系统会在t+1日获取核心t日的交易对账文件进行核对,核对完成后将t日交易置为终态。这种隔日对账的做法,在现在的互联网业务来看,时间周期长,客户体验度差,并且可能会由于支付系统对此类异常交易的处理不当,导致出现短款或长款的风险。
3.第二种是准实时对账,通过定时扫描上下游系统的数据库日志文件,解析获取交易增量数据,然后再统一存到对账数据库中,进行对账。这种对账做法,需要对日志文件中的业务数据进行一系列的数据清洗、转换、存储等,效率不高,并且额外存放了一份业务数据,还存在业务敏感数据泄露的风险。


技术实现要素:

4.本发明的目的在于解决现有技术通过日志文件捕获数据存在的需要清洗、转换等操作导致的效率不高的问题。
5.为了实现上述目的本发明采用以下技术手段:
6.本发明提供了一种解决系统间交易实时对账的实现方法,包括以下步骤:
7.步骤1、上游系统a发送一笔请求至下游系统b,请求流水号s分别保存至系统a和系统b的交易流水表中,将流水号s作为系统a和系统b的对账流水号,并保证唯一;
8.步骤2、通过程序监听上游系统a和下游系统b的数据库表数据变化,并实时发送到http服务,实现上下游系统交易信息的实时同步;
9.步骤3、在http服务接口接收到请求后,不管是系统a还是系统b的数据变化请求,统一处理逻辑如下步骤4步骤9:
10.步骤4、将对账流水号s和系统标识组合作为key值,其它对账字段信息组合作为value,存入redis,若key值已存在,执行步骤5,若key值不存在,执行步骤6;
11.其中上游系统a的请求则key值为a_s,下游系统b的请求则key值为b_s
12.步骤5、如果当前请求的数据所属系统a,则更新key值为a_s的value值,如果当前请求的数据所属系统b,则更新key值为b_s的value值,表示是数据update操作;
13.步骤6、如果当前接收到的请求数据是系统b,执行步骤7,如果当前接收到的请求数据是系统a,执行步骤8;
14.步骤7、使用上游系统a的系统标识和对账流水号s组合作为key值a_s,再判断一次key值a_s在redis中是否存在,如果存在,取出key值为a_s对应的value信息,并与当前接收
到的下游系统b的数据进行比较,执行对账逻辑,如果不存在,使用系统b与对账流水号b_s作为key值,当前请求接收到的对账字段数据组合作为value,存入redis,进入步骤9;
15.步骤8、使用下游系统b的系统标识和对账流水号s组合作为key值b_s,再判断一次key值b_s在redis中是否存在,如果存在,取出key值为b_s对应的value信息,并与当前接收到的上游系统a的数据进行比较,执行对账逻辑,如果不存在,使用系统a与对账流水号a_s作为key值,当前请求接收到的对账字段数据组合作为value,存入redis,进入步骤9;
16.步骤9、将对账成功的数据从redis中删除,对账失败的数据先持久化到对账异常表并及时预警,再从redis中删除,便于后续处理;对于redis中未进行对账的数据,通过设置一个阈值,将超过阈值时间的redis数据作交易失败状态对账,对账成功后进行删除。
17.上述技术方案中,步骤2包括以下步骤:
18.步骤2.1、开发http服务接口,接收对数据库表变更操作即时捕获的请求,再对这些变更的数据进行对账处理,对账处理过程从步骤3开始;
19.步骤2.2、用上游系统a数据库的管理员账户创建acl访问控制文件,配置acl访问http服务的域名、ip、端口,并为上游系统a使用的数据库用户u1授权对utl_http包的执行权限;
20.步骤2.3、用数据库用户u1创建函数或存储过程f1,函数中通过utp_http包的begin_request方法,调起http服务接口,发送http请求;
21.步骤2.4、用数据库用户u1创建触发器,监听系统a的交易流水表,一旦发生insert、update操作,调用函数或存储过程f1,在函数中提取需要对账的核心字段传入http服务;
22.步骤2.5、通过步骤2.22.4实现了系统a交易流水表实时数据变化的捕获,系统b重复步骤2.22.4的步骤操作即可。
23.本发明还提供了一种解决系统间交易实时对账的实现装置,包括以下模块:
24.请求流水号定义模块、上游系统a发送一笔请求至下游系统b,请求流水号s分别保存至系统a和系统b的交易流水表中,将流水号s作为系统a和系统b的对账流水号,并保证唯一;
25.实时同步模块、通过程序监听上游系统a和下游系统b的数据库表数据变化,并实时发送到http服务,实现上下游系统交易信息的实时同步;
26.逻辑处理模块、在http服务接口接收到请求后,不管是系统a还是系统b的数据变化请求,统一处理逻辑如下步骤1-步骤6:
27.步骤1、将对账流水号s和系统标识组合作为key值,其它对账字段信息组合作为value,存入redis,若key值已存在,执行步骤2,若key值不存在,执行步骤3;
28.其中上游系统a的请求则key值为a_s,下游系统b的请求则key值为b_s
29.步骤2、如果当前请求的数据所属系统a,则更新key值为a_s的value值,如果当前请求的数据所属系统b,则更新key值为b_s的value值,表示是数据update操作;
30.步骤3、如果当前接收到的请求数据是系统b,执行步骤4,如果当前接收到的请求数据是系统a,执行步骤5;
31.步骤4、使用上游系统a的系统标识和对账流水号s组合作为key值a_s,再判断一次key值a_s在redis中是否存在,如果存在,取出key值为a_s对应的value信息,并与当前接收
到的下游系统b的数据进行比较,执行对账逻辑,如果不存在,使用系统b与对账流水号b_s作为key值,当前请求接收到的对账字段数据组合作为value,存入redis,进入步骤6;
32.步骤5、使用下游系统b的系统标识和对账流水号s组合作为key值b_s,再判断一次key值b_s在redis中是否存在,如果存在,取出key值为b_s对应的value信息,并与当前接收到的上游系统a的数据进行比较,执行对账逻辑,如果不存在,使用系统a与对账流水号a_s作为key值,当前请求接收到的对账字段数据组合作为value,存入redis,进入步骤6;
33.步骤6、将对账成功的数据从redis中删除,对账失败的数据先持久化到对账异常表并及时预警,再从redis中删除,便于后续处理;对于redis中未进行对账的数据,通过设置一个阈值,将超过阈值时间的redis数据作交易失败状态对账,对账成功后进行删除。
34.上述装置中,实时同步模块实现包括以下步骤:
35.步骤2.1、开发http服务接口,接收对数据库表变更操作即时捕获的请求,再对这些变更的数据进行对账处理,对账处理过程从步骤3开始;
36.步骤2.2、用上游系统a数据库的管理员账户创建acl访问控制文件,配置acl访问http服务的域名、ip、端口,并为上游系统a使用的数据库用户u1授权对utl_http包的执行权限;
37.步骤2.3、用数据库用户u1创建函数或存储过程f1,函数中通过utp_http包的begin_request方法,调起http服务接口,发送http请求;
38.步骤2.4、用数据库用户u1创建触发器,监听系统a的交易流水表,一旦发生insert、update操作,调用函数或存储过程f1,在函数中提取需要对账的核心字段传入http服务;
39.步骤2.5、通过步骤2.2-2.4实现了系统a交易流水表实时数据变化的捕获,系统b重复步骤2.22.4的步骤操作即可。
40.本发明还提供了一种存储介质,处理器执行存储介质中的程序实现上述的一种解决系统间交易实时对账的实现方法。
41.因为本发明采用上述技术手段,因此具备以下有益效果:
42.一、对交易数据能做到真正的实时捕获,无需使用定时任务不断的扫表,不断的查询数据库,对账效率高,无延迟,服务器资源消耗小。
43.二、通过oracle数据库触发器监听上下游系统数据库表变化,并利用oracle数据库能够调用http服务的特点,将这些需要对账的数据实时发送到程序中去处理;
44.三、http服务中拿到上下游系统的对账数据后,通过redis缓存对账数据,因为对账数据大多都是临时数据,对账完成后就可以删除,利用redis的快速存储和删除特点,再加上对key值合理的设计,实现了“拿一条对一条”的对账效果,而传统的对账方法都是将这些对账数据持久化到数据库表中,再开启定时任务去批量处理这些对账数据,做不到真正的实时对账,同时还会频繁的进行表操作,影响性能。
附图说明
45.图1为系统间对账流程简图。
具体实施方式
46.以下将对本发明的实施例给出详细的说明。尽管本发明将结合一些具体实施方式进行阐述和说明,但需要注意的是本发明并不仅仅只局限于这些实施方式。相反,对本发明进行的修改或者等同替换,均应涵盖在本发明的权利要求范围当中。
47.另外,为了更好的说明本发明,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员将理解,没有这些具体细节,本发明同样可以实施。
48.实施例1
49.本发明提供了一种解决系统间交易实时对账的实现方法,包括以下步骤:
50.步骤1、上游系统a发送一笔请求至下游系统b,请求流水号s分别保存至系统a和系统b的交易流水表中,将流水号s作为系统a和系统b的对账流水号,并保证唯一;比如客户在银行理财系统购买理财产品,理财系统需要调用核心系统的实时扣款接口,再根据核心接口返回的成功/失败结果更新至理财系统数据库表中,这里理财系统就是上游系统a,核心系统就是下游系统b;
51.步骤2、通过程序监听上游系统a和下游系统b的数据库表数据变化,并实时发送到http服务,实现上下游系统交易信息的实时同步;比如理财系统收到一笔购买请求,记到交易流水表后会触发数据库insert操作,这个操作会被触发器监听到,并能获取到insert的所有数据,再立刻推送程序去处理,同理核心系统交易信息入库后也会推送到相同的程序去处理。
52.步骤3、在http服务接口接收到请求后,不管是系统a还是系统b的数据变化请求,统一处理逻辑如下步骤4-步骤9:
53.步骤4、将对账流水号s和系统标识组合作为key值,其它对账字段信息组合作为value,存入redis,若key值已存在,执行步骤5,若key值不存在,执行步骤6;其它对账字段是指执行对账逻辑处理需要的数据,比如交易状态、交易金额,value值组合为s_1000;
54.其中上游系统a的请求则key值为a_s,下游系统b的请求则key值为b_s
55.步骤5、如果当前请求的数据所属系统a,则更新key值为a_s的value值,如果当前请求的数据所属系统b,则更新key值为b_s的value值,表示是数据update操作;交易数据可能最初是处理中状态,再转变成成功或失败状态,所以需要更新交易终态;
56.步骤6、如果当前接收到的请求数据是系统b,执行步骤7,如果当前接收到的请求数据是系统a,执行步骤8;步骤7和8主要是根据流水号判断接收到上下游系统对账数据的先后顺序,用后接收到的对账数据跟先收到的对账数据进行比较;
57.步骤7、使用上游系统a的系统标识和对账流水号s组合作为key值a_s,再判断一次key值a_s在redis中是否存在,如果存在,取出key值为a_s对应的value信息,并与当前接收到的下游系统b的数据进行比较,执行对账逻辑,如果不存在,使用系统b与对账流水号b_s作为key值,当前请求接收到的对账字段数据组合作为value,存入redis,进入步骤9;
58.步骤8、使用下游系统b的系统标识和对账流水号s组合作为key值b_s,再判断一次key值b_s在redis中是否存在,如果存在,取出key值为b_s对应的value信息,并与当前接收到的上游系统a的数据进行比较,执行对账逻辑,如果不存在,使用系统a与对账流水号a_s作为key值,当前请求接收到的对账字段数据组合作为value,存入redis,进入步骤9;
59.步骤9、将对账成功的数据从redis中删除,对账失败的数据先持久化到对账异常
表并及时预警,再从redis中删除,便于后续处理;对于redis中未进行对账的数据,通过设置一个阈值,将超过阈值时间的redis数据作交易失败状态对账,对账成功后进行删除。
60.上述技术方案中,步骤2包括以下步骤:
61.步骤2.1、开发http服务接口,接收对数据库表变更操作即时捕获的请求,再对这些变更的数据进行对账处理,对账处理过程从步骤3开始;
62.步骤2.2、用上游系统a数据库的管理员账户创建acl访问控制文件,配置acl访问http服务的域名、ip、端口,并为上游系统a使用的数据库用户u1授权对utl_http包的执行权限;
63.步骤2.3、用数据库用户u1创建函数或存储过程f1,函数中通过utp_http包的begin_request方法,调起http服务接口,发送http请求;
64.步骤2.4、用数据库用户u1创建触发器,监听系统a的交易流水表,一旦发生insert、update操作,调用函数或存储过程f1,在函数中提取需要对账的核心字段传入http服务;
65.步骤2.5、通过步骤2.22.4实现了系统a交易流水表实时数据变化的捕获,系统b重复步骤2.22.4的步骤操作即可。
66.实施例2
67.本发明还提供了一种解决系统间交易实时对账的实现装置,包括以下模块:
68.请求流水号定义模块、上游系统a发送一笔请求至下游系统b,请求流水号s分别保存至系统a和系统b的交易流水表中,将流水号s作为系统a和系统b的对账流水号,并保证唯一;
69.实时同步模块、通过程序监听上游系统a和下游系统b的数据库表数据变化,并实时发送到http服务,实现上下游系统交易信息的实时同步;
70.逻辑处理模块、在http服务接口接收到请求后,不管是系统a还是系统b的数据变化请求,统一处理逻辑如下步骤1-步骤6:
71.步骤1、将对账流水号s和系统标识组合作为key值,其它对账字段信息组合作为value,存入redis,若key值已存在,执行步骤2,若key值不存在,执行步骤3;
72.其中上游系统a的请求则key值为a_s,下游系统b的请求则key值为b_s
73.步骤2、如果当前请求的数据所属系统a,则更新key值为a_s的value值,如果当前请求的数据所属系统b,则更新key值为b_s的value值,表示是数据update操作;
74.步骤3、如果当前接收到的请求数据是系统b,执行步骤4,如果当前接收到的请求数据是系统a,执行步骤5;
75.步骤4、使用上游系统a的系统标识和对账流水号s组合作为key值a_s,再判断一次key值a_s在redis中是否存在,如果存在,取出key值为a_s对应的value信息,并与当前接收到的下游系统b的数据进行比较,执行对账逻辑,如果不存在,使用系统b与对账流水号b_s作为key值,当前请求接收到的对账字段数据组合作为value,存入redis,进入步骤6;
76.步骤5、使用下游系统b的系统标识和对账流水号s组合作为key值b_s,再判断一次key值b_s在redis中是否存在,如果存在,取出key值为b_s对应的value信息,并与当前接收到的上游系统a的数据进行比较,执行对账逻辑,如果不存在,使用系统a与对账流水号a_s作为key值,当前请求接收到的对账字段数据组合作为value,存入redis,进入步骤6;
77.步骤6、将对账成功的数据从redis中删除,对账失败的数据先持久化到对账异常表并及时预警,再从redis中删除,便于后续处理;对于redis中未进行对账的数据,通过设置一个阈值,将超过阈值时间的redis数据作交易失败状态对账,对账成功后进行删除。
78.上述装置中,实时同步模块实现包括以下步骤:
79.步骤2.1、开发http服务接口,接收对数据库表变更操作即时捕获的请求,再对这些变更的数据进行对账处理,对账处理过程从步骤3开始;
80.步骤2.2、用上游系统a数据库的管理员账户创建acl访问控制文件,配置acl访问http服务的域名、ip、端口,并为上游系统a使用的数据库用户u1授权对utl_http包的执行权限;
81.步骤2.3、用数据库用户u1创建函数或存储过程f1,函数中通过utp_http包的begin_request方法,调起http服务接口,发送http请求;
82.步骤2.4、用数据库用户u1创建触发器,监听系统a的交易流水表,一旦发生insert、update操作,调用函数或存储过程f1,在函数中提取需要对账的核心字段传入http服务;
83.步骤2.5、通过步骤2.22.4实现了系统a交易流水表实时数据变化的捕获,系统b重复步骤2.2-2.4的步骤操作即可。
84.实施例3
85.本发明还提供了一种存储介质,处理器执行存储介质中的程序实现上述实施例1所述的一种解决系统间交易实时对账的实现方法。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1