CN107704265A - 一种面向业务流可配置的规则生成方法 - Google Patents
一种面向业务流可配置的规则生成方法 Download PDFInfo
- Publication number
- CN107704265A CN107704265A CN201710914827.7A CN201710914827A CN107704265A CN 107704265 A CN107704265 A CN 107704265A CN 201710914827 A CN201710914827 A CN 201710914827A CN 107704265 A CN107704265 A CN 107704265A
- Authority
- CN
- China
- Prior art keywords
- rule
- function
- regular
- tag
- type
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/74—Reverse engineering; Extracting design information from source code
-
- 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/37—Compiler construction; Parser generation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种面向业务流可配置的规则生成方法,方法基于智能审核系统,系统包括系统管理平台、规则解析框架;方法包括系统管理步骤、规则解析步骤;规则解析步骤包括:GRL规则描述模块在前端界面与规则引擎之间传递规则信息,包括对GRL规则的描述。本发明提供一种可以屏蔽规则引擎及程序设计等相关技术问题的面向业务流的智能审核方法,从而使得该项目及同类软件系统的用户可以通过定制的UI视图独立完成业务规则的定义和维护,提高业务变更的便利性和效率,同时增强业务保密性。
Description
技术领域
本发明涉及一种面向业务流可配置的规则生成方法。
背景技术
业务规则是指对业务定义和约束的描述,用于维持业务结构或控制和影响业务的行为。业务规则技术的基本思想是将系统处理的业务逻辑从程序代码中抽取出来,将其转变为简单的业务规则,以结构化的业务规则数据来表示业务行为,采用类自然语言来描述,并集中存储在规则库中。业务规则由业务人员创建、实时更新和调试,业务规则之间的复杂逻辑关系由规则引擎处理。业务规则技术改变了传统的、以过程形式处理业务逻辑的方式。
而审核系统的核心是业务规则的实现。原本基于数据库存储过程实现,即使用存储过程语句来编写审核规则,审核工作实为调用存储过程对数据库中相关数据表进行检查并修改的过程。这种工作方式巧妙地利用了DBMS同时具备的数据存储和处理能力,使得业务数据无需出库即可完成更新;但是它作为一种传统的业务规则实现方式,已不符合技术发展的趋势,更无法满足日益复杂的业务需求,主要存在以下问题:一是数据库编程语言的逻辑表达处理能力偏弱,尤其在定义复杂规则的时候;二是业务规则必须由数据库管理员(DBA)登录DBMS进行编辑和管理,也只有DBA才能读懂其语义;三是数据库存储过程的并发计算能力有限,影响审核的效率。
因此需要提供一种可以屏蔽规则引擎及程序设计等相关技术问题的面向业务流可配置的规则生成方法,从而使得该项目及同类软件系统的用户(业务人员)可以通过定制的UI视图独立完成业务规则的定义和维护,提高业务变更的便利性和效率,同时增强业务保密性。
发明内容
本发明的目的在于克服现有技术的不足,提供一种面向业务流可配置的规则生成方法。
本发明的目的是通过以下技术方案来实现的:一种面向业务流可配置的规则生成方法,所述的方法基于智能审核系统,所述的系统包括系统管理平台、规则解析框架;系统管理平台包括报表管理模块、字典管理模块、规则管理模块、作业管理模块;规则解析框架包括GRL规则描述模块和解释器解析模块;
所述的方法包括系统管理步骤、规则解析步骤;所述的系统管理步骤包括以下子步骤:
用户在系统管理平台的前端界面上添加或导入报表信息以及报表内各个字段的属性信息,报表管理模块对用户所传的待审数据表进行管理;
字典管理模块管理字典,所述的字段选择某个字典作为依据,该字段的数据必须符合字典的定义。
规则管理模块管理规则,所述的规则为用户在系统管理平台的前端界面通过配置语法树的形式构造规则的内容,包含规则的GRL表达式、触发规则的警告级别、触发规则的推荐措施、触发规则时需要返回的关心字段;所述的规则包括多个控件,每个控件都有特定的GRL表达方式;规则验证的实体是依报表结构的接收到的待审数据;
作业管理模块管理作业,所述的作业是指定选择的规则和规则执行顺序;其中,一个作业包含若干条规则组成的规则流,表示规则执行的流程;所述的规则流是线性的流程或者是复杂的带分支的流程;
所述的规则解析步骤用于将每个控件特定的GRL表达方式解析转化为Drools的DRL语句,包括以下子步骤:
GRL规则描述模块在前端界面与规则引擎之间传递规则信息,包括对GRL规则的描述;所述的对GRL规则的描述包括规则结构及其语法定义、以及数据类型描述;
解释器解析模块对各个规则的解析转化进行描述,实现GRL到DRL的转换,使业务规则能够被Drools引擎理解并执行。
进一步地,GRL规则的规则结构及其语法定义包括主属性和辅助属性;主属性会被一一转换为DRL表达式中的相应成分,辅助属性在解析完成时均会被丢弃,不会存在于解析结果中;
所述的主属性用于描述规则相关的信息,包括名称、优先级、条件和动作,其中名称和优先级会在解析时赋值给DRL规则文本的对应成分,条件是由操作数组成组合逻辑表达式,解析时对应Drools的DRL语句的条件部分;动作是会用到操作数的可执行的程序逻辑,解析时对应Drools的DRL语句的结果部分;
所述的辅助属性用于标记目标对象的类别,所述的辅助属性包括用于区分不同规则元素的主类别family和用于表示同一类元素中的子类别tag,所述的主类别family包括常量类别VAL、变量类别VAR、函数类别FUNC、动作类别ACT、规则类别RULE和规则包类别PKG;其中,常量类别VAL、变量类别VAR、函数类别FUNC、动作类别ACT、规则类别RULE和规则包类别PKG的family值分别为1/2/3/10/100/101;而所述的规则包类别PKG包括多个规则类别RULE,所有的规则类别RULE按照执行顺序排列;
GRL规则的数据类型包括:文本数据类型TEXT、数值数据类型NUM、布尔数据类型BOOL、日期数据类型DATE、时间数据类型TIME和时间戳数据类型TIMESTAMP。
进一步地,所述的操作数包括常量操作数、变量操作数和函数操作数三类;
所述的常量操作数由主属性value、辅助属性family/tag组成;value即为当前常量操作数的值;family固定为1;而tag用于标识数据类型,取自GRL规则的数据类型的特征值,依次取1至6时,分别对应文本数据类型TEXT、数值数据类型NUM、布尔数据类型BOOL、日期数据类型DATE、时间数据类型TIME和时间戳数据类型TIMESTAMP;常量操作数会被解析为DRL规则文本中的JAVA常量;
所述的变量操作数由主属性clazz/property、辅助属性family/tag组成;clazz和property分别为某种数据对应的JAVA类型全名和该类型中某个属性的名称;family固定为2;tag用于标识数据类型,取自GRL规则的数据类型的特征值,依次取1至6时,分别对应文本数据类型TEXT、数值数据类型NUM、布尔数据类型BOOL、日期数据类型DATE、时间数据类型TIME和时间戳数据类型TIMESTAMP;
所述的函数操作数是对若干个操作数所进行的某种运算操作,包括逻辑运算函数、算术运算函数、条件判断函数、文本操作函数、统计运算函数,均直接继承自Func类,并根据函数性质声明类型实参;函数的运算参数是具有正确数据类型的操作数,当参数为另一个函数时,便实现了函数表达式的嵌套;函数操作数的辅助属性family固定为3;tag用于标识具体的函数类型;
逻辑运算函数包括:非NOT、与AND、或OR、与非NAND和或非NOR,tag值分别为101/102/103/104/105;逻辑运算函数的类型实参为java.lang.Boolean即返回值为布尔型数据;运算的参数只能使用布尔型常量、变量、条件判断函数或逻辑运算函数;
算术运算函数包括:加法PLS、减法MIN、乘法MUL、除法DIV、取余MOD、乘方POW、开方ROOT、取反NEG、倒数REC、绝对值ABS、四舍五入RND、向上取整CEIL、向下取整FLR和向0取证FIX,tag值分别为201~214;算术运算函数的类型实参为java.lang.Double即返回值为数值型,参数只能使用数值型常量、变量、算术运算函数或统计运算函数;
条件判断函数包括:为空NIL、非空NNL、等于EQL、不等于DIF、大于GT、小于LT、大于等于GE、小于等于LE、字符串前缀SE和字符串后缀EW,tag值分别为301~310;条件判断函数的类型实参是java.lang.Boolean即返回值为布尔型;
文本操作函数包括:计算长度LEN、转为大写UPR、转为小写LWR、连接CON、取字符CAT、取子串SUB、替换字符RPL,tag值分别为401~407;LEN的类型实参为java.lang.Integer,其余6个均为java.lang.String;
统计运算函数包括:求和SUM、求平均AVG、计数CNT、取最大值MAX、取最小值MIN,tag值分别为504~505;只针对数值型变量进行统计运算。
进一步地,所述的动作包括执行原生JAVA代码NativeJava、新建局部对象NewObject、程序变量赋值ModifyObject、新建事实数据InsertFact、更新事实数据UpdateFact、移除事实数据RetractFact;
所述的原生JAVA代码NativeJava由主属性statement、辅助属性family/tag组成;statement为JAVA语句;family固定为10,tag分别为0;
所述的新建局部对象NewObject由主属性name/clazz/args、辅助属性family/tag组成;name为对象名称,clazz为类型名称,args为构造参数列表;family固定为10,tag分别为1;
所述的程序变量赋值ModifyObject由主属性target/value、辅助属性family/tag组成;target为目标对象的变量名,value为新值的GRL表达式;family固定为10,tag分别为2;
所述的新建事实数据InsertFact由主属性target/value、辅助属性family/tag组成;clazz为类型名称,args为构造参数列表;family固定为10,tag分别为11;
所述的更新事实数据UpdateFact由主属性target、辅助属性family/tag组成;target为目标对象的变量名;family固定为10,tag分别为12;
所述的移除事实数据RetractFact由主属性target、辅助属性family/tag组成;target为目标对象的变量名;family固定为10,tag分别为13。
进一步地,所述的规则流为流程图的形式,包含六种节点:开始节点、结束节点、规则节点、动作节点、分支节点和聚合节点;
所述的规则节点控件通过规则管理模块的接口查询到可供使用的规则列表显示为下拉框选项,以供用户点击选择;
所述的动作节点是为控件为可编辑的语法表达式,所支持的操作符包含规则解析框架的GRL规则描述模块中的GRL规则的常量操作数、变量操作数、算术运算函数、文本操作函数和统计运算函数;
所述的分支节点为流程条件分支,分支节点有三种模式:AND模式、XOR模式、OR模式;AND模式下规则流会执行所有的分支;XOR模式下规则流只会选择一条条件结果为真的分支执行;OR模式下规则流会选择所有条件结果为真的分支执行;所支持的条件约束语句包含GRL规则描述模块中的GRL规则的常量操作数、变量操作数和条件判断函数;
聚合节点为条件分支的聚合,聚合节点有四种模式:AND模式、XOR模式、DISCRIMINATOR模式、N_OF_M模式;AND模式下规则流会等待所有输入端均已执行完成才往下执行;XOR模式下有且只有一个分支执行完成才可往下执行;DISCRIMINATOR模式下每当有一个分支完成工作时可往下执行且所有输入端均完成时会重新开始监听;N_OF_M模式下当N个分支执行完成后可往下执行,此时必须为聚合节点设置属性N的值;
所述的规则流的组成包含三个部分:导入部分,节点部分,连接部分;导入部分通过找到规则流中所有的规则节点,导入这些节点对应的规则的Drools的DRL文件;节点部分为通过解释器解析模块将每个节点的JSON格式和数据转化为规则流的语法描述;连接部分为表示节点与节点之间的连接关系,规则流默认从开始节点开始连接其他节点,每个节点都有一个数字为标志的ID,连接部分通过指定ID的连接关系来表示节点的连接关系。
进一步地,解释器解析模块对各个规则的解析转化进行描述时根据辅助属性family和tag识别输入表达式对应于GRL规则中的元素类型,而后对照其主属性列表逐个读取子表达式并解析;在解析条件和动作时如遇到嵌套的函数则递归解析下去,直到完成整个语法树的遍历;最后根据Drools的语法规范将各部分组装成DRL规则文本;
常量类别VAL的解释是根据tag值判断出目标的数据类型,而后将主属性value的文本转换为相应值JAVA表达式;
变量类别VAR的解释根据tag值判断出目标的数据类型,使用clazz简称生成事实绑定名,使用clazz和property生成属性绑定名和属性引用名,解析准备就绪后待解析规则时使用以上结果构造匹配模式;其中构造匹配模式的过程在解释规则时触发;
函数类别FUNC的解释是根据tag值判断具体函数类型,按照其参数列表查找对应属性值的表达式并分别解析,若遇到某个参数为嵌套的函数则递归解析下去,最后将全部解析结果组合起来,构造出完整的函数表达式;其中,逻辑运算函数全部使用JAVA逻辑操作符非!、与&&、或||来实现,与非NAND是非操作和与操作的组合,或非NOR是非操作与或操作的组合;算术运算函数全部使用JAVA标准数学函数库来实现;条件判断函数中,除SW和EW外全部使用标准JAVA操作符实现,SW和EW使用JAVA字符串操作来实现;文本操作函数均使用JAVA标准字符串操作功能实现;统计运算函数的功能使用Drools的统计函数accumulate实现,由于accumulate语句无法直接嵌套在其它表达式中,所以解释器在生成其表达式的时候,将统计结果绑定到了一个局部变量上,并在总的条件表达式中使用该变量名来构成表达式;
动作类别ACT的解释是依据tag值的不同,使用相应属性值分别构造不同JAVA语句的过程;
规则类别RULE的解释包括:(1)解释器会创建一个规则所对应类的实例,若名称的格式正确,则将名称与优先级直接传入实例中;(2)而后,根据条件的类型调用常量解析、变量解析或函数解析流程对其进行处理,处理中主要完成以下工作:一是在递归解析所有函数时,生成相应的方法导入声明语句,但并不写在规则的解析结果中,而是通过接口传递给规则包;二是为所有变量构造匹配模式,生成类型导入声明语句,若存在重复的同类型匹配则合并,同样也传递给规则包;三是根据条件在DRL语句的条件部分的最后使用Drools的eval方法构造出完整的组合逻辑表达式;(3)最后,循环调用动作解析流程依次处理动作中的所有成员,按原始顺序生成DRL语句的结果部分的JAVA语句序列,并按照同样的方法生成类型和方法导入语句;
规则包类别PKG的解释包括:检查包名name,如不正确则中断解析;遍历主属性rules中的每个规则,解析规则并将结果追加到规则文件的末尾,期间要将规则传递来的导入声明全部写入规则文件头部包声明之后、全局变量声明之前的部分。
本发明的有益效果是:现有的规则引擎在对业务人员的支持和易用性上不尽人意,本发明的系统为解决业务人员和业务规则之间的鸿沟,设计和开发了面向业务人员的规则解析框架,屏蔽规则引擎及程序设计相关技术问题,从而使得项目及同类软件系统的用户(业务人员)可以通过定制的UI视图独立完成业务规则的定义和维护,提高业务变更的便利性和效率,同时增强业务保密性。
附图说明
图1为本发明方法所依赖的系统结构示意图;
图2为本实施例中的抽象语法树示意图;
图3为解释器解析模块主要流程图;
图4为解释器解析模块对常量解释的流程图;
图5为解释器解析模块对变量解释的流程图;
图6为解释器解析模块对函数解释的流程图;
图7为解释器解析模块对动作解释的流程图;
图8为解释器解析模块对规则解释的流程图;
图9为审核的总体流程图;
图10为异步任务的总体流程图;
图11为同步任务和异步任务中的审核子流程流程图。
具体实施方式
下面结合附图进一步详细描述本发明的技术方案:
一种面向业务流可配置的规则生成方法,所述的方法基于智能审核系统,如图1所示,所述的系统包括系统管理平台和规则解析框架;
系统管理平台包括报表管理模块、字典管理模块、规则管理模块、作业管理模块;其中字典管理模块定义字典,报告IAO管理模块引用字典定义数据表,规则管理模块引用报表的字段定义规则,作业管理模块引用规则组成规则流。
规则解析框架包括GRL规则描述模块和解释器解析模块,其中GRL规则描述模块对规则管理模块定义的规则生成其GRL表达式,解释器模块解析GRL表达式为实际规则语法;GRL规则描述模块还对作业管理模块的规则流生成其JSON嵌套格式,解析为规则流实际语法。
所述的方法包括系统管理步骤和规则解析步骤;所述的系统管理步骤包括以下子步骤:
用户在系统管理平台的前端界面上添加或导入报表信息以及报表内各个字段的属性信息,报表管理模块对用户所传的待审数据表进行管理。
其中,报表指的是定义规则验证的数据信息,对应于系统内部的关系型报表,如用户信息、医院信息、学校信息等。字段即信息表中的列,对应于报表的字段,如用户信息中的姓名、身份证号、家庭住址等。
字典管理模块管理字典,所述的字段选择某个字典作为依据,该字段的数据必须符合字典的定义;
其中,字典分为两种:数值型和枚举型,数值型如“年龄范围”在“18-100”这个数值范围;枚举型如“性别”分为“男/女”。
规则管理模块管理规则,所述的规则为用户在系统管理平台的前端界面通过配置语法树的形式构造规则的内容,包含规则的GRL表达式、触发规则的警告级别、触发规则的推荐措施、触发规则时需要返回的关心字段;所述的规则包括多个控件,每个控件都有特定的GRL表达方式;规则验证的实体是依报表结构的接收到的待审数据;在规则管理过程中,用户只执行界面操作,规则的内部表达由GRL完成,规则的存储也使用GRL,仅在执行时解释为DRL。(Drools使用自定义的结构化语言Drools Rule Language,简称DRL)
作业管理模块管理作业,所述的作业是指定选择的规则和规则执行顺序;其中,一个作业包含若干条规则组成的规则流,表示规则执行的流程;所述的规则流是线性的流程或者是复杂的带分支的流程;用户在作业管理模块的界面上构建规则流的流程后,前端界面将规则流图以控件既定的JSON格式组合起来存储于系统平台数据库。
而在本实施例中,所述的规则流为流程图的形式,包含六种节点:开始节点、结束节点、规则节点、动作节点、分支节点和聚合节点;
所述的规则节点控件通过规则管理模块的接口查询到可供使用的规则列表显示为下拉框选项,以供用户点击选择;
所述的动作节点是为控件为可编辑的语法表达式,所支持的操作符包含规则解析框架的GRL规则描述模块中的GRL规则的常量操作数、变量操作数、算术运算函数、文本操作函数和统计运算函数;
所述的分支节点为流程条件分支,分支节点有三种模式:AND模式、XOR模式、OR模式;AND模式下规则流会执行所有的分支;XOR模式下规则流只会选择一条条件结果为真的分支执行;OR模式下规则流会选择所有条件结果为真的分支执行;所支持的条件约束语句包含GRL规则描述模块中的GRL规则的常量操作数、变量操作数和条件判断函数;
聚合节点为条件分支的聚合,聚合节点有四种模式:AND模式、XOR模式、DISCRIMINATOR模式、N_OF_M模式;AND模式下规则流会等待所有输入端均已执行完成才往下执行;XOR模式下有且只有一个分支执行完成才可往下执行;DISCRIMINATOR模式下每当有一个分支完成工作时可往下执行且所有输入端均完成时会重新开始监听;N_OF_M模式下当N个分支执行完成后可往下执行,此时必须为聚合节点设置属性N的值。
所述的规则解析步骤用于将每个控件特定的GRL表达方式解析转化为Drools的DRL语句,包括以下子步骤:
GRL规则描述模块在前端界面与规则引擎之间传递规则信息,包括对GRL规则的描述;所述的对GRL规则的描述包括规则结构及其语法定义、以及数据类型描述;
解释器解析模块对各个规则的解析转化进行描述,实现GRL到DRL的转换,使业务规则能够被Drools引擎理解并执行。
其中,GRL规则的规则结构及其语法定义包括主属性和辅助属性;主属性会被一一转换为DRL表达式中的相应成分,辅助属性在解析完成时均会被丢弃,不会存在于解析结果中;
所述的主属性用于描述规则相关的信息,如规则名称、条件中使用的数值和运算函数等,不同规则元素的主属性不尽相同。主属性具体包括名称、优先级、条件和动作,名称和优先级会在解析时赋值给DRL规则文本的对应成分,其中名称必须满足以下条件:以英文字母开头,以英文字母或数字结尾,中间可以英文字母、数字、小数点、下划线或短横线,字符串总长度不超过255;条件是由操作数组成组合逻辑表达式,解析时对应Drools的DRL语句的条件部分(when部分);动作是会用到操作数的可执行的程序逻辑,解析时对应Drools的DRL语句的结果部分(then部分)。
所述的辅助属性用于标记目标对象的类别,所述的辅助属性包括用于区分不同规则元素的主类别family和用于表示同一类元素中的子类别tag,所述的主类别family包括常量类别VAL(规则执行中不会变化的量)、变量类别VAR(由外部输入的事实数据,规则执行中可以修改)、函数类别FUNC(各种运算和操作的表达式,用于构造规则条件)、动作类别ACT(所支持的动作表达式,用于构造规则结果)、规则类别RULE(单独的规则表达式)和规则包类别PKG(可解释执行的规则脚本);其中,常量类别VAL、变量类别VAR、函数类别FUNC、动作类别ACT、规则类别RULE和规则包类别PKG的family值分别为1/2/3/10/100/101;而所述的规则包类别PKG包括多个规则类别RULE,所有的规则类别RULE按照执行顺序排列。
GRL规则的数据类型包括:文本数据类型TEXT、数值数据类型NUM、布尔数据类型BOOL、日期数据类型DATE、时间数据类型TIME和时间戳数据类型TIMESTAMP。
操作数Operand是规则表达式中参与相应运算或操作的单元,包括常量操作数(Val)、变量操作数(Var)和函数操作数(Func)三类。为帮助实现函数参数的类型检测,所有操作数必须指定类型实参。任何函数均会对传入参数(操作数)的值类型进行检查,以防止非法参数造成的运算异常。
所述的常量操作数由主属性value、辅助属性family/tag组成;value即为当前常量操作数的值;family固定为1;而tag用于标识数据类型,取自GRL规则的数据类型的特征值,依次取1至6时,分别对应文本数据类型TEXT、数值数据类型NUM、布尔数据类型BOOL、日期数据类型DATE、时间数据类型TIME和时间戳数据类型TIMESTAMP;常量操作数会被解析为DRL规则文本中的JAVA常量,解析结果中只会保留它的取值;
所述的变量操作数由主属性clazz/property、辅助属性family/tag组成;clazz和property分别为某种数据对应的JAVA类型全名和该类型中某个属性的名称,因class是JAVA保留关键字,为避免语法错误而使用clazz代替;family固定为2;tag用于标识数据类型,取自GRL规则的数据类型的特征值,依次取1至6时,分别对应文本数据类型TEXT、数值数据类型NUM、布尔数据类型BOOL、日期数据类型DATE、时间数据类型TIME和时间戳数据类型TIMESTAMP。变量操作数在解析时主要用作函数的参数,并进一步构造DRL的匹配模式,其实际用途是创建对指定事实中指定属性的引用,以供规则下文中的其它匹配模式或动作所使用。假定规则中使用了患者(类名为uestc.znsh.yibao.entity.Patient)的姓名(属性名为name),则此变量的tag值为1,clazz值为"uestc.znsh.yibao.entity.Patient",property值为"name"。
所述的函数操作数是对若干个操作数所进行的某种运算操作,包括逻辑运算函数、算术运算函数、条件判断函数、文本操作函数、统计运算函数,均直接继承自Func类,并根据函数性质声明类型实参;函数的运算参数是具有正确数据类型的操作数,当参数为另一个函数时,便实现了函数表达式的嵌套;函数操作数的辅助属性family固定为3;tag用于标识具体的函数类型。
具体地,逻辑运算函数包括:非NOT、与AND、或OR、与非NAND和或非NOR,tag值分别为101/102/103/104/105;逻辑运算函数的类型实参为java.lang.Boolean即返回值为布尔型数据;运算的参数只能使用布尔型常量、变量、条件判断函数或逻辑运算函数;
运算参数只能使用布尔型常量、变量、条件判断函数或逻辑运算函数。这些函数可以相互作为参数进行传递,从而组成复杂的逻辑运算表达式。AND和OR的参数名为args,意为它们可以有多个参数,原因是实际应用中经常需要将多个条件连续作“与”或“或”运算,且具体个数往往无法确定,如果只允许2个参数,则生成表达式时会出现过多的嵌套调用,不便于进行界面绘图。
算术运算函数包括:加法PLS、减法MIN、乘法MUL、除法DIV、取余MOD、乘方POW、开方ROOT、取反NEG、倒数REC、绝对值ABS、四舍五入RND、向上取整CEIL、向下取整FLR和向0取证FIX,tag值分别为201~214。
算术运算函数的类型实参为java.lang.Double即返回值为数值型,参数只能使用数值型常量、变量、算术运算或统计运算函数。它们也可相互嵌套以实现复杂运算。
条件判断函数包括:为空NIL、非空NNL、等于EQL、不等于DIF、大于GT、小于LT、大于等于GE、小于等于LE、字符串前缀SE和字符串后缀EW,tag值分别为301~310。
条件判断函数的类型实参也是java.lang.Boolean即返回值为布尔型,业务规则中的大多数基本条件都是由它们形成的,再通过逻辑运算函数嵌套形成组合逻辑。其中,NIL和NNL用于检查目标是否为空指针,但不会识别出空字符串,若要检查空字符串,应先使用文本操作函数中的LEN取得字符串长度,再使用等于关系检查此长度是否为0。大于、小于、大于等于和小于等于这四个判断函数不仅可以比较数值,也支持日期、时间和时间戳的检查。
文本操作函数包括:计算长度LEN、转为大写UPR、转为小写LWR、连接CON、取字符CAT、取子串SUB、替换字符RPL,tag值分别为401~407;
LEN的类型实参为java.lang.Integer,其余6个均为java.lang.String;,可以互为参数以实现嵌套的文本操作,这些函数均不会修改原始对象的值。
统计运算函数包括:求和SUM、求平均AVG、计数CNT、取最大值MAX、取最小值MIN,如表5所示,如tag值分别为504~505;
只针对数值型变量进行统计运算;所有统计函数具有相同的参数:指示统计目标的数值型变量arg和声明统计条件的布尔型操作数filter。
在满足类型匹配且具有实际意义的前提下,函数的参数可以为任意常量、变量或另一函数。例如,假定药品信息(medicine)包含价格(price)、OCT标识(isOCT)和进口标识(imported),则查询打8折后售价超过100元的处方药的条件可表示为:medicine.price*0.8>100&&medicine.isOCT==false,使用GRL描述则为:
以上表达式中,外层JSON节点的family与tag分别为3和102,对照表3-1可知该节点为“与”运算。同理可知它的第一个参数是“大于”关系运算,左端为乘法运算(medicine.price×0.8),右端为常数100;第二个参数是等值判断,检查布尔型变量medicine.isOCT的取值是否为false。可见,此GRL表达式与上述JAVA表达式是一致的。
对于任意一个操作数,可以通过其JSON表达式直观地看出它的语法树,如上例的抽象语法树如图2所示。在所有GRL操作数的语法树中,叶子节点必为常量或变量,非叶子节点必为函数。
条件的本质是一个组合逻辑表达式,使用布尔型操作数实现,因而其JSON表达式可以为布尔型常量、变量、逻辑运算或条件判断函数。其实图2所示的例子就是一个典型的GRL条件。条件在解析时,会被分解为若干个DRL匹配模式,并组装成DRL的when部分。
通常不使用布尔型常量构造规则条件,因为:取true时表示“无条件”执行当前规则的的动作,这种规则在实际业务中很少出现;而取false时无意义,因为当前规则永远不会匹配成功。
所有动作会被解析为对应的JAVA语句或Drools宏函数,并按定义的顺序依次排列在DRL规则的then部分。所述的动作包括执行原生JAVA代码NativeJava、新建局部对象NewObject、程序变量赋值ModifyObject、新建事实数据InsertFact、更新事实数据UpdateFact、移除事实数据RetractFact;
表1
(1)所述的原生JAVA代码NativeJava由主属性statement、辅助属性family/tag组成;statement为JAVA语句;family固定为10,tag分别为0;此动作用于在当前规则的结果部分执行指定的JAVA程序代码,其主属性statement就是原生的JAVA语句。尽管不提倡在规则结果中执行复杂的JAVA代码,但由于以下三方面原因,仍然需要保留对原生JAVA语句的支持:一是由于兼容性和扩展性的考虑;二是部分Drools宏函数依赖于JAVA语言,如插入事实数据时需要使用JAVA的new表达式;三是部分GRL表达式依赖于JAVA语言,如新建局部对象同样需要使用new表达式,提取事实数据时需要调用JAVA属性操作。
(2)所述的新建局部对象NewObject由主属性name/clazz/args、辅助属性family/tag组成;family固定为10,tag分别为1;此动作用于在规则结果中声明一个局部对象,其中,name是该对象的JAVA变量名称;clazz是该对象的类型全名,会被加入类型导入声明中,而在RHS中只使用类型简称;args是传入新对象构造方法的参数列表,需要与该类型构造方法的参数列表相匹配,每个参数都是一个GRL常量。
(3)所述的程序变量赋值ModifyObject由主属性target/value、辅助属性family/tag组成;target为目标对象的变量名,value为新值的GRL表达式;family固定为10,tag分别为2;此动作用于在结果部分对条件中引用的事实数据进行修改。其中,target是当前规则中已声明局部变量的名称,通常是在匹配模式中绑定的事实或事实的属性,也可以是规则上文中使用NewObject生成的局部变量;value是一个GRL操作数。
(4)所述的新建事实数据InsertFact由主属性target/value、辅助属性family/tag组成;clazz为类型名称,args为构造参数列表;family固定为10,tag分别为11;此动作会首先调用NewObject在当前规则的RHS部分生成一个局部对象,而后调用Drools宏函数insert将其添加到工作内存中,该对象不允许其它动作访问。clazz和args的含义及用法与NewObject相同。
(5)所述的更新事实数据UpdateFact由主属性target、辅助属性family/tag组成;target为目标对象的变量名;family固定为10,tag分别为12;此动作对应于Drools宏函数update,操作目标是已绑定的事实对象,功能是通知规则引擎指定的事实数据已发生变化。
(6)所述的移除事实数据RetractFact由主属性target、辅助属性family/tag组成;target为目标对象的变量名;family固定为10,tag分别为13。此动作对应于Drools宏函数retract,用于将指定事实数据从工作内存中移除,操作目标同样也是已绑定的事实对象。
所述的解释器解析模块功能是实现GRL到DRL的转换,使业务规则能够被Drools引擎理解并执行。主要思路如图3所示,根据辅助属性family和tag识别输入表达式对应于GRL规则中的元素类型,而后对照其主属性列表逐个读取子表达式并解析;在解析条件和动作时如遇到嵌套的函数则递归解析下去,直到完成整个语法树的遍历;最后根据Drools的语法规范将各部分组装成DRL规则文本。
解析的难点主要是如何将常量、变量和各种函数转换为匹配模式(Pattern),主要涉及导入声明的收集、匹配模式的构造和统计函数的使用等问题。
为避免过多冗余信息,生成的DRL规则文本中使用类名时一律使用类型的简称(除去包名之外的部分),而将完整类名(完全限定名)加入规则文件的类型导入声明中。如介绍变量时使用的示例uestc.znsh.yibao.entity.Patient,在匹配模式中只能是Patient,而文件头部必须包含import uestc.znsh.yibao.entity.Patient。同样,用到的静态方法也是如此,不过方法导入声明是以import static开头的。
构造匹配模式时,要考虑多个变量指向同一事实的情况,此时需要将它们合并为一条Pattern语句,相关的导入声明也不能重复。
由于DRL统计函数accumulate的语法基于Pattern,无法嵌套到其它表达式中,所以解析中需要作特殊处理,
具体地,常量类别VAL的解释如图4所示,是根据tag值判断出目标的数据类型,而后将主属性value的文本转换为相应值JAVA表达式。数值型和布尔型的结果就是value的内容。文本型需要确保使用一对英文半角双引号包围,同时如有转义字符还需要转换为对应的正常字符。对于日期、时间和时间戳类型,还可以在主属性format中指定其格式以加速解析;若不指定,解释器会尝试使用默认支持的格式去识别,识别失败时会中断解析过程。
变量类别VAR的解释如图5所示,根据tag值判断出目标的数据类型,使用clazz简称生成事实绑定名,使用clazz和property生成属性绑定名和属性引用名,解析准备就绪后待解析规则时使用以上结果构造匹配模式;其中构造匹配模式的过程在解释规则时触发。
具体地,如前文所述,GRL变量指向一个类型的一个属性,规则在执行时访问的是此类型的一个实例(即事实数据)中的对应属性,并使用该属性组成规则条件或动作中的相关表达式。解析变量时,解释器首先需要生成两个局部变量的名称:一个变量绑定此事实对象,其名称叫做事实绑定名(FactBindingName);另一个变量则绑定该属性的值,其名称叫做属性绑定名(PropertyBindingName)。这两个变量存在重要的区别:前者直接引用工作内存中的事实对象,而后者只是与目标属性具有相同值的一个本地对象。另外,因为在规则动作中可能会修改此属性的值,但是修改绑定属性的那个局部变量并不能影响工作内存中的事实对象,所以,解释器还将生成一个属性引用名(PropertyReferenceName),使用它来执行修改时,实际操作的是工作内存中的事实。
生成上述三个变量名后,变量的解析并未真正结束,但后续工作是在规则解析中进一步完成的,届时解释器会使用该变量的两个绑定名构造完整的DRL匹配模式。所以,当前阶段实质上是进行了一番解析准备工作,具体构造匹配模式的过程将在解析规则时触发。
如前文所述,常量和变量是完整语法树的叶子节点,所以它们的解析结果中不会出现嵌套,通常是某个函数的参数表达式。
函数类别FUNC的解释如图6所示,是根据tag值判断具体函数类型,按照其参数列表查找对应属性值的表达式并分别解析,若遇到某个参数为嵌套的函数则递归解析下去,最后将全部解析结果组合起来,构造出完整的函数表达式;
其中,逻辑运算函数全部使用JAVA逻辑操作符非!、与&&、或||来实现,与非NAND是非操作和与操作的组合,或非NOR是非操作与或操作的组合;
算术运算函数全部使用JAVA标准数学函数库来实现,由于JAVA本身不支持FIX(向0取整)运算,所以FIX函数实际调用了FLR和CEIL;
条件判断函数中,除SW和EW外全部使用标准JAVA操作符实现,SW和EW使用JAVA字符串操作来实现;
文本操作函数均使用JAVA标准字符串操作功能实现;LEN的返回值类型为数值型,可作为算术运算函数的参数;其它6个函数均返回字符串
统计运算函数的功能使用Drools的统计函数accumulate实现,由于accumulate语句无法直接嵌套在其它表达式中,所以解释器在生成其表达式的时候,将统计结果绑定到了一个局部变量上,并在总的条件表达式(参见规则的解析)中使用该变量名来构成表达式。
动作类别ACT的解释如图7所示,是依据tag值的不同,使用相应属性值分别构造不同JAVA语句的过程;
规则的主属性包括name、salience、condition和actions,分别对应DRL规则的name、salience、when和then等部分。对规则的解析是整个解释器的核心工作,规则类别RULE的解释如图8所示,包括:
(1)解释器会创建一个规则所对应类的实例,若名称的格式正确,则将名称与优先级直接传入实例中;
(2)而后,根据条件的类型调用常量解析、变量解析或函数解析流程对其进行处理,处理中主要完成以下工作:一是在递归解析所有函数时,生成相应的方法导入声明语句,但并不写在规则的解析结果中,而是通过接口传递给规则包;二是为所有变量构造匹配模式,生成类型导入声明语句,若存在重复的同类型匹配则合并,同样也传递给规则包;三是根据条件在DRL语句的条件部分的最后使用Drools的eval方法构造出完整的组合逻辑表达式,由于所有函数已使用括号包围所有参数,因此不必考虑运算优先级的处理;
(3)最后,循环调用动作解析流程依次处理动作中的所有成员,按原始顺序生成DRL语句的结果部分的JAVA语句序列,并按照同样的方法生成类型和方法导入语句。
规则包类别PKG的解释包括:检查包名name,如不正确则中断解析;遍历主属性rules中的每个规则,解析规则并将结果追加到规则文件的末尾,期间要将规则传递来的导入声明全部写入规则文件头部包声明之后、全局变量声明之前的部分。
更优地,在本实施例中,所述系统还包括集群审核平台,集群审核平台从系统管理平台同步应用级管理各个模块的数据资源,包括对报表管理模块的数据进行处理、对规则管理模块的数据进行处理、对作业管理模块的数据进行处理。
所述的对报表管理模块的数据进行处理包括对每个报表和报表的字段使用JAVA动态编译技术将其编译生成javabean的class文件,报表名为bean的类名,报表字段名和类型为bean的属性和属性的基本类型;为了符合JAVA的编程规范,约定报表名为大写字母、数字、下划线组合且以大写字母开头;约定字段名为小写字母、数字、下划线的组合且以小写字母开头;
所述的对规则管理模块的数据进行处理包括遍历规则的条件部分的变量(表名.变量名)后,查找报表管理模块数据是否有存在该数据,若存在则在Drools的DRL语句的import部分增加导入语句,导入该报表对应的javabean;对于每个规则的条件部分的GRL表达式,通过框架解析平台的GRL规则描述模块转化为Drools的DRL语句的条件部分(“WHEN”语句部分);而对于每个规则的返回结果部分,通过框架解析平台的GRL规则描述模块转化为Drools的DRL语句的结果部分(“THEN”语句部分);
所述的对作业管理模块的数据进行处理包括调用框架解析平台的解释器描述模块将规则流的JSON数据格式转化为Drools规则流的描述方式;
其中,所述的规则流的描述方式包含三个部分:导入部分,节点部分,连接部分;导入部分通过找到规则流中所有的规则节点,导入这些节点对应的规则的Drools的DRL文件;节点部分为通过解释器描述模块将每个节点的JSON格式和数据转化为规则流的语法描述;连接部分为表示节点与节点之间的连接关系,规则流默认从开始节点开始连接其他节点,每个节点都有一个数字为标志的ID,连接部分通过指定ID的连接关系来表示节点的连接关系。
集群审核平台对用户通过接口传输的包括待审数据、作业名称以及指定审核方式的任务进行审核,包括同步任务审核和异步任务审核;
其中同步任务审核为在任务请求到达后在当前HTTP请求周期内完成审核并直接返回结果,而为提高服务接口并发能力,异步任务数据不在当前HTTP请求周期内解析,而是直接进入缓存队列,由后台程序提取并进行审核。为节约存储资源,防止系统超负荷运转,缓存任务数据在审核结束后立即清除。
对于批量任务,系统通过设置一个字节数上限来限制单次提交的数据量。
在同步任务审核和异步任务审核的审核过程中需要遍历所有报表构造对象、根据作业类型加载所有规则并启动Drools引擎执行规则推理。
其中任务指的是用户提交一个包含若干参数和一组作业数据的网络请求,服务器根据相应参数完成所有作业。也称为任务审核或审核任务。一个任务可以包含一种或多种作业数据。任务数据量有限制。
其中,审核的总体流程如图9所示,包括:
(1)以收到新任务开始;(2)生成任务号;(3)判断是否为同步任务,如果是则登记任务后进行审核子流程,并返回审核结果;如果不是则缓存任务数据,并返回确认信息;(4)任务处理结束。
异步任务的总体流程如图10所示,包括:
(1)以服务启动开始;(2)检查任务缓存;(3)判断是否有待审核任务,如果是则进入(4),如果不是则返回(2);(4)进入新线程;(5)读取任务数据;(6)进行审核子流程;(7)审核完成后清除缓存数据,并返回(2)。
同步任务和异步任务中的审核子流程如图11所示,包括:
(1)判断是否有数据,如果有则进入(2),否则进入(12);
(2)预备审核报告数据结构;
(3)取下一条未审核作业;
(4)判断报表数据是否为空,如果是则失败进入步骤(10),否则进入(5);
(5)判断此类作业是否已经启用,如果是则是被进入步骤(10),否则进入(6);
(6)遍历所有报表构造数据对象(Java Bean);
(7)根据作业类型加载所有规则;
(8)启动Drools引擎执行规则推理,若为异步操作还需存档作业记录;
(9)判断是否需要反馈,如果是则进入(10),否则进入(11);
(10)将结果写入报告;
(11)判断是否还有未审核作业,如果是则返回(3),否则进入(12);
(12)汇总任务报告;
(13)存档任务记录。
其中,“是否需要反馈”这一步骤是通过检查审核结果中的“警告级别”来判定的。警告级别是由应用所有者自定义的,系统默认0级表示“完全合法”,不需要在审核报告中反馈;所有其它级别的结果表示不完全合法,这些结果均需要反馈到终端,供审核终端的业务人员掌握具体情况,并提供后续操作的推荐措施。
本发明是通过实施例来描述的,但并不对本发明构成限制,参照本发明的描述,所公开的实施例的其他变化,如对于本领域的专业人士是容易想到的,这样的变化应该属于本发明权利要求限定的范围之内。
Claims (6)
1.一种面向业务流可配置的规则生成方法,其特征在于:所述的方法基于智能审核系统,所述的系统包括系统管理平台和规则解析框架;系统管理平台包括报表管理模块、字典管理模块、规则管理模块、作业管理模块;规则解析框架包括GRL规则描述模块和解释器解析模块。
所述的方法包括系统管理步骤、规则解析步骤;所述的系统管理步骤包括以下子步骤:
用户在系统管理平台的前端界面上添加或导入报表信息以及报表内各个字段的属性信息,报表管理模块对用户所传的待审数据表进行管理;
字典管理模块管理字典,所述的字典是数据表的字段选择某个字典作为依据,该字段的数据必须符合字典的定义;
规则管理模块管理规则,所述的规则为用户在系统管理平台的前端界面通过配置语法树的形式构造规则的内容,包含规则的GRL表达式、触发规则的警告级别、触发规则的推荐措施、触发规则时需要返回的关心字段;所述的规则包括多个操作符,每个操作符都有特定的GRL表达方式;规则验证的实体是依报表结构的接收到的待审数据;
作业管理模块管理作业,所述的作业是指定选择的规则和规则执行顺序;其中,一个作业包含若干条规则组成的规则流,表示规则执行的流程;所述的规则流是线性的流程或者是复杂的带分支的流程;
所述的规则解析步骤用于将每个控件特定的GRL表达方式解析转化为Drools的DRL语句,包括以下子步骤:
GRL规则描述模块通过前端界面构造的由各种操作符组成语法树的GRL表达式;所述的对GRL规则的描述包括规则结构及其语法定义、以及数据类型描述;
解释器解析模块对各个规则的GRL表达式进行解析,实现GRL到DRL的转换,使业务规则能够被Drools引擎理解并执行。
2.根据权利要求1所述的一种面向业务流可配置的规则生成方法,其特征在于:
GRL规则的规则结构及其语法定义包括主属性和辅助属性;主属性会被一一转换为DRL表达式中的相应成分,辅助属性在解析完成时均会被丢弃,不会存在于解析结果中;
所述的主属性用于描述规则相关的信息,包括名称、优先级、条件和动作,其中名称和优先级会在解析时赋值给DRL规则文本的对应成分,条件是由操作数组成组合逻辑表达式,解析时对应Drools的DRL语句的条件部分;动作是会用到操作数的可执行的程序逻辑,解析时对应Drools的DRL语句的结果部分;
所述的辅助属性用于标记目标对象的类别,所述的辅助属性包括用于区分不同规则元素的主类别family和用于表示同一类元素中的子类别tag,所述的主类别family包括常量类别VAL、变量类别VAR、函数类别FUNC、动作类别ACT、规则类别RULE和规则包类别PKG;其中,常量类别VAL、变量类别VAR、函数类别FUNC、动作类别ACT、规则类别RULE和规则包类别PKG的family值分别为1/2/3/10/100/101;而所述的规则包类别PKG包括多个规则类别RULE,所有的规则类别RULE按照执行顺序排列;
GRL规则的数据类型包括:文本数据类型TEXT、数值数据类型NUM、布尔数据类型BOOL、日期数据类型DATE、时间数据类型TIME和时间戳数据类型TIMESTAMP。
3.根据权利要求2所述的一种面向业务流可配置的规则生成方法,其特征在于:所述的操作数包括常量操作数、变量操作数和函数操作数三类;
所述的常量操作数由主属性value、辅助属性family/tag组成;value即为当前常量操作数的值;family固定为1;而tag用于标识数据类型,取自GRL规则的数据类型的特征值,依次取1至6时,分别对应文本数据类型TEXT、数值数据类型NUM、布尔数据类型BOOL、日期数据类型DATE、时间数据类型TIME和时间戳数据类型TIMESTAMP;常量操作数会被解析为DRL规则文本中的JAVA常量;
所述的变量操作数由主属性clazz/property、辅助属性family/tag组成;clazz和property分别为某种数据对应的JAVA类型全名和该类型中某个属性的名称;family固定为2;tag用于标识数据类型,取自GRL规则的数据类型的特征值,依次取1至6时,分别对应文本数据类型TEXT、数值数据类型NUM、布尔数据类型BOOL、日期数据类型DATE、时间数据类型TIME和时间戳数据类型TIMESTAMP;
所述的函数操作数是对若干个操作数所进行的某种运算操作,包括逻辑运算函数、算术运算函数、条件判断函数、文本操作函数、统计运算函数,均直接继承自Func类,并根据函数性质声明类型实参;函数的运算参数是具有正确数据类型的操作数,当参数为另一个函数时,便实现了函数表达式的嵌套;函数操作数的辅助属性family固定为3;tag用于标识具体的函数类型;
逻辑运算函数包括:非NOT、与AND、或OR、与非NAND和或非NOR,tag值分别为101/102/103/104/105;逻辑运算函数的类型实参为java.lang.Boolean即返回值为布尔型数据;运算的参数只能使用布尔型常量、变量、条件判断函数或逻辑运算函数;
算术运算函数包括:加法PLS、减法MIN、乘法MUL、除法DIV、取余MOD、乘方POW、开方ROOT、取反NEG、倒数REC、绝对值ABS、四舍五入RND、向上取整CEIL、向下取整FLR和向0取证FIX,tag值分别为201~214;算术运算函数的类型实参为java.lang.Double即返回值为数值型,参数只能使用数值型常量、变量、算术运算函数或统计运算函数;
条件判断函数包括:为空NIL、非空NNL、等于EQL、不等于DIF、大于GT、小于LT、大于等于GE、小于等于LE、字符串前缀SE和字符串后缀EW,tag值分别为301~310;条件判断函数的类型实参是java.lang.Boolean即返回值为布尔型;
文本操作函数包括:计算长度LEN、转为大写UPR、转为小写LWR、连接CON、取字符CAT、取子串SUB、替换字符RPL,tag值分别为401~407;LEN的类型实参为java.lang.Integer,其余6个均为java.lang.String;
统计运算函数包括:求和SUM、求平均AVG、计数CNT、取最大值MAX、取最小值MIN,tag值分别为504~505;只针对数值型变量进行统计运算。
4.根据权利要求3所述的一种面向业务流可配置的规则生成方法,其特征在于:所述的动作包括执行原生JAVA代码NativeJava、新建局部对象NewObject、程序变量赋值ModifyObject、新建事实数据InsertFact、更新事实数据UpdateFact、移除事实数据RetractFact;
所述的原生JAVA代码NativeJava由主属性statement、辅助属性family/tag组成;statement为JAVA语句;family固定为10,tag分别为0;
所述的新建局部对象NewObject由主属性name/clazz/args、辅助属性family/tag组成;name为对象名称,clazz为类型名称,args为构造参数列表;family固定为10,tag分别为1;
所述的程序变量赋值ModifyObject由主属性target/value、辅助属性family/tag组成;target为目标对象的变量名,value为新值的GRL表达式;family固定为10,tag分别为2;
所述的新建事实数据InsertFact由主属性target/value、辅助属性family/tag组成;clazz为类型名称,args为构造参数列表;family固定为10,tag分别为11;
所述的更新事实数据UpdateFact由主属性target、辅助属性family/tag组成;target为目标对象的变量名;family固定为10,tag分别为12;
所述的移除事实数据RetractFact由主属性target、辅助属性family/tag组成;target为目标对象的变量名;family固定为10,tag分别为13。
5.根据权利要求3所述的一种面向业务流可配置的规则生成方法,其特征在于:所述的规则流为流程图的形式,包含六种节点:开始节点、结束节点、规则节点、动作节点、分支节点和聚合节点;
所述的规则节点控件通过规则管理模块的接口查询到可供使用的规则列表显示为下拉框选项,以供用户点击选择;
所述的动作节点是为控件为可编辑的语法表达式,所支持的操作符包含规则解析框架的GRL规则描述模块中的GRL规则的常量操作数、变量操作数、算术运算函数、文本操作函数和统计运算函数;
所述的分支节点为流程条件分支,分支节点有三种模式:AND模式、XOR模式、OR模式;AND模式下规则流会执行所有的分支;XOR模式下规则流只会选择一条条件结果为真的分支执行;OR模式下规则流会选择所有条件结果为真的分支执行;所支持的条件约束语句包含GRL规则描述模块中的GRL规则的常量操作数、变量操作数和条件判断函数;
所述的聚合节点为条件分支的聚合,聚合节点有四种模式:AND模式、XOR模式、DISCRIMINATOR模式、N_OF_M模式;AND模式下规则流会等待所有输入端均已执行完成才往下执行;XOR模式下有且只有一个分支执行完成才可往下执行;DISCRIMINATOR模式下每当有一个分支完成工作时可往下执行且所有输入端均完成时会重新开始监听;N_OF_M模式下当N个分支执行完成后可往下执行,此时必须为聚合节点设置属性N的值;
所述的规则流的组成包含三个部分:导入部分,节点部分,连接部分;导入部分通过找到规则流中所有的规则节点,导入这些规则节点对应规则包含的事实数据的java类路径;节点部分为通过解释器解析模块将每个节点的JSON格式和数据转化为规则流的语法描述;连接部分为表示节点与节点之间的连接关系,规则流默认从开始节点开始连接其他节点,每个节点有一个数字为标志的ID,连接部分通过指定ID的连接关系来表示节点的连接关系。
6.根据权利要求4所述的一种面向业务流可配置的规则生成方法,其特征在于:解释器解析模块对各个规则的解析转化进行描述时根据辅助属性family和tag识别输入表达式对应于GRL规则中的元素类型,而后对照其主属性列表逐个读取子表达式并解析;在解析条件和动作时如遇到嵌套的函数则递归解析下去,直到完成整个语法树的遍历;最后根据Drools的语法规范将各部分组装成DRL规则文本;
常量类别VAL的解释是根据tag值判断出目标的数据类型,而后将主属性value的文本转换为相应值JAVA表达式;
变量类别VAR的解释根据tag值判断出目标的数据类型,使用clazz简称生成事实绑定名,使用clazz和property生成属性绑定名和属性引用名,解析准备就绪后待解析规则时使用以上结果构造匹配模式;其中构造匹配模式的过程在解释规则时触发;
函数类别FUNC的解释是根据tag值判断具体函数类型,按照其参数列表查找对应属性值的表达式并分别解析,若遇到某个参数为嵌套的函数则递归解析下去,最后将全部解析结果组合起来,构造出完整的函数表达式;其中,逻辑运算函数全部使用JAVA逻辑操作符非!、与&&、或||来实现,与非NAND是非操作和与操作的组合,或非NOR是非操作与或操作的组合;算术运算函数全部使用JAVA标准数学函数库来实现;条件判断函数中,除SW和EW外全部使用标准JAVA操作符实现,SW和EW使用JAVA字符串操作来实现;文本操作函数均使用JAVA标准字符串操作功能实现;统计运算函数的功能使用Drools的统计函数accumulate实现,由于accumulate语句无法直接嵌套在其它表达式中,所以解释器在生成其表达式的时候,将统计结果绑定到了一个局部变量上,并在总的条件表达式中使用该变量名来构成表达式;
动作类别ACT的解释是依据tag值的不同,使用相应属性值分别构造不同JAVA语句的过程;
规则类别RULE的解释包括:(1)解释器会创建一个规则所对应类的实例,若名称的格式正确,则将名称与优先级直接传入实例中;(2)而后,根据条件的类型调用常量解析、变量解析或函数解析流程对其进行处理,处理中主要完成以下工作:一是在递归解析所有函数时,生成相应的方法导入声明语句,但并不写在规则的解析结果中,而是通过接口传递给规则包;二是为所有变量构造匹配模式,生成类型导入声明语句,若存在重复的同类型匹配则合并,同样也传递给规则包;三是根据条件在DRL语句的条件部分的最后使用Drools的eval方法构造出完整的组合逻辑表达式;(3)最后,循环调用动作解析流程依次处理动作中的所有成员,按原始顺序生成DRL语句的结果部分的JAVA语句序列,并按照同样的方法生成类型和方法导入语句;
规则包类别PKG的解释包括:检查包名name,如不正确则中断解析;遍历主属性rules中的每个规则,解析规则并将结果追加到规则文件的末尾,期间要将规则传递来的导入声明全部写入规则文件头部包声明之后、全局变量声明之前的部分。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710914827.7A CN107704265B (zh) | 2017-09-30 | 2017-09-30 | 一种面向业务流可配置的规则生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710914827.7A CN107704265B (zh) | 2017-09-30 | 2017-09-30 | 一种面向业务流可配置的规则生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107704265A true CN107704265A (zh) | 2018-02-16 |
CN107704265B CN107704265B (zh) | 2020-08-18 |
Family
ID=61183243
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710914827.7A Active CN107704265B (zh) | 2017-09-30 | 2017-09-30 | 一种面向业务流可配置的规则生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107704265B (zh) |
Cited By (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108920222A (zh) * | 2018-07-12 | 2018-11-30 | 北京京东金融科技控股有限公司 | 一种基于规则引擎的业务处理方法和装置 |
CN109144374A (zh) * | 2018-09-27 | 2019-01-04 | 范若愚 | 基于可视化规则引擎的业务处理方法、系统及相关设备 |
CN109685375A (zh) * | 2018-12-26 | 2019-04-26 | 重庆誉存大数据科技有限公司 | 一种基于半结构化文本数据的企业风险规则引擎运算方法 |
CN109977009A (zh) * | 2019-02-27 | 2019-07-05 | 深圳云步互娱网络科技有限公司 | 一种基于规则引擎的开关状态控制方法及系统 |
CN110297620A (zh) * | 2019-05-17 | 2019-10-01 | 苏宁易购集团股份有限公司 | 一种基于Drools的动态规则维护和生成的方法 |
CN110826911A (zh) * | 2019-11-06 | 2020-02-21 | 南京星环智能科技有限公司 | 基于大数据的决策方法、设备及介质 |
CN111026797A (zh) * | 2019-12-02 | 2020-04-17 | 卫盈联信息技术(深圳)有限公司 | 业务数据处理方法、服务器及存储介质 |
CN111061767A (zh) * | 2019-12-10 | 2020-04-24 | 美林数据技术股份有限公司 | 一种基于内存计算与sql计算的数据处理方法 |
CN111124476A (zh) * | 2018-10-31 | 2020-05-08 | 阿里巴巴集团控股有限公司 | 业务规则配置和创建方法及装置 |
CN111124548A (zh) * | 2019-12-31 | 2020-05-08 | 科大国创软件股份有限公司 | 一种基于yaml文件的规则解析方法及系统 |
CN111861382A (zh) * | 2020-06-28 | 2020-10-30 | 微民保险代理有限公司 | 业务资格认证方法、装置、系统、计算机设备和存储介质 |
CN111930364A (zh) * | 2020-08-11 | 2020-11-13 | 上海亿锎智能科技有限公司 | 通过动态配置规则装置实现流程节点按条件流转的方法 |
CN111968022A (zh) * | 2020-08-12 | 2020-11-20 | 武汉易瑞信息技术股份有限公司 | 一种基于json配置方式的业务编号生成系统及方法 |
CN112085201A (zh) * | 2020-09-22 | 2020-12-15 | 广州医药信息科技有限公司 | 一种基于微服务应用的逻辑推演方法 |
CN112230616A (zh) * | 2020-10-28 | 2021-01-15 | 腾讯科技(深圳)有限公司 | 一种联动控制方法、装置及联动中间件 |
CN112394922A (zh) * | 2020-12-02 | 2021-02-23 | 成都新希望金融信息有限公司 | 决策配置方法、业务决策方法和决策引擎系统 |
CN112448971A (zh) * | 2019-08-29 | 2021-03-05 | 中科云谷科技有限公司 | 数据解析平台、数据解析方法及存储介质 |
CN112685383A (zh) * | 2020-12-25 | 2021-04-20 | 山东众阳健康科技集团有限公司 | 一种基于规则组件的业务规则批量生成方法及系统 |
CN113220281A (zh) * | 2021-04-30 | 2021-08-06 | 北京字跳网络技术有限公司 | 一种信息生成方法、装置、终端设备及存储介质 |
CN113468388A (zh) * | 2021-06-30 | 2021-10-01 | 深圳集智数字科技有限公司 | 控制方法、装置、服务器及存储介质 |
CN114679504A (zh) * | 2022-05-27 | 2022-06-28 | 成都数联云算科技有限公司 | Udp报文解析方法、装置及计算机设备 |
CN115061689A (zh) * | 2022-06-15 | 2022-09-16 | 五矿国际信托有限公司 | 一种存储过程转java代码的框架设计方法及系统 |
CN115080653A (zh) * | 2022-08-23 | 2022-09-20 | 北京华御数观科技有限公司 | 一种数据处理用通用模型 |
CN115167826A (zh) * | 2022-05-27 | 2022-10-11 | 唐旸 | 中文业务规则引擎的实现方法及装置、服务端、存储介质 |
CN115225719A (zh) * | 2022-08-31 | 2022-10-21 | 中建电子商务有限责任公司 | 一种分布式定向网络数据采集解析方法 |
US11647100B2 (en) | 2018-09-30 | 2023-05-09 | China Mobile Communication Co., Ltd Research Inst | Resource query method and apparatus, device, and storage medium |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020019815A1 (en) * | 1995-11-17 | 2002-02-14 | International Businesss Machines Corporation | Object oriented rule-based expert system framework mechanism |
CN102567066A (zh) * | 2010-12-22 | 2012-07-11 | 北大方正集团有限公司 | 业务系统开发方法、平台及系统 |
CN103593752A (zh) * | 2013-11-29 | 2014-02-19 | 武汉大学 | 一种基于情境约束的业务流程适应性配置方法及系统 |
-
2017
- 2017-09-30 CN CN201710914827.7A patent/CN107704265B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020019815A1 (en) * | 1995-11-17 | 2002-02-14 | International Businesss Machines Corporation | Object oriented rule-based expert system framework mechanism |
CN102567066A (zh) * | 2010-12-22 | 2012-07-11 | 北大方正集团有限公司 | 业务系统开发方法、平台及系统 |
CN103593752A (zh) * | 2013-11-29 | 2014-02-19 | 武汉大学 | 一种基于情境约束的业务流程适应性配置方法及系统 |
Non-Patent Citations (2)
Title |
---|
俞丽颖: "基于规则的医保智能审核系统的研究", 《CNKI》 * |
彭 磊: "改进的规则引擎在医保系统中的应用", 《软件时空》 * |
Cited By (41)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108920222A (zh) * | 2018-07-12 | 2018-11-30 | 北京京东金融科技控股有限公司 | 一种基于规则引擎的业务处理方法和装置 |
CN109144374A (zh) * | 2018-09-27 | 2019-01-04 | 范若愚 | 基于可视化规则引擎的业务处理方法、系统及相关设备 |
US11647100B2 (en) | 2018-09-30 | 2023-05-09 | China Mobile Communication Co., Ltd Research Inst | Resource query method and apparatus, device, and storage medium |
CN111124476A (zh) * | 2018-10-31 | 2020-05-08 | 阿里巴巴集团控股有限公司 | 业务规则配置和创建方法及装置 |
CN111124476B (zh) * | 2018-10-31 | 2023-09-08 | 阿里巴巴集团控股有限公司 | 业务规则配置和创建方法及装置 |
CN109685375A (zh) * | 2018-12-26 | 2019-04-26 | 重庆誉存大数据科技有限公司 | 一种基于半结构化文本数据的企业风险规则引擎运算方法 |
CN109685375B (zh) * | 2018-12-26 | 2020-10-30 | 重庆誉存大数据科技有限公司 | 一种基于半结构化文本数据的企业风险规则引擎运算方法 |
CN109977009A (zh) * | 2019-02-27 | 2019-07-05 | 深圳云步互娱网络科技有限公司 | 一种基于规则引擎的开关状态控制方法及系统 |
CN109977009B (zh) * | 2019-02-27 | 2023-04-25 | 深圳云步互娱网络科技有限公司 | 一种基于规则引擎的开关状态控制方法及系统 |
CN110297620A (zh) * | 2019-05-17 | 2019-10-01 | 苏宁易购集团股份有限公司 | 一种基于Drools的动态规则维护和生成的方法 |
CN110297620B (zh) * | 2019-05-17 | 2022-11-25 | 苏宁易购集团股份有限公司 | 一种基于Drools的动态规则维护和生成的方法 |
CN112448971B (zh) * | 2019-08-29 | 2024-01-23 | 中科云谷科技有限公司 | 数据解析平台、数据解析方法及存储介质 |
CN112448971A (zh) * | 2019-08-29 | 2021-03-05 | 中科云谷科技有限公司 | 数据解析平台、数据解析方法及存储介质 |
CN110826911B (zh) * | 2019-11-06 | 2020-08-21 | 南京星环智能科技有限公司 | 基于大数据的决策方法、设备及介质 |
CN110826911A (zh) * | 2019-11-06 | 2020-02-21 | 南京星环智能科技有限公司 | 基于大数据的决策方法、设备及介质 |
CN111026797A (zh) * | 2019-12-02 | 2020-04-17 | 卫盈联信息技术(深圳)有限公司 | 业务数据处理方法、服务器及存储介质 |
CN111061767B (zh) * | 2019-12-10 | 2023-05-05 | 美林数据技术股份有限公司 | 一种基于内存计算与sql计算的数据处理方法 |
CN111061767A (zh) * | 2019-12-10 | 2020-04-24 | 美林数据技术股份有限公司 | 一种基于内存计算与sql计算的数据处理方法 |
CN111124548A (zh) * | 2019-12-31 | 2020-05-08 | 科大国创软件股份有限公司 | 一种基于yaml文件的规则解析方法及系统 |
CN111124548B (zh) * | 2019-12-31 | 2023-10-27 | 科大国创软件股份有限公司 | 一种基于yaml文件的规则解析方法及系统 |
CN111861382B (zh) * | 2020-06-28 | 2024-04-09 | 微民保险代理有限公司 | 业务资格认证方法、装置、系统、计算机设备和存储介质 |
CN111861382A (zh) * | 2020-06-28 | 2020-10-30 | 微民保险代理有限公司 | 业务资格认证方法、装置、系统、计算机设备和存储介质 |
CN111930364B (zh) * | 2020-08-11 | 2021-09-14 | 上海亿锎智能科技有限公司 | 通过动态配置规则装置实现流程节点按条件流转的方法 |
CN111930364A (zh) * | 2020-08-11 | 2020-11-13 | 上海亿锎智能科技有限公司 | 通过动态配置规则装置实现流程节点按条件流转的方法 |
CN111968022B (zh) * | 2020-08-12 | 2021-10-26 | 武汉易瑞信息技术股份有限公司 | 一种基于json配置方式的业务编号生成系统及方法 |
CN111968022A (zh) * | 2020-08-12 | 2020-11-20 | 武汉易瑞信息技术股份有限公司 | 一种基于json配置方式的业务编号生成系统及方法 |
CN112085201A (zh) * | 2020-09-22 | 2020-12-15 | 广州医药信息科技有限公司 | 一种基于微服务应用的逻辑推演方法 |
CN112230616A (zh) * | 2020-10-28 | 2021-01-15 | 腾讯科技(深圳)有限公司 | 一种联动控制方法、装置及联动中间件 |
CN112394922A (zh) * | 2020-12-02 | 2021-02-23 | 成都新希望金融信息有限公司 | 决策配置方法、业务决策方法和决策引擎系统 |
CN112685383A (zh) * | 2020-12-25 | 2021-04-20 | 山东众阳健康科技集团有限公司 | 一种基于规则组件的业务规则批量生成方法及系统 |
CN113220281A (zh) * | 2021-04-30 | 2021-08-06 | 北京字跳网络技术有限公司 | 一种信息生成方法、装置、终端设备及存储介质 |
CN113468388A (zh) * | 2021-06-30 | 2021-10-01 | 深圳集智数字科技有限公司 | 控制方法、装置、服务器及存储介质 |
CN113468388B (zh) * | 2021-06-30 | 2024-05-03 | 深圳集智数字科技有限公司 | 控制方法、装置、服务器及存储介质 |
CN115167826A (zh) * | 2022-05-27 | 2022-10-11 | 唐旸 | 中文业务规则引擎的实现方法及装置、服务端、存储介质 |
CN115167826B (zh) * | 2022-05-27 | 2023-05-05 | 唐旸 | 中文业务规则引擎的实现方法及装置、服务端、存储介质 |
CN114679504B (zh) * | 2022-05-27 | 2022-09-06 | 成都数联云算科技有限公司 | Udp报文解析方法、装置及计算机设备 |
CN114679504A (zh) * | 2022-05-27 | 2022-06-28 | 成都数联云算科技有限公司 | Udp报文解析方法、装置及计算机设备 |
CN115061689B (zh) * | 2022-06-15 | 2023-06-13 | 五矿国际信托有限公司 | 一种存储过程转java代码的框架设计方法及系统 |
CN115061689A (zh) * | 2022-06-15 | 2022-09-16 | 五矿国际信托有限公司 | 一种存储过程转java代码的框架设计方法及系统 |
CN115080653A (zh) * | 2022-08-23 | 2022-09-20 | 北京华御数观科技有限公司 | 一种数据处理用通用模型 |
CN115225719A (zh) * | 2022-08-31 | 2022-10-21 | 中建电子商务有限责任公司 | 一种分布式定向网络数据采集解析方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107704265B (zh) | 2020-08-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107704265A (zh) | 一种面向业务流可配置的规则生成方法 | |
CN107644323A (zh) | 一种面向业务流的智能审核系统 | |
JP5431513B2 (ja) | コマンド索引のためのローカル記憶装置および拡張記憶装置を使用したコマンドスクリプトの解釈 | |
CN102339316B (zh) | 使用基于类型的状态机的查询约束编码 | |
Xu et al. | Automatic extraction of OWL ontologies from UML class diagrams: a semantics-preserving approach | |
US20090144229A1 (en) | Static query optimization for linq | |
CN108694214A (zh) | 数据报表的生成方法、生成装置、可读介质及电子设备 | |
CN104063314A (zh) | 一种测试数据自动生成装置及方法 | |
CN108766507B (zh) | 一种基于CQL与标准信息模型openEHR的临床质量指标计算方法 | |
CN114528846A (zh) | 一种用于人工智能的概念网络及其生成方法 | |
CN116483850A (zh) | 数据处理方法、装置、设备以及介质 | |
Agrawal et al. | An enhanced extract-transform-load system for migrating data in Telecom billing | |
Lu et al. | Zen-CC: An automated and incremental conformance checking solution to support interactive product configuration | |
CN102486731B (zh) | 增强软件的软件调用栈的可视化的方法、设备和系统 | |
CN113687827B (zh) | 基于微件的数据列表生成方法、装置、设备及存储介质 | |
CN114385145A (zh) | 一种Web系统后端架构设计方法及计算机设备 | |
CN107368302A (zh) | 一种基于本体的设计模式识别方法 | |
CN115345153A (zh) | 一种基于概念网络的自然语言生成方法 | |
Orsi | Context based querying of dynamic and heterogeneous information sources. | |
Schiffer et al. | Tractable parsing for CCGs of bounded degree | |
Botting et al. | Analysis of the STEP standard data access interface using formal methods | |
Forcher et al. | Semantic logging: Towards explanation-aware das | |
CN114138425B (zh) | 一种基于公式生成表单的方法及装置 | |
WO1999027432A2 (en) | System and method for integrating heterogeneous information | |
Lämmel et al. | Foundations of Textual Concrete Syntax |
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 |