CN110443598B - 账户结算方法和装置 - Google Patents
账户结算方法和装置 Download PDFInfo
- Publication number
- CN110443598B CN110443598B CN201910730381.1A CN201910730381A CN110443598B CN 110443598 B CN110443598 B CN 110443598B CN 201910730381 A CN201910730381 A CN 201910730381A CN 110443598 B CN110443598 B CN 110443598B
- Authority
- CN
- China
- Prior art keywords
- settlement
- account
- current
- request
- lock
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/08—Payment architectures
- G06Q20/10—Payment architectures specially adapted for electronic funds transfer [EFT] systems; specially adapted for home banking systems
- G06Q20/102—Bill distribution or payments
Landscapes
- Business, Economics & Management (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Strategic Management (AREA)
- Physics & Mathematics (AREA)
- General Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
- Devices For Checking Fares Or Tickets At Control Points (AREA)
Abstract
本发明涉及一种账户结算方法和装置,包括接收当前结算请求;确定当前结算请求的第一数量和当前结算请求的结算类型;检测当前结算请求对应的目标账户是否设置有账户锁;若目标账户未设置有账户锁,根据预设的结算策略库中与第一数量相关联的第一关联结算策略,执行当前结算请求,得到结算结果;若目标账户设置有账户锁,确定账户锁的使用状态;根据预设的结算策略库中与第一数量、当前结算请求的结算类型和账户锁的使用状态相关联的第二关联结算策略,执行当前结算请求,得到结算结果。实现了优先处理结算类型为同步结算的结算请求,避免了结算类型为异步结算的结算请求长期占用账户锁,降低了锁等待的时间,提高了账户结算处理效率。
Description
技术领域
本发明涉及账户结算技术领域,具体涉及一种账户结算方法和装置。
背景技术
随着社会的不断进步,人们的生活水平进一步提高,账户交易越来越多,账户资金余额结算也变得愈发频繁。通常,每一次结算请求生成,都需要变更相关账户的余额,并且生成账户变更记录。
但是随着账交易的增多,某些热点账户可能会在同一时间产生多个并发结算处理线程,现有技术中,并发处理线程中只有一个结算处理线程能够持有当时的资源锁,使得相同账户收付款存在锁竞争,在所有并发处理线程中,只有一个结算处理线程能够持有当时的资源锁,其他处理线程必须等待锁被释放后才能进行下一次结算处理,这种情况下,被锁住的时间以及等待的时间均较长,使得账户结算处理效率较低。
发明内容
有鉴于此,本发明的目的在于提供一种账户结算方法和装置,以克服目前账户结算时被锁住的时间以及等待的时间均较长,使得账户结算处理效率较低的问题。
为实现以上目的,本发明采用如下技术方案:
一种账户结算方法,包括:
接收当前结算请求;
确定所述当前结算请求的第一数量和所述当前结算请求的结算类型;
检测所述当前结算请求对应的目标账户是否设置有账户锁;
若所述目标账户未设置有所述账户锁,根据预设的结算策略库中与所述第一数量相关联的第一关联结算策略,执行所述当前结算请求,得到结算结果;
若所述目标账户设置有所述账户锁,确定所述账户锁的使用状态;
根据预设的所述结算策略库中与所述第一数量、所述当前结算请求的结算类型和所述账户锁的使用状态相关联的第二关联结算策略,执行所述当前结算请求,得到所述结算结果。
进一步地,以上所述的账户结算方法,所述结算类型包括同步结算和异步结算;
所述使用状态包括占用状态和释放状态;
所述根据预设的所述结算策略库中与所述第一数量、所述当前结算请求的结算类型和所述账户锁的使用状态相关联的第二关联结算策略,对所述当前结算请求进行处理之前,还包括:
若所述目标账户设置有所述账户锁,所述第一数量为1,所述结算类型为所述同步结算,所述使用状态为所述释放状态,从所述结算策略库确定的所述第二关联结算策略为直接执行所述当前结算请求;
若所述目标账户设置有所述账户锁,所述第一数量为1,所述结算类型为所述同步结算,所述使用状态为所述占用状态,从所述结算策略库确定的所述第二关联结算策略为生成并执行同步优先指令,在所述账户锁被释放后,执行所述当前结算请求;
若所述目标账户设置有所述账户锁,所述第一数量为1,所述结算类型为所述异步结算,所述使用状态为所述释放状态,从所述结算策略库确定的所述第二关联结算策略为判断在第一预设时间内是否生成所述同步优先指令;若在第一预设时间内生成所述同步优先指令,则执行所述同步优先指令,释放所述账户锁;若在所述第一预设时间内没有生成所述同步优先指令,则执行所述当前结算请求;
若所述目标账户设置有所述账户锁,所述第一数量为1,所述结算类型为所述异步结算,所述使用状态为所述占用状态,从所述结算策略库确定的所述第二关联结算策略为等待所述账户锁释放后,执行所述当前结算请求。
进一步地,以上所述的账户结算方法,还包括:
若所述目标账户设置有所述账户锁,所述第一数量大于1,所有所述结算类型均为所述同步结算,从所述结算策略库确定的所述第二关联结算策略为将所述所有当前结算请求中耗时超过预设耗时阈值的部分交付预设线程池,采用预设协程处理方法,按照数据库预设顺序逐个执行所述当前结算请求中耗时在所述预设耗时阈值之内的部分;
若所述目标账户设置有所述账户锁,所述第一数量大于1,所有所述结算类型均为所述异步结算,从所述结算策略库确定的所述第二关联结算策略为将所述目标账户取模推送到相同的预设消息桶;
若所述目标账户设置有所述账户锁,所述第一数量大于1,所有所述结算类型包括所述异步结算和所述同步结算,从所述结算策略库确定的所述第二关联结算策略为先执行所有所述当前结算请求中所述结算类型为所述同步结算的第一目标当前结算请求,再执行所有所述当前结算请求中所述结算类型为所述异步结算的第二目标当前结算请求。
进一步地,以上所述的账户结算方法,所述根据预设的结算策略库中与所述第一数量相关联的第一关联结算策略,对所述当前结算请求进行处理之前,还包括:
若所述目标账户未设置有账户锁,所述第一数量为1,从所述结算策略库确定的所述第一关联结算策略为直接执行所述当前结算请求;
若所述目标账户未设置有账户锁,所述第一数量大于1,从所述结算策略库确定的所述第一关联结算策略为将所有所述当前结算请求存储至预设数据库中,以使所述数据库执行锁等待。
进一步地,以上所述的账户结算方法,所述执行所述当前结算请求,得到结算结果,包括:
判断所述当前结算请求是否为扣款请求;
若所述当前结算请求为扣款请求,获取所述当前结算请求的扣款额和所述目标账户的当前余额;
判断所述当前余额是否大于所述扣款额;
若所述当前余额大于或等于所述扣款额,则在所述目标账户中扣除所述扣款额,得到所述结算结果为扣款成功;
若所述当前余额小于所述扣款额,则得到所述结算结果为扣款失败。
进一步地,以上所述的账户结算方法,所述对所述当前结算请求进行处理,得到结算结果之后,还包括:
确定所述目标账户的日志余额;
判断所述日志余额和所述当前余额是否相同;
若所述日志余额和所述当前余额不同,则生成错误预警,以使工作人员对所述错误预警进行处理。
进一步地,以上所述的账户结算方法,所述方法还包括:
获取所述目标账户的未结算量值;
判断所述未结算量值是否大于预设未结算量阈值;
若所述未结算量值大于所述预设未结算量阈值,生成挤压预警,以使所述工作人员对所述挤压预警进行处理。
进一步地,以上所述的账户结算方法,所述接收当前结算请求,包括:
确认所述当前结算请求的结算方式,所述结算方式包括单向结算和双向结算;
若所述结算方式为所述单向结算,则将所述单向结算对应的1个结算账户作为所述目标账户;
若所述结算方式为双向结算,则分别将所述双向结算对应的2个结算账户作为所述目标账户。
进一步地,以上所述的账户结算方法,所述方法还包括:
获取所述目标账户第二预设时间的结算请求的第二数量;
若所述结算请求的第二数量大于预设阈值,则将所述目标账户确定为热点账户;
按照预设方式对所述热点账户进行批量更新。
本发明还提供了一种账户结算装置,包括接收模块、检测模块、结算模块和确定模块;
所述接收模块,用于接收当前结算请求;
所述确定模块,用于确定所述当前结算请求的第一数量和所述当前结算请求的结算类型;
所述检测模块,用于检测所述当前结算请求对应的目标账户是否设置有账户锁;
所述结算模块,用于若所述目标账户未设置有所述账户锁,根据预设的结算策略库中与所述第一数量相关联的第一关联结算策略,执行所述当前结算请求,得到结算结果;
所述确定模块,用于若所述目标账户设置有所述账户锁,确定所述账户锁的使用状态;
所述结算模块,还用于根据预设的所述结算策略库中与所述第一数量、所述当前结算请求的结算类型和所述账户锁的使用状态相关联的第二关联结算策略,执行所述当前结算请求,得到所述结算结果。
本发明的账户结算方法和装置采用以上技术方案,通过接收当前结算请求,确定当前结算请求的第一数量和当前结算请求的结算类型;检测当前结算请求对应的目标账户是否设置有账户锁;若目标账户未设置有账户锁,根据预设的结算策略库中与第一数量相关联的第一关联结算策略,执行当前结算请求,得到结算结果;若目标账户设置有账户锁,确定账户锁的使用状态;根据预设的结算策略库中与第一数量、当前结算请求的结算类型和账户锁的使用状态相关联的第二关联结算策略,执行当前结算请求,得到结算结果,实现了优先处理结算类型为同步结算的结算请求,避免了结算类型为异步结算的结算请求长期占用账户锁,降低了锁等待的时间,提高了账户结算处理效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明账户结算方法实施例一提供的流程图;
图2是本发明账户结算方法实施例二提供的流程图;
图3是本发明账户结算装置实施例一提供的结构示意图;
图4是本发明账户结算装置实施例二提供的结构示意图;
图5是本发明账户结算系统实施例提供的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将对本发明的技术方案进行详细的描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施方式,都属于本发明所保护的范围。
图1是本发明账户结算方法实施例一提供的流程图。如图1所示,本实施例的结算方法具体可以包括如下步骤:
S101、接收当前结算请求;
当用户需要转账时,需要发送账户结算请求。随着互联网的发展与全球化,使得全球数据呈爆发式增长,而且淘宝、京东等购物网站越来越成熟,使得同一账户的结算请求越来越多,发送也越来越密集,有时甚至可能在同一时刻出现多条结算请求并发的情况。
本实施例中,首先接收当前结算请求,当前结算请求可能是一个,在极少数情况下,也可能是多个当前结算请求并发。虽然多个当前结算请求并发出现的情况较少,但并不是完全不会出现,因此本实施例将多个当前结算请求并发作为需要应对的情况之一。
S102、确定当前结算请求的第一数量;
接收到当前结算请求后,可以确定当前结算请求的数量,进而确定是接收到一个当前结算请求,还是同时接收到多个并发的当前结算请求。
S103、确定当前结算请求的结算类型;
接收到当前结算请求后,还可以确定所有当前结算请求的类型。本实施例中,当前结算请求包括同步结算和异步结算两种类型。
其中,异步结算是指用户发送结算请求的发送端与处理结算请求的处理端可以不用同时在线等待,任何一方只需各自处理自己的业务,比如发送端发送结算请求以后不用等待处理端的响应,可以接着处理其他的任务。也就是说发送端和处理端都是相互独立存在的,发送端只管发送结算请求,处理端只管接收结算请求,无须去等待对方的响应。
同步结算是指发送端和处理端必须要进行同步,两个服务之间必须都是正常运行的。发送端和处理端一直处于运行状态,并且随时做好相互通信的准备。发送端首先向处理端发起一个结算请求,发送端紧接着就会堵塞当前自身的进程,不与其他应用进行任何的通信以及交互,等待处理端的响应,待结算请求得到处理端的返回消息之后会继续向下运行,进行下一步的业务处理。
S104、检测当前结算请求对应的目标账户是否设置有账户锁,若目标账户没有设置账户锁,执行S105;若目标账户设置有账户锁,执行S106;
接收到当前结算请求后,还可以检查当前结算请求对应的目标账户是否预先设置有账户锁。若目标账户没有设置账户锁,执行S105;若目标账户设置有账户锁,执行S106。
需要注意的是,本实施例并不限定S102、S103和S104的执行顺序。
S105、根据预设的结算策略库中与第一数量相关联的第一关联结算策略执行当前结算请求;
如果目标账户没有设置账户锁,则根据预设的结算策略库中与第一数量相关联的第一关联结算策略执行当前结算请求,得到结算结果。
S106、确定账户锁的使用状态;
若目标账户设置有账户锁,进一步确定账户锁的使用状态。
本实施例中,目标账户的账户锁的使用状态包括占用状态和释放状态,其中,占用状态表示账户锁被其他进程占用中,而释放状态表示没有进程占用该账户锁。
S107、根据预设的结算策略库中与第一数量、当前结算请求的结算类型和账户锁的使用状态相关联的第二关联结算策略执行当前结算请求。
若目标账户设置有账户锁,据预设的结算策略库中与第一数量、当前结算请求的结算类型和账户锁的使用状态相关联的第二关联结算策略执行当前结算请求,得到结算结果。
本实施例的账户结算方法,通过接收当前结算请求,确定当前结算请求的第一数量和当前结算请求的结算类型;检测当前结算请求对应的目标账户是否设置有账户锁;若目标账户未设置有账户锁,根据预设的结算策略库中与第一数量相关联的第一关联结算策略,执行当前结算请求,得到结算结果;若目标账户设置有账户锁,确定账户锁的使用状态;根据预设的结算策略库中与第一数量、当前结算请求的结算类型和账户锁的使用状态相关联的第二关联结算策略,执行当前结算请求,得到结算结果,实现了优先处理结算类型为同步结算的结算请求,避免了结算类型为异步结算的结算请求长期占用账户锁,降低了锁等待的时间,提高了账户结算处理效率。
图2是本发明账户结算方法实施例二提供的流程图。如图2所示,本实施例的账户结算方法具体可以包括如下步骤:
S201、接收当前结算请求;
本实施例中,首先接收当前结算请求,当前结算请求可能是一个,在极少数情况下,也可能是多个当前结算请求并发。
接收到当前结算请求后,需要确认当前结算请求对应账户的数量,确认过程如下:
确认当前结算请求的结算方式,结算方式包括单向结算和双向结算,其中,单向结算只涉及到一个账户的变动,例如网上缴纳手机费、水电费等,只需要扣除一个账户的金额,双向结算涉及到两个账户的变动,例如转账、购物付费等,一个账户扣除当前结算请求中的金额,另一个账户增加对应的金额;若当前结算请求的结算方式为单向结算,则将单向结算对应的1个结算账户作为目标账户;若当前结算请求的结算方式为双向结算,则分别将双向结算对应的2个结算账户分别作为目标账户。
S202、判断当前结算请求对应的目标账户是否设置有账户锁,若目标账户设置有账户锁,执行S203,若目标账户没有设置账户锁,执行S218;
接收到当前结算请求后,判断当前结算请求对应的目标账户是否设置有账户锁。如果目标账户设置有账户锁,则执行S203,如果目标账户并没有设置账户锁,则执行S218。
S203、判断当前结算请求的第一数量是否为1,若第一数量为1,执行S204,若第一数量不为1,执行S213;
若目标账户设置有账户锁,则判断当前结算请求的第一数量是否为1。如果当前结算请求的数量为1,则说明没有并发结算请求,执行S204,如果当前结算请求的数量不为1,根据基本常识可知,结算请求的数量必然大于1,说明存在并发结算请求,执行S213。
S204、判断结算类型是否为同步结算,若结算类型为同步结算,执行S205,若结算类型不为同步结算,执行S208;
若目标账户设置有账户锁,且当前结算请求的第一数量为1,则判断结算类型是否为同步结算,如果结算类型为同步结算,执行S205,如果结算类型不为同步结算,在本实施例中,可以确定结算类型为异步结算,则执行S208。
S205、判断使用状态是否为占用状态,若使用状态不为占用状态,执行S206,若使用状态为占用状态,执行S207;
若目标账户设置有账户锁,且没有并发结算请求,当前结算请求的第一数量为1,结算类型为同步结算,判断目标账户的使用状态是否为占用状态。如果目标账户的使用状态为占用状态,执行S207,如果目标账户的使用状态不为占用状态,则本实施例中可以确定使用状态为释放状态,执行S206。
S206、直接执行当前结算请求;
本实施例中,若设置有账户锁,目标账户当前结算请求的第一数量为1,当前结算请求的结算类型为同步结算,且账户锁使用状态为释放状态,从结算策略库确定的第二关联结算策略为直接执行当前结算请求。根据预设的结算策略库中与第一数量、当前结算请求的结算类型和账户锁的使用状态相关联的第二关联结算策略执行当前结算请求,得到结算结果。
执行当前结算请求,得到结算结果包括:判断当前结算请求是否为扣款请求;若目标账户的当前结算请求为入款请求,那直接在目标账户上增加对应的金额即可;若当前结算请求为扣款请求,获取当前结算请求的扣款额和目标账户的当前余额,其中,当前余额是历史计算出的每笔余额;判断当前余额是否大于扣款额;若当前余额大于或等于扣款额,则在目标账户中扣除扣款额,得到结算结果为扣款成功;若当前余额小于扣款额,则得到结算结果为扣款失败。本实施例中,执行当前结算请求,得到结算结果的执行过程均为上述流程,下文不做赘述。但需要注意的是,本步骤的当前结算请求确定为同步结算,发送端和处理端的通信与交互应遵循同步结算流程。
进一步地,本实施例在执行当前结算请求之前,需要确认目标账户的结算路由是否变更,如果结算路由变更,则根据更新后的结算路由执行当前扣款请求。本实施例中,在执行当前结算请求之前都需要确认结算路由的变更情况,执行过程与上述过程相同,此处不做赘述。
S207、生成并执行同步优先指令,在账户锁被释放后,执行当前结算请求;
本实施例中,若设置有账户锁,目标账户当前结算请求的第一数量为1,当前结算请求的结算类型为同步结算,且账户锁使用状态为占用状态,从结算策略库确定的第二关联结算策略为生成并执行同步优先指令,在账户锁被释放后,执行当前结算请求。根据预设的结算策略库中与第一数量、当前结算请求的结算类型和账户锁的使用状态相关联的第二关联结算策略,执行当前结算请求,得到结算结果。
具体地,如果此时账户锁被类型为异步结算的结算请求占用,当前结算请求可以休眠1ms,以等待账户锁解除占用。生成同步优先指令后,该结算请求解除占用,账户锁被释放,当前结算请求解除休眠并占用账户锁,执行当前结算请求,得到结算结果;
如果此时账户锁被类型为同步结算的结算请求占用,此时即使生成同步优先指令,也需要在等待该结算请求执行完成,释放账户锁后,再执行当前结算请求,得到结算结果。但需要注意的是,本步骤的当前结算请求确定为同步结算,发送端和处理端的通信与交互应遵循同步结算流程。
S208、判断使用状态是否为占用,若使用状态不为占用,执行S209,若使用状态为占用,执行S212;
若目标账户设置有账户锁,当前结算请求的第一数量为1,结算类型为异步结算,判断目标账户的使用状态是否为占用状态。如果目标账户的使用状态为占用状态,执行S212,如果目标账户的使用状态不为占用状态,则本实施例中可以确定使用状态为释放状态,执行S209。
S209、判断在第一预设时间内是否生成同步优先指令,若在第一预设时间内生成同步优先指令,执行S210,若在第一预设时间内没有生成同步优先指令,执行S211;
本实施例中,若设置有账户锁,目标账户当前结算请求的第一数量为1,当前结算请求的结算类型为异步结算,且账户锁使用状态为释放状态,从结算策略库确定的第二关联结算策略为判断在第一预设时间内是否生成同步优先指令;若在第一预设时间内生成同步优先指令,则执行同步优先指令,释放账户锁;若在第一预设时间内没有生成同步优先指令,则执行当前结算请求。根据预设的结算策略库中与第一数量、当前结算请求的结算类型和账户锁的使用状态相关联的第二关联结算策略,执行当前结算请求,得到结算结果。
具体地,本步骤可以先判断在第一预设时间内是否生成同步优先指令。如果在第一预设时间内,生成了同步优先指令,说明在当前结算请求占用账户锁的第一预设时间内,获取了类型为同步结算的结算请求,则执行S210;如果在第一预设时间内,并没有生成第一预设指令,则在类型为异步结算的当前结算请求占用账户锁的第一预设时间内,没有获取到任何结算请求,或者获取到了类型为异步结算的结算请求,此时执行S211。
S210、执行同步优先指令,释放账户锁;
如果在第一预设时间内生成了同步优先指令,也就是说当前结算请求占用账户锁的第一预设时间内,获取了类型为同步结算的结算请求,则执行同步优先指令,当前结算请求将账户锁释放,优先执行该类型为同步结算的结算请求。等同步优先指令执行完成后,再执行当前结算请求,得到结算结果。本步骤的当前结算请求确定为异步结算,发送端和处理端的通信与交互应遵循异步结算流程。
S211、执行当前结算请求;
如果在第一预设时间内没有生成同步优先指令,也就是说在类型为异步结算的当前结算请求占用账户锁的第一预设时间内,没有获取到任何结算请求,或者获取到了类型为异步结算的结算请求,则执行当前结算请求,得到结算结果。还可以在第一预设时间内,没有获取到任何结算请求之后休眠2ms,解除休眠之后再次确定在第一预设时间内是否生成同步优先指令,如果依旧没有生成同步优先指令,则执行当前结算请求,得到结算结果。但需要注意的是,本步骤的当前结算请求确定为异步结算,发送端和处理端的通信与交互应遵循异步结算流程。
S212、等待账户锁释放后,执行当前结算请求;
本实施例中,若设置有账户锁,目标账户当前结算请求的第一数量为1,当前结算请求的结算类型为异步结算,且账户锁使用状态为占用状态,从结算策略库确定的第二关联结算策略为等待账户锁释放后,执行当前结算请求。根据预设的结算策略库中与第一数量、当前结算请求的结算类型和账户锁的使用状态相关联的第二关联结算策略,执行当前结算请求,得到结算结果。
具体地,若设置有账户锁,目标账户当前结算请求的第一数量为1,当前结算请求的结算类型为异步结算,且账户锁使用状态为占用状态,可以休眠3ms后解除休眠,再次确认账户锁是否处于占用状态,如果账户锁依旧处于占用状态,则可以再次休眠3ms,直至账户锁被释放,也就是此时占用账户锁的进程执行完之后,执行当前结算请求,得到结算结果。
本步骤的当前结算请求确定为异步结算,发送端和处理端的通信与交互应遵循异步结算流程。
S213、判断结算类型是否相同,若结算类型相同,执行S214,若结算类型不同,执行S217;
若目标账户设置有账户锁,当前结算请求的第一数量大于1,则判断所有当前结算请求的类型是否相同,如果结算类型相同,执行S214,如果结算类型不同,执行S217。
S214、判断结算类型是否均为同步结算,若结算类型均为同步结算,执行S215,若结算类型均为异步结算,执行S216;
若目标账户设置有账户锁,当前结算请求的第一数量大于1,所有当前结算请求的类型相同,则再次判断当前结算请求的类型是否为同步结算,如果结算类型为同步结算,执行S215,如果结算类型均为异步结算,执行S216。
S215、将所有当前结算请求交付预设线程池,预设线程池的每个线程采用预设协程处理方法,按照结算处理逻辑顺序逐个执行所有当前结算请求;
若目标账户设置有账户锁,当前结算请求的第一数量大于1,所有当前结算请求的类型相同且为同步结算,则从结算策略库确定的第二关联结算策略为将所有当前结算请求交付预设线程池,预设线程池的每个线程采用预设协程处理方法,按照结算处理逻辑顺序逐个执行所有当前结算请求。
具体地,可以将所有当前结算请求编排设定线程处理任务号,且交付预设线程池,本实施例中线程池大小单机默认100,线程池的每个线程采用预设协程处理方法,按照结算处理逻辑顺序逐个执行当前结算请求,得到结算结果。线程处理完成按照编排的任务号返回至发送端,得到结算结果。其中,协程不是进程或线程,其执行过程更类似于子例程,或者说不带返回值的函数调用。协程是相互协作的,协程在一个线程里面,没有进程的切换,没有竞争资源,可以让中央处理器(Central Processing Unit,CPU)多核特性发挥到最大。而且,一个协程遇到输入/输出操作自动切换到其它协程。
本步骤的当前结算请求在执行过程中,也需要确认目标账户是否被占用,如果目标账户处于占用状态,生成并执行同步优先指令,在账户锁被释放后,执行当前结算请求、具体执行过程与S207中的执行过程相同,此处不做赘述;如果目标账户处于释放状态,则可以按照本步骤上述过程执行当前结算请求。本步骤的当前结算请求确定为同步结算,发送端和处理端的通信与交互应遵循同步结算流程。
S216、将目标账户取模推送到相同的预设消息桶;
若目标账户设置有账户锁,当前结算请求的第一数量大于1,所有当前结算请求的类型相同且为异步结算,从结算策略库确定的第二关联结算策略为将目标账户取模推送到相同的预设消息桶;根据预设的结算策略库中与第一数量、当前结算请求的结算类型和账户锁的使用状态相关联的第二关联结算策略,执行当前结算请求,得到结算结果。
本步骤的当前结算请求在执行过程中,也需要确认目标账户是否被占用,如果目标账户被占用,则等待账户锁释放后,执行当前结算请求。如果目标账户没有被占用,判断在第一预设时间内是否生成同步优先指令,若在第一预设时间内生成同步优先指令,执行同步优先指令,释放账户锁,若在第一预设时间内没有生成同步优先指令,则执行当前结算请求。其中,执行同步优先指令,释放账户锁的具体执行过程与S210的执行过程相同,执行当前结算请求的执行过程与S211的执行过程相同,此处不再赘述。
S217、先执行所有当前结算请求中结算类型为同步结算的第一目标当前结算请求,再执行所有当前结算请求中结算类型为异步结算的第二目标当前结算请求;
若目标账户设置有账户锁,当前结算请求的第一数量大于1,所有当前结算请求的类型不相同,那么本实施例中的当前结算请求的类型必定包括同步请求和异步请求。则从结算策略库确定的第二关联结算策略为先执行所有当前结算请求中结算类型为同步结算的第一目标当前结算请求,再执行所有当前结算请求中结算类型为异步结算的第二目标当前结算请求。根据预设的结算策略库中与第一数量、当前结算请求的结算类型和账户锁的使用状态相关联的第二关联结算策略,执行当前结算请求,得到结算结果。
具体地,本实施例优先执行同步结算,再执行异步结算,避免同步结算和异步结算抢锁造成锁竞争,影响处理效率。无论是执行同步结算还是异步结算,都需要在执行前确认账户锁是否被占用,然后根据账户锁的占用情况确定不同的应对方式。根据账户锁的占用情况确定不同的应对方式这一过程的执行程序上述步骤中已经进行了详细的解释,此处不再赘述。但需要注意的是,执行类型为同步结算的当前结算请求时,发送端和处理端的通信与交互应遵循同步结算流程,执行类型为异步结算的当前结算请求时,发送端和处理端的通信与交互应遵循异步结算流程。
S218、判断当前结算请求的第一数量是否为1,若第一数量为1,执行S219,若第一数量大于1,执行S220;
如果目标账户没有设置有账户锁,则判断当前结算请求的第一数量是否为1,如果当前结算请求的第一数量为1,执行S219,如果当前结算请求的第一数量大于1,执行S220。
S219、直接执行当前结算请求;
如果目标账户没有设置有账户锁,且当前结算请求的第一数量为1,从结算策略库确定的第一关联结算策略为直接执行当前结算请求。根据预设的结算策略库中与第一数量相关联的第一关联结算策略,执行当前结算请求,得到结算结果。
S220、将所有当前结算请求存储至预设数据库中。
如果目标账户没有设置有账户锁,且当前结算请求的第一数量大于1,则从结算策略库确定的第一关联结算策略为将所有当前结算请求存储至预设数据库中,执行锁等待。根据预设的结算策略库中与第一数量相关联的第一关联结算策略,执行当前结算请求,得到结算结果。
具体地,如果目标账户没有设置有账户锁,且当前结算请求的第一数量大于1,可以将当前结算请求按照随机顺序存储至预设数据库中,以使数据库按照当前结算请求进入的顺序自动执行锁等待,按照锁等待的顺序执行当前结算请求,得到结算结果。
本实施例的账户结算方法,根据账户是否设置有账户锁、账户锁的占用状态、当前结算请求的数量和类型,从预设的结算策略库中确定不同的结算策略,以适应不同的结算情况,避免出现锁竞争导致浪费时间。本实施例还实现了优先处理结算类型为同步结算的结算请求,避免了结算类型为异步结算的结算请求长期占用账户锁,降低了锁等待的时间,提高了账户结算处理效率。
进一步地,目标账户的结算涉及到每个用户的个人财产,应保障在执行结算请求时不出现错误。为了保障账户结算过程中的准确性,本实施例在以上实施例的基础上,还可以包括校验环节。校验环节的步骤为:确定目标账户的日志余额;判断日志余额和当前余额是否相同;若日志余额和当前余额不同,则生成错误预警,以使工作人员对错误预警进行处理。
具体地,可以在预设次数次结算之后执行本实施例的校验环节。执行预设次数的结算请求之后,确定经过上述若干次结算之后目标账户的日志余额,其中,日志余额是通过binlog日志得到的,将日志余额与当前余额进行比对,判断日志余额和当前余额是否相同;若日志余额和当前余额相同,则将当前账户余额推送至数据库,以为下一校验环节做准备;在极少数的情况下,可能会出现日志余额和当前余额不相同的异常情况,异常情况一旦出现,则马上生成错误预警,并通过钉钉、短信、微信等多渠道发送给工作人员,以使工作人员对错误预警进行处理。除了确定是否出现错误预警,本实施例还可以在发送端和处理端进行交互通信时,监测是否出现消息重推或者消息丢失现象,如果出现消息重推或者消息丢失,可以通过设置防重对账表进行处理。
进一步地,数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展,数据库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作、增删改查的开销也会越来越大,而一台服务器的资源是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。因此,本实施例中将目标账户的账户表、记录目标账户结算记录的结算记录表和防重对账表进行分库分表处理,以减轻服务器的压力,提高处理速度。
本实施例通过确定目标账户的日志余额;判断日志余额和当前余额是否相同;若日志余额和当前余额不同,则生成错误预警,以使工作人员对错误预警进行处理,实现了对账户结算进行校验,避免出现结算错误给客户造成损失。本实施例还实现了优先处理结算类型为同步结算的结算请求,避免了结算类型为异步结算的结算请求长期占用账户锁,降低了锁等待的时间,提高了账户结算处理效率。
进一步地,目标账户结算过程中,如果在较短时间内收到了大量的结算请求,可能会出现结算挤压的情况,导致处理速度变慢,严重时可能造成设备瘫痪。为了避免上述情况,本实施例的账户结算方法在以上实施例的基础上,还可以包括以下步骤:获取目标账户的未结算量值;判断未结算量值是否大于预设未结算量阈值;若未结算量值大于预设未结算量阈值,生成挤压预警,以使工作人员对挤压预警进行处理。
具体地,本实施例的目标账户可以按照预设周期获取目标账户未结算量值,判断未结算量值是否大于预设未结算量阈值,本实施例中预设未结算量阈值优选为600。如果未结算量值小于或等于预设未结算量阈值,说明未出现结算挤压,系统正常运行;如果未结算量值大于预设未结算量阈值,则可以先判断此时的未结算量值能否自行消化,如果能够自行消化,则说明并未出现结算挤压,系统仍然可以正常运行,如果经过判断,确认未结算量值并不能自动消化,则生成挤压预警,将挤压预警通过钉钉、短信、微信等多渠道发送给工作人员,以使工作人员对挤压预警进行处理。本实施例中,针对目标账户的结算处理不允许跨天(24小时)数据,针对不同业务需求,需要预定时间点结算完成。
本实施例的账户结算方法,通过获取目标账户的未结算量值;判断未结算量值是否大于预设未结算量阈值;若未结算量值大于预设未结算量阈值,生成挤压预警,以使工作人员对挤压预警进行处理。实现了对账户未结算量值的监测,以避免造成结算挤压影响结算流程。本实施例还实现了优先处理结算类型为同步结算的结算请求,避免了结算类型为异步结算的结算请求长期占用账户锁,降低了锁等待的时间,提高了账户结算处理效率。
进一步地,在实际生活中,有些账户可能存在较频繁的交易,结算请求较多,有些账户可能交易并不频繁。以同样的方式处理这两类账户可能会造成资源的浪费,同时使得交易频繁的账户处理较慢。为了避免上述问题,本实施例的账户结算方法可以包括以下步骤:获取目标账户第二预设时间的结算请求的第二数量;若结算请求的第二数量大于预设阈值,则将目标账户确定为热点账户;按照预设方式对热点账户进行批量更新。
具体地,本实施例中,可以根据结算请求数量确定账户的冷热程度。获取目标账户的第二预设时间内的结算请求的第二数量,如果结算请求的第二数量大于预设阈值,则说明该目标账户的交易频繁,将目标账户确定为热点账户,按照预设方式对热点账户进行批量更新。如果结算请求的第二数量小于预设阈值,则说明该目标账户的交易不频繁,将目标账户确定为冷账户,可以将冷账户迁移至处理速度稍低的设备进行处理。其中,预设方式可以包括将热点账户迁移至处理速度更高的设备进行处理,还可以将热点账户汇总批量更新。具体地,还可以将根据第二预设时间内结算请求的第二数量,将账户分为多个处理级别,根据不同的处理级别和实际情况制定相应的处理策略。
本实施例的账户结算方法通过获取目标账户第二预设时间的结算请求的第二数量;若结算请求的第二数量大于预设阈值,则将目标账户确定为热点账户;按照预设方式对热点账户进行批量更新,避免了资源的浪费,还实现了优先处理结算类型为同步结算的结算请求,避免了结算类型为异步结算的结算请求长期占用账户锁,降低了锁等待的时间,提高了账户结算处理效率。
进一步地,本实施例的账户结算方法还可以保护目标账户不被盗刷,具体地,本实施例可以获取目标账户结算请求的地点,将目标账户经常进行账户结算的地点作为用户的常用结算点,还可以设置预设额度作为最大结算额,如果接收到结算请求时,目标账户并没有位于常用结算点,和/或结算金额大于最大结算金额,可以不执行该结算请求,并冻结账户,在接收到解冻指令前禁止一切交易,还可以向对应的运营商和用户发送报警信息,以提醒运营商和用户注意。
为了更全面,对应于本发明实施例提供的账户结算方法,本申请还提供了账户结算装置。图3是本发明账户结算装置实施例一提供的结构示意图,如图3所示,本发明的账户结算装置可以包括接收模块101、检测模块102、结算模块103和确定模块104;
接收模块101,用于接收当前结算请求;
确定模块104,用于确定当前结算请求的第一数量和当前结算请求的结算类型;
检测模块102,用于检测当前结算请求对应的目标账户是否设置有账户锁;
结算模块103,用于若目标账户未设置有账户锁,根据预设的结算策略库中与第一数量相关联的第一关联结算策略,执行当前结算请求,得到结算结果;
确定模块104,还用于若目标账户设置有账户锁,确定账户锁的使用状态;
结算模块103,还用于根据预设的结算策略库中与第一数量、当前结算请求的结算类型和账户锁的使用状态相关联的第二关联结算策略,执行当前结算请求,得到结算结果。
本实施例的账户结算装置通过接收模块101接收当前结算请求,确定当前结算请求的第一数量和当前结算请求的结算类型;检测模块102检测当前结算请求对应的目标账户是否设置有账户锁;若目标账户未设置有账户锁,结算模块103根据预设的结算策略库中与第一数量相关联的第一关联结算策略,执行当前结算请求,得到结算结果;若目标账户设置有账户锁,确定模块104,确定账户锁的使用状态;结算模块103根据预设的结算策略库中与第一数量、当前结算请求的结算类型和账户锁的使用状态相关联的第二关联结算策略,执行当前结算请求,得到结算结果,实现了优先处理结算类型为同步结算的结算请求,避免了结算类型为异步结算的结算请求长期占用账户锁,降低了锁等待的时间,提高了账户结算处理效率。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图4是本发明账户结算装置实施例二提供的结构示意图。如图4所示,本实施例的账户结算装置是在图3实施例的基础上,进一步更加详细地对本发明的技术方案进行描述。
本实施例的结算类型包括同步结算和异步结算,使用状态包括占用状态和释放状态。
进一步地,本实施例的确定模块104,还用于若目标账户设置有账户锁,第一数量为1,结算类型为同步结算,使用状态为释放状态,从结算策略库确定的第二关联结算策略为直接执行当前结算请求;
确定模块104,还用于若目标账户设置有账户锁,第一数量为1,结算类型为同步结算,使用状态为占用状态,从结算策略库确定的第二关联结算策略为生成并执行同步优先指令,在账户锁被释放后,执行当前结算请求;
确定模块104,还用于若目标账户设置有账户锁,第一数量为1,结算类型为异步结算,使用状态为释放状态,从结算策略库确定的第二关联结算策略为判断在第一预设时间内是否生成同步优先指令;若在第一预设时间内生成同步优先指令,则执行同步优先指令,释放账户锁;若在第一预设时间内没有生成同步优先指令,则执行当前结算请求;
确定模块104,还用于若目标账户设置有账户锁,第一数量为1,结算类型为异步结算,使用状态为占用状态,从结算策略库确定的第二关联结算策略为等待账户锁释放后,执行当前结算请求。
进一步地,本实施例的确定模块104,还用于若目标账户设置有账户锁,第一数量大于1,所有结算类型均为同步结算,从结算策略库确定的第二关联结算策略为将所有当前结算请求交付预设线程池,预设线程池的每个线程采用预设协程处理方法,按照结算处理逻辑顺序逐个执行所有当前结算请求;
确定模块104,还用于若目标账户设置有账户锁,第一数量大于1,所有结算类型均为异步结算,从结算策略库确定的第二关联结算策略为将目标账户取模推送到相同的预设消息桶;
确定模块104,还用于若目标账户设置有账户锁,第一数量大于1,所有结算类型包括异步结算和同步结算,从结算策略库确定的第二关联结算策略为先执行所有当前结算请求中结算类型为同步结算的第一目标当前结算请求,再执行所有当前结算请求中结算类型为异步结算的第二目标当前结算请求。
确定模块104,还用于若目标账户没有设置账户锁,第一数量为1,从结算策略库确定的第一关联结算策略为直接执行当前结算请求;
确定模块104,还用于若目标账户没有设置账户锁,第一数量大于1,从结算策略库确定的第一关联结算策略为将所有当前结算请求存储至预设数据库中,以使数据库执行锁等待。
进一步地,本实施例的结算模块103具体用于判断当前结算请求是否为扣款请求;若当前结算请求为扣款请求,获取当前结算请求的扣款额和目标账户的当前余额;判断当前余额是否大于扣款额;若当前余额大于或等于扣款额,则在目标账户中扣除扣款额,得到结算结果为扣款成功;若当前余额小于扣款额,则得到结算结果为扣款失败;若当前结算请求不为扣款请求,则表示当前结算请求为入款请求,则直接在目标账户中增加入款额,得到结算结果为入款成功。
进一步地,本实施例的账户结算装置还包括判断模块105和生成模块106;
确定模块104,还用于确定目标账户的日志余额;
判断模块105,用于判断日志余额和当前余额是否相同;
生成模块106,用于若日志余额和当前余额不同,则生成错误预警,以使工作人员对错误预警进行处理。
进一步地,本实施例的接收模块101,还用于获取目标账户的未结算量值;
判断模块105,还用于判断未结算量值是否大于预设未结算量阈值;
生成模块106,还用于若未结算量值大于预设未结算量阈值,生成挤压预警,以使工作人员对挤压预警进行处理。
进一步地,本实施例的确定模块104,还用于确认当前结算请求的结算方式,结算方式包括单向结算和双向结算;若结算方式为单向结算,则将单向结算对应的1个结算账户作为目标账户;若结算方式为双向结算,则分别将双向结算对应的2个结算账户作为目标账户。
进一步地,本实施例的账户结算装置,还包括批量处理模块107;
接收模块101,还用于获取目标账户第二预设时间的结算请求的第二数量;
确定模块104,还用于若结算请求的第二数量大于预设阈值,则将目标账户确定为热点账户;
批量处理模块107,用于按照预设方式对热点账户进行批量更新。
本实施例的账户结算装置接收模块101接收当前结算请求,确定模块104确定账户是否设置有账户锁、账户锁的占用状态、当前结算请求的数量和类型,从预设的结算策略库中确定不同的结算策略,以使结算模块103适应不同的结算情况,避免出现锁竞争导致浪费时间。判断模块105和生成模块106可以监测是否出现积压预警,还可以检测是否出现错误预警,一旦出现积压预警或错误预警,马上提醒工作人员进行处理,避免给客户造成损失。本实施例还可以通过接收模块101和确定模块104确定热点账户,按照预设方式对热点账户进行批量更新,进而保证处理资源能够合理利用。本实施例还实现了优先处理结算类型为同步结算的结算请求,避免了结算类型为异步结算的结算请求长期占用账户锁,降低了锁等待的时间,提高了账户结算处理效率。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图5是本发明账户结算系统实施例提供的结构示意图。为了更全面,对应于本发明实施例提供的账户结算方法,本申请还提供了账户结算系统。
如图5所示,本实施例的账户结算系统可以包括处理器21和存储器22;
处理器21与存储器22相连;
处理器21,用于调用并执行存储器22中存储的程序;
存储器22,用于存储程序,程序用于执行以上实施例的账户结算方法。
本实施例的账户结算系统包括处理器21和存储器22。处理器21调用并执行存储器22中存储的程序,存储器22存储程序,程序用于执行以上实施例的账户结算方法。本实施例的账户结算系统实现了优先处理结算类型为同步结算的结算请求,避免了结算类型为异步结算的结算请求长期占用账户锁,降低了锁等待的时间,提高了账户结算处理效率。
可以理解的是,上述各实施例中相同或相似部分可以相互参考,在一些实施例中未详细说明的内容可以参见其他实施例中相同或相似的内容。
需要说明的是,在本发明的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是指至少两个。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本发明各个实施例中的各功能单元可以集成在一个结算模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (9)
1.一种账户结算方法,其特征在于,包括:
接收当前结算请求;
确定所述当前结算请求的第一数量和所述当前结算请求的结算类型;
检测所述当前结算请求对应的目标账户是否设置有账户锁;
若所述目标账户未设置有所述账户锁,根据预设的结算策略库中与所述第一数量相关联的第一关联结算策略,执行所述当前结算请求,得到结算结果;
若所述目标账户设置有所述账户锁,确定所述账户锁的使用状态;
根据预设的所述结算策略库中与所述第一数量、所述当前结算请求的结算类型和所述账户锁的使用状态相关联的第二关联结算策略,执行所述当前结算请求,得到所述结算结果;
所述结算类型包括同步结算和异步结算;
所述使用状态包括占用状态和释放状态;
所述根据预设的所述结算策略库中与所述第一数量、所述当前结算请求的结算类型和所述账户锁的使用状态相关联的第二关联结算策略,对所述当前结算请求进行处理之前,还包括:
若所述目标账户设置有所述账户锁,所述第一数量为1,所述结算类型为所述同步结算,所述使用状态为所述释放状态,从所述结算策略库确定的所述第二关联结算策略为直接执行所述当前结算请求;
若所述目标账户设置有所述账户锁,所述第一数量为1,所述结算类型为所述同步结算,所述使用状态为所述占用状态,从所述结算策略库确定的所述第二关联结算策略为生成并执行同步优先指令,在所述账户锁被释放后,执行所述当前结算请求;
若所述目标账户设置有所述账户锁,所述第一数量为1,所述结算类型为所述异步结算,所述使用状态为所述释放状态,从所述结算策略库确定的所述第二关联结算策略为判断在第一预设时间内是否生成所述同步优先指令;若在第一预设时间内生成所述同步优先指令,则执行所述同步优先指令,释放所述账户锁;若在所述第一预设时间内没有生成所述同步优先指令,则执行所述当前结算请求;
若所述目标账户设置有所述账户锁,所述第一数量为1,所述结算类型为所述异步结算,所述使用状态为所述占用状态,从所述结算策略库确定的所述第二关联结算策略为等待所述账户锁释放后,执行所述当前结算请求。
2.根据权利要求1所述的账户结算方法,其特征在于,还包括:
若所述目标账户设置有所述账户锁,所述第一数量大于1,所有所述结算类型均为所述同步结算,从所述结算策略库确定的所述第二关联结算策略为将所有所述当前结算请求交付预设线程池,所述预设线程池的每个线程采用预设协程处理方法,按照结算处理逻辑顺序逐个执行所有所述当前结算请求;
若所述目标账户设置有所述账户锁,所述第一数量大于1,所有所述结算类型均为所述异步结算,从所述结算策略库确定的所述第二关联结算策略为将所述目标账户取模推送到相同的预设消息桶;
若所述目标账户设置有所述账户锁,所述第一数量大于1,所有所述结算类型包括所述异步结算和所述同步结算,从所述结算策略库确定的所述第二关联结算策略为先执行所有所述当前结算请求中所述结算类型为所述同步结算的第一目标当前结算请求,再执行所有所述当前结算请求中所述结算类型为所述异步结算的第二目标当前结算请求。
3.根据权利要求1所述的账户结算方法,其特征在于,所述根据预设的结算策略库中与所述第一数量相关联的第一关联结算策略,对所述当前结算请求进行处理之前,还包括:
若所述目标账户未设置有账户锁,所述第一数量为1,从所述结算策略库确定的所述第一关联结算策略为直接执行所述当前结算请求;
若所述目标账户未设置有账户锁,所述第一数量大于1,从所述结算策略库确定的所述第一关联结算策略为将所有所述当前结算请求存储至预设数据库中,以使所述数据库执行锁等待。
4.根据权利要求1所述账户结算方法,其特征在于,所述执行所述当前结算请求,得到结算结果,包括:
判断所述当前结算请求是否为扣款请求;
若所述当前结算请求为扣款请求,获取所述当前结算请求的扣款额和所述目标账户的当前余额;
判断所述当前余额是否大于所述扣款额;
若所述当前余额大于或等于所述扣款额,则在所述目标账户中扣除所述扣款额,得到所述结算结果为扣款成功;
若所述当前余额小于所述扣款额,则得到所述结算结果为扣款失败。
5.根据权利要求4所述的账户结算方法,其特征在于,对所述当前结算请求进行处理,得到结算结果之后,还包括:
确定所述目标账户的日志余额;
判断所述日志余额和所述当前余额是否相同;
若所述日志余额和所述当前余额不同,则生成错误预警,以使工作人员对所述错误预警进行处理。
6.根据权利要求1所述的账户结算方法,其特征在于,所述方法还包括:
获取所述目标账户的未结算量值;
判断所述未结算量值是否大于预设未结算量阈值;
若所述未结算量值大于所述预设未结算量阈值,生成挤压预警,以使工作人员对所述挤压预警进行处理。
7.根据权利要求1所述的账户结算方法,其特征在于,所述接收当前结算请求,包括:
确认所述当前结算请求的结算方式,所述结算方式包括单向结算和双向结算;
若所述结算方式为所述单向结算,则将所述单向结算对应的1个结算账户作为所述目标账户;
若所述结算方式为双向结算,则分别将所述双向结算对应的2个结算账户作为所述目标账户。
8.根据权利要求1所述的账户结算方法,其特征在于,所述方法还包括:
获取所述目标账户第二预设时间的结算请求的第二数量;
若所述结算请求的第二数量大于预设阈值,则将所述目标账户确定为热点账户;
按照预设方式对所述热点账户进行批量更新。
9.一种账户结算装置,其特征在于,包括接收模块、检测模块、结算模块和确定模块;
所述接收模块,用于接收当前结算请求;
所述确定模块,用于确定所述当前结算请求的第一数量和所述当前结算请求的结算类型;所述结算类型包括同步结算和异步结算;
所述检测模块,用于检测所述当前结算请求对应的目标账户是否设置有账户锁;
所述结算模块,用于若所述目标账户未设置有所述账户锁,根据预设的结算策略库中与所述第一数量相关联的第一关联结算策略,执行所述当前结算请求,得到结算结果;
所述确定模块,还用于若所述目标账户设置有所述账户锁,确定所述账户锁的使用状态;所述使用状态包括占用状态和释放状态;
所述结算模块,还用于根据预设的所述结算策略库中与所述第一数量、所述当前结算请求的结算类型和所述账户锁的使用状态相关联的第二关联结算策略,执行所述当前结算请求,得到所述结算结果;
所述根据预设的所述结算策略库中与所述第一数量、所述当前结算请求的结算类型和所述账户锁的使用状态相关联的第二关联结算策略,对所述当前结算请求进行处理之前,还包括:
若所述目标账户设置有所述账户锁,所述第一数量为1,所述结算类型为所述同步结算,所述使用状态为所述释放状态,从所述结算策略库确定的所述第二关联结算策略为直接执行所述当前结算请求;
若所述目标账户设置有所述账户锁,所述第一数量为1,所述结算类型为所述同步结算,所述使用状态为所述占用状态,从所述结算策略库确定的所述第二关联结算策略为生成并执行同步优先指令,在所述账户锁被释放后,执行所述当前结算请求;
若所述目标账户设置有所述账户锁,所述第一数量为1,所述结算类型为所述异步结算,所述使用状态为所述释放状态,从所述结算策略库确定的所述第二关联结算策略为判断在第一预设时间内是否生成所述同步优先指令;若在第一预设时间内生成所述同步优先指令,则执行所述同步优先指令,释放所述账户锁;若在所述第一预设时间内没有生成所述同步优先指令,则执行所述当前结算请求;
若所述目标账户设置有所述账户锁,所述第一数量为1,所述结算类型为所述异步结算,所述使用状态为所述占用状态,从所述结算策略库确定的所述第二关联结算策略为等待所述账户锁释放后,执行所述当前结算请求。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910730381.1A CN110443598B (zh) | 2019-08-08 | 2019-08-08 | 账户结算方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910730381.1A CN110443598B (zh) | 2019-08-08 | 2019-08-08 | 账户结算方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110443598A CN110443598A (zh) | 2019-11-12 |
CN110443598B true CN110443598B (zh) | 2023-03-28 |
Family
ID=68434010
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910730381.1A Active CN110443598B (zh) | 2019-08-08 | 2019-08-08 | 账户结算方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110443598B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116051117A (zh) * | 2023-03-07 | 2023-05-02 | 天津金城银行股份有限公司 | 热点账户余额的控制方法、装置和电子设备 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6564261B1 (en) * | 1999-05-10 | 2003-05-13 | Telefonaktiebolaget Lm Ericsson (Publ) | Distributed system to intelligently establish sessions between anonymous users over various networks |
CN102365642A (zh) * | 2009-01-28 | 2012-02-29 | 海德沃特合作I有限公司 | 使用综合记账、中间记账和多个账户的可验证设备协助服务使用计费 |
CN103793843A (zh) * | 2012-10-26 | 2014-05-14 | 阿里巴巴集团控股有限公司 | 一种账户数据的处理方法和装置 |
CN106095585A (zh) * | 2016-06-22 | 2016-11-09 | 中国建设银行股份有限公司 | 任务请求处理方法、装置和企业信息系统 |
CN106447426A (zh) * | 2016-09-08 | 2017-02-22 | 北京小度信息科技有限公司 | 分账结算方法和装置 |
CN106484713A (zh) * | 2015-08-27 | 2017-03-08 | 中国石油化工股份有限公司 | 一种基于面向服务的分布式请求处理系统 |
CN107403382A (zh) * | 2017-06-12 | 2017-11-28 | 北京金未来金融信息服务有限公司 | 资产匹配系统 |
CN107730228A (zh) * | 2017-08-24 | 2018-02-23 | 上海壹账通金融科技有限公司 | 账户清结算方法、设备及存储介质 |
CN109783502A (zh) * | 2018-12-28 | 2019-05-21 | 北京摩拜科技有限公司 | 支持多端登录的结算方法、装置、系统及服务器 |
CN109960572A (zh) * | 2017-12-22 | 2019-07-02 | 北京三快在线科技有限公司 | 设备资源管理方法和装置以及智能终端 |
CN109978463A (zh) * | 2019-03-28 | 2019-07-05 | 上海中通吉网络技术有限公司 | 多级账号体系的结算方法、装置、设备和系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7584332B2 (en) * | 2006-02-17 | 2009-09-01 | University Of Notre Dame Du Lac | Computer systems with lightweight multi-threaded architectures |
-
2019
- 2019-08-08 CN CN201910730381.1A patent/CN110443598B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6564261B1 (en) * | 1999-05-10 | 2003-05-13 | Telefonaktiebolaget Lm Ericsson (Publ) | Distributed system to intelligently establish sessions between anonymous users over various networks |
CN102365642A (zh) * | 2009-01-28 | 2012-02-29 | 海德沃特合作I有限公司 | 使用综合记账、中间记账和多个账户的可验证设备协助服务使用计费 |
CN103793843A (zh) * | 2012-10-26 | 2014-05-14 | 阿里巴巴集团控股有限公司 | 一种账户数据的处理方法和装置 |
CN106484713A (zh) * | 2015-08-27 | 2017-03-08 | 中国石油化工股份有限公司 | 一种基于面向服务的分布式请求处理系统 |
CN106095585A (zh) * | 2016-06-22 | 2016-11-09 | 中国建设银行股份有限公司 | 任务请求处理方法、装置和企业信息系统 |
CN106447426A (zh) * | 2016-09-08 | 2017-02-22 | 北京小度信息科技有限公司 | 分账结算方法和装置 |
CN107403382A (zh) * | 2017-06-12 | 2017-11-28 | 北京金未来金融信息服务有限公司 | 资产匹配系统 |
CN107730228A (zh) * | 2017-08-24 | 2018-02-23 | 上海壹账通金融科技有限公司 | 账户清结算方法、设备及存储介质 |
CN109960572A (zh) * | 2017-12-22 | 2019-07-02 | 北京三快在线科技有限公司 | 设备资源管理方法和装置以及智能终端 |
CN109783502A (zh) * | 2018-12-28 | 2019-05-21 | 北京摩拜科技有限公司 | 支持多端登录的结算方法、装置、系统及服务器 |
CN109978463A (zh) * | 2019-03-28 | 2019-07-05 | 上海中通吉网络技术有限公司 | 多级账号体系的结算方法、装置、设备和系统 |
Non-Patent Citations (3)
Title |
---|
Evaluating and Optimizing Thread Pool Strategies for Real-Time CORBA;Irfan Pyarali;《OM "01: Proceedings of the 2001 ACM SIGPLAN workshop on Optimization of middleware and distributed systems》;20010831;全文 * |
基于线程池的GPU任务并行计算模式研究;李涛等;《计算机学报》;20171229(第10期);全文 * |
线程池的多线程并发控制技术研究;杨开杰等;《计算机应用与软件》;20100115(第01期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110443598A (zh) | 2019-11-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2987387B1 (en) | System, method, and device for exposing wireless module data storage | |
CN112650576B (zh) | 资源调度方法、装置、设备、存储介质及计算机程序产品 | |
CN108572898B (zh) | 一种控制接口的方法、装置、设备、以及存储介质 | |
CN110888893A (zh) | 一种基于微服务电商系统的订单处理方法 | |
CN111209110B (zh) | 一种实现负载均衡的任务调度管理方法、系统和存储介质 | |
CN101137984A (zh) | 用于分布加载数据库的系统、方法和软件 | |
CN114253748B (zh) | 一种消息处理系统和消息处理方法 | |
CN111159195A (zh) | 区块链系统中的数据存储控制方法及设备 | |
CN110443598B (zh) | 账户结算方法和装置 | |
CN108519920A (zh) | 一种调度重试方法及装置 | |
US11044209B2 (en) | Asymmetric co-operative queue management for messages | |
CN112181627A (zh) | 定时任务调度方法、装置及系统 | |
CN111901352A (zh) | 消息分发处理的方法、装置、服务器及存储介质 | |
CN113946427A (zh) | 用于多操作系统的任务处理方法、处理器及存储介质 | |
CN111710403B (zh) | 医疗设备的监管方法、设备及可读存储介质 | |
CN111488373B (zh) | 用于处理请求的方法和系统 | |
CN108170545A (zh) | 一种基于消息中间件的消息传输方法和装置 | |
CN111274047A (zh) | 信息处理方法、终端、系统、计算机设备和存储介质 | |
CN116389385A (zh) | 一种系统资源处理方法、装置、存储介质及设备 | |
CN109903022B (zh) | 资源发放方法、装置、设备及计算机可读存储介质 | |
CN116051106A (zh) | 一种异常订单处理方法和装置 | |
CN113590715A (zh) | 基于区块链的信息推送方法、装置、设备、介质和程序产品 | |
CN111488236A (zh) | 一种订单异常处理方法、服务器、存储介质及处理装置 | |
US8370839B2 (en) | Monitoring message queues in message queuing information systems and initiating batch jobs to perform functions on the message queues | |
CN113157405A (zh) | 业务流程断点重试的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |