一种基于aop方式的客户端订单取消判断方法及装置与流程

文档序号:20620337发布日期:2020-05-06 20:44阅读:171来源:国知局
一种基于aop方式的客户端订单取消判断方法及装置与流程

本申请属于物流订单处理技术领域,特别涉及一种基于aop方式的客户端订单取消判断方法及装置。



背景技术:

物流的生产环节涉及到仓配运执行系统,而每个执行系统又涉及到众多环节,这些环节的实现散落在不同的研发部门或小组,当这些环节在生产时,要判断这个订单是否已经被用户取消、以及回传在某个环节的取消状态时,就存在如下问题:

1、各个组的开发人员不一致;

2、各开发人员的实现方式不一致;

3、各自的代码质量也参差不齐;

4、若是需要修改其取消回传逻辑等,需要各个部门都得改,这样导致非常大的联调、测试、上线等工作,资源浪费非常大。



技术实现要素:

为了解决上述技术问题至少之一,本申请提供了一种基于aop方式的客户端订单取消判断方法及装置,为电商物流企业其下多个业务执行系统提供一种高效快速的订单取消判断和状态回传的方法。

本申请的第一个方面,一种基于aop方式的客户端订单取消判断方法,包括:

对java虚拟机已经加载的每一个类中的每一个方法,检查所述方法起始位置的前一行是否有标记,所述标记为事先标注在需要进行订单取消判断的业务方法之前;以及若存在标记,则将所述标记绑定的取消判断函数织入所述标记处,在所述取消判断函数中,调用远程访问接口,获取对应订单是否被取消,对被取消的订单,跳过紧挨该注解的业务方法,若不存在注解或对应订单未被取消,则所述方法能够被执行。

优选的是,所述标记包括基于注解式的标记或基于配置式的标记。

优选的是,检查java虚拟机已经加载的每一个方法是否有标记包括:

基于java的类字节码操作函数传入遍历方法,在该遍历方法中实现对java虚拟机已经加载的每一个类中的每一个方法的遍历及检查。

优选的是,在获取到对应订单被取消后,进一步包括:

通过状态回传接口,将所述订单号、及所述方法对应的sku号、取消动作的业务环节及取消结果回传服务器。

本申请第二方面,一种基于aop方式的客户端订单取消判断装置,包括:

标记检测模块,用于对java虚拟机已经加载的每一个类中的每一个方法,检查所述方法起始位置的前一行是否有标记,所述标记为事先标注在需要进行订单取消判断的业务方法之前;以及取消判断函数织入模块,用于在存在标记时,将所述标记绑定的取消判断函数织入所述标记处,在所述取消判断函数中,调用远程访问接口,获取对应订单是否被取消,对被取消的订单,跳过紧挨该注解的业务方法,若不存在注解或对应订单未被取消,则所述方法能够被执行。

优选的是,所述标记包括基于注解式的标记或基于配置式的标记。

优选的是,所述标记检测模块包括:

预处理单元,用于基于java的类字节码操作函数传入遍历方法,在该遍历方法中实现对java虚拟机已经加载的每一个类中的每一个方法的遍历及检查。

优选的是,还包括:

状态回传模块,用于通过状态回传接口,将所述订单号、及所述方法对应的sku号、取消动作的业务环节及取消结果回传服务器。

本申请第三方面,一种计算机设备,包括处理器、存储器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序用于实现如上所述的基于aop方式的客户端订单取消判断方法。

本申请第四方面,一种可读存储介质,所述可读存储介质存储有计算机程序,所述计算机程序被处理器执行时用于实现如上所述的基于aop方式的客户端订单取消判断方法。

本发明的实施具有如下效益:

1、订单取消代码统一;

2、订单取消状态代码统一;

3、各业务执行系统不需要再开发,只需进行少量的配置;

4、由于统一处理取消,避免代码散乱到各处,增加了系统的稳定性;

5、代码复杂度显著降低;

6、代码复用性高,节省开发成本;

7、代码修改和升级方便。

附图说明

图1是本申请基于aop方式的客户端订单取消判断方法的一优选实施例的流程图。

图2是本申请基于aop方式的客户端订单取消判断方法的另一优选实施例的流程图。

图3是本申请基于aop方式的客户端订单取消判断装置的一优选实施例的架构图。

具体实施方式

为使本申请实施的目的、技术方案和优点更加清楚,下面将结合本申请实施方式中的附图,对本申请实施方式中的技术方案进行更加详细的描述。在附图中,自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。所描述的实施方式是本申请一部分实施方式,而不是全部的实施方式。下面通过参考附图描述的实施方式是示例性的,旨在用于解释本申请,而不能理解为对本申请的限制。基于本申请中的实施方式,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施方式,都属于本申请保护的范围。下面结合附图对本申请的实施方式进行详细说明。

根据本申请第一方面,一种基于aop方式的客户端订单取消判断方法,如图1所示,主要包括:

步骤s1、对java虚拟机已经加载的每一个类中的每一个方法,检查所述方法起始位置的前一行是否有标记,所述标记为事先标注在需要进行订单取消判断的业务方法之前。

步骤s2、若存在标记,则将所述标记绑定的取消判断函数织入所述标记处,在所述取消判断函数中,调用远程访问接口,获取对应订单是否被取消,对被取消的订单,跳过紧挨该注解的业务方法,若不存在注解或对应订单未被取消,则所述方法能够被执行。

在一些可选实施方式中,所述标记包括基于注解式的标记或基于配置式的标记。该实施例以基于注解式的标记为例进行说明。

注解(annotation),也叫元数据,隶属于java编程语言,是一种代码级别的说明。它是jdk1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

本申请的注解以java为例定义如下:

第一行:@target(elementtype.method),表明是对java类种的方法进行标注;

第二行:@retention(retentionpolicy.runtime),表明这个注解可以保留到程序运行的时候,它会被加载进入到jvm中,所以在程序运行时可以获取到它们;

第三行:public@interfacecheckordercancel,定义这个注解的名称为checkordercancle。

第四、五行:stringorderid();stringsku();stringprocessname();代表order、sku在某个被标注函数的输入参数中的真实名称,processname()代表在哪个业务环节被取消。

当某个生产系统需要在某个生产环节对应的函数代码上判断订单是否已经取消时,可以在这个函数上打上该标记,即步骤s1中的所述标记为事先标注在需要进行订单取消判断的业务方法之前,举例,一个仓库管理系统,有一个环节叫做拣货,它的主要作用是根据某个订单到指定的货架上取出一定数量的商品,而当这个订单被用户取消后,显然就不需要进行进行拣货了,所以需要在拣货前帮助仓库操作人员判断以下该订单是否被取消,此时,在拣货方法picking的上一行中增加checkordercancle这个注解,如下所示:

@checkordercancel(orderid=”orderid”,sku=“skuid”,processname=“分拣”)

publicboolpicking(orderinfoorderinfo){

拣货代码

。。。。。。。

}

步骤s1中,检查java虚拟机已经加载的每一个方法是否有标记包括:基于java的类字节码操作函数传入遍历方法,在该遍历方法中实现对java虚拟机已经加载的每一个类中的每一个方法的遍历及检查。

首先说明的是,该方法主要是针对应用在jvm中的目标代码进行处理,jvm是javavirtualmachine(java虚拟机)的缩写,jvm是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

引入java语言虚拟机后,java语言在不同平台上运行时不需要重新编译。java语言使用java虚拟机屏蔽了与具体平台相关的信息,使得java语言编译程序只需生成在java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

其次,类字节码操作函数是指instrumentation,即java.lang.instrument是javase5的新特性,使用instrumentation,开发者可以构建一个独立于应用程序的代理程序(agent),用来监测和协助运行在jvm上的程序,甚至能够替换和修改某些类的定义,本发明主要就是利用它在特定注解过的函数上增加一些跟取消判断有关的公用代码。

asm是一个java字节码操控框架。它能够以二进制形式修改已有类或者动态生成类。asm可以直接产生二进制class文件,也可以在类被加载入java虚拟机之前动态改变类行为。asm从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。

java字节码(byte-code)是java虚拟机执行的一种虚拟指令格式。

另外需要引进premain()函数,顾名思义它代表着将在主程序的main方法之前运行,一般可用以在主程序执行前,进行一系列的准备工作,在本发明中就是在类加载后对类中的指定函数增加一些公用的代码,例如取消查询,取消状态返回等。

基于上述功能模块,本申请步骤s1得以实现,参考图2,具体包括:

p1、创建一个类,在里面实现java要求的一个premain()函数;函数的入参有一个重要的类叫做instrumentation,它是java的一个重要的类,其一个重要的作用是可以对java的类字节码进行操作;

p2、在premain函数中给instrumentation类传入一个自定的类文件转换类,该转换类实现了java的接口:classfiletransformer,;

p3、在该转换类中遍历jvm已经加载的每一个类;

p4、遍历该类上的每一个方法。

步骤s2中若存在标记,则将所述标记绑定的取消判断函数织入所述标记处,仍以上述的名为checkordercancel注解为例,事先定义好取消判断函数,例如包括:

调用远程指定的订单查询接口;在这个调用接口中传入订单号;远程服务从自身的订单取消表中检查是否含有该订单;如是有,则返回true,否则返回false;结束。

伪代码如下:

调用远程服务失败后的错误处理,例如:

错误日志处理;

函数返回

}

上面代码中主要作用就是判断订单是否被取消的,它是公用的,可以用@checkordercancel在程序运行中统一处理,不用每个开发都重新写一遍。

在一些可选实施方式中,在获取到对应订单被取消后,进一步包括:

通过状态回传接口,将所述订单号、及所述方法对应的sku号、取消动作的业务环节及取消结果回传服务器。具体包括:

调用远程指定的状态回传接口;在这个调用接口中传入订单号、sku号、上报取消动作的业务环节、取消结果;远程服务记录该结果;若是结果记录正确,则返回true;若是记录失败,则返回false;状态回传函数判断返回结果,若是为false则会进行重试;若是true则结束本函数。

上述织入取消判断函数及回传函数可以继续参考图2的后半部分,示意性说明如下:

p5、检查该方法上是否有名为checkordercancel的注解,没有则检查下一个方法(即重复p5~p6步骤);

p6、若是有则,在这个方法前面织入上面第二部分的订单取消判断函数,

p7、并判断若是该函数返回值为true,则说明订单已经被取消,这个类的方法(实际代表的是具体生产系统的某一个业务处理环节)就不要被调用了;

p8、同时还会再调用第二部分中的状态回传函数,告诉取消中心,该订单在这个业务上被终结了;

p9、若是函数返回值为false,则表明该订单没有被取消,还要继续调用原来的业务环节对应的方法;

p10、判断该类中还有其它方法没有检查的?若有则重复步骤p5~p10;

p11、判断是否还有别的类还没有遍历,若是有则重复p4~p11;

p12、若是没有,则表明所有的类及其下面的所有方法都被检查过了,结束本流程。

本申请中,采用基于配置的标记方式,例如可以在配置文件中配置每个主要标注的信息,包括类名、类方法、入参中的订单id字段名称、skuid字段名称、业务处理环节名称,即与注解中的那3个参数对应。

本申请基于aop的实现方式有多种方式,例如基于jdk的动态代理,基于springaop、基于javassist等,javassist是一个开源的分析、编辑和创建java字节码的类库,除了上述所述的采用javassist外,也可以采用asm来实现,若是涉及到spring的程序还可以采用springaop来实现。

本申请针对各个涉及到订单取消的生产系统,采用灵活的位置标记方式,基于aop实现机制,实现了订单取消判断的统一处理,减少了代码的重复开发,具有易于升级以及提高系统稳定性的优点。

根据本申请第二方面,一种基于aop方式的客户端订单取消判断装置,与上述方法相对应,如图3所示,主要包括:

标记检测模块,用于对java虚拟机已经加载的每一个类中的每一个方法,检查所述方法起始位置的前一行是否有标记,所述标记为事先标注在需要进行订单取消判断的业务方法之前;以及取消判断函数织入模块,用于在存在标记时,将所述标记绑定的取消判断函数织入所述标记处,在所述取消判断函数中,调用远程访问接口,获取对应订单是否被取消,对被取消的订单,跳过紧挨该注解的业务方法,若不存在注解或对应订单未被取消,则所述方法能够被执行。

在一些可选实施方式中,所述标记包括基于注解式的标记或基于配置式的标记。

在一些可选实施方式中,所述标记检测模块包括:

预处理单元,用于基于java的类字节码操作函数传入遍历方法,在该遍历方法中实现对java虚拟机已经加载的每一个类中的每一个方法的遍历及检查。

在一些可选实施方式中,还包括:

状态回传模块,用于通过状态回传接口,将所述订单号、及所述方法对应的sku号、取消动作的业务环节及取消结果回传服务器。

根据本申请第三方面,一种计算机设备,包括处理器、存储器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序用于实现如上所述的基于aop方式的客户端订单取消判断方法。

根据本申请第四方面,一种可读存储介质,所述可读存储介质存储有计算机程序,所述计算机程序被处理器执行时用于实现如上所述的基于aop方式的客户端订单取消判断方法。

特别地,根据本申请的实施方式,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施方式包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。本申请的计算机存储介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。

应当理解,根据本申请的实施方式,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。

附图中的流程图和框图,图示了按照本申请各种实施方式的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

描述于本申请实施方式中所涉及到的模块或单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块或单元也可以设置在处理器中,这些模块或单元的名称在某种情况下并不构成对该模块或单元本身的限定。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1