CN112068815B - 一种业务规则的处理方法及装置 - Google Patents
一种业务规则的处理方法及装置 Download PDFInfo
- Publication number
- CN112068815B CN112068815B CN201910503129.7A CN201910503129A CN112068815B CN 112068815 B CN112068815 B CN 112068815B CN 201910503129 A CN201910503129 A CN 201910503129A CN 112068815 B CN112068815 B CN 112068815B
- Authority
- CN
- China
- Prior art keywords
- factor
- node
- expression
- operator
- current
- 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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供一种业务规则的处理方法及装置。该方法包括:获得输入的用于表征业务规则的因子表达式;解析因子表达式,生成对应的第一表达式节点链;获得第一表达式节点链中各个节点对应的因子描述文件和操作符函数,其中,因子描述文件为当前程序语言执行环境所对应的可执行脚本,操作符函数为当前程序语言执行环境所对应的可执行函数;遍历第一表达式节点链中各个节点,根据各个节点对应的因子描述文件和操作符函数,计算并输出因子表达式的值,因子表达式的值用于表示业务规则的执行结果。在本申请中,通过采用当前程序语言执行环境下能够执行的脚本和函数来对表征业务规则的因子表达式进行计算,使得业务规则可以实现跨编程语言执行。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种业务规则的处理方法及装置。
背景技术
现在的互联网应用系统,特别是电信运营领域的客户关系管理(customerrelationship management,CRM)系统,面临着用户量大、硬件成本高、业务功能复杂、人们对服务响应时间的要求越来越高等问题。
通常,CRM系统是基于服务进行开发与部署的,例如采用微服务开发方式,这样,业务功能聚合到不同的服务中,并且由不同的开发团队负责开发或维护。每个服务根据自己承载的功能选择相应的编程语言。由于很多业务规则(比如:校验规则)在后台执行的同时也需要在用户设备执行,而后台和用户设备使用不同的编程语言,这样就使得对于同一个业务规则,需要编写一份可以在用户设备上执行的规则,同时再编写一份或多份可以在后台执行的规则,导致开发或维护的工作量成倍增加,进而无法实现业务规则的跨编程语言执行。
发明内容
本申请提供了一种业务规则的处理方法及装置,以实现业务规则的跨编程语言执行。
第一方面,本申请提供一种业务规则的处理方法,包括:获得输入的用于表征业务规则的因子表达式;解析所述因子表达式,生成对应的第一表达式节点链;获得所述第一表达式节点链中各个节点对应的因子描述文件和操作符函数,其中,所述因子描述文件为当前程序语言执行环境所对应的可执行脚本,所述操作符函数为当前程序语言执行环境所对应的可执行函数;遍历所述第一表达式节点链中各个节点,根据所述各个节点对应的因子描述文件和操作符函数,计算并输出所述因子表达式的值,所述因子表达式的值用于表示所述业务规则的执行结果。
在本申请中,通过采用当前程序语言执行环境下能够执行的脚本和函数来对表征业务规则的因子表达式进行计算,使得业务规则可以实现跨编程语言执行,达到一份业务规则可以在不同的设备上执行的目的,有效降低了开发与维护的工作量。
基于第一方面,在一些可能的实施方式下,所述解析所述因子表达式,生成对应的第一表达式节点链,包括:对所述因子表达式进行词法分析,获得N个单词,N为正整数;遍历所述N个单词,判断所述N个单词中的各个单词是否为预设元素,并根据判断结果,生成所述第一表达式节点链。
在本申请中,表达式节点链为因子表达式引擎内部的数据结构,用来描述因子表达式
基于第一方面,在一些可能的实施方式下,所述判断所述N个单词中的各个单词是否为预设元素,并根据判断结果,生成所述第一表达式节点链,包括:判断所述第i个单词是否为所述预设元素,其中,所述预设元素为因子、左方括号、左圆括号、右圆括号、操作符、常量、右方括号中的一种或多种;当所述第i个单词为因子时,将所述第i个单词添加至所述因子表达式中;当所述第i个单词为左方括号时,解析所述左方括号内的参数的表达式对应的第二表达式节点链;当所述第i个单词为左圆括号时,为所述左圆括号前的表达式创建第三表达式节点链,增加所述第三表达式节点链的优先级;当所述第i个单词为右圆括号时,为所述右圆括号前的表达式创建第四表达式节点链,降低所述第四表达式节点链的优先级;当所述第i个单词为操作符时,记录所述第i个单词与因子之间的关联关系,并为所述操作符的关联表达式创建第五表达式节点链;当所述第i个单词为常量时,为所述常量创建第六表达式节点链;当所述第i个单词为右方括号时,则设置i=i+1,并判断所述第i个单词是否为因子;将所述第二表达式节点链至所述第六表达式节点链中的一个或者多个表达式节点链确定为所述第一表达式节点链。
基于第一方面,在一些可能的实施方式下,在所述获得所述第一表达式节点链中各个节点对应的因子描述文件和操作符函数之前,所述方法还包括:判断所述当前程序语言执行环境对应的因子描述文件和/或操作符函数是否存在;若不存在所述当前程序语言执行环境对应的因子描述文件和/或操作符函数,则获取所述当前程序语言执行环境对应的因子元数据和/或操作元数据;将所述因子元数据转换成所述当前程序语言执行环境对应的因子描述文件;和/或,将所述操作元数据转换成所述当前程序语言执行环境对应的操作符函数。
在本申请中,所述因子描述文件为当前程序语言执行环境所对应的可执行脚本,所述操作符函数为当前程序语言执行环境所对应的可执行函数;若不存在所述当前程序语言执行环境对应的因子描述文件和/或操作符函数时,可以通过调用数据库中的因子元数据和/或操作元数据,生成当前程序语言执行环境对应的因子描述文件和/或操作符函数。
基于第一方面,在一些可能的实施方式下,所述获得所述第一表达式节点链中各个节点对应的因子描述文件和操作符函数,包括:若存在所述当前程序语言执行环境对应的因子描述文件和/或操作符函数,则从所述当前程序语言执行环境对应的因子描述文件和/或操作符函数中获得所述各个节点对应的因子描述文件和操作符函数。
基于第一方面,在一些可能的实施方式下,所述将所述因子元数据转换成所述当前程序语言执行环境对应的因子描述文件,包括:从所述因子元数据获得所述当前程序语言执行环境对应的至少一个因子;根据所述至少一个因子的因子类型,对所述至少一个因子进行排序;遍历排序后的至少一个因子的属性类型,依次对所述排序后的至少一个因子创建因子属性实例,并确定所述排序后的至少一个因子对应的计算逻辑;根据所述因子类型、对应的所述因子属性实例和所述计算逻辑,生成所述因子描述文件。
基于第一方面,在一些可能的实施方式下,所述依次对所述排序后的至少一个因子创建因子属性实例,包括:依次判断所述排序后的至少一个因子的属性类型是否为因子类型;若是,则创建通用类型实例作为所述因子属性实例;若否,则创建因子类型实例作为所述因子属性实例。
基于第一方面,在一些可能的实施方式下,所述确定所述排序后的至少一个因子对应的计算逻辑,包括:依次判断所述排序后的至少一个因子的属性是否具有计算逻辑;若是,则将所述因子的属性对应的计算逻辑确定为所述因子对应的计算逻辑;若否,则将所述因子的因子类型对应的计算逻辑确定为所述因子对应的计算逻辑。
基于第一方面,在一些可能的实施方式下,所述将所述操作元数据转换成所述当前程序语言执行环境对应的操作符函数,包括:将所述操作元数据中的各个操作符按函数名称进行组装,生成对应的操作符函数。
基于第一方面,在一些可能的实施方式下,所述根据所述各个节点对应的因子描述文件和操作符函数,计算所述因子表达式的值,包括:获取所述因子表达式中的至少一个操作符,并根据所述操作符的优先级,对所述至少一个操作符进行排序;依次对排序后的至少一个操作符中的当前操作符,获取所述第一表达式节点链中与所述当前操作符的关联表达式对应第七表达式节点链;根据所述各个节点对应的因子描述文件和操作符函数,计算所述第七表达式节点链的值;根据所述至少一个操作符中的每个操作符的计算逻辑和所述每个操作符对应的所述第七表达式节点链的值,计算所述因子表达式的值。
基于第一方面,在一些可能的实施方式下,所述根据所述各个节点对应的因子描述文件和操作符函数,计算所述第七表达式节点链的值,包括:依次判断所述第七表达式节点链中的当前节点是否为因子;若当前节点为因子,则判断所述当前节点是否具有参数;若所述当前节点不具有参数,则从所述各个节点对应的因子描述文中获取所述当前节点对应的计算逻辑,并按照所述当前节点对应的计算逻辑以及操作符函数,计算所述当前节点对应的因子值;判断所述当前节点是否为所述第七表达式节点链的最后一个节点;若是,则将所述当前节点对应因子值作为所述关联表达式的值,并返回所述计算所述因子表达式的值的步骤;若否,则跳转至下一个节点,并返回所述判断所述各个节点中的当前节点是否为因子的步骤。
基于第一方面,在一些可能的实施方式下,所述方法还包括:若所述当前节点具有参数,则计算所述参数的表达式的值,并跳转至下一个节点,返回所述判断所述各个节点中的当前节点是否为因子的步骤。
基于第一方面,在一些可能的实施方式下,所述方法还包括:若当前节点不为因子,则判断所述当前节点是否为右括号;若所述当前节点为右括号,则从所述各个节点对应的因子描述文中获取所述当前节点对应的计算逻辑,并按照所述当前节点对应的计算逻辑以及操作符函数,计算所述当前节点对应因子值;判断所述当前节点是否为所述第一表达式节点链的最后一个节点;若是,则将所述当前节点对应因子值作为所述因子表达式的值;若否,则跳转至下一个节点,并返回所述判断所述各个节点中的当前节点是否为因子的步骤。
基于第一方面,在一些可能的实施方式下,所述方法还包括:若所述当前节点不为右括号,则判断所述当前节点是否为常量;若所述当前节点为常量,则将所述当前节点对应因子值作为所述因子表达式的值。
基于第一方面,在一些可能的实施方式下,所述从所述各个节点对应的因子描述文中获取所述当前节点对应的计算逻辑,包括:当所述当前节点为根因子时,则从所述因子描述文件中获取所述当前节点对应的计算逻辑;当所述当前节点为子因子时,则从所述当前节点的父因子对应的因子描述文件中获取所述当前节点对应的计算逻辑。
第二方面,本申请提供一种业务规则的处理装置,该业务规则的处理装置可以为用户设备或者后台服务器中的芯片或者片上系统,还可以为用户设备或者后台服务器中用于实现第一方面或第一方面的任一可能的实施方式所述的方法的功能模块。举例来说,该业务规则的处理装置,可以包括:分析模块,用于获得输入的用于表征业务规则的因子表达式;以及,解析所述因子表达式,生成对应的第一表达式节点链;计算模块,用于获得所述第一表达式节点链中各个节点对应的因子描述文件和操作符函数,其中,所述因子描述文件为当前程序语言执行环境所对应的可执行脚本,所述操作符函数为当前程序语言执行环境所对应的可执行函数;以及,遍历所述第一表达式节点链中各个节点,根据所述各个节点对应的因子描述文件和操作符函数,计算并输出所述因子表达式的值,所述因子表达式的值用于表示所述业务规则的执行结果。
基于第二方面,在一些可能的实施方式下,所述分析模块,用于对所述因子表达式进行词法分析,获得N个单词,N为正整数;遍历所述N个单词,判断所述N个单词中的各个单词是否为预设元素,并根据判断结果,生成所述第一表达式节点链。
基于第二方面,在一些可能的实施方式下,所述分析模块,具体用于针对所述N个单词中的第i个单词,i=1,2,3……N,依次执行以下步骤:判断所述第i个单词是否为所述预设元素,其中,所述预设元素为因子、左方括号、左圆括号、右圆括号、操作符、常量、右方括号中的一种或多种;当所述第i个单词为因子时,将所述第i个单词添加至所述因子表达式中;当所述第i个单词为左方括号时,解析所述左方括号内的参数的表达式对应的第二表达式节点链;当所述第i个单词为左圆括号时,为所述左圆括号前的表达式创建第三表达式节点链,增加所述第三表达式节点链的优先级;当所述第i个单词为右圆括号时,为所述右圆括号前的表达式创建第四表达式节点链,降低所述第四表达式节点链的优先级;当所述第i个单词为操作符时,记录所述第i个单词与因子之间的关联关系,并为所述操作符的关联表达式创建第五表达式节点链;当所述第i个单词为常量时,为所述常量创建第六表达式节点链;当所述第i个单词为右方括号时,则设置i=i+1,并判断所述第i个单词是否为因子;将所述第二表达式节点链至所述第六表达式节点链中的一个或者多个表达式节点链确定为所述第一表达式节点链。
基于第二方面,在一些可能的实施方式下,所述装置还包括:因子描述文件构建模块和操作符函数构建模块;所述计算模块,还用于在所述获得所述第一表达式节点链中各个节点对应的因子描述文件和操作符函数之前,判断所述当前程序语言执行环境对应的因子描述文件和/或操作符函数是否存在;以及若不存在所述当前程序语言执行环境对应的因子描述文件和/或操作符函数,则调用所述因子描述文件构建模块和/或所述操作符函数构建模块;所述因子描述文件构建模块,用于获取所述当前程序语言执行环境对应的因子元数据;以及,将所述因子元数据转换成所述当前程序语言执行环境对应的因子描述文件;和/或,所述操作符函数构建模块,用于获取所述当前程序语言执行环境对应的操作元数据;以及,将所述操作元数据转换成所述当前程序语言执行环境对应的操作符函数。
基于第二方面,在一些可能的实施方式下,所述因子描述文件构建模块,用于若存在所述当前程序语言执行环境对应的因子描述文件,则从所述当前程序语言执行环境对应的因子描述文件中获得所述各个节点对应的因子描述文件;和/或,所述操作符函数构建模块,用于若存在所述当前程序语言执行环境对应的操作符函数,则从所述当前程序语言执行环境对应的操作符函数中获得所述各个节点对应的操作符函数。
基于第二方面,在一些可能的实施方式下,所述因子描述文件构建模块,用于从所述因子元数据获得所述当前程序语言执行环境对应的至少一个因子;根据所述至少一个因子的因子类型,对所述至少一个因子进行排序;遍历排序后的至少一个因子的属性类型,依次对所述排序后的至少一个因子创建因子属性实例,并确定所述排序后的至少一个因子对应的计算逻辑;根据所述因子类型、对应的所述因子属性实例和所述计算逻辑,生成所述因子描述文件。
基于第二方面,在一些可能的实施方式下,所述因子描述文件构建模块,用于依次判断所述排序后的至少一个因子的属性类型是否为因子类型;若是,则创建通用类型实例作为所述因子属性实例;若否,则创建因子类型实例作为所述因子属性实例。
基于第二方面,在一些可能的实施方式下,所述因子描述文件构建模块,用于依次判断所述排序后的至少一个因子的属性是否具有计算逻辑;若是,则将所述因子的属性对应的计算逻辑确定为所述因子对应的计算逻辑;若否,则将所述因子的因子类型对应的计算逻辑确定为所述因子对应的计算逻辑。
基于第二方面,在一些可能的实施方式下,所述操作符函数构建模块,用于将所述操作元数据中的各个操作符按函数名称进行组装,生成对应的操作符函数。
基于第二方面,在一些可能的实施方式下,所述计算模块,用于获取所述因子表达式中的至少一个操作符,并根据所述操作符的优先级,对所述至少一个操作符进行排序;依次对排序后的至少一个操作符中的当前操作符,获取所述第一表达式节点链中与所述当前操作符的关联表达式对应第七表达式节点链;根据所述各个节点对应的因子描述文件和操作符函数,计算所述第七表达式节点链的值;根据所述至少一个操作符中的每个操作符的计算逻辑和所述每个操作符对应的所述第七表达式节点链的值,计算所述因子表达式的值。
基于第二方面,在一些可能的实施方式下,所述计算模块,用于依次判断所述第七表达式节点链中的当前节点是否为因子;若当前节点为因子,则判断所述当前节点是否具有参数;若所述当前节点不具有参数,则从所述各个节点对应的因子描述文中获取所述当前节点对应的计算逻辑,并按照所述当前节点对应的计算逻辑以及操作符函数,计算所述当前节点对应的因子值;判断所述当前节点是否为所述第七表达式节点链的最后一个节点;若是,则将所述当前节点对应因子值作为所述关联表达式的值,并返回所述计算所述因子表达式的值的步骤;若否,则跳转至下一个节点,并返回所述判断所述各个节点中的当前节点是否为因子的步骤。
基于第二方面,在一些可能的实施方式下,所述计算模块,还用于若所述当前节点具有参数,则计算所述参数的表达式的值,并跳转至下一个节点,返回所述判断所述各个节点中的当前节点是否为因子的步骤。
基于第二方面,在一些可能的实施方式下,所述计算模块,还用于若当前节点不为因子,则判断所述当前节点是否为右括号;若所述当前节点为右括号,则从所述各个节点对应的因子描述文中获取所述当前节点对应的计算逻辑,并按照所述当前节点对应的计算逻辑以及操作符函数,计算所述当前节点对应因子值;判断所述当前节点是否为所述第一表达式节点链的最后一个节点;若是,则将所述当前节点对应因子值作为所述因子表达式的值;若否,则跳转至下一个节点,并返回所述判断所述各个节点中的当前节点是否为因子的步骤。
基于第二方面,在一些可能的实施方式下,所述计算模块,还用于若所述当前节点不为右括号,则判断所述当前节点是否为常量;若所述当前节点为常量,则将所述当前节点对应因子值作为所述因子表达式的值。
基于第二方面,在一些可能的实施方式下,所述计算模块,用于当所述当前节点为根因子时,则从所述因子描述文件中获取所述当前节点对应的计算逻辑;当所述当前节点为子因子时,则从所述当前节点的父因子对应的因子描述文件中获取所述当前节点对应的计算逻辑。
第三方面,本申请提供一种用户设备,包括处理器,处理器用于与存储器耦合,读取并执行存储器中的指令,以实现如上述第一方面任一项所述的业务规则的处理方法。
基于第三方面,在一些可能的实施方式下,上述用户设备还包括存储器。
第四方面,本申请提供一种后台服务器,包括处理器,处理器用于与存储器耦合,读取并执行存储器中的指令,以实现如上述第一方面任一项所述的业务规则的处理方法。
基于第四方面,在一些可能的实施方式下,上述后台服务器还包括存储器。
第五方面,本申请提供一种计算机可读存储介质,计算机可读存储介质存储有指令,当指令计算机上运行时,用于执行上述第一方面任一项所述的业务规则的处理方法。
第六方面,本申请提供一种计算机程序或计算机程序产品,当计算机程序或计算机程序产品在计算机上被执行时,使得计算机实现上述第一方面任一项所述的业务规则的处理方法。
应当理解的是,本申请的第二至六方面与本申请的第一方面的技术方案一致,各方面及对应的可行实施方式所取得的有益效果相似,不再赘述。
附图说明
为了更清楚地说明本申请实施例或背景技术中的技术方案,下面将对本申请实施例或背景技术中所需要使用的附图进行说明。
图1为本申请实施例中的CRM系统的结构示意图;
图2为本申请实施例中CRM系统中后台服务器的结构示意图;
图3A为本申请实施例中的因子元数据的示意图;
图3B为本申请实施例中的操作符元数据的示意图;
图4为本申请实施例中的业务规则的处理方法的流程示意图;
图5为本申请实施例中的分析模块生成因子表达式对应的Node链的流程示意图;
图6为本申请实施例中的Node链的示意图;
图7为本申请实施例中的由因子元数据转换成因子描述文件的过程示意图;
图8为本申请实施例中的业务规则的处理装置的结构示意图;
图9为本申请实施例中的用户设备的结构示意图;
图10为本申请实施例中的后台服务器的结构示意图。
具体实施方式
下面结合本申请实施例中的附图对本申请实施例进行描述。以下描述中,参考形成本申请一部分并以说明之方式示出本申请实施例的具体方面或可使用本申请实施例的具体方面的附图。应理解,本申请实施例可在其它方面中使用,并可包括附图中未描绘的结构或逻辑变化。因此,以下详细描述不应以限制性的意义来理解,且本申请的范围由所附权利要求书界定。例如,应理解,结合所描述方法的揭示内容可以同样适用于用于执行所述方法的对应设备或系统,且反之亦然。例如,如果描述一个或多个具体方法步骤,则对应的设备可以包含如功能单元等一个或多个单元,来执行所描述的一个或多个方法步骤(例如,一个单元执行一个或多个步骤,或多个单元,其中每个都执行多个步骤中的一个或多个),即使附图中未明确描述或说明这种一个或多个单元。另一方面,例如,如果基于如功能单元等一个或多个单元描述具体装置,则对应的方法可以包含一个步骤来执行一个或多个单元的功能性(例如,一个步骤执行一个或多个单元的功能性,或多个步骤,其中每个执行多个单元中一个或多个单元的功能性),即使附图中未明确描述或说明这种一个或多个步骤。进一步,应理解的是,除非另外明确提出,本文中所描述的各示例性实施例和/或方面的特征可以相互组合。
在本申请实施例中,提供一种电信运营管理领域的CRM系统,图1为本申请实施例中的CRM系统的结构示意图,参见图1所示,该CRM系统100可以包括:用户设备101和后台服务器102,在用户设备上部署有浏览器,在每个后台服务器上部署有应用程序(app),并且每个app上面都是发布了服务。在app上面的服务可以采用与服务承载功能相适应的编程语言(如:java、groovy等)开发。由于很多业务规则(比如:校验规则)在后台执行的同时也需要在用户设备执行,而后台和用户设备使用不同的编程语言,这样就使得对于同一个业务规则,需要编写一份可以在用户设备上执行的规则,同时再编写一份或多份可以在后台执行的规则,导致开发或维护的工作量成倍增加,进而无法实现业务规则的跨编程语言执行。
为了解决上述技术问题,本申请实施例提供一种业务规则的处理方法,该方法可以应用于上述CRM系统中的处理设备,如后台服务器102或者与后台服务器通信的用户设备101。图2为本申请实施例中CRM系统中处理设备的结构示意图,参见图2所示,该处理设备可以包括:因子表达式引擎21和数据库22,其中,因子表达式引擎21可以包括:分析模块211、因子描述文件构建模块212、操作符函数构建模块213以及计算模块214;数据库1022可以包括:因子元数据库221和操作符元数据库222。
在实际应用中,上述因子表达式引擎可以为一个或者多个处理器,数据库可以为一个或者多个存储器。
在本申请实施例中,因子元数据库221用于存储因子元数据,操作符元数据库222用于存储操作元数据。
其中,因子元数据可以包括:因子基本信息和因子脚本内容;因子基本信息(结构参见表1所示)可以包括因子类型、属性名称、属性类型以及参数这些字段,因子脚本内容(结构参见表2所示)可以包括因子类型、属性名称、脚本类型(即当前程序语言执行环境,如java、groovy等)以及计算逻辑这些字段。在一些可能的实施方式中,每个因子都是因子类型的实例,每个因子类型具有因子属性,而因子的属性类型可以是另一个因子类型,从而因子属性可以是另一个因子类型的实例,这样构成了因子之间的父子关系,从而有效提高了因子逻辑的复用率,并且业务对象之间关系可以在规则里面用因子直观地表达,并且通过引入参数等能力,有效控制了因子的数量。例如,因子A的属性类型为因子B的因子类型,此时,因子A的因子为因子B的父因子,表达式可以记为A.B。
表1
因子类型 | 属性名称 | 属性类型 | 参数 |
表2
因子类型 | 属性名称 | 脚本类型 | 计算逻辑 |
操作符元数据可以包括:因子基本信息和操作符的计算逻辑;操作符基本信息(结构参见表3所示)可以包括操作符、优先级、函数名称以及参数这些字段,操作符的计算逻辑(结构参见表4所示)可以包括操作符、脚本类型以及计算逻辑。
表3
操作符 | 优先级 | 函数名称 | 参数 |
表4
操作符 | 脚本类型 | 计算逻辑 |
需要说明的是,上述表1中的“参数”用于标记因子的应用场景或者数据来源,例如,因子元数据来自“线上支付”或者“银行Pos机”等。上述表3中的“参数”用于标记操作符两侧的运算对象。
举例来说,在电信领域的CRM系统中,经常需要根据客户的积分评估结果来办理相关的业务,比较常见的是:客户信用良好才能办理A业务,此时,办理A业务的业务规则就可以定义为“客户信用良好”。那么,可以抽象出三个因子,如订单(order)、客户(customer)和信用(credit),上述业务规则“客户信用良好”就可以采用因子表达式“order.customer.credit>‘良好’”来表示。
在实际应用中,图3A为本申请实施例中的因子元数据的示意图和图3B为本申请实施例中的操作符元数据的示意图,那么,订单(order)、客户(customer)和信用(credit)这三个因子的因子元数据可以参见图3A所示,上述因子表达式中的操作符可以参见图3B所示。
下面结合上述处理设备的结构,对本申请实施例所提供的业务规则的处理方法进行说明。
图4为本申请实施例中的业务规则的处理方法的流程示意图,参见图4所示,该方法包括:
S401:分析模块获得输入的用于表征业务规则的因子表达式;
首先,CRM系统得到上述业务规则对应的因子表达式后,将因子表达式输入因子表达式引擎,分析模块获得该输入的因子表达式。这里,无论是在用户设备终端还是后台服务器中,业务规则都是用于描述业务对象之间的关系的,当使用因子表示规则中的业务对象时,规则实际上就可以通过因子表达式来表示,而规则的执行过程就可以通过因子表达式的计算过程来表示。
S402:分析模块解析所述因子表达式,生成对应的第一表达式节点链(即第一Node链);
在具体实施过程中,上述S402可以包括:对所述因子表达式进行词法分析,获得N个单词(token),这里,N为正整数;遍历所述N个单词,判断所述N个单词中的各个单词是否为预设元素,并根据判断结果,生成所述第一Node链。
这里,分析模块在获得因子表达式之后,对因子表达式进行解析,通过词法分析,将因子表达式转换成N个单词,例如,因子表达式可以转换成N个因子和/或操作符。然后,分析模块再根据这些单词是否为预设元素,生成因子表达式所对应的第一Node链。在本申请实施例中,第一Node链为因子表达式引擎内部的数据结构,用来描述因子表达式。
具体来说,分析模块可以针对所述N个单词中的第i个单词,i=1,2,3……N,依次执行以下步骤:
判断所述第i个单词是否为所述预设元素,其中,所述预设元素为因子、左方括号、左圆括号、右圆括号、操作符、常量、右方括号中的一种或多种;
当所述第i个单词为因子时,将所述第i个单词添加至所述因子表达式中;
当所述第i个单词为左方括号时,解析所述左方括号内的参数的表达式对应的第二表达式节点链;
当所述第i个单词为左圆括号时,为所述左圆括号前的表达式创建第三表达式节点链,增加所述第三表达式节点链的优先级;
当所述第i个单词为右圆括号时,为所述右圆括号前的表达式创建第四表达式节点链,降低所述第四表达式节点链的优先级;
当所述第i个单词为操作符时,记录所述第i个单词与因子之间的关联关系,并为所述操作符的关联表达式创建第五表达式节点链;
当所述第i个单词为常量时,为所述常量创建第六表达式节点链;
当所述第i个单词为右方括号时,则设置i=i+1,并判断所述第i个单词是否为因子;
将所述第二表达式节点链至所述第六表达式节点链中的一个或者多个表达式节点链确定为所述第一表达式节点链。
在实际应用中,在上述判断第i个单词是否为预设元素的过程中,分析模块可以先判断第i个单词是否为因子,再判断第i个单词是否为左方括号,之后判断第i个单词是否为左圆括号,以此类推,直至最后判断第i个单词是否右方括号。
具体来说,图5为本申请实施例中的分析模块生成因子表达式对应的Node链的流程示意图,参见图5所示,S402中分析模块生成所述第一Node链的步骤可以包括:
针对所述N个单词中的第i个单词,i=1,2,3……N,依次执行以下步骤:
S501:判断所述第i个单词是否为因子;若是,跳转至S402,若否,跳转至S403;
S502:将所述第i个单词添加至所述因子表达式中,设置i=i+1,并返回S401;
S503:判断所述第i个单词是否为左方括号;若是,跳转至S404,若否,跳转至S405;
S504:解析所述左方括号内的参数的表达式对应的第二Node链,设置i=i+1,并返回S501;
S505:判断所述第i个单词是否为左圆括号;若是,跳转至S504,若否,跳转至S505;
S506:为所述左圆括号前的表达式创建第三Node链,增加所述第三Node链的优先级,设置i=i+1,并返回S501;
S507:判断所述第i个单词是否为右圆括号;若是,跳转至S508,若否,跳转至S509;
S508:为所述右括号前的表达式创建第四Node链,降低所述第四Node链的优先级,设置i=i+1,并返回S501;
S509:判断所述第i个单词是否为操作符;若是,跳转至S510,若否,跳转至S511;
S510:记录所述第i个单词与因子之间的关联关系,并为所述操作符的关联表达式创建第五Node链,设置i=i+1,并返回S501;
S511:判断所述第i个单词是否为常量;若是,跳转至S512,若否,跳转至S513;
S512:为所述常量创建第六Node链,设置i=i+1,并返回S501;
S513:判断所述第i个单词是否为由方括号;若是,跳转至S514,若否,确认发生异常,流程结束;
S514:设置i=i+1,并返回S501。
至此,分析模块可以将上述S501至S514生成的第二Node链至第六Node链确认为第一Node链。
在上述生成第一Node链的过程中,由于在因子表达式中增加了括号,使得操作符无法按照预先定义的优先级来计算,所以,各个操作符的优先级需要重新计算。
举例来说,图6为本申请实施例中的Node链的示意图,参见图6所示,对于上述因子表达式“order.customer.credit>‘良好’”来说,分析模块通过上述步骤对该因子表达式进行解析,生成对应的第一Node链。当然,第一Node链还可以为其他形式,本申请实施例不做具体限定。其中,第一Node链包括ID为01和02的两条Node链,一条是与“order.customer.credit”这一因子表达式对应的Node链,另一条是与“‘良好’”这一常量对应的Node链。
S403:计算模块获得所述第一Node链中各个节点对应的因子描述文件和操作符函数;
其中,所述因子描述文件(即factor profile)为当前程序语言执行环境所对应的可执行脚本,所述操作符函数为当前程序语言执行环境所对应的可执行函数;
这里,分析模块生成了第一Node链之后输出给计算模块,计算模块可以从预先存储的因子描述文件集合和操作符函数集合中获取第一Node链中各个节点(即因子或操作符)对应的因子描述文件和操作符函数,当然,计算模块也可以调用因子描述文件构建模块来构建第一Node链中因子节点对应的因子描述文件,和/或调用操作符函数构建模块来构建第一Node链中操作符节点对应的操作符函数。再者,计算模块还可以在预先存储的因子描述文件集合和操作符函数集合查找第一Node链中各个节点对应的因子描述文件和操作符函数,再调用因子描述文件构建模块和/或操作符函数构建模块来对未查找到的节点对应的因子描述文件和/或操作符函数进行构建,由此,计算模块获得由因子描述文件构建模块和/或操作符函数构建模块传递的因子描述文件和/或操作符函数。当然,在实际应用中,计算模块还可以采用其他方式获取第一Node链中各个节点(即因子或操作符)对应的因子描述文件和操作符函数,本申请实施例不做具体限定。
那么,在一些可能的实施方式中,在所述S402之前,所述方法还可以包括:计算模块判断所述当前程序语言执行环境对应的因子描述文件和/或操作符函数是否存在;若存在所述当前程序语言执行环境对应的因子描述文件和/或操作符函数,则计算模块从所述当前程序语言执行环境对应的因子描述文件和/或操作符函数中获得所述各个节点对应的因子描述文件和操作符函数;若不存在所述当前程序语言执行环境对应的因子描述文件和/或操作符函数,计算模块调用因子描述文件构建模块和/或操作符函数构建模块;因子描述文件构建模块和/或操作符函数获取所述当前程序语言执行环境对应的因子元数据和/或操作元数据,因子描述文件构建模块将所述因子元数据转换成所述当前程序语言执行环境对应的因子描述文件,并传递给计算模块;和/或,操作符函数构建模块将所述操作元数据转换成所述当前程序语言执行环境对应的操作符函数,并传递给计算模块。
这里,上述数据库中的因子元数据和操作符元数据均为定义态,在运行态里被转换成因子描述文件和操作符函数,因子描述文件和操作符函数是可以被计算模块识别的内部数据结构,那么,也就是说,所述因子元数据被转化成能够被计算模块识别的所述当前程序语言执行环境对应的因子描述文件;和/或,所述操作元数据被转化成能够给计算模块识别的所述当前程序语言执行环境对应的操作符函数。
在本申请实施例中,上述因子描述文件构建模块将因子元数据转换成当前程序语言执行环境对应的因子描述文件的步骤,可以包括:从所述因子元数据获得所述当前程序语言执行环境对应的至少一个因子;根据所述至少一个因子的因子类型,对所述至少一个因子进行排序;遍历排序后的至少一个因子的属性类型,依次对所述排序后的至少一个因子创建因子属性实例,并确定所述排序后的至少一个因子对应的计算逻辑;根据所述因子类型、对应的所述因子属性实例和所述计算逻辑,生成所述因子描述文件。
具体的,所述依次对所述排序后的至少一个因子创建因子属性实例,包括:依次判断所述排序后的至少一个因子的属性类型是否为因子类型;若是,则创建通用类型实例作为所述因子属性实例;若否,则创建因子类型实例作为所述因子属性实例。
进一步地,所述确定所述排序后的至少一个因子对应的计算逻辑,包括:依次判断所述排序后的至少一个因子的属性是否具有计算逻辑;若是,则将所述因子的属性对应的计算逻辑确定为所述因子对应的计算逻辑;若否,则将所述因子的因子类型对应的计算逻辑确定为所述因子对应的计算逻辑。
举例来说,图7为本申请实施例中的由因子元数据转换成因子描述文件的过程示意图,参见图7中的(a)所示,存在因子类型1、因子类型2,其中因子类型2属性2m的属性类型是因子类型1,每个因子类型的属性支持多种脚本类型的计算逻辑,也就是说,因子类型1的属性11存在javascript、groovy两种脚本类型对应的计算逻辑,当然,还可以有其它脚本类型对应的计算逻辑,本申请实施例不做具体限定。因子描述文件构建模块将因子元数据构建成如图7中的(b)所示的因子描述文件,在构建的因子描述文件中,每个节点都有子节点,并且每个子节点都对应有计算逻辑,这时的计算逻辑是经过动态处理(如:编译)的,是可以直接执行的。
在本申请实施例中,上述操作符函数构建模块将所述操作元数据转换成所述当前程序语言执行环境对应的操作符函数,包括:将所述操作元数据中的各个操作符按函数名称进行组装,生成对应的操作符函数。例如,上述表3中操作符为“+”,函数名称为“add”,上表4中的脚本类型为“javascript”,那么,在由操作符元数据转换成javascript对应的操作符函数时,操作符函数构建模块调用javascript中的add函数,将上表3中的参数“arg1,arg2”代入add函数,由此生成javascript对应的“+”的操作符函数。
S404:计算模块遍历所述第一Node链中各个节点,根据所述各个节点对应的因子描述文件和操作符函数,计算并输出所述因子表达式的值。
具体来说,S404可以包括:计算模块获取所述因子表达式中的至少一个操作符,并根据所述操作符的优先级,对所述至少一个操作符进行排序;依次对排序后的至少一个操作符中的当前操作符,获取所述第一Node链中与所述当前操作符的关联表达式对应第七Node链;根据所述各个节点对应的因子描述文件和操作符函数,计算所述第七Node链的值;根据所述至少一个操作符中的每个操作符的计算逻辑和所述每个操作符对应的所述第七Node链的值,计算所述因子表达式的值。其中,第七Node链可以与上述S510中的第五Node链相同。这里,计算出的因子表达式的值就可以表示业务规则的执行结果,例如,因子表达式“order.customer.credit>‘良好’”的值为1,则可以表示业务规则“客户信用良好”成立,即客户信用良好,此时,可以为该客户办理A业务;反之,因子表达式“order.customer.credit>‘良好’”的值为0,则可以表示业务规则“客户信用良好”不成立,即客户信用未达到良好,不可以为该客户办理A业务。当然,因子表达式的值还可以为“true”、“false”等,本申请实施例不做具体限定。
这里,计算模块可以根据分析模块在生成第一Node链的过程中记录的操作符与因子之间的关联关系,获得因子表达式中的各个操作符,然后,根据该操作符的优先级,将这些操作符进行排序,然后,从排序后的操作符序列中依次选取当前操作符,再对当前操作符的关联表达式的值进行计算,再根据当前操作符的运算逻辑和计算出的关联表达式的值,计算操作符对应的计算结果,以此类推,直至因子表达式的最后一个操作符,最终得到因子表达式的值。
在本申请实施例中,上述操作符的关联表达式是指操作符两侧的运算对象,例如,因子表达式为“A.B+C.D×E.F”,计算模块首先对因子表达式中的操作符“﹢”和“×”按照优先级进行排序,得到操作符序列:×、﹢。然后,计算模块先选取操作符“×”,此时,操作符“×”的关联表达式即为“C.D”和“E.F”,而操作符“﹢”的关联表达式为“A.B”和“C.D×E.F”。
在一些可能的实现方式中,上述计算模块计算操作符的关联表达式对应的Node链的值的步骤,可以包括:计算模块依次判断所述各个节点中的当前节点是否为因子;若当前节点为因子,则判断所述当前节点是否具有参数;若所述当前节点不具有参数,则从所述各个节点对应的因子描述文中获取所述当前节点对应的计算逻辑,并按照所述当前节点对应的计算逻辑以及操作符函数,计算所述当前节点对应因子值;判断所述当前节点是否为所述第一表达式节点链的最后一个节点;若是,则将所述当前节点对应因子值作为所述因子表达式的值;若否,则跳转至下一个节点,并返回所述判断所述各个节点中的当前节点是否为因子的步骤。
进一步地,若所述当前节点具有参数,则计算模块计算所述参数的表达式的值,并跳转至下一个节点,返回所述判断所述各个节点中的当前节点是否为因子的步骤。当计算出了参数的表达式的值后,将该值传递给当前节点,由此来计算当前节点对应的因子值。
进一步地,若当前节点不为因子,则计算模块判断所述当前节点是否为右括号;若所述当前节点为右括号,则从所述各个节点对应的因子描述文中获取所述当前节点对应的计算逻辑,并按照所述当前节点对应的计算逻辑以及操作符函数,计算所述当前节点对应因子值;判断所述当前节点是否为所述第一表达式节点链的最后一个节点;若是,则将所述当前节点对应因子值作为所述因子表达式的值;若否,则跳转至下一个节点,并返回所述判断所述各个节点中的当前节点是否为因子的步骤。
进一步地,若所述当前节点不为右括号,则计算模块判断所述当前节点是否为常量;若所述当前节点为常量,则将所述当前节点对应因子值作为所述因子表达式的值。
在本申请实施例中,当所述当前节点为根因子时,则从所述因子描述文件中获取所述当前节点对应的计算逻辑;当所述当前节点为子因子时,则从所述当前节点的父因子对应的因子描述文件中获取所述当前节点对应的计算逻辑。
由此,计算模块在计算出当前操作符的关联表达式的值之后,将该值代入上下文,继续计算下一个操作符的关联表达式的值,直至计算出全部操作符的关联表达式的值,此时,计算模块得到的值就是因子表达式的值。
在本申请实施例中,通过采用当前程序语言执行环境下能够执行的脚本和函数来对表征业务规则的因子表达式进行计算,使得业务规则可以实现跨编程语言执行,达到一份业务规则后可以在不同的设备上执行的目的,有效降低了开发与维护的工作量。
基于与上述方法相同的发明构思,本申请提供一种业务规则的处理装置,该业务规则的处理装置可以为用户设备或者后台服务器中的芯片或者片上系统,如上述实施例中的因子表达式引擎,还可以为用户设备或者后台服务器中用于实现上述实施例所述的方法的功能模块。举例来说,图8为本申请实施例中的业务规则的处理装置的结构示意图,参见图8所示,该业务规则的处理装置800,可以包括:分析模块801,用于获得输入的用于表征业务规则的因子表达式;以及,解析所述因子表达式,生成对应的第一表达式节点链;计算模块802,用于获得所述第一表达式节点链中各个节点对应的因子描述文件和操作符函数,其中,所述因子描述文件为当前程序语言执行环境所对应的可执行脚本,所述操作符函数为当前程序语言执行环境所对应的可执行函数;以及,遍历所述第一表达式节点链中各个节点,根据所述各个节点对应的因子描述文件和操作符函数,计算并输出所述因子表达式的值,所述因子表达式的值用于表示所述业务规则的执行结果。
在一些可能的实施方式下,所述分析模块,用于对所述因子表达式进行词法分析,获得N个单词,N为正整数;遍历所述N个单词,判断所述N个单词中的各个单词是否为预设元素,并根据判断结果,生成所述第一表达式节点链。
在一些可能的实施方式下,所述分析模块,具体用于针对所述N个单词中的第i个单词,i=1,2,3……N,依次执行以下步骤:判断所述第i个单词是否为所述预设元素,其中,所述预设元素为因子、左方括号、左圆括号、右圆括号、操作符、常量、右方括号中的一种或多种;当所述第i个单词为因子时,将所述第i个单词添加至所述因子表达式中;当所述第i个单词为左方括号时,解析所述左方括号内的参数的表达式对应的第二表达式节点链;当所述第i个单词为左圆括号时,为所述左圆括号前的表达式创建第三表达式节点链,增加所述第三表达式节点链的优先级;当所述第i个单词为右圆括号时,为所述右圆括号前的表达式创建第四表达式节点链,降低所述第四表达式节点链的优先级;当所述第i个单词为操作符时,记录所述第i个单词与因子之间的关联关系,并为所述操作符的关联表达式创建第五表达式节点链;当所述第i个单词为常量时,为所述常量创建第六表达式节点链;当所述第i个单词为右方括号时,则设置i=i+1,并判断所述第i个单词是否为因子;将所述第二表达式节点链至所述第六表达式节点链中的一个或者多个表达式节点链确定为所述第一表达式节点链。
在一些可能的实施方式下,所述装置还包括:因子描述文件构建模块和操作符函数构建模块;所述计算模块,还用于在所述获得所述第一表达式节点链中各个节点对应的因子描述文件和操作符函数之前,判断所述当前程序语言执行环境对应的因子描述文件和/或操作符函数是否存在;以及若不存在所述当前程序语言执行环境对应的因子描述文件和/或操作符函数,则调用所述因子描述文件构建模块和/或所述操作符函数构建模块;所述因子描述文件构建模块,用于获取所述当前程序语言执行环境对应的因子元数据;以及,将所述因子元数据转换成所述当前程序语言执行环境对应的因子描述文件;和/或,所述操作符函数构建模块,用于获取所述当前程序语言执行环境对应的操作元数据;以及,将所述操作元数据转换成所述当前程序语言执行环境对应的操作符函数。
在一些可能的实施方式下,所述因子描述文件构建模块,用于若存在所述当前程序语言执行环境对应的因子描述文件,则从所述当前程序语言执行环境对应的因子描述文件中获得所述各个节点对应的因子描述文件;和/或,所述操作符函数构建模块,用于若存在所述当前程序语言执行环境对应的操作符函数,则从所述当前程序语言执行环境对应的操作符函数中获得所述各个节点对应的操作符函数。
在一些可能的实施方式下,所述因子描述文件构建模块,用于从所述因子元数据获得所述当前程序语言执行环境对应的至少一个因子;根据所述至少一个因子的因子类型,对所述至少一个因子进行排序;遍历排序后的至少一个因子的属性类型,依次对所述排序后的至少一个因子创建因子属性实例,并确定所述排序后的至少一个因子对应的计算逻辑;根据所述因子类型、对应的所述因子属性实例和所述计算逻辑,生成所述因子描述文件。
在一些可能的实施方式下,所述因子描述文件构建模块,用于依次判断所述排序后的至少一个因子的属性类型是否为因子类型;若是,则创建通用类型实例作为所述因子属性实例;若否,则创建因子类型实例作为所述因子属性实例。
在一些可能的实施方式下,所述因子描述文件构建模块,用于依次判断所述排序后的至少一个因子的属性是否具有计算逻辑;若是,则将所述因子的属性对应的计算逻辑确定为所述因子对应的计算逻辑;若否,则将所述因子的因子类型对应的计算逻辑确定为所述因子对应的计算逻辑。
在一些可能的实施方式下,所述操作符函数构建模块,用于将所述操作元数据中的各个操作符按函数名称进行组装,生成对应的操作符函数。
在一些可能的实施方式下,所述计算模块,用于获取所述因子表达式中的至少一个操作符,并根据所述操作符的优先级,对所述至少一个操作符进行排序;依次对排序后的至少一个操作符中的当前操作符,获取所述第一表达式节点链中与所述当前操作符的关联表达式对应第七表达式节点链;根据所述各个节点对应的因子描述文件和操作符函数,计算所述第七表达式节点链的值;根据所述至少一个操作符中的每个操作符的计算逻辑和所述每个操作符对应的所述第七表达式节点链的值,计算所述因子表达式的值。
在一些可能的实施方式下,所述计算模块,用于依次判断所述第七表达式节点链中的当前节点是否为因子;若当前节点为因子,则判断所述当前节点是否具有参数;若所述当前节点不具有参数,则从所述各个节点对应的因子描述文中获取所述当前节点对应的计算逻辑,并按照所述当前节点对应的计算逻辑以及操作符函数,计算所述当前节点对应的因子值;判断所述当前节点是否为所述第七表达式节点链的最后一个节点;若是,则将所述当前节点对应因子值作为所述关联表达式的值,并返回所述计算所述因子表达式的值的步骤;若否,则跳转至下一个节点,并返回所述判断所述各个节点中的当前节点是否为因子的步骤。
在一些可能的实施方式下,所述计算模块,还用于若所述当前节点具有参数,则计算所述参数的表达式的值,并跳转至下一个节点,返回所述判断所述各个节点中的当前节点是否为因子的步骤。
在一些可能的实施方式下,所述计算模块,还用于若当前节点不为因子,则判断所述当前节点是否为右括号;若所述当前节点为右括号,则从所述各个节点对应的因子描述文中获取所述当前节点对应的计算逻辑,并按照所述当前节点对应的计算逻辑以及操作符函数,计算所述当前节点对应因子值;判断所述当前节点是否为所述第一表达式节点链的最后一个节点;若是,则将所述当前节点对应因子值作为所述因子表达式的值;若否,则跳转至下一个节点,并返回所述判断所述各个节点中的当前节点是否为因子的步骤。
在一些可能的实施方式下,所述计算模块,还用于若所述当前节点不为右括号,则判断所述当前节点是否为常量;若所述当前节点为常量,则将所述当前节点对应因子值作为所述因子表达式的值。
在一些可能的实施方式下,所述计算模块,用于当所述当前节点为根因子时,则从所述因子描述文件中获取所述当前节点对应的计算逻辑;当所述当前节点为子因子时,则从所述当前节点的父因子对应的因子描述文件中获取所述当前节点对应的计算逻辑。
需要说明的是,上述分析模块801、计算模块802、因子描述文件构建模块803和操作符函数构建模块804与上述实施例中的分析模块211、因子描述文件构建模块212、操作符函数构建模块213和计算模块214所实现的功能一致。
在实际应用中,上述分析模块801、计算模块802、因子描述文件构建模块803和操作符函数构建模块804可以为一个或者多个处理器。
基于与上述方法相同的发明构思,本申请实施例提供一种用户设备,图9为本申请实施例中的用户设备的结构示意图,参见图9中实线所示,用户设备900可以包括处理器901,处理器901用于与存储器耦合,读取并执行存储器中的指令,以实现如上述实施例所述的业务规则的处理方法。
在一些可能的实施方式下,参见图9中虚线所示,上述用户设备900还可以包括存储器902,用于保存用户设备必要的计算机执行指令和数据。当该用户设备运行时,该处理器执行该存储器存储的该计算机执行指令,以使该通信装置执行如上述实施例所述的业务规则的处理方法。
基于与上述方法相同的发明构思,本申请实施例提供一种后台服务器,图10为本申请实施例中的后台服务器的结构示意图,参见图10中实线所示,后台服务器1000可以包括处理器1001,处理器1001用于与存储器耦合,读取并执行存储器中的指令,以实现如上述实施例所述的业务规则的处理方法。
在一些可能的实施方式下,参见图10中虚线所示,上述后台服务器1000还可以包括存储器1002,用于保存后台服务器必要的计算机执行指令和数据。当该后台服务器运行时,该处理器执行该存储器存储的该计算机执行指令,以使该通信装置执行如上述实施例所述的业务规则的处理方法。
基于与上述方法相同的发明构思,本申请实施例提供一种计算机可读存储介质,计算机可读存储介质存储有指令,当指令计算机上运行时,用于执行上述实施例中所述的业务规则的处理方法。
基于与上述方法相同的发明构思,本申请实施例提供一种计算机程序或计算机程序产品,当计算机程序或计算机程序产品在计算机上被执行时,使得计算机实现上述实施例中所述的业务规则的处理方法。
本领域技术人员能够领会,结合本文公开描述的各种说明性逻辑框、模块和算法步骤所描述的功能可以硬件、软件、固件或其任何组合来实施。如果以软件来实施,那么各种说明性逻辑框、模块、和步骤描述的功能可作为一或多个指令或代码在计算机可读媒体上存储或传输,且由基于硬件的处理单元执行。计算机可读媒体可包含计算机可读存储媒体,其对应于有形媒体,例如数据存储媒体,或包括任何促进将计算机程序从一处传送到另一处的媒体(例如,根据通信协议)的通信媒体。以此方式,计算机可读媒体大体上可对应于(1)非暂时性的有形计算机可读存储媒体,或(2)通信媒体,例如信号或载波。数据存储媒体可为可由一或多个计算机或一或多个处理器存取以检索用于实施本申请中描述的技术的指令、代码和/或数据结构的任何可用媒体。计算机程序产品可包含计算机可读媒体。
作为实例而非限制,此类计算机可读存储媒体可包括RAM、ROM、EEPROM、CD-ROM或其它光盘存储装置、磁盘存储装置或其它磁性存储装置、快闪存储器或可用来存储指令或数据结构的形式的所要程序代码并且可由计算机存取的任何其它媒体。并且,任何连接被恰当地称作计算机可读媒体。举例来说,如果使用同轴缆线、光纤缆线、双绞线、数字订户线(DSL)或例如红外线、无线电和微波等无线技术从网站、服务器或其它远程源传输指令,那么同轴缆线、光纤缆线、双绞线、DSL或例如红外线、无线电和微波等无线技术包含在媒体的定义中。但是,应理解,所述计算机可读存储媒体和数据存储媒体并不包括连接、载波、信号或其它暂时媒体,而是实际上针对于非暂时性有形存储媒体。如本文中所使用,磁盘和光盘包含压缩光盘(CD)、激光光盘、光学光盘、数字多功能光盘(DVD)和蓝光光盘,其中磁盘通常以磁性方式再现数据,而光盘利用激光以光学方式再现数据。以上各项的组合也应包含在计算机可读媒体的范围内。
可通过例如一或多个数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA)或其它等效集成或离散逻辑电路等一或多个处理器来执行指令。因此,如本文中所使用的术语“处理器”可指前述结构或适合于实施本文中所描述的技术的任一其它结构中的任一者。另外,在一些方面中,本文中所描述的各种说明性逻辑框、模块、和步骤所描述的功能可以提供于经配置以用于编码和解码的专用硬件和/或软件模块内,或者并入在组合编解码器中。而且,所述技术可完全实施于一或多个电路或逻辑元件中。
本申请的技术可在各种各样的装置或设备中实施,包含无线手持机、集成电路(IC)或一组IC(例如,芯片组)。本申请中描述各种组件、模块或单元是为了强调用于执行所揭示的技术的装置的功能方面,但未必需要由不同硬件单元实现。实际上,如上文所描述,各种单元可结合合适的软件和/或固件组合在编码解码器硬件单元中,或者通过互操作硬件单元(包含如上文所描述的一或多个处理器)来提供。
在上述实施例中,对各个实施例的描述各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
以上所述,仅为本申请示例性的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应该以权利要求的保护范围为准。
Claims (24)
1.一种业务规则的处理方法,其特征在于,包括:
获得输入的用于表征业务规则的因子表达式,所述业务规则用于描述业务对象之间的关系,所述因子表达式为使用因子和/或操作符表示的所述业务规则,所述因子用于表示所述业务对象;
解析所述因子表达式,生成对应的第一表达式节点链;
获得所述第一表达式节点链中各个节点对应的因子描述文件和操作符函数,其中,所述因子描述文件为当前程序语言执行环境所对应的可执行脚本,所述操作符函数为当前程序语言执行环境所对应的可执行函数;所述节点为所述因子或所述操作符;
遍历所述第一表达式节点链中各个节点,根据所述各个节点对应的因子描述文件和操作符函数,计算并输出所述因子表达式的值,所述因子表达式的值用于表示所述业务规则的执行结果;
其中,所述根据所述各个节点对应的因子描述文件和操作符函数,计算所述因子表达式的值,包括:
获取所述因子表达式中的至少一个操作符,并根据所述操作符的优先级,对所述至少一个操作符进行排序;
依次对排序后的至少一个操作符中的当前操作符,获取第七表达式节点链,其中,所述第七表达式节点链为所述第一表达式节点链中与所述当前操作符的关联表达式对应的表达式节点链;
根据所述各个节点对应的因子描述文件和操作符函数,计算所述第七表达式节点链的值;
根据所述至少一个操作符中的每个操作符的计算逻辑和所述每个操作符对应的所述第七表达式节点链的值,计算所述因子表达式的值;
其中,所述解析所述因子表达式,生成对应的第一表达式节点链,包括:
对所述因子表达式进行词法分析,获得N个单词,N为正整数;
遍历所述N个单词,判断所述N个单词中的各个单词是否为预设元素,并根据判断结果,生成所述第一表达式节点链;其中,所述预设元素为因子、左方括号、左圆括号、右圆括号、操作符、常量、右方括号中的一种或者多种。
2.根据权利要求1所述的方法,其特征在于,所述判断所述N个单词中的各个单词是否为预设元素,并根据判断结果,生成所述第一表达式节点链,包括:
针对所述N个单词中的第i个单词,i=1,2,3……N,依次执行以下步骤:
判断所述第i个单词是否为所述预设元素;
当所述第i个单词为因子时,将所述第i个单词添加至所述因子表达式中;
当所述第i个单词为左方括号时,解析所述左方括号内的参数的表达式对应的第二表达式节点链;
当所述第i个单词为左圆括号时,为所述左圆括号前的表达式创建第三表达式节点链,增加所述第三表达式节点链的优先级;
当所述第i个单词为右圆括号时,为所述右圆括号前的表达式创建第四表达式节点链,降低所述第四表达式节点链的优先级;
当所述第i个单词为操作符时,记录所述第i个单词与因子之间的关联关系,并为所述操作符的关联表达式创建第五表达式节点链;
当所述第i个单词为常量时,为所述常量创建第六表达式节点链;
当所述第i个单词为右方括号时,则设置i=i+1,并判断所述第i个单词是否为因子;
将所述第二表达式节点链至所述第六表达式节点链中的一个或者多个表达式节点链确定为所述第一表达式节点链。
3.根据权利要求1所述的方法,其特征在于,在所述获得所述第一表达式节点链中各个节点对应的因子描述文件和操作符函数之前,所述方法还包括:
判断所述当前程序语言执行环境对应的因子描述文件和/或操作符函数是否存在;
若不存在所述当前程序语言执行环境对应的因子描述文件和/或操作符函数,则获取所述当前程序语言执行环境对应的因子元数据和/或操作元数据;
将所述因子元数据转换成所述当前程序语言执行环境对应的因子描述文件;和/
或,
将所述操作元数据转换成所述当前程序语言执行环境对应的操作符函数;
其中,所述将所述因子元数据转换成所述当前程序语言执行环境对应的因子描述文件,包括:
从所述因子元数据获得所述当前程序语言执行环境对应的至少一个因子;
根据所述至少一个因子的因子类型,对所述至少一个因子进行排序;
遍历排序后的至少一个因子的属性类型,依次对所述排序后的至少一个因子创建因子属性实例,并确定所述排序后的至少一个因子对应的计算逻辑;
根据所述因子类型、对应的所述因子属性实例和所述计算逻辑,生成所述因子描述文件。
4.根据权利要求3所述的方法,其特征在于,所述获得所述第一表达式节点链中各个节点对应的因子描述文件和操作符函数,包括:
若存在所述当前程序语言执行环境对应的因子描述文件和/或操作符函数,则从所述当前程序语言执行环境对应的因子描述文件和/或操作符函数中获得所述各个节点对应的因子描述文件和操作符函数。
5.根据权利要求3所述的方法,其特征在于,所述依次对所述排序后的至少一个因子创建因子属性实例,包括:
依次判断所述排序后的至少一个因子的属性类型是否为因子类型;
若是,则创建通用类型实例作为所述因子属性实例;
若否,则创建因子类型实例作为所述因子属性实例。
6.根据权利要求3所述的方法,其特征在于,所述确定所述排序后的至少一个因子对应的计算逻辑,包括:
依次判断所述排序后的至少一个因子的属性是否具有计算逻辑;
若是,则将所述因子的属性对应的计算逻辑确定为所述因子对应的计算逻辑;
若否,则将所述因子的因子类型对应的计算逻辑确定为所述因子对应的计算逻辑。
7.根据权利要求3至6任一项所述的方法,其特征在于,所述将所述操作元数据转换成所述当前程序语言执行环境对应的操作符函数,包括:
将所述操作元数据中的各个操作符按函数名称进行组装,生成对应的操作符函数。
8.根据权利要求1所述的方法,其特征在于,所述根据所述各个节点对应的因子描述文件和操作符函数,计算所述第七表达式节点链的值,包括:
依次判断所述第七表达式节点链中的当前节点是否为因子;
若当前节点为因子,则判断所述当前节点是否具有参数;
若所述当前节点不具有参数,则从所述各个节点对应的因子描述文中获取所述当前节点对应的计算逻辑,并按照所述当前节点对应的计算逻辑以及操作符函数,计算所述当前节点对应的因子值;
判断所述当前节点是否为所述第七表达式节点链的最后一个节点;
若是,则将所述当前节点对应因子值作为所述关联表达式的值,并返回所述计算所述因子表达式的值的步骤;
若否,则跳转至下一个节点,并返回所述判断所述各个节点中的当前节点是否为因子的步骤。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
若所述当前节点具有参数,则计算所述参数的表达式的值,并跳转至下一个节点,返回所述判断所述各个节点中的当前节点是否为因子的步骤。
10.根据权利要求8所述的方法,其特征在于,所述方法还包括:
若当前节点不为因子,则判断所述当前节点是否为右括号;
若所述当前节点为右括号,则从所述各个节点对应的因子描述文中获取所述当前节点对应的计算逻辑,并按照所述当前节点对应的计算逻辑以及操作符函数,计算所述当前节点对应因子值;
判断所述当前节点是否为所述第一表达式节点链的最后一个节点;
若是,则将所述当前节点对应因子值作为所述因子表达式的值;
若否,则跳转至下一个节点,并返回所述判断所述各个节点中的当前节点是否为因子的步骤。
11.根据权利要求10所述的方法,其特征在于,所述方法还包括:
若所述当前节点不为右括号,则判断所述当前节点是否为常量;
若所述当前节点为常量,则将所述当前节点对应因子值作为所述因子表达式的值。
12.根据权利要求8至11中任一项所述的方法,其特征在于,所述从所述各个节点对应的因子描述文中获取所述当前节点对应的计算逻辑,包括:
当所述当前节点为根因子时,则从所述因子描述文件中获取所述当前节点对应的计算逻辑;
当所述当前节点为子因子时,则从所述当前节点的父因子对应的因子描述文件中获取所述当前节点对应的计算逻辑。
13.一种业务规则的处理装置,其特征在于,包括:
分析模块,用于获得输入的用于表征业务规则的因子表达式;以及,解析所述因子表达式,生成对应的第一表达式节点链;所述业务规则用于描述业务对象之间的关系,所述因子表达式为使用因子和/或操作符表示的所述业务规则,所述因子用于表示所述业务对象;
计算模块,用于获得所述第一表达式节点链中各个节点对应的因子描述文件和操作符函数,其中,所述因子描述文件为当前程序语言执行环境所对应的可执行脚本,所述操作符函数为当前程序语言执行环境所对应的可执行函数;以及,遍历所述第一表达式节点链中各个节点,根据所述各个节点对应的因子描述文件和操作符函数,计算并输出所述因子表达式的值,所述因子表达式的值用于表示所述业务规则的执行结果;所述节点为所述因子或操作符;
其中,所述计算模块,用于获取所述因子表达式中的至少一个操作符,并根据所述操作符的优先级,对所述至少一个操作符进行排序;依次对排序后的至少一个操作符中的当前操作符,获取第七表达式节点链,其中,所述第七表达式节点链为所述第一表达式节点链中与所述当前操作符的关联表达式对应的表达式节点链;根据所述各个节点对应的因子描述文件和操作符函数,计算所述第七表达式节点链的值;根据所述至少一个操作符中的每个操作符的计算逻辑和所述每个操作符对应的所述第七表达式节点链的值,计算所述因子表达式的值;
所述分析模块,用于对所述因子表达式进行词法分析,获得N个单词,N为正整数;遍历所述N个单词,判断所述N个单词中的各个单词是否为预设元素,并根据判断结果,生成所述第一表达式节点链;其中,所述预设元素为因子、左方括号、左圆括号、右圆括号、操作符、常量、右方括号中的一种或多种。
14.根据权利要求13所述的装置,其特征在于,所述分析模块,具体用于针对所述N个单词中的第i个单词,i=1,2,3……N,依次执行以下步骤:判断所述第i个单词是否为所述预设元素;当所述第i个单词为因子时,将所述第i个单词添加至所述因子表达式中;当所述第i个单词为左方括号时,解析所述左方括号内的参数的表达式对应的第二表达式节点链;当所述第i个单词为左圆括号时,为所述左圆括号前的表达式创建第三表达式节点链,增加所述第三表达式节点链的优先级;当所述第i个单词为右圆括号时,为所述右圆括号前的表达式创建第四表达式节点链,降低所述第四表达式节点链的优先级;当所述第i个单词为操作符时,记录所述第i个单词与因子之间的关联关系,并为所述操作符的关联表达式创建第五表达式节点链;当所述第i个单词为常量时,为所述常量创建第六表达式节点链;当所述第i个单词为右方括号时,则设置i=i+1,并判断所述第i个单词是否为因子;将所述第二表达式节点链至所述第六表达式节点链中的一个或者多个表达式节点链确定为所述第一表达式节点链。
15.根据权利要求13所述的装置,其特征在于,所述装置还包括:因子描述文件构建模块和操作符函数构建模块;
所述计算模块,还用于在所述获得所述第一表达式节点链中各个节点对应的因子描述文件和操作符函数之前,判断所述当前程序语言执行环境对应的因子描述文件和/或操作符函数是否存在;以及若不存在所述当前程序语言执行环境对应的因子描述文件和/或操作符函数,则调用所述因子描述文件构建模块和/或所述操作符函数构建模块;
所述因子描述文件构建模块,用于获取所述当前程序语言执行环境对应的因子元数据;以及,将所述因子元数据转换成所述当前程序语言执行环境对应的因子描述文件;和/或,
所述操作符函数构建模块,用于获取所述当前程序语言执行环境对应的操作元数据;以及,将所述操作元数据转换成所述当前程序语言执行环境对应的操作符函数;
其中,所述因子描述文件构建模块,用于从所述因子元数据获得所述当前程序语言执行环境对应的至少一个因子;根据所述至少一个因子的因子类型,对所述至少一个因子进行排序;遍历排序后的至少一个因子的属性类型,依次对所述排序后的至少一个因子创建因子属性实例,并确定所述排序后的至少一个因子对应的计算逻辑;根据所述因子类型、对应的所述因子属性实例和所述计算逻辑,生成所述因子描述文件。
16.根据权利要求15所述的装置,其特征在于,所述因子描述文件构建模块,用于若存在所述当前程序语言执行环境对应的因子描述文件,则从所述当前程序语言执行环境对应的因子描述文件中获得所述各个节点对应的因子描述文件;和/或,
所述操作符函数构建模块,用于若存在所述当前程序语言执行环境对应的操作符函数,则从所述当前程序语言执行环境对应的操作符函数中获得所述各个节点对应的操作符函数。
17.根据权利要求15所述的装置,其特征在于,所述因子描述文件构建模块,用于依次判断所述排序后的至少一个因子的属性类型是否为因子类型;若是,则创建通用类型实例作为所述因子属性实例;若否,则创建因子类型实例作为所述因子属性实例。
18.根据权利要求15所述的装置,其特征在于,所述因子描述文件构建模块,用于依次判断所述排序后的至少一个因子的属性是否具有计算逻辑;若是,则将所述因子的属性对应的计算逻辑确定为所述因子对应的计算逻辑;若否,则将所述因子的因子类型对应的计算逻辑确定为所述因子对应的计算逻辑。
19.根据权利要求15至18任一项所述的装置,其特征在于,所述操作符函数构建模块,用于将所述操作元数据中的各个操作符按函数名称进行组装,生成对应的操作符函数。
20.根据权利要求13所述的装置,其特征在于,所述计算模块,用于依次判断所述第七表达式节点链中的当前节点是否为因子;若当前节点为因子,则判断所述当前节点是否具有参数;若所述当前节点不具有参数,则从所述各个节点对应的因子描述文中获取所述当前节点对应的计算逻辑,并按照所述当前节点对应的计算逻辑以及操作符函数,计算所述当前节点对应的因子值;判断所述当前节点是否为所述第七表达式节点链的最后一个节点;若是,则将所述当前节点对应因子值作为所述关联表达式的值,并返回所述计算所述因子表达式的值的步骤;若否,则跳转至下一个节点,并返回所述判断所述各个节点中的当前节点是否为因子的步骤。
21.根据权利要求20所述的装置,其特征在于,所述计算模块,还用于若所述当前节点具有参数,则计算所述参数的表达式的值,并跳转至下一个节点,返回所述判断所述各个节点中的当前节点是否为因子的步骤。
22.根据权利要求20所述的装置,其特征在于,所述计算模块,还用于若当前节点不为因子,则判断所述当前节点是否为右括号;若所述当前节点为右括号,则从所述各个节点对应的因子描述文中获取所述当前节点对应的计算逻辑,并按照所述当前节点对应的计算逻辑以及操作符函数,计算所述当前节点对应因子值;判断所述当前节点是否为所述第一表达式节点链的最后一个节点;若是,则将所述当前节点对应因子值作为所述因子表达式的值;若否,则跳转至下一个节点,并返回所述判断所述各个节点中的当前节点是否为因子的步骤。
23.根据权利要求22所述的装置,其特征在于,所述计算模块,还用于若所述当前节点不为右括号,则判断所述当前节点是否为常量;若所述当前节点为常量,则将所述当前节点对应因子值作为所述因子表达式的值。
24.根据权利要求20至23中任一项所述的装置,其特征在于,所述计算模块,用于当所述当前节点为根因子时,则从所述因子描述文件中获取所述当前节点对应的计算逻辑;当所述当前节点为子因子时,则从所述当前节点的父因子对应的因子描述文件中获取所述当前节点对应的计算逻辑。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910503129.7A CN112068815B (zh) | 2019-06-11 | 2019-06-11 | 一种业务规则的处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910503129.7A CN112068815B (zh) | 2019-06-11 | 2019-06-11 | 一种业务规则的处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112068815A CN112068815A (zh) | 2020-12-11 |
CN112068815B true CN112068815B (zh) | 2022-03-29 |
Family
ID=73657816
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910503129.7A Active CN112068815B (zh) | 2019-06-11 | 2019-06-11 | 一种业务规则的处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112068815B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115543330A (zh) * | 2021-06-30 | 2022-12-30 | 华为技术有限公司 | 程序编译方法和装置 |
CN115081393B (zh) * | 2022-07-19 | 2023-09-15 | 上海中汇亿达金融信息技术有限公司 | 用于表达式实时组装文字展示的方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3114567A1 (en) * | 2014-03-03 | 2017-01-11 | Microsoft Technology Licensing, LLC | Portable business logic with branching and gating |
CN106909543A (zh) * | 2015-12-22 | 2017-06-30 | 阿里巴巴集团控股有限公司 | 一种规则引擎的模式匹配方法和装置 |
CN107644323A (zh) * | 2017-09-30 | 2018-01-30 | 成都莲合软件科技有限公司 | 一种面向业务流的智能审核系统 |
CN108647883A (zh) * | 2018-05-10 | 2018-10-12 | 山东中创软件工程股份有限公司 | 一种业务审批方法、装置、设备及介质 |
-
2019
- 2019-06-11 CN CN201910503129.7A patent/CN112068815B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3114567A1 (en) * | 2014-03-03 | 2017-01-11 | Microsoft Technology Licensing, LLC | Portable business logic with branching and gating |
CN106909543A (zh) * | 2015-12-22 | 2017-06-30 | 阿里巴巴集团控股有限公司 | 一种规则引擎的模式匹配方法和装置 |
CN107644323A (zh) * | 2017-09-30 | 2018-01-30 | 成都莲合软件科技有限公司 | 一种面向业务流的智能审核系统 |
CN108647883A (zh) * | 2018-05-10 | 2018-10-12 | 山东中创软件工程股份有限公司 | 一种业务审批方法、装置、设备及介质 |
Non-Patent Citations (1)
Title |
---|
基于Drools的数字化校园管理CRM业务规则引擎设计;张天星;《湖州师范学院学报》;20131215;第1-4页 * |
Also Published As
Publication number | Publication date |
---|---|
CN112068815A (zh) | 2020-12-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9569288B2 (en) | Application pattern discovery | |
US10318595B2 (en) | Analytics based on pipes programming model | |
CN109901987B (zh) | 一种生成测试数据的方法和装置 | |
US10360004B2 (en) | Using dynamic information to refine control flow graphs | |
CN112068815B (zh) | 一种业务规则的处理方法及装置 | |
CN109284450B (zh) | 订单成单路径的确定方法及装置、存储介质、电子设备 | |
US20160321069A1 (en) | Effective feature location in large legacy systems | |
US11314795B2 (en) | User navigation in a target portal | |
CN110719200A (zh) | 信息识别方法和装置 | |
US9996619B2 (en) | Optimizing web crawling through web page pruning | |
CN110851343A (zh) | 一种基于决策树的测试方法和装置 | |
US10296527B2 (en) | Determining an object referenced within informal online communications | |
CN116560661A (zh) | 代码优化方法、装置、设备及存储介质 | |
CN111427915A (zh) | 信息处理方法及装置、存储介质、电子设备 | |
CN108933802B (zh) | 用于监控操作的方法和装置 | |
US10740119B2 (en) | Identifying a common action flow | |
CN112783615B (zh) | 一种数据处理任务的清理方法和装置 | |
KR20230009437A (ko) | 사용자 검색 카테고리 예측자 | |
CN108536604B (zh) | 一种测试web页面响应时间的方法及终端 | |
CN111752847A (zh) | 接口比对方法和微服务器、计算机可读存储介质、电子设备 | |
CN113448822B (zh) | 测试方法、装置、计算机可读介质及电子设备 | |
CN115438145B (zh) | 企业详情内链的添加方法及装置 | |
CN115904472A (zh) | 资源文件的状态确定方法、装置、电子设备和介质 | |
CN113448822A (zh) | 测试方法、装置、计算机可读介质及电子设备 | |
CN114880237A (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 |