具体实施方式
为了使本技术领域的人员更好地理解本说明书一个或多个中的技术方案,下面将结合本说明书一个或多个实施例中的附图,对本说明书一个或多个实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一个或多个一部分实施例,而不是全部的实施例。基于本说明书一个或多个中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书一个或多个保护的范围。
本说明书一个或多个实施例提供了一种缓冲补账方法及装置,既能够解决因上游业务系统记录的交易时间错误而导致缓冲记录捞取乱序的问题,也能够解决同一事务号的多个缓冲记录被分开补账的问题,进而实现确保缓冲补账顺序的可控性,避免缓冲补账乱序的问题。
图1为本说明书一个或多个实施例提供的缓冲补账方法的第一种流程示意图,图1中的方法能够由账务处理服务器执行,如图1所示,该方法至少包括以下步骤:
S101,根据以记账时间为排序字段得到的各缓冲记录的先后顺序,按照预设数量从待缓冲补账的缓冲记录列表中依次捞取缓冲记录,其中,事务标识相同的缓冲记录的记账时间相同,该先后顺序是至少基于记账时间对缓冲记录进行排序确定的;
具体的,在缓冲补账之前,需要先基于上游业务系统的业务请求进行缓冲记账,针对每个业务请求,生成对应的缓冲记录,其中,该业务请求即为记账请求,该业务请求携带有事务标识、交易时间、转入账户、转出账户、转移资源等相关业务信息;
其中,为了确保缓冲补账顺序与业务实际发生顺序保持一致,在接收到上游业务系统的业务请求时,自动确定该业务请求对应的记账时间,将该记账时间写入针对该业务请求所生成的缓冲记录,即针对接收到的业务请求标记记账时间;同时考虑到两个事务号的业务请求并发处理的情况,将具有同一事务号的多个缓冲记录的记账时间设置为一致;并且,在进行缓冲记录捞取之前,先基于缓冲记录列表中各缓冲记录的记账时间对缓冲记录进行排序,再以预设数量为单位理论捞取数量从排序后的缓冲记录列表中按序捞取缓冲记录;
S102,针对每次缓冲记录捞取操作,根据实际捞取数量和预设数量的大小关系,在本次捞取到的缓冲记录中选取目标缓冲记录;
具体的,在每次以预设数量为单位理论捞取数量从缓冲记录列表中,按序捞取缓冲记录之后,并非直接将本次捞取到的所有缓冲记录均用于本次缓冲补账,考虑到按照固定数量从缓冲记录列表中捞取缓冲记录,可能存在将同一个事务号的多个缓冲记录分开的情况,即同属于一个分布式事务的多个分支事务对应的缓冲记录被分开捞取,针对某一事务号的多条缓冲记录,本次捞取出一部分具有该事务号的缓冲记录,而具有该事务号的另外一部分缓冲记录作为下次捞取对象,因此,需要将本次捞取到的且被分拆的缓冲记录舍弃,将这一部分缓冲记录与待捞取的另一部具有相同事务号的缓冲记录一同留到下一次缓冲补账;
具体的,由于在缓冲记录捞取过程是以预设数量为单位理论捞取数量,而实际捞取数量通常等于该理论捞取数量,但针对待捞取缓冲记录的最后一次捞取,如果剩余的待捞取缓冲记录的条数小于预设数量,此时实际捞取数量将小于理论捞取数量;其中,只要实际捞取数量等于该理论捞取数量均可能存在将同一事务号的缓冲记录分开的情况,并且由于同一事务号的多个缓冲记录的记账时间相同,排序结果使得同一事务号的多条缓冲记录集中,因此,只可能将排序最后的事务号的多条缓冲记录分开,此时,需要将本次捞取到的包含排序最后的事务号的至少一条缓冲记录舍弃,留到下一次缓冲补账,即根据实际捞取数量与单位理论捞取数量之间的大小关系确定是否舍弃包含排序最后的事务标识的缓冲记录;
S103,基于选取出的目标缓冲记录,对目标账户进行缓冲补账操作,以更新目标账户的账户余额并生成相应的交易记录;
具体的,在针对一个缓冲记账周期所生成的缓冲记录列表进行补账过程中,由后台异步任务从该缓冲记录列表中,分多次批量捞取出所有的缓冲记录,在针对每次捞取到的缓冲记录,筛选出目标缓冲记录之后,根据目标缓冲记录中的账号信息进行一次缓冲补账操作,批量更新目标账户的账户余额,并批量生成相应的交易记录,在针对本次筛选出的目标缓冲记录完成缓冲补账操作后,返回上述步骤S101继续下一次缓冲记录捞取,直到针对从该缓冲记录列表中最后一次捞取到剩余的缓冲记录完成缓冲补账操作。
本说明书一个或多个实施例中,在基于缓冲记录进行缓冲补账过程中,由于缓冲记账阶段所生成的各缓冲记录包含记账时间,并且具有同一事务号的多个缓冲记录的记账时间相同,以及待缓冲补账的缓冲记录列表是基于记账时间对缓冲记录进行排序得到的,因此,在进行缓冲记录捞取时,按序从缓冲记录列表中捞取缓冲记录即可;同时,有选择性的从每次捞取到的缓冲记录中选取目标缓冲记录,以便将被分拆的缓冲记录留到下一次补账,这样既能够解决因上游业务系统记录的交易时间错误而导致缓冲记录捞取乱序的问题,也能够解决同一事务号的多个缓冲记录被分开补账的问题,进而实现确保缓冲补账顺序的可控性,避免缓冲补账乱序的问题。
进一步的,如图2所示,在S101从待缓冲补账的缓冲记录列表中,按照预设数量根据各缓冲记录的先后顺序依次捞取缓冲记录之前,还包括:
S104,根据业务系统的记账请求,生成初始缓冲记录列表,其中,该初始缓冲记录列表包括:记账时间字段和事务标识字段;
具体的,上述初始缓冲记录列表包括:某一记账周期内针对上游业务系统发送的各记账请求所生成的多个缓冲记录;
S105,根据记账时间字段和事务标识字段,对初始缓冲记录列表中的多个缓冲记录进行排序;
具体的,在针对某一缓冲记账周期生成初始缓冲记录列表之后,以及在进行缓冲记录捞取之前,需要先对初始缓冲记录列表中的多条缓冲记录进行排序处理,在缓冲记录排序过程中,考虑到多个事务号的业务请求进行并发处理的情况,可能存在多个事务号对应的缓冲记录的记账时间相同的情况,因而,以记账时间为主排序因子且以事务标识为次排序因子,对初始缓冲记录列表中的多个缓冲记录进行排序。
S106,将排序后的初始缓冲记录列表确定为待缓冲补账的缓冲记录列表,对应的,缓冲记录捞取时参考的先后顺序是以记账时间和事务标识为排序字段对缓冲记录进行排序确定的;
具体的,最终确定的缓冲记录列表中的多个缓冲记录的先后顺序是以记账时间为主排序因子且以事务标识为次排序因子进行排序得到的,即先按照记账时间的先后顺序进行排序,在记账时间相同的情况下,再按照事务标识进行排序,使得记账时间相同且事务号相同的缓冲记录排在一起,这样保证在缓冲补账阶段所针对的缓冲记录列表中,同一个事务号的多条缓冲记录集中分布,以使在缓冲记录捞取过程中,同一事务号的多条缓冲记录捞取完,再捞取下一个事务号的多条缓冲记录。
其中,考虑到除了最后一次捞取,均可能存在将同一事务号的多条缓冲记录分开到两次缓冲记录捞取的情况,又考虑到缓冲记录列表中的缓冲记录已按照记账时间和事务标识进行排序,因此,只可能排序最后的事务号的多条缓冲记录被分开,基于此,针对目标缓冲记录的筛选过程,如图3所示,上述S102针对每次缓冲记录捞取操作,根据实际捞取数量和预设数量的大小关系,在本次捞取到的缓冲记录中选取目标缓冲记录,具体包括:
S1021,针对每次缓冲记录捞取操作,判断该缓冲记录捞取操作的实际捞取数量是否等于预设数量;
若是,则执行S1022,舍弃本次捞取到的缓冲记录中排序最后的事务标识的缓冲记录;以及,S1023,将剩余的缓冲记录确定为目标缓冲记录;
具体的,由于缓冲记录列表中的缓冲记录已按照记账时间和事务标识进行排序,使得记账时间相同且事务号相同的缓冲记录排在一起,因此,只可能排序最后的事务号的多条缓冲记录被分开,即本次捞取到的预设数量的缓冲记录中最后一个事务号可能与下一次待捞取的排序靠前的缓冲记录的事务号相同,此时,需要将该最后一个事务号的缓冲记录留到下一次缓冲补账,本次只对其余事务号的缓冲记录进行缓冲补账;
若否,则执行S1024,将本次捞取到的缓冲记录均确定为目标缓冲记录,其中,由于以预设数量为单位理论捞取数量进行缓冲记录捞取,即预设数量为单次最大捞取数量,因此,实际捞取数量等于预设数量,或者实际捞取数量小于预设数量,不会出现实际捞取数量大于预设数量的情况;
具体的,当实际捞取数量小于预设数量时,说明本次缓冲记录捞取操作为本轮最后一次捞取,缓冲记录列表中剩余的缓冲记录的条数小于预设数量,此时,直接将本次捞取到的所有缓冲记录均视为目标缓冲记录;
在说明书一个或多个实施例中,通过将实际捞取数量与单位理论捞取数量之间的大小关系进行比较,决定是否舍弃排序最后的事务标识的缓冲记录,针对不同的比较结果采用相应的处理方式,来筛选出本次完成缓冲补账的目标缓冲记录,从而避免出现将同一事务号的多条缓冲记录分拆到两次缓冲补账操作的问题,以确保同一事务号的多条缓冲记录在同一次缓冲补账中完成。
例如,下述表1中给出了排序后的缓冲记录列表,假设预设数量为4,缓冲记录总数为5条,在每次捞取到的多条缓冲记录中筛选出目标缓冲记录的过程,具体为:
(1)针对第一次缓冲记录捞取操作,本次从缓冲记录列表中捞取到的缓冲记录为前4条记录,由于实际捞取数量等于预设数量,则需要舍弃本次捞取到的缓冲记录中排序最后的事务标识的缓冲记录;
其中,排序最后的事务号为00101Pxx01-0002,也就是说,需要舍弃包含事务号为00101Pxx01-0002的缓冲记录,即前4条记录中最后一条缓冲记录,将剩余的前3条缓冲记录作为本次进行缓冲补账的目标缓冲记录,并且,将本次舍弃的缓冲记录重新插入至缓冲记录列表中的最前端,即将前4条记录中最后一条缓冲记录重新插入至缓冲记录列表中的最前端,此时,缓冲记录列表中剩余两条缓冲记录;
(2)针对第二次缓冲记录捞取操作,由于经过第一次缓冲记录捞取后,缓冲记录列表中剩余两条缓冲记录,对应的,本次从缓冲记录列表中捞取到的缓冲记录为剩余的2条记录,由于实际捞取数量小于预设数量,则将本次捞取到的缓冲记录均确定为目标缓冲记录。
表1
进一步的,在S1022舍弃本次捞取到的缓冲记录中排序最后的事务标识的缓冲记录之后,还包括:
将舍弃的缓冲记录重新添加到待缓冲补账的缓冲记录列表中的头部;
具体的,将本次捞取到的预设数量的缓冲记录中包含最后一个事务号的缓冲记录重新补充到待缓冲补账的缓冲记录列表中,并且将该包含最后一个事务号的缓冲记录补充到缓冲记录列表中的最开始,这样下一次缓冲记录捞取时,同时将该缓冲记录与上一次捞取被分开的具有同一事务号的缓冲记录一同捞取出。
其中,考虑到上游业务系统记录的交易时间可能存在错误的情况,导致该交易时间无法表征业务实际发生时间,从而导致按照交易时间的先后顺序对缓冲记录进行捞取而出现捞取乱序的问题,进而导致缓冲补账乱序的问题,基于此,针对初始缓冲记录列表生成的过程,引入记账时间字段,达到对缓冲记录的捞取顺序可控的目的,如图4所示,上述S104根据业务系统的记账请求,生成初始缓冲记录列表,具体包括:
S1041,确定最新接收到的业务系统的记账请求对应的当前事务标识、以及已处理的记账请求对应的历史事务标识;
具体的,在接收到上游业务系统发送的记账请求后,确定该记账请求中携带的事务号,即当前事务标识,以及确定已接收到的该业务系统的记账请求中携带的事务号,即历史事务标识;
S1042,根据确定出的当前事务标识和历史事务标识,确定当前记账时间;
具体的,由于需要将包含相同事务标识的多条缓冲记录设置为同一记账时间,因此,通过确定是否已接收到携带有该当前事务标识的记账请求,来确定接收到的记账请求中携带的事务号是否为一个新的事务号,进而根据确定结果设置针对最新接收到的记账请求所生成的缓冲记录的记账时间;
另外,在具体实施时,需要先进入记账一阶段,针对记账请求生成事务记录,并将该事务记录暂存到数据库中,其中,在记账一阶段即不锁账户也不更新余额;再进入记账二阶段,当确定记账请求合规后,即确认可以针对该记账请求进行记账操作,从数据库中读取一阶段存入的事务记录,并将该事务记录转化为缓冲记录,以及将缓冲记录存入数据库中对应的缓冲记录列表中,因此,在记录事务记录时就需要确定当前记账时间,在将事务记录转化为缓冲记录时,直接将该事务记录中的记账时间确定为对应的缓冲记录的记账时间;
S1043,在初始缓冲记录列表中,添加针对最新接收到的记账请求所生成的包含当前记账时间的缓冲记录;
具体的,初始缓冲记录列表最开始为空,在针对业务系统的每个记账请求生成缓冲记录后,将该缓冲记录添加到该初始缓冲记录列表中,这样初始缓冲记录列表中的缓冲记录的条数逐渐增加,在将针对最新接收到的记账请求所生成的缓冲记录添加至初始缓冲记录列表后,返回上述步骤S1041,直到针对某一缓冲记账周期生成的缓冲记录均添加到初始缓冲记录列表中,接下来进入缓冲补账阶段,具体的,先对初始缓冲记录列表中的多条缓冲记录进行排序,再按序捞取缓冲记录并进行缓冲补账操作。
进一步的,针对确定当前记账时间的过程,如图5所示,上述S1042根据确定出的当前事务标识和历史事务标识,确定当前记账时间,具体包括:
S10421,判断确定出的历史事务标识中是否存在当前事务标识,其中,如果上游业务系统是按照事务号进行业务处理,即一个事务号完成后,发送下一个事务号的记账请求,此时,该历史事务标识即为该业务系统上一个记账请求中携带的事务号,对应的,判断当前事务标识与业务系统上一个记账请求中携带的事务标识是否一致;
若判断结果为是,则执行S10422,将与当前事务标识相同的历史事务标识对应的记账时间确定为当前记账时间;
具体的,如果已接收到包含当前事务标识的记账请求,则说明当前事务标识不是一个新的事务号,此时以该历史事务标识对应的记账时间为准,记账时间保持不变,即确定针对在先接收到的携带有当前事务标识的记账请求设置的记账时间,将该记账时间确定为最新接收到的记账请求对应的记账时间;
若判断结果为否,则执行S10423,将当前实际时间确定为当前记账时间;
具体的,如果已接收到的记账请求不包含当前事务标识,则说明最新接收到的记账请求中携带的事务标识是一个为新的事务号,此时,以当前实际时间为准,针对携带有新的事务号的记账请求,重新设置记账时间。
在一个具体实施例中,上述缓冲补账方法的具体实现过程,具体包括:
(1)缓冲记录生成过程,具体为:
接收上游业务系统发送的记账请求,其中,该记账请求携带有事务号、交易时间、转入账户、转出账户、转移资源等相关业务信息;
判断最新接收到的记账请求中携带的事务号是否为新的事务号,具体的,判断在先接收到的记账请求中携带的事务号是否与最新接收到的记账请求中携带的事务号一致,其中,该在先接收到的记账请求可以是该上游业务系统发送的前一个记账请求,也可以是该上游业务系统在距当前时间之前的指定时间段内发送的多个记账请求;
若判断结果为是,则将当前实际时间确定为最新接收到的记账请求对应的记账时间;
若判断结果为否,则将具有相同事务号的历史记账请求对应的记账时间确定为最新接收到的记账请求对应的记账时间;
针对最新接收到的记账请求,基于确定出的记账时间生成与该记账请求对应的缓冲记录,其中,该缓冲记录包括:记账时间字段和事务号字段;以及将生成的缓冲记录添加到初始缓冲记录列表中;
(2)缓冲记录排序过程,具体为:
在针对某一缓冲记账周期生成的缓冲记录均添加到初始缓冲记录列表之后,根据记账时间字段和事务号字段对初始缓冲记录列表中的多个缓冲记录进行排序,得到排序后的缓冲记录列表;具体的,以记账时间为主排序因子且以事务标识为次排序因子,对初始缓冲记录列表中的多个缓冲记录进行排序;
(3)缓冲记录捞取过程,具体为:
从排序后的缓冲记录列表中,按照预设数量根据各缓冲记录的先后顺序依次捞取缓冲记录,经过多次批量缓冲记录捞取操作,直到将缓冲记录列表中多条缓冲记录均捞取完成;
(4)缓冲记录筛选过程,具体为:
针对每次捞取到的缓冲记录,判断本次捞取到的缓冲记录的实际条数是否等于预设数量;
若判断结果为是,则舍弃本次捞取到的缓冲记录中排序最后的事务号的缓冲记录;将剩余的缓冲记录确定为目标缓冲记录;以及将舍弃的缓冲记录重新插入到缓冲记录列表中的最前端;
若判断结果为否,则将本次捞取到的缓冲记录均确定为目标缓冲记录,并且确定将缓冲记录列表中多条缓冲记录均捞取完成;
(5)缓冲补账操作过程,具体为:
针对每次筛选出的目标缓冲记录,基于该目标缓冲记录对目标账户进行缓冲补账操作,以及更新目标账户的账户余额并生成相应的交易记录。
本说明书一个或多个实施例中的缓冲补账方法,在基于缓冲记录进行缓冲补账过程中,由于缓冲记账阶段所生成的各缓冲记录包含记账时间,并且具有同一事务号的多个缓冲记录的记账时间相同,以及待缓冲补账的缓冲记录列表是基于记账时间对缓冲记录进行排序得到的,因此,在进行缓冲记录捞取时,按序从缓冲记录列表中捞取缓冲记录即可;同时,有选择性的从每次捞取到的缓冲记录中选取目标缓冲记录,以便将被分拆的缓冲记录留到下一次补账,这样既能够解决因上游业务系统记录的交易时间错误而导致缓冲记录捞取乱序的问题,也能够解决同一事务号的多个缓冲记录被分开补账的问题,进而实现确保缓冲补账顺序的可控性,避免缓冲补账乱序的问题。
需要说明的是,本说明书中该实施例与本说明书中上一实施例基于同一发明构思,因此该实施例的具体实施可以参见前述缓冲补账方法的实施,重复之处不再赘述。
对应上述图1至图5描述的缓冲补账方法,基于相同的技术构思,本说明书一个或多个实施例还提供了一种缓冲补账装置,图6为本说明书一个或多个实施例提供的缓冲补账装置的第一种模块组成示意图,该装置用于执行图1至图5描述的缓冲补账方法,如图6所示,该装置包括:
记录捞取模块601,用于从待缓冲补账的缓冲记录列表中,按照预设数量根据各缓冲记录的先后顺序依次捞取缓冲记录,其中,所述先后顺序是基于记账时间对缓冲记录进行排序确定的,事务标识相同的缓冲记录的记账时间相同;
记录选取模块602,用于针对每次缓冲记录捞取操作,根据实际捞取数量和所述预设数量的大小关系,在本次捞取到的所述缓冲记录中选取目标缓冲记录;
缓冲补账模块603,用于基于所述目标缓冲记录,对目标账户进行缓冲补账操作,以更新所述目标账户的账户余额并生成相应的交易记录。
本说明书一个或多个实施例中,在基于缓冲记录进行缓冲补账过程中,由于缓冲记账阶段所生成的各缓冲记录包含记账时间,并且具有同一事务号的多个缓冲记录的记账时间相同,以及待缓冲补账的缓冲记录列表是基于记账时间对缓冲记录进行排序得到的,因此,在进行缓冲记录捞取时,按序从缓冲记录列表中捞取缓冲记录即可;同时,有选择性的从每次捞取到的缓冲记录中选取目标缓冲记录,以便将被分拆的缓冲记录留到下一次补账,这样既能够解决因上游业务系统记录的交易时间错误而导致缓冲记录捞取乱序的问题,也能够解决同一事务号的多个缓冲记录被分开补账的问题,进而实现确保缓冲补账顺序的可控性,避免缓冲补账乱序的问题。
可选地,如图7所示,所述装置还包括:
缓冲记账模块604,用于根据业务系统的记账请求,生成初始缓冲记录列表,其中,所述初始缓冲记录列表包括:记账时间字段和事务标识字段;
记录排序模块605,用于根据所述记账时间字段和所述事务标识字段,对所述初始缓冲记录列表中的多个缓冲记录进行排序;将排序后的初始缓冲记录列表确定为待缓冲补账的缓冲记录列表。
可选地,所述记录选取模块602,具体用于:
若实际捞取数量等于所述预设数量,则舍弃本次捞取到的所述缓冲记录中排序最后的事务标识的缓冲记录,将剩余的缓冲记录确定为目标缓冲记录;
若实际捞取数量小于所述预设数量,则将本次捞取到的所述缓冲记录均确定为目标缓冲记录。
可选地,所述装置还包括记录还原模块606,用于:
将舍弃的所述缓冲记录重新添加到所述待缓冲补账的缓冲记录列表中的头部。
可选地,所述缓冲记账模块604,具体用于:
确定业务系统的记账请求对应的当前事务标识、以及已处理的记账请求对应的历史事务标识;
根据所述当前事务标识和所述历史事务标识,确定当前记账时间;
在初始缓冲记录列表中,添加针对所述记账请求所生成的包含所述当前记账时间的缓冲记录。
可选地,所述缓冲记账模块604,进一步具体用于:
判断所述历史事务标识中是否存在所述当前事务标识;
若判断结果为是,则将与所述当前事务标识相同的历史事务标识对应的记账时间确定为当前记账时间;
若判断结果为否,则将当前实际时间确定为当前记账时间。
本说明书一个或多个实施例中的缓冲补账装置,在基于缓冲记录进行缓冲补账过程中,由于缓冲记账阶段所生成的各缓冲记录包含记账时间,并且具有同一事务号的多个缓冲记录的记账时间相同,以及待缓冲补账的缓冲记录列表是基于记账时间对缓冲记录进行排序得到的,因此,在进行缓冲记录捞取时,按序从缓冲记录列表中捞取缓冲记录即可;同时,有选择性的从每次捞取到的缓冲记录中选取目标缓冲记录,以便将被分拆的缓冲记录留到下一次补账,这样既能够解决因上游业务系统记录的交易时间错误而导致缓冲记录捞取乱序的问题,也能够解决同一事务号的多个缓冲记录被分开补账的问题,进而实现确保缓冲补账顺序的可控性,避免缓冲补账乱序的问题。
需要说明的是,本说明书中关于缓冲补账装置的实施例与本说明书中关于缓冲补账方法的实施例基于同一发明构思,因此该实施例的具体实施可以参见前述对应的缓冲补账方法的实施,重复之处不再赘述。
进一步地,对应上述图1至图5所示的方法,基于相同的技术构思,本说明书一个或多个实施例还提供了一种缓冲补账设备,该设备用于执行上述的缓冲补账方法,如图8所示。
缓冲补账设备可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上的处理器801和存储器802,存储器802中可以存储有一个或一个以上存储应用程序或数据。其中,存储器802可以是短暂存储或持久存储。存储在存储器802的应用程序可以包括一个或一个以上模块(图示未示出),每个模块可以包括对缓冲补账设备中的一系列计算机可执行指令。更进一步地,处理器801可以设置为与存储器802通信,在缓冲补账设备上执行存储器802中的一系列计算机可执行指令。缓冲补账设备还可以包括一个或一个以上电源803,一个或一个以上有线或无线网络接口804,一个或一个以上输入输出接口805,一个或一个以上键盘806等。
在一个具体的实施例中,缓冲补账设备包括有存储器,以及一个或一个以上的程序,其中一个或者一个以上程序存储于存储器中,且一个或者一个以上程序可以包括一个或一个以上模块,且每个模块可以包括对缓冲补账设备中的一系列计算机可执行指令,且经配置以由一个或者一个以上处理器执行该一个或者一个以上程序包含用于进行以下计算机可执行指令:
从待缓冲补账的缓冲记录列表中,按照预设数量根据各缓冲记录的先后顺序依次捞取缓冲记录,其中,所述先后顺序是基于记账时间对缓冲记录进行排序确定的,事务标识相同的缓冲记录的记账时间相同;
针对每次缓冲记录捞取操作,根据实际捞取数量和所述预设数量的大小关系,在本次捞取到的所述缓冲记录中选取目标缓冲记录;
基于所述目标缓冲记录,对目标账户进行缓冲补账操作,以更新所述目标账户的账户余额并生成相应的交易记录。
本说明书一个或多个实施例中,在基于缓冲记录进行缓冲补账过程中,由于缓冲记账阶段所生成的各缓冲记录包含记账时间,并且具有同一事务号的多个缓冲记录的记账时间相同,以及待缓冲补账的缓冲记录列表是基于记账时间对缓冲记录进行排序得到的,因此,在进行缓冲记录捞取时,按序从缓冲记录列表中捞取缓冲记录即可;同时,有选择性的从每次捞取到的缓冲记录中选取目标缓冲记录,以便将被分拆的缓冲记录留到下一次补账,这样既能够解决因上游业务系统记录的交易时间错误而导致缓冲记录捞取乱序的问题,也能够解决同一事务号的多个缓冲记录被分开补账的问题,进而实现确保缓冲补账顺序的可控性,避免缓冲补账乱序的问题。
可选地,计算机可执行指令在被执行时,在按照预设数量根据各缓冲记录的先后顺序依次捞取缓冲记录之前,还包括:
根据业务系统的记账请求,生成初始缓冲记录列表,其中,所述初始缓冲记录列表包括:记账时间字段和事务标识字段;
根据所述记账时间字段和所述事务标识字段,对所述初始缓冲记录列表中的多个缓冲记录进行排序;
将排序后的初始缓冲记录列表确定为待缓冲补账的缓冲记录列表。
可选地,计算机可执行指令在被执行时,所述根据实际捞取数量和所述预设数量的大小关系,在本次捞取到的所述缓冲记录中选取目标缓冲记录,包括:
若实际捞取数量等于所述预设数量,则舍弃本次捞取到的所述缓冲记录中排序最后的事务标识的缓冲记录,将剩余的缓冲记录确定为目标缓冲记录;
若实际捞取数量小于所述预设数量,则将本次捞取到的所述缓冲记录均确定为目标缓冲记录。
可选地,计算机可执行指令在被执行时,在舍弃本次捞取到的所述缓冲记录中排序最后的事务标识的缓冲记录之后,还包括:
将舍弃的所述缓冲记录重新添加到所述待缓冲补账的缓冲记录列表中的头部。
可选地,计算机可执行指令在被执行时,所述根据业务系统的记账请求,生成初始缓冲记录列表,包括:
确定业务系统的记账请求对应的当前事务标识、以及已处理的记账请求对应的历史事务标识;
根据所述当前事务标识和所述历史事务标识,确定当前记账时间;
在初始缓冲记录列表中,添加针对所述记账请求所生成的包含所述当前记账时间的缓冲记录。
可选地,计算机可执行指令在被执行时,所述根据所述当前事务标识和所述历史事务标识,确定当前记账时间,包括:
判断所述历史事务标识中是否存在所述当前事务标识;
若判断结果为是,则将与所述当前事务标识相同的历史事务标识对应的记账时间确定为当前记账时间;
若判断结果为否,则将当前实际时间确定为当前记账时间。
本说明书一个或多个实施例中的缓冲补账设备,在基于缓冲记录进行缓冲补账过程中,由于缓冲记账阶段所生成的各缓冲记录包含记账时间,并且具有同一事务号的多个缓冲记录的记账时间相同,以及待缓冲补账的缓冲记录列表是基于记账时间对缓冲记录进行排序得到的,因此,在进行缓冲记录捞取时,按序从缓冲记录列表中捞取缓冲记录即可;同时,有选择性的从每次捞取到的缓冲记录中选取目标缓冲记录,以便将被分拆的缓冲记录留到下一次补账,这样既能够解决因上游业务系统记录的交易时间错误而导致缓冲记录捞取乱序的问题,也能够解决同一事务号的多个缓冲记录被分开补账的问题,进而实现确保缓冲补账顺序的可控性,避免缓冲补账乱序的问题。
需要说明的是,本说明书中关于缓冲补账设备的实施例与本说明书中关于缓冲补账方法的实施例基于同一发明构思,因此该实施例的具体实施可以参见前述对应的缓冲补账方法的实施,重复之处不再赘述。
进一步地,对应上述图1至图5所示的方法,基于相同的技术构思,本说明书一个或多个实施例还提供了一种存储介质,用于存储计算机可执行指令,一种具体的实施例中,该存储介质可以为U盘、光盘、硬盘等,该存储介质存储的计算机可执行指令在被处理器执行时,能实现以下流程:
从待缓冲补账的缓冲记录列表中,按照预设数量根据各缓冲记录的先后顺序依次捞取缓冲记录,其中,所述先后顺序是基于记账时间对缓冲记录进行排序确定的,事务标识相同的缓冲记录的记账时间相同;
针对每次缓冲记录捞取操作,根据实际捞取数量和所述预设数量的大小关系,在本次捞取到的所述缓冲记录中选取目标缓冲记录;
基于所述目标缓冲记录,对目标账户进行缓冲补账操作,以更新所述目标账户的账户余额并生成相应的交易记录。
本说明书一个或多个实施例中,在基于缓冲记录进行缓冲补账过程中,由于缓冲记账阶段所生成的各缓冲记录包含记账时间,并且具有同一事务号的多个缓冲记录的记账时间相同,以及待缓冲补账的缓冲记录列表是基于记账时间对缓冲记录进行排序得到的,因此,在进行缓冲记录捞取时,按序从缓冲记录列表中捞取缓冲记录即可;同时,有选择性的从每次捞取到的缓冲记录中选取目标缓冲记录,以便将被分拆的缓冲记录留到下一次补账,这样既能够解决因上游业务系统记录的交易时间错误而导致缓冲记录捞取乱序的问题,也能够解决同一事务号的多个缓冲记录被分开补账的问题,进而实现确保缓冲补账顺序的可控性,避免缓冲补账乱序的问题。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,在按照预设数量根据各缓冲记录的先后顺序依次捞取缓冲记录之前,还包括:
根据业务系统的记账请求,生成初始缓冲记录列表,其中,所述初始缓冲记录列表包括:记账时间字段和事务标识字段;
根据所述记账时间字段和所述事务标识字段,对所述初始缓冲记录列表中的多个缓冲记录进行排序;
将排序后的初始缓冲记录列表确定为待缓冲补账的缓冲记录列表。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,所述根据实际捞取数量和所述预设数量的大小关系,在本次捞取到的所述缓冲记录中选取目标缓冲记录,包括:
若实际捞取数量等于所述预设数量,则舍弃本次捞取到的所述缓冲记录中排序最后的事务标识的缓冲记录,将剩余的缓冲记录确定为目标缓冲记录;
若实际捞取数量小于所述预设数量,则将本次捞取到的所述缓冲记录均确定为目标缓冲记录。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,在舍弃本次捞取到的所述缓冲记录中排序最后的事务标识的缓冲记录之后,还包括:
将舍弃的所述缓冲记录重新添加到所述待缓冲补账的缓冲记录列表中的头部。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,所述根据业务系统的记账请求,生成初始缓冲记录列表,包括:
确定业务系统的记账请求对应的当前事务标识、以及已处理的记账请求对应的历史事务标识;
根据所述当前事务标识和所述历史事务标识,确定当前记账时间;
在初始缓冲记录列表中,添加针对所述记账请求所生成的包含所述当前记账时间的缓冲记录。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,所述根据所述当前事务标识和所述历史事务标识,确定当前记账时间,包括:
判断所述历史事务标识中是否存在所述当前事务标识;
若判断结果为是,则将与所述当前事务标识相同的历史事务标识对应的记账时间确定为当前记账时间;
若判断结果为否,则将当前实际时间确定为当前记账时间。
本说明书一个或多个实施例中的存储介质存储的计算机可执行指令在被处理器执行时,在基于缓冲记录进行缓冲补账过程中,由于缓冲记账阶段所生成的各缓冲记录包含记账时间,并且具有同一事务号的多个缓冲记录的记账时间相同,以及待缓冲补账的缓冲记录列表是基于记账时间对缓冲记录进行排序得到的,因此,在进行缓冲记录捞取时,按序从缓冲记录列表中捞取缓冲记录即可;同时,有选择性的从每次捞取到的缓冲记录中选取目标缓冲记录,以便将被分拆的缓冲记录留到下一次补账,这样既能够解决因上游业务系统记录的交易时间错误而导致缓冲记录捞取乱序的问题,也能够解决同一事务号的多个缓冲记录被分开补账的问题,进而实现确保缓冲补账顺序的可控性,避免缓冲补账乱序的问题。
需要说明的是,本说明书中关于存储介质的实施例与本说明书中关于缓冲补账方法的实施例基于同一发明构思,因此该实施例的具体实施可以参见前述对应的缓冲补账方法的实施,重复之处不再赘述。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HD Cal、JHDL(Java Hardware Description Language)、Lava、Lola、My HDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书一个或多个时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本说明书一个或多个的实施例可提供为方法、系统、或计算机程序产品。因此,本说明书一个或多个可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书一个或多个是参照根据本说明书一个或多个实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本说明书一个或多个的实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书一个或多个可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书一个或多个,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本说明书一个或多个的实施例而已,并不用于限制本说明书一个或多个。对于本领域技术人员来说,本说明书一个或多个可以有各种更改和变化。凡在本说明书一个或多个的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书一个或多个的权利要求范围之内。