一种收费处理、对象控制方法、装置、设备及介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种收费处理、对象控制方法、装置、设备及介质。
背景技术
现有技术中,资金、数据等都可以作为控制对象,以对其进行正向、反向或者前进、回退操作,且反向或回退进程需要在正向或前进进程完成后才能进行。若反向或回退进程在正向或前进进程未完成前发起,则会产生包括操作错误或者操作异常或操作无法执行等在内的各种情况。
有鉴于此,需要更有效和更高效的对象控制方案。
发明内容
本说明书实施例提供一种收费处理、对象控制方法、装置、设备及介质,用以解决如何更有效和更高效地进行对象控制以及收退费管理的技术问题。
本说明书实施例采用下述技术方案:
本说明书实施例提供一种收费处理方法,包括:
当针对目标费用的收费条件触发后,确定是否存在与所述目标费用对应的收费撤销指令;
若否,则执行用于收取所述目标费用的收费进程;
若是,则不执行用于收取所述目标费用的收费进程;
当针对目标费用的退费条件触发后,确定是否存在用于收取所述目标费用的收费进程;
若不存在所述收费进程,或存在所述收费进程,且所述收费进程处理失败,则生成收费撤销指令,用于撤销所述退费条件触发之后产生的用于收取所述目标费用的收费进程。
本说明书实施例提供一种收费处理装置,包括:
指令判定模块,用于当针对目标费用的收费条件触发后,确定是否存在与所述目标费用对应的收费撤销指令;
收费处理模块,用于若不存在所述收费撤销指令,则执行用于收取所述目标费用的收费进程;以及,若存在所述收费撤销指令,则不执行用于收取所述目标费用的收费进程;
收费判定模块,用于当针对目标费用的退费条件触发后,确定是否存在用于收取所述目标费用的收费进程;
指令生成模块,用于若不存在所述收费进程,或存在所述收费进程,且所述收费进程处理失败,则生成收费撤销指令,用于撤销所述退费条件触发之后产生的用于收取所述目标费用的收费进程。
本说明书实施例提供一种收费处理设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;
其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
当针对目标费用的收费条件触发后,确定是否存在与所述目标费用对应的收费撤销指令;
若否,则执行用于收取所述目标费用的收费进程;
若是,则不执行用于收取所述目标费用的收费进程;
当针对目标费用的退费条件触发后,确定是否存在用于收取所述目标费用的收费进程;
若不存在所述收费进程,或存在所述收费进程,且所述收费进程处理失败,则生成收费撤销指令,用于撤销所述退费条件触发之后产生的用于收取所述目标费用的收费进程。
本说明书实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令被处理器执行时实现如下的步骤:
当针对目标费用的收费条件触发后,确定是否存在与所述目标费用对应的收费撤销指令;
若否,则执行用于收取所述目标费用的收费进程;
若是,则不执行用于收取所述目标费用的收费进程;
当针对目标费用的退费条件触发后,确定是否存在用于收取所述目标费用的收费进程;
若不存在所述收费进程,或存在所述收费进程,且所述收费进程处理失败,则生成收费撤销指令,用于撤销所述退费条件触发之后产生的用于收取所述目标费用的收费进程。
本说明书实施例采用的上述至少一个技术方案能够达到以下有益效果:
在收费条件触发后确定是否存在收费撤销指令来决定是否还需要对目标费用进行收费操作;在退费条件触发后,确定目标费用是否被收取或收取是否成功;若目标费用未被收取或收费失败,则生成与目标费用对应的收费撤销指令,用于撤销退费条件触发之后与目标费用对应的收费进程,实现了即使收费操作尚未发起或尚未完成或未成功的情况下也能够进行有效的退费操作,提高收费以及退费操作的操作效率和操作有效性。
本说明书实施例提供一种对象控制方法,包括:
当针对目标对象的前进条件触发后,确定是否存在与所述目标对象对应的前进撤销指令;
若否,则执行所述前进条件对应的前进进程;
若是,则不执行所述前进条件对应的前进进程;
当针对目标对象的回退条件触发后,确定是否存在目标对象对应的前进进程;
若不存在所述目标对象对应的前进进程,或存在所述目标对象对应的前进进程,且前进进程处理失败,则生成前进撤销指令,用于撤销所述回退条件触发之后产生的与目标对象对应的前进进程。
本说明书实施例提供一种对象控制装置,包括:
指令判定模块,用于当针对目标对象的前进条件触发后,确定是否存在与所述目标对象对应的前进撤销指令;
前进处理模块,用于若不存在所述前进撤销指令,则执行所述前进条件对应的前进进程;以及若存在所述前进撤销指令,则不执行所述前进条件对应的前进进程;
前进判定模块,用于当针对目标对象的回退条件触发后,确定是否存在目标对象对应的前进进程;
指令生成模块,用于若不存在所述目标对象对应的前进进程,或存在所述目标对象对应的前进进程,且前进进程处理失败,则生成前进撤销指令,用于撤销所述回退条件触发之后产生的与目标对象对应的前进进程。
本说明书实施例提供一种对象控制设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;
其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
当针对目标对象的前进条件触发后,确定是否存在与所述目标对象对应的前进撤销指令;
若否,则执行所述前进条件对应的前进进程;
若是,则不执行所述前进条件对应的前进进程;
当针对目标对象的回退条件触发后,确定是否存在目标对象对应的前进进程;
若不存在所述目标对象对应的前进进程,或存在所述目标对象对应的前进进程,且前进进程处理失败,则生成前进撤销指令,用于撤销所述回退条件触发之后产生的与目标对象对应的前进进程。
本说明书实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令被处理器执行时实现如下的步骤:
当针对目标对象的前进条件触发后,确定是否存在与所述目标对象对应的前进撤销指令;
若否,则执行所述前进条件对应的前进进程;
若是,则不执行所述前进条件对应的前进进程;
当针对目标对象的回退条件触发后,确定是否存在目标对象对应的前进进程;
若不存在所述目标对象对应的前进进程,或存在所述目标对象对应的前进进程,且前进进程处理失败,则生成前进撤销指令,用于撤销所述回退条件触发之后产生的与目标对象对应的前进进程。
本说明书实施例采用的上述至少一个技术方案能够达到以下有益效果:
通过在前进条件触发后确定是否存在前进撤销指令来决定是否还需要对目标对象进行前进操作;在回退条件触发后,确定目标对象是否被触发了前进条件或前进进程是否执行成功;若前进条件未触发或前进进程执行失败,则生成与目标对象对应的前进撤销指令,用于撤销回退条件触发之后的前进进程,实现了即使前进进程尚未发起或尚未完成或未成功的情况下也能够进行有效的回退操作,提高前进以及回退操作的操作效率和操作有效性。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对本说明书实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本说明书第一个实施例中收费处理方法的流程示意图。
图2是本说明书第一个实施例中的收费处理过程示意图。
图3是本说明书第一个实施例中的系统间收费过程示意图。
图4是本说明书第二个实施例中收费处理方法的流程示意图。
图5是本说明书第二个实施例中的收费处理过程示意图。
图6是本说明书第三个实施例中对象控制方法的流程示意图。
图7是本说明书第三个实施例中的对象控制过程示意图。
图8是本说明书第四个实施例中收费处理装置的结构示意图。
图9是本说明书第六个实施例中对象控制装置的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
现有技术中,很多情境下需要进行收费和退费,例如在电子商务情境下,电子商务平台会收取交易手续费,当然也就可以存在退还交易手续费的情况。现有技术中,收费和退费操作的发起主体不一定相同,例如收费可能是电子商务平台发起的,而退费可能是消费者发起的。由于收费和退费的发起主体的不同或者网络或者数据处理等原因,不可避免的,可能存在退费发起时收费还未发起或还未完成的情况,从而造成退费错误等情况出现。
实施例一:
图1是本说明书第一个实施例中收费处理方法的流程示意图,图2是本说明书第一个实施例中的收费处理流程图,结合图1和图2,本实施例中的收费处理方法包括:
S101:当针对目标费用的退费条件触发后,确定是否存在用于收取所述目标费用的收费进程。
在本实施例中,可以通过标识号等方式来锁定目标费用。例如对于一笔电子商务交易来说,电子商务平台要收取a元的手续费(即目标费用),则该笔交易的交易号或订单号(即标识号)与该笔手续费是对应的,也就可以用来锁定该笔手续费;或者每笔交易的交易双方的身份信息(包括账户名)与该笔交易的手续费也是对应的,也可以用来锁定交易要收取的费用。在其他情境下,也可以用标识号或者参与方的身份信息等方式来锁定目标费用。
本实施例中,既然可以锁定目标费用,那么也就可以针对目标费用进行收费操作。例如对于一笔电子商务交易,需要收取的手续费为a元,就可以针对该笔交易的该笔手续费进行收费操作。
如图3所示,在电子商务情境下,一般买家在点击支付后,交易系统会向支付系统发送消息或指令,使支付系统完成支付操作。例如一笔交易的交易金额为100元,则买家点击支付后,交易系统会向支付系统发送消息,支付系统从买家的账户中收取100元,收取的这100元可能到达商家账户或过渡户;然后交易系统向收费系统发送收费消息,收费系统根据收费消息向账务系统发送收费指令,从而驱动账务系统来收取手续费(也可以是其他名目,比如服务费),即目标费用;若前述的100元是到达商家账户,则从商家账户中收取该笔手续费;若前述的100元是到达过渡户,则从过渡户中收取该笔手续费,并将剩余费用结算给商家;收取的手续费可以进入特定的收入户,因而目标费用与收入户可以是对应的。相应的,若买家发起退费,则交易系统向收费系统发送退费消息,收费系统根据退费消息向账务系统发送退费指令,从而驱动账务系统退还手续费(也可以是其他名目,比如服务费),即目标费用。退还的手续费可以进入特定的账户,因而目标费用与接收退费的账户可以是对应的。
当针对目标费用的退费条件触发后,可以确定是否存在用于收取目标费用的收费进程,从而可以确定目标费用是否已被收取。在本实施例中,可以通过查找收费记录的方式来确定目标费用是否被收取,例如在数据库中查找相应的收费记录,即确定是否有针对目标费用的收费记录(收费记录中可以具有与目标费用对应的标识号);若有这样的收费记录,则目标费用被收取;若无这样的收费记录,则目标费用未被收取。
在本实施例中,对目标费用的退还可以是基于上述的退费条件的触发进行的。例如在图3中,当收费系统收到交易系统的退费消息后开始驱动账务系统退还手续费。另外,也可以是通过调用收费系统的退费接口,使得收费系统驱动账务系统退还手续费。可见,收到退费消息和/或退费接口被调用均可以视为触发退费条件,这里的退费条件就是用来退还目标费用的。可见,用于退还某笔目标费用的退费条件与该笔目标费用是对应的。相应的,在本实施例中,对目标费用的收取可以是基于收费条件的触发进行的。例如在图3中,当收费系统收到交易系统的收费消息后开始驱动账务系统收取手续费。另外,也可以是通过调用收费系统的收费接口,使得收费系统驱动账务系统收取手续费。可见,收到收费消息和/或收费接口被调用均可以视为触发收费条件,这里的收费条件就是用来收取目标费用的。可见,用于收取某笔目标费用的收费条件与该笔目标费用是对应的。基于此,针对目标费用的收费条件(及其对应或引发的收费进程)、退费条件(及其对应或引发的退费进程)以及目标费用之间是相互对应的。
S102:若不存在所述收费进程,或存在所述收费进程,且所述收费进程处理失败,则生成收费撤销指令,用于撤销所述退费条件触发之后产生的用于收取所述目标费用的收费进程。
在本实施例中,若确定存在上述的收费进程,且收费进程已完成,即目标费用已被收取,则执行退费条件或目标费用对应的退费进程,将目标费用退至收退费账户。在本实施例中,在收费流程中,目标费用从X账户收取并进入Y账户,则X账户可以称为支出账户,Y账户可以称为收入账户;在退费流程中,目标费用从M账户退到N账户,则M账户可以称为退收费账户(即退还收费的账户),N账户可以称为收退费账户(即接收退费的账户)。可见,针对同一笔交易或同一目标费用,收入账户和退收费账户可以相同或不同,支出账户和收退费账户可以相同或不同,四者均可以是一个或多个。
在退费条件触发后,若不存在上述收费进程,则说明目标费用未被收取;或若存在上述收费进程,且收费进程处理失败,也说明目标费用未被收取。
在交易系统向收费系统发送收费消息后,会(在数据库中)生成初始状态的收费幂等记录;然后收费系统驱动账务系统执行收费进程,收费完成后,将收费幂等记录更新为完成状态(完成状态的收费幂等记录可以作为前述的收费记录,表明收费完成)。之所以在收到收费消息后生成收费幂等记录,原因之一是为了防止出现重复收费,比如交易系统可能会重复发送收费消息。
本实施例中,幂等记录,用于控制业务流程及记录业务状态,具体可以例如表1所示:
字段 |
含义 |
实例 |
txId |
幂等记录主键 |
charGE-201903000x |
stat |
当前状态,如初始、完成、撤销 |
INIT/COMPLETE/REVOKE |
表1
初始状态的幂等记录可以例如表2所示:
字段 |
取值 |
txid |
charGE-2019030100000x |
stat |
INIT |
表2
(由上述幂等记录主键的值可以看出其与具体的收费事件或目标费用的对应性)
在本实施例中,若不存在目标费用对应的收费进程,则可以确定针对目标费用的收费条件是否被触发。前面已经说明,在交易系统向收费系统发送收费消息(收费条件之一)后,会生成初始状态的收费幂等记录,则在本实施例中,确定用于收取目标费用的收费条件是否已被触发包括:确定(数据库中)是否存在收费幂等记录;若存在,则针对目标费用的收费条件已被触发;若不存在,则针对目标费用的收费条件未被触发。
进一步,若存在收费幂等记录,则可以锁定所述收费幂等记录。若锁定成功,且收费幂等记录为初始状态,则说明收费条件已被触发且幂等记录未被其他进程锁定,自然也没有被收费进程锁定,即没有进行中的收费进程。这样虽然收费条件已触发,但没有收费进程在执行,且收费幂等记录为初始状态,也就是收费进程处理失败了。
若锁定不成功或锁定冲突,说明收费幂等记录在被其他流程锁定,本实施例中,收费条件触发后账务系统正在处理收费进程(即正在收费进程中),就会锁定收费幂等记录。因而若收费幂等记录锁定不成功或锁定冲突,则确定收费条件触发后所引发的收费进程正在进行中。
在本实施例中,当针对目标费用的退费条件触发后,若所述目标费用未被收取,且所述收费条件触发后的收费进程进行中,则可以(定时)重复触发退费条件。这样在收费进程的处理结果产生后会有退费条件触发,若收费进程的处理结果为完成(即处理成功),则将目标费用退至收退费账户;若收费进程的处理结果为失败,则生成与所述目标费用对应的收费撤销指令,用于撤销所述退费条件触发之后产生的用于收取所述目标费用的收费进程(收费撤销指令具体见下文)。
当针对目标费用的退费条件触发后,若不存在上述收费进程,或存在上述进程,且收费进程处理失败,则目标费用还未被收取,也就没有了退费的基础或者对象。这些情况下,则生成收费撤销指令,用于撤销所述退费条件触发之后产生的用于收取所述目标费用的收费进程;而对于收费条件的触发与否,下面分情况进行说明:
1.1、(针对目标费用的)收费条件尚未被触发。
收费条件未被触发可能有多种原因,比如网络原因,使得交易系统发送的收费消息尚未被收费系统收到,但是后续收费系统仍然可以接收到交易系统发送的收费消息。可见,收费条件后续还是可以被触发并引发收费进程的。若收费条件尚未被触发过,即使后续收费条件被触发,由于收费撤销指令的存在,也不会执行收费进程。
1.1情况下,收费撤销指令为撤销状态的收费幂等记录,从而可以撤销收费进程。
1.2、(与目标对象对应的)收费条件已触发。
由于目标费用还未被收取,则后续还是有可能再次触发收费条件的,比如交易系统可能再次向收费系统发送收费消息。即使后续收费条件再被触发,由于收费撤销指令的存在,也不会执行收费进程。
1.2情况下,收费撤销指令为撤销状态的收费幂等记录,从而可以撤销收费进程。由前述,由于收费条件已触发且收费失败,所以会存在初始状态的收费幂等记录,则将收费幂等记录由初始状态更改为撤销状态也视为生成收费撤销指令。
本实施例中,在退费条件触发后,确定目标费用是否被收取或收费条件是否触发或收费是否收取成功;若目标费用未被收取或收费失败,则生成与目标费用对应的收费撤销指令,用于撤销退费条件触发之后与目标费用对应的收费进程,实现了即使收费操作尚未发起或尚未完成或未成功的情况下也能够进行有效的退费操作(产生收费撤销指令),不影响交易撤销或退款流程,从而提高收费以及退费操作的操作效率和操作有效性,提升用户体验以及系统性能。
本实施例中,退费条件触发时,若目标费用被收取则退费,或者满足收费撤销指令生成情况下生成收费撤销指令都可以视为有效的退费操作,退费或者生成收费撤销指令也都可以视为退费操作或进程的完成。
在本实施例中,由于退费是收费系统驱动账务系统进行的,若收费系统没有收到收费消息可以视为收费操作尚未发起,或者,收费系统没有收到退费消息可以视为退费操作尚未发起。
实施例二:
图4是本说明书第二个实施例中收费处理方法的流程示意图,图5是本说明书第二个实施例中的收费处理流程图,结合图4和图5,本实施例中的收费处理方法包括:
S201:当针对目标费用的收费条件触发后,确定是否存在与所述目标费用对应的收费撤销指令。
同第一个实施例的内容,本实施例中的收费进程仍然可以概括为交易系统、收费系统以及账务系统之间的进程。另外,本实施例中的“目标费用”、“收费条件”、“收费条件的触发”、“收费幂等记录”以及“收费撤销指令”等也可以参见第一个实施例。
当针对目标费用的收费条件触发后,可以确定(在数据库中)是否存在与目标费用对应的收费撤销指令。
需要说明的是,对于某笔目标费用来说,这里的收费条件触发可以是针对该笔目标费用的首次触发,也可以不是首次触发(例如之前针对该笔目标费用已触发过收费条件,但收费进程处理失败后再次触发收费条件)。
S202:若不存在与所述目标费用对应的收费撤销指令,则执行用于收取所述目标费用的收费进程;若存在与所述目标费用对应的收费撤销指令,则不执行用于收取所述目标费用的收费进程。
在本实施例中,若不存在与目标费用对应的收费撤销指令,则执行正常的收费进程,即收费系统驱动账务系统收取目标费用至收入账户;若存在与目标费用对应的收费撤销指令,说明退费条件已经触发并生成了收费撤销指令(收费撤销指令的产生参见第一个实施例),根据收费撤销指令,不执行用于收取所述目标费用的收费进程,即虽然收费条件触发了,但是并不执行收费进程。由于收费撤销指令的存在,即使收费条件再多次触发,还是不会执行收费进程。
若收费先于退费生成了收费幂等记录,则退费时可以根据收费幂等记录来确定如何执行退费进程(参见第一个实施例);若退费先于收费生成了撤销状态的收费幂等记录(如第一个实施例中的1.1),则收费时会根据撤销状态的收费幂等记录来不执行收费进程;若退费条件触发后,将收费进程所生成的收费幂等记录更改为撤销状态(如第一个实施例中的1.2),则若收费条件再次触发,也不执行收费进程。
可见,第二个实施例与第一个实施例是对应的收费过程,两者可以互相印证和结合使用,形成收费和退费的并行处理。相应的,第二个实施例中未详细说明的内容可以参见第一个实施例。
根据第一和第二个实施例,在收费条件触发后确定是否存在收费撤销指令来决定是否还需要对目标费用进行收费操作,即在收费条件触发后,能够识别退费是否已触发,并决定是否还需要对目标费用进行收费操作;在退费条件触发后,即使收费操作尚未发起或尚未完成或未成功的情况下也能够进行有效的退费操作(产生收费撤销指令),即不影响交易撤销或退款流程;这样将平台或服务商等的收费、退费流程和主支付(或用户的支付进程)、主退款(或用户的退款流程)流程解耦,不会因为收费未完成而影响退款主流程。
现有技术中,资金、数据等都可以作为控制对象,以对其进行各种操作,比如使其按照特定的路径正向或反向流动以及前进或者回退。现有技术中,针对同一对象,正向或反向操作的后发起一方需要在先发起一方完成后才可以正常进行,比如反向操作是后发起一方,正向操作是先发起一方,则需要正向操作完成后才可以正常进行反向操作;或者正向操作是后发起一方,反向操作是先发起一方,则需要反向操作完成后才可以正常进行正向操作;前进或回退操作同理。若是后发起一方在先发起一方未实际进行或未完成之前发起,则会产生包括但不限于操作错误或者操作异常或操作无法执行在内的各种情况。
实施例三:
图6是本说明书第三个实施例中对象控制方法的流程示意图,图7是本说明书第三个实施例中的对象控制示意图。结合图6和图7,本实施例中,对象控制方法包括:
S301:当针对目标对象的前进条件触发后,确定是否存在与所述目标对象对应的前进撤销指令。
如前述,资金、数据等都可以作为目标对象。可以通过标识号等方式来确定目标对象,比如在电子商务中,每一笔交易款项可以跟订单号对应起来,从而可以通过订单号作为标识号来锁定目标款项(即目标对象),这里的“锁定目标款项”可以是锁定款项的金额,即需要锁定多少数额的款项作为目标款项;再比如,数据可以有数据代码或者编码或者其他类型的标识(例如所属的个体),同样可以用来锁定目标数据(即目标对象)。可见,与用来锁定目标对象的标识号或其他标识等对应就可以看作与目标对象对应。
在本实施例中,可以确定供目标对象流动或者传输的路径,比如不同的账户(或节点)之间可以形成供资金流动的路径,不同的节点(或账户)之间可以形成供数据流动的路径,当然路径的方向是可以确定或变化的。所述的“前进”或者“后退”可以是用来表示目标对象按照一定的路径流动或者传输,但“前进”并不一定限于某个流动或者传输方向,“后退”也并不一定限于某个流动或者传输方向。在某种情景下或某次对象控制事件中的前进路径(带方向)也可以是另一种情景下或另一次对象控制事件中的后退路径(带方向)。“正向”或者“反向”同理。在本实施例中,不妨将前进记为先发起的操作(或被设置为应该先发起的操作),后退为后发起的操作(或被设置为应该后发起的操作)。
在本实施例中,所述的“前进条件”可以是消息类的条件(即接收到特定的消息时为触发前进条件),也可以是接口类的条件(即特定的接口被调用时为触发前进条件),也可以是其他的条件。
既然目标对象可以锁定,那么当针对目标对象的前进条件触发后,就可以确定是否存在与目标对象对应的前进撤销指令。前进撤销指令可以是存在于数据库里面的指令,当针对目标对象的前进条件触发后,就去数据库里面查询是否有前进条件撤销指令。针对目标对象的前进条件与目标对象是对应的,前进撤销指令(如果存在)与目标对象是对应的,那么前进条件和前进撤销指令也可以是对应的。
S302:若不存在与目标对象对应的前进撤销指令,则执行所述前进条件对应的前进进程;若存在与目标对象对应的前进撤销指令,则不执行所述前进条件对应的前进进程。
以下分情况进行说明:
S3021:在本实施例中,针对目标对象的前进条件触发后,若确定存在与目标对象对应的前进撤销指令,根据前述,则也就存在与前进条件对应的前进撤销指令,从而前进条件被触发所对应的前进进程就会被目标对象对应的前进撤销指令撤销,即虽然针对目标对象的前进条件被触发,但并不会执行针对目标对象的前进进程。
S3022:在本实施例中,针对目标对象的前进条件触发后,若确定不存在与目标对象对应的前进撤销指令,则会执行针对目标对象的前进进程。例如,前进进程可以是使目标对象由其所在的节点(即前进条件触发时目标对象的所在节点,以下称作流出节点)沿某路径进入与目标对象对应的节点(以下称作流入节点)。
以下对流出节点和流入节点可能出现的情况进行说明(本实施例不限于以下情况):
2.1、在前进条件触发时或触发前,目标对象是以一个整体存在,或者说是存在于一个位置,比如存在于一个节点中,则流出节点为一个。当前进条件触发且不存在前进撤销指令的情况下,该流出节点中的目标对象流向对应的流入节点。
2.2、在前进条件触发时或触发前,目标对象并不一定是以一个整体存在的,或者并不一定是存在于一个位置的,比如可以存在于多个节点中,这多个节点中的每个节点存储目标对象的一部分,并共同组成目标对象。比如目标对象是1GB的数据,并存储在10个服务器中,则这10个服务器中的每个服务器作为节点存储目标对象的一部分(不一定是平均分布),并共同组成目标对象。由此可知,流出节点可以是一个或多个。若流出节点有多个,当前进条件触发且不存在前进撤销指令的情况下,则这多个流出节点中存储的目标对象的部分都会流向与目标对象对应的流入节点。若流出节点有多个,则这多个流出节点可以属于同一级节点或分属不同级账户或至少有两个流出节点分属不同级账户。
2.3、目标对象对应的流入节点有一个,则不论流出节点有一个或多个,都会流入该流入节点。
2.4、目标对象对应的流入节点有多个,则不论流出节点有一个或多个,目标对象会流入该多个流入节点中的一个或多个或全部,即目标对象可能会全部流入该对应的多个流入节点中的一个,也可能流入该对应的多个流入节点中的多个,或者可能每个与目标对象对应的流入节点都会有目标对象的一部分流入,以下将实际有目标对象流入的流入节点称为被流入节点。若被流入节点有多个,则这多个被流入节点的流入内容共同组成目标对象。例如目标对象是1GB的数据,对应的流入节点是5个服务器,目标对象流入了其中的4个服务器,则这4个服务器所流入的数据共同组成目标对象。若与目标对象对应的流入节点有多个,则这多个流入节点可以属于同一级节点或分属不同级账户或至少有两个流入节点分属不同级账户。
本实施例中,在目标对象进入被流入节点后,会生成与目标对象对应的前进记录,前进记录可以用来表示前进进程已完成,目标对象已经进入相应的流入节点。
S303:当针对目标对象的回退条件触发后,确定是否存在目标对象对应的前进进程。
在本实施例中,所述的“回退条件”可以是消息类的条件(即接收到特定的消息时为触发后退条件),也可以是接口类的条件(即特定的接口被调用时为触发后退条件),也可以是其他的条件。
当针对目标对象的回退条件触发后,确定是否存在目标对象对应的前进进程,也可以确定目标对象是否存在于与其对应的流入节点(这里可以仅确定被流入节点中)。沿用上例,目标对象是1GB的数据,对应的流入节点是5个服务器,目标对象流入了其中的4个服务器,则确定这4个服务器是否有目标对象或目标对象的一部分存在。
可以通过确定是否生成前进记录来确定目标对象是否存在于与其对应的流入节点。若生成了前进记录,则目标对象存在于与其对应的流入节点,若未生成前进记录,则目标对象不存在于与其对应的流入节点。
S304:若不存在所述目标对象对应的前进进程,或存在所述目标对象对应的前进进程,且前进进程处理失败,则生成前进撤销指令,用于撤销所述回退条件触发之后产生的与目标对象对应的前进进程。
若目标对象存在于与其对应的流入节点,则可以执行回退进程,使目标对象由其所在的流入节点(即被流入节点)进入与其对应的流出节点。需要说明的是,这里“与目标对象对应的流出节点(以下记为后流出节点)”和S102中“目标对象所在的流出节点(以下记为原流出节点)”不一定相同或不同,以下列举说明:
3.1、后流出节点为原流出节点或原流出节点的一部分。
这种情况下,目标对象返回后流出节点即可。由于流出节点可能有一个或多个,所以回退操作后目标对象在流出节点中的状态与前进操作前目标对象在流出节点中的状态不一定相同或不同。以下分情况说明:
3.1.1、原流出节点和后流出节点为同一个,则前进操作前目标对象全部位于该流出节点,回退操作后目标对象也是全部回到该流出节点。
3.1.2、原流出节点有多个,后流出节点与前流出节点相同。这种情况下,对于任一个流出节点,在前进条件出发后该节点流出的目标对象的部分与后退条件触发后该节点流入的目标对象的部分不一定相同。例如,若目标对象是5GB的数据,原流出节点是5个服务器,每个服务器存储1GB的数据,且前进条件触发后每个服务器存储的数据均流出至流入节点;则回退条件触发后,各个服务器流入的数据不一定与前进条件出发前存储的数据相同,或者有的服务器可能相同,有的服务器可能不同,但各个服务器流入的数据仍然组成之前的5GB的数据。
3.1.3、原流出节点有多个,后流出节点是前流出节点的一部分。则对于任一个后流出节点,在前进条件出发后该节点流出的目标对象的部分与后退条件触发后该节点流入的目标对象的部分不一定相同。例如,若目标对象是5GB的数据,原流出节点是5个服务器,每个服务器存储1GB的数据,且前进条件触发后每个服务器存储的数据均流出至流入节点;回退条件触发后,只有4个服务器作为后流出节点从而有数据流入。则对于这4个服务器中的任一个,其在回退条件触发后流入的数据不一定与前进条件出发前其存储的数据相同,但4个服务器流入的数据仍然组成之前的5GB的数据。
3.2、后流出节点中存在原流出节点中不存在的节点。这种情况下,回退条件触发后各个后流出节点流入的部分所组成的目标对象也仍然等于前进条件出发前各个原流出节点存储的部分所组成的目标对象。
若不存在所述目标对象对应的前进进程,或存在所述目标对象对应的前进进程,且前进进程处理失败,则目标对象不存在于与其对应的流入节点,此时与目标对象对应的流入节点中还不存在可供回退的目标对象,则生成前进撤销指令,用于撤销所述回退条件触发之后产生的与目标对象对应的前进进程。
下面针对前进条件触发与否可能出现的情况进行说明(本实施例不限于以下情况):
4.1、若回退条件触发时前进条件尚未触发,则生成与目标对象对应的前进撤销指令,若之后针对目标对象的前进条件触发,由于已存在与目标对象对应的前进撤销指令,则不执行前进进程(参考S301和S302)。
4.2、若回退条件触发时前进条件已触发且前进进程处理失败,目标对象仍然会在原流出节点,则生成与目标对象对应的前进撤销指令,若之后针对目标对象的前进条件再触发,由于已存在与目标对象对应的前进撤销指令,则不执行前进进程(参考S301和S302)
4.3、若回退条件触发时前进条件已触发且前进进程尚在进行中,则可以(定时)重复触发回退条件,等待前进进程结果确定。若前进进程结果为成功,则可以执行回退进程,使目标对象由其所在的流入节点(即被流入节点)进入与其对应的流出节点;若前进进程结果为失败,则转为4.2。
可以在前进条件触发后生成一条初始状态的代表前进进程的幂等记录,若不存在与目标对象对应的前进撤销指令,则在前进进程完成(即前进进程处理成功),目标对象由其所在的流出节点进入与其对应的流入节点后将幂等记录的状态更新为完成状态。这样,回退条件触发后,通过确定有无完成状态的幂等记录(也可以是其他代表前进完成的记录)确定前进进程是否完成,目标对象是否存在于与其对应的流入节点;回退条件触发后,通过有无幂等记录,确定前进条件是否被触发;若无幂等记录则说明前进条件尚未触发;若有幂等记录,则前进条件已触发;可以锁定幂等记录;若幂等记录锁定成功且为初始状态,则说明前进条件已触发但前进进程处理失败;若幂等记录锁定冲突或失败或错误,则说明说明幂等记录被其他流程锁定了,说明前进进程正在进行中。
本实施例中,通过在前进条件触发后确定是否存在前进撤销指令来决定是否还需要对目标对象进行前进操作;在回退条件触发后,确定目标对象是否被触发了前进条件或前进进程是否执行成功;若前进条件未触发或前进进程执行失败,则生成与目标对象对应的前进撤销指令,用于撤销回退条件触发之后的前进进程,实现了即使前进进程尚未发起或尚未完成或未成功的情况下也能够进行有效的回退操作,提高前进以及回退操作的操作效率和操作有效性。
可见,实施例三是实施例一和实施例二的结合与拓展,实施例三中的目标对象不限于目标费用。
实施例四:
如图8所示,本说明书第四个实施例提供了一种收费处理装置,包括:
指令判定模块401,用于当针对目标费用的收费条件触发后,确定是否存在与所述目标费用对应的收费撤销指令;
收费处理模块402,用于若不存在所述收费撤销指令,则执行用于收取所述目标费用的收费进程;以及,若存在所述收费撤销指令,则不执行用于收取所述目标费用的收费进程;
收费判定模块403,用于当针对目标费用的退费条件触发后,确定是否存在用于收取所述目标费用的收费进程;
指令生成模块404,用于若不存在所述收费进程,或存在所述收费进程,且所述收费进程处理失败,则生成收费撤销指令,用于撤销所述退费条件触发之后产生的用于收取所述目标费用的收费进程。
可选的,所述装置还包括:
第一退费处理模块,用于当针对目标费用的退费条件触发后,若存在所述收费进程,且所述收费进程已完成,则将所述目标费用退至收退费账户。
可选的,所述装置还包括:
第二退费处理模块(与第一退费处理模块可以相同或不同),用于当针对目标费用的退费条件触发后,若所述收费进程进行中,则重复触发退费条件,并在所述收费进程完成后将所述目标费用退至收退费账户;
和/或,
用于当针对目标费用的退费条件触发后,若所述收费进程进行中,则重复触发退费条件,并在所述收费进程处理失败后生成收费撤销指令,用于撤销所述退费条件触发之后产生的用于收取所述目标费用的收费进程。
可选的,所述装置还包括:
第一幂等模块,用于当所述收费条件触发后,若不存在与所述目标费用对应的收费撤销指令,则生成初始状态的收费幂等记录;在所述收费进程完成后,将所述收费幂等记录更新为完成状态。
可选的,所述装置还包括:
收费条件判定模块,用于当针对目标费用的退费条件触发后,若不存在所述收费进程,则确定针对所述目标费用的收费条件是否触发;
若是,则指令生成模块生成收费撤销指令,用于撤销所述退费条件触发之后产生的用于收取所述目标费用的收费进程。
可选的,确定针对所述目标费用的收费条件是否触发包括:
确定是否存在所述目标费用对应的收费幂等记录;
若存在所述收费幂等记录,则针对所述目标费用的收费条件已被触发;
若不存在所述收费幂等记录,则针对所述目标费用的收费条件未被触发。
可选的,所述装置还包括:
第二幂等模块(与第一幂等模块可以相同或不同),用于确定是否存在所述目标费用对应的收费幂等记录;以及,
若存在所述收费幂等记录,则锁定所述收费幂等记录;
若锁定成功且所述收费幂等记录为初始状态,则用于收取所述目标费用的收费进程处理失败。
可选的,所述装置还包括:
第三幂等模块(与第一或第二幂等模块可以相同或不同):用于确定是否存在所述目标费用对应的收费幂等记录;以及,
若存在所述收费幂等记录,则锁定所述收费幂等记录;
若所述收费幂等记录锁定不成功,则用于收取所述目标费用的收费进程进行中。
可选的,所述收费撤销指令为撤销状态的收费幂等记录。
可选的,
触发所述收费条件包括:接收到收费消息,和/或,收费接口被调用;
和/或,
触发所述退费条件包括:接收到退费消息,和/或,退费接口被调用。
可选的,所述装置还包括:
目标费用锁定模块,用于利用标识号锁定所述目标费用。
实施例五:
如图9所示,本说明书第五个实施例提供了一种对象控制装置,包括:
指令判定模块501,用于当针对目标对象的前进条件触发后,确定是否存在与所述目标对象对应的前进撤销指令;
前进处理模块502,用于若不存在所述前进撤销指令,则执行所述前进条件对应的前进进程;以及若存在所述前进撤销指令,则不执行所述前进条件对应的前进进程;
前进判定模块503,用于当针对目标对象的回退条件触发后,确定是否存在目标对象对应的前进进程;
指令生成模块504,用于若不存在所述目标对象对应的前进进程,或存在所述目标对象对应的前进进程,且前进进程处理失败,则生成前进撤销指令,用于撤销所述回退条件触发之后产生的与目标对象对应的前进进程。
实施例六:
本说明书第六个实施例提供了一种收费处理设备,包括:
至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
当针对目标费用的收费条件触发后,确定是否存在与所述目标费用对应的收费撤销指令;
若否,则执行用于收取所述目标费用的收费进程;
若是,则不执行用于收取所述目标费用的收费进程;
当针对目标费用的退费条件触发后,确定是否存在用于收取所述目标费用的收费进程;
若不存在所述收费进程,或存在所述收费进程,且所述收费进程处理失败,则生成收费撤销指令,用于撤销所述退费条件触发之后产生的用于收取所述目标费用的收费进程。
实施例七:
本说明书第七个实施例提供了一种对象控制设备,包括:
至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
当针对目标对象的前进条件触发后,确定是否存在与所述目标对象对应的前进撤销指令;
若否,则执行所述前进条件对应的前进进程;
若是,则不执行所述前进条件对应的前进进程;
当针对目标对象的回退条件触发后,确定是否存在目标对象对应的前进进程;
若不存在所述目标对象对应的前进进程,或存在所述目标对象对应的前进进程,且前进进程处理失败,则生成前进撤销指令,用于撤销所述回退条件触发之后产生的与目标对象对应的前进进程。
实施例八:
本说明书第八个实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令被处理器执行时实现如下的步骤:
当针对目标费用的收费条件触发后,确定是否存在与所述目标费用对应的收费撤销指令;
若否,则执行用于收取所述目标费用的收费进程;
若是,则不执行用于收取所述目标费用的收费进程;
当针对目标费用的退费条件触发后,确定是否存在用于收取所述目标费用的收费进程;
若不存在所述收费进程,或存在所述收费进程,且所述收费进程处理失败,则生成收费撤销指令,用于撤销所述退费条件触发之后产生的用于收取所述目标费用的收费进程。
实施例九:
本说明书第九个实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令被处理器执行时实现如下的步骤:
当针对目标对象的前进条件触发后,确定是否存在与所述目标对象对应的前进撤销指令;
若否,则执行所述前进条件对应的前进进程;
若是,则不执行所述前进条件对应的前进进程;
当针对目标对象的回退条件触发后,确定是否存在目标对象对应的前进进程;
若不存在所述目标对象对应的前进进程,或存在所述目标对象对应的前进进程,且前进进程处理失败,则生成前进撤销指令,用于撤销所述回退条件触发之后产生的与目标对象对应的前进进程。
上述各实施例可以结合使用,结合顺序不限。
上述对本说明书特定实施例进行了描述,其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,附图中描绘的过程不一定必须按照示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、设备、非易失性计算机可读存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书实施例提供的装置、设备、非易失性计算机可读存储介质与方法是对应的,因此,装置、设备、非易失性计算机存储介质也具有与对应方法类似的有益技术效果,由于上面已经对方法的有益技术效果进行了详细说明,因此,这里不再赘述对应装置、设备、非易失性计算机存储介质的有益技术效果。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware DescrIP地址tion Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescrIP地址tion Language)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware DescrIP地址tion Language)、Lava、Lola、MyHDL、PALASM、RHDL(Ruby Hardware DescrIP地址tion Language)等,目前最普遍使用的是VHDL(Very-High-Speed Integrated Circuit Hardware DescrIP地址tion Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、MicrochIP地址PIC18F26K20以及Silicone LabsC8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本说明书实施例可提供为方法、系统、或计算机程序产品。因此,本说明书实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本说明书实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书是参照根据本说明书实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本说明书实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。