1.本发明涉及互联网
技术领域:
:,具体涉及一种规则引擎规则脚本的生成方法及装置。
背景技术:
::2.目前在金融行业中,或者其他不同的行业,存在多种不同的情况,系统需要针对这些不同的情况有针对性的处理规则,例如不同用户的利率定价根据用户的客群及还款方式来决定,用户的还款日是根据用户在借款日期不同而有差异,对合作方的分润规则也可能根据用户的客群来进行分润。处理这些功能大体相同,但众多条件不同,相应的结果也不同的处理逻辑可以使用规则引擎进行规则的配置。而一般规则引擎使用规则脚本来定义其行为,若在此过程中需要更改,新增或删除某一个规则,又要重新进行开发测试和部署,费时费力。同时这种处理方式对于没有技术背景的业务人员来说,无疑是困难的。3.现有技术的生成规则脚本的方法包括:通过预设的用户界面让技术人员可以输入其需要相应的条件及选择对应的结果动作,可以直接生成对应的groovy规则脚本,然后用户可以用生成的脚本部署到相应的规则引擎中中,以用于规则引擎的执行。这种方案的基本原理是用户通过预设的规则配置界面,选择配置的条件和结果动作,并实时生成规则脚本,无需人工编写脚本,进而避免了人工编写脚本可能出现的错误。现有技术方案可参考的专利文献号为:专利[cn106126215a]现有技术方案的缺陷:上述发明预置的用户界面仍然需要用户具备相关的技术知识,对于毫无技术背景的业务人员来说无疑相当困难,业务人员通常希望使用一些直观的用户界面可以让其方便地配置规则,即便没有相应的技术背景,而该发明显然无法实现。其次,该发明没有对用户配置的逻辑规则进行保存,而是直接生成了对应的规则脚本,将来增加审核功能将非常困难,同时若规则引擎使用的规则脚本语言发生变更,存量的规则需要重新配置,这对于生产环境来说是无法接受的。技术实现要素:[0004]为了解决上述现有技术中存在的问题,本发明拟提供了一种规则引擎规则脚本的生成方法及装置,拟解决现有生成规则脚本的方法存在没有相应技术背景的业务人员难以上手,并且由于直接生成规则脚本在需要更换规则引擎的时候需要把存量规则重新配置的问题。[0005]一种规则引擎规则脚本的生成方法,包括如下步骤:步骤1:用户在预设的某一种规则配置界面上配置其需要的逻辑规则,得到逻辑规则列表;步骤2:将步骤1所得逻辑规则列表与数据库已有数据进行对比,若有不同则保存到数据库中;步骤3:逻辑规则列表保存到数据库后,触发脚本生成器,由脚本生成器生成对应规则的规则脚本,然后保存。[0006]优选的,在所述步骤1中,所述规则配置界面由逻辑规则定义来渲染画面。[0007]优选的,所述逻辑规则定义为一种xml描述文件,其定义了一类逻辑规则涵盖的元素包括条件,条件中可选字段,条件操作符及结果字段,在增加一类逻辑规则的时候则新增一种与该逻辑规则类型对应的逻辑规则定义。[0008]优选的,在所述步骤2中,所述逻辑规则列表保存到数据库是按照逻辑规则列表的逻辑规则结构图保存的,其中逻辑规则列表的逻辑规则结构图包括:规则集表定义了规则类型、规则脚本、规则名称、规则集编号;规则表定义了规则编号、规则集编号、规则描述及规则优先级;规则优先级用于当同一个输入同时满足多条规则条件的时候,优先使用优先级高的规则的结果;组号用于处理条件间的关系,同组条件关系为“与”,不同组条件的关系为“或”;条件表定义了规则编号、操作符、输入字段、预设值、组号,其中操作符用于判断输入字段的值和预设值之间的关系是否满足某逻辑规则的条件;结果表定义了规则编号、设置的结果字段、设置的结果值,当输入满足某规则时,将与该规则对应设置的结果字段设置为与该规则对应的结果值。[0009]优选的,所述规则集表与规则表是1对n(n≥1)的关系,通过规则集号相关联;所述规则表与规则条件表是1对m1(m1≥1)的关系,通过规则编号相关联;所述规则表与结果表是1对m2(m2≥1)的关系,通过规则编号相关联。[0010]优选的,所述步骤3包括以下步骤,步骤3.1:脚本生成器在被触发时,会查询数据库,获取步骤2中新增的逻辑规则列表;步骤3.2:脚本生成器读取该类型逻辑规则定义,组装脚本的package语句,import语句;步骤3.3:脚本生成器读取步骤3.1所述逻辑规则列表中的规则表,基于规则表中的规则优先级和规则编号选取一条规则组装规则定义的rule语句;步骤3.4:脚本生成器读取步骤3.2所述逻辑规则定义并根据步骤3.3中选取规则的规则编号获取与该规则编号对应的规则条件表,基于逻辑规则定义和规则条件表中的数据生成groovy语言的条件脚本,得到when语句;步骤3.5:脚本生成器读取步骤3.2所述逻辑规则定义并根据步骤3.3中选取规则的规则编号获取与该规则编号对应的结果表,基于逻辑规则定义和结果表中的数据生成groovy语言的结果脚本,得到then语句;步骤3.6:结果脚本完成后拼接一个end语句便可得到规则表中一条规则的完整的规则脚本;步骤3.7:循环步骤3.3到步骤3.6直到新增逻辑规则列表中的所有规则都生成了规则脚本,并将规则脚本保存到规则集表中的规则脚本字段。[0011]优选的,所述规则脚本保存以后,当规则引擎需要执行某一规则时,规则引擎直接从数据库中存储规则脚本的位置查询相应的规则脚本进行编译。[0012]优选的相应规则脚本编译以后,在规则引擎收到输入条件时会运行相应的规则脚本进行规则判断,最终按照规则配置输出相应的结果。[0013]一种规则引擎规则脚本的生成装置,包括逻辑规则采集模块,脚本生成器模块,规则引擎模块;其中逻辑规则采集模块用于采集用户配置的逻辑规则,生成逻辑规则列表并存储,然后脚本生成器模块获取新存储的逻辑规则列表并生成相应规则脚本传输到规则引擎模块;规则引擎模块将获取到的规则脚本进行保存然后在需要执行该规则时则直接找出其规则脚本并编译,当收到输入条件时进行规则判断并按照规则配置输出相应结果。[0014]优选的,所述逻辑规则采集模块中包括用户界面,逻辑规则数据库,其中逻辑规则数据库用于存储不同类型的逻辑规则定义描述文件和逻辑规则列表,用户界面根据用户选择新增的逻辑规则对应类型的逻辑规则描述文件生成相应的界面内容用于用户配置规则;所述规则引擎模块包括规则脚本数据库,用于存储脚本生成器模块传输的规则脚本。[0015]本发明的有益效果包括:本技术方案引入逻辑规则概念,用户配置的条件和结果都是逻辑规则的部分,与最终的规则脚本无关,用户界面只需要跟逻辑规则相关联即可,使用户可以专注于业务规则的配置,降低了用户的配置上手难度,并且可以非常容易地增加相应的规则审核功能。同时用户配置的业务规则可以实时部署到生产环境,无需通过专业的工具,以免增加额外的成本;除此之外数据库中保存的逻辑规则,与使用到的规则引擎无关,更换引擎时只需要更新相应的脚本生成器即可,数据库中保存的逻辑规则仍然可以使用。附图说明[0016]图1为实施例1一种规则引擎规则脚本的生成方法流程示意图。[0017]图2为实施例1配置的用户界面示例。[0018]图3为实施例1规则表逻辑结构图。[0019]图4为实施例1规则结构图。[0020]图5为实施例2一种规则引擎规则脚本的生成装置结构示意图。具体实施方式[0021]为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本技术一部分实施例,而不是全部的实施例。因此,以下对在附图中提供的本技术的实施例的详细描述并非旨在限制要求保护的本技术的范围,而是仅仅表示本技术的选定实施例。基于本技术的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本技术保护的范围。[0022]实施例1下面结合附图1对本发明的具体实施例做详细的说明;一种规则引擎规则脚本的生成方法,包括如下步骤:运营管理人员需要对某一客群新增相关的利率规则配置,则其可以在预设的用户界面上选择利率规则类型,其中规则类型定义为一种xml描述文件,其定义了一种规则涵盖的元素类型包括条件,条件中可选字段,条件操作符及结果字段等,具体内容如下:《rulename="interestrule"packagename="com.xwbank.rule"desc="利息规则"》《conditionwrapper="com.xwbank.config.rule.entities.condition.commonconditionwrapper"ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀalias="condition"》《attributeattribute="custgroup"type="java.lang.string"description="客群编码"》《allowoperator》none《/allowoperator》《allowoperator》stringequal《/allowoperator》《allowoperator》stringin《/allowoperator》《/attribute》《attributeattribute="howtorepay"type="java.lang.integer"description="还款类型"enumeration="howtorepay"》《allowoperator》none《/allowoperator》《allowoperator》numberequal《/allowoperator》《/attribute》《attributeattribute="custlimit"type="java.math.bigdecimal"description="额度"》《allowoperator》none《/allowoperator》《allowoperator》moreorequal《/allowoperator》《allowoperator》morethan《/allowoperator》《allowoperator》lessorequal《/allowoperator》《allowoperator》lessthan《/allowoperator》《allowoperator》between《/allowoperator》《allowoperator》numberequal《/allowoperator》《allowoperator》numbernotequal《/allowoperator》《/attribute》《/condition》《resultwrapper="com.xwbank.config.rule.entities.result.interestruleresultwrapper"ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀalias="result"》《attributeseq="1"attribute="intrruletableid"type="java.lang.string"description="利率表id"ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀinner="false"》《script》《![cdata[result.setintrruletableid("@param");]]》《/script》《/attribute》《attributeseq="2"attribute="ruleid"type="java.lang.string"description="规则id"ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀinner="true"》《script》《![cdata[result.setruleid("@param");]]》《/script》《/attribute》《/result》《/rule》用户界面则根据利率规则类型定义来渲染界面,给出相关的可选的条件、条件间关系及结果,用户可以根据需求选择其中一个条件或几个条件进行配置规则。条件间关系是指当存在多个条件时,条件之间的关系是“与”、“或”的关系,预设的用户界面示例参考附图2。[0023]用户配置规则完成后得到与该规则类型定义涵盖元素相对应的数据,并生成逻辑规则列表,所述逻辑规则列表的逻辑规则结构图包括规则集表、规则表、条件表、结果表;其中规则集表定义了规则类型、规则脚本、规则名称、规则集编号;规则表定义了规则编号、规则集编号、规则描述及优先级,优先级用于当同一个输入同时满足多条规则的条件时候,使用优先级高的规则的结果;条件表定义了规则编号、操作符、输入字段、预设值、组号,操作符是指输入字段的值和预设值满足操作符的条件,例如:输入字段的值等于预设值,输入字段的值在预设值的区间内,输入字段的值在预设值的集合内等,组号用于处理条件间的关系,同组条件关系为“与”,不同组条件的关系为“或”;结果表定义了规则编号、设置的字段、设置的值,目的是当输入满足该规则时,将某一字段设置为结果中的值;规则集表与规则表是1对n(n≥1)的关系,通过规则集号相关联;规则表与规则条件表是1对m1(m1≥1)的关系,通过规则编号相关联;所述规则表与结果表是1对m2(m2≥1)的关系,通过规则编号相关联,具体示意图参考附图3;将新生成逻辑规则列表与数据库中已有逻辑规则列表进行对比,若此逻辑规则列表在数据库中已有相同列表但数据有所不同,则将新增逻辑规则列表数据导入该相同列表,进行数据更新;若此逻辑规则列表在数据库中未有相同列表,则作为新增列表类型存入数据库中;逻辑规则列表保存到数据库后会触发脚本生成器,脚本生成器查询新增的逻辑规则列表并生成相应规则脚本,具体步骤如下:步骤1:脚本生成器在收到脚本生成的请求时,会查询逻辑规则数据库,获取数据库中新增的逻辑规则列表,获取新增逻辑规则的结构,具体示意图参考附图4;步骤2:脚本生成器读取该类型逻辑规则定义,组装脚本的package语句,import语句,具体内容如下:packagecom.xwbank.rule;importcom.xwbank.config.rule.entities.condition.repaydateruleconditionwrapper;importcom.xwbank.config.rule.entities.result.repaydateruleresultwrapper;步骤3:脚本生成器读取步骤1所述逻辑规则列表中的规则表,基于规则表中的规则优先级和规则编号选取一条规则组装规则定义的rule语句,具体内容如下:rule"rule_001"salience0步骤4:脚本生成器读取步骤2所述逻辑规则定义并根据步骤3中选取规则的规则编号获取与该规则编号对应的规则条件表,基于逻辑规则定义和规则条件表中的数据生成groovy语言的条件脚本,得到when语句,具体内容如下:whencondition:com.xwbank.config.rule.entities.condition.repaydateruleconditionwrapper(loandate》=1.0&&loandate《=27.0)result:com.xwbank.config.rule.entities.result.repaydateruleresultwrapper()步骤5:脚本生成器读取步骤3.2所述逻辑规则定义并根据步骤3.3中选取规则的规则编号获取与该规则编号对应的结果表,基于逻辑规则定义和结果表中的数据生成groovy语言的结果脚本,得到then语句,具体内容如下:thenresult.setruleid("rule_001");result.setrepaydate("n");步骤6:结果脚本完成后拼接一个end语句便可得到规则表中一条规则的完整的规则脚本,具体内容如下;packagecom.xwbank.rule;importcom.xwbank.config.rule.entities.condition.repaydateruleconditionwrapper;importcom.xwbank.config.rule.entities.result.repaydateruleresultwrapper;rule"rule_001"salience0whencondition:com.xwbank.config.rule.entities.condition.repaydateruleconditionwrapper(loandate》=1.0&&loandate《=27.0)result:com.xwbank.config.rule.entities.result.repaydateruleresultwrapper()thenresult.setruleid("rule_001");result.setrepaydate("n");end步骤7:循环步骤3.3到步骤3.6直到新增逻辑规则列表中的所有规则都生成了规则脚本,并将规则脚本保存到规则集表中的规则脚本字段,此实施例新增逻辑规则列表中仅包含两条规则,所得最终规则脚本如下;packagecom.xwbank.rule;importcom.xwbank.config.rule.entities.condition.repaydateruleconditionwrapper;importcom.xwbank.config.rule.entities.result.repaydateruleresultwrapper;rule"rule_001"salience0whencondition:com.xwbank.config.rule.entities.condition.repaydateruleconditionwrapper(loandate》=1.0&&loandate《=27.0)result:com.xwbank.config.rule.entities.result.repaydateruleresultwrapper()thenresult.setruleid("rule_001");result.setrepaydate("n");endrule"rule_002"salience1whencondition:com.xwbank.config.rule.entities.condition.repaydateruleconditionwrapper(loandate》=28)result:com.xwbank.config.rule.entities.result.repaydateruleresultwrapper()thenresult.setruleid("rule_002");result.setrepaydate("28");end上述规则脚本生成保存完毕之后,当规则引擎需执行相应规则时,规则引擎直接从数据库中规则脚本保存位置查询相应的规则脚本并进行编译;当收到输入条件时,则运行相应的规则脚本进行规则的判断,最终按照规则配置输出相应的结果。[0024]本发明克服了现有技术中规则与规则引擎无法解耦的缺点,采用逻辑规则概念,通过先生成逻辑规则,再生成具体的规则引擎的脚本的方式,实现规则与规则引擎的解耦;本发明由于将规则与规则引擎解耦,可以对用户界面进行一步优化,使业务人员可以专注于业务规则的配置,降低了业务人员的配置上手难度;而且业务人员配置的业务规则可以实时部署到生产环境,无需通过专业的工具,以免增加额外的成本。[0025]实施例2参照附图5所示一种规则引擎规则脚本的生成装置的结构示意图,该装置可以是电子设备上的模块、程序段或代码。应理解,该装置与附图1方法实施例对应,能够执行附图1方法实施例涉及的各个步骤,该装置具体的功能可以参见实施例1中的描述,为避免重复,此处适当省略详细描述。如附图5所示该装置包括逻辑规则采集模块,脚本生成器模块,规则引擎模块,逻辑规则采集模块包括用户界面、逻辑规则数据库,其中用户界面用于采集用户部署的逻辑规则,逻辑规则数据库中保存有每类规则的逻辑规则定义描述文件,逻辑规则数据库与用户界面相连接,根据用户选择新增的逻辑规则类型的不同,配置不一样的用户界面,然后将用户输入的逻辑规则按照逻辑规则列表结构进行保存,逻辑规则列表保存到逻辑规则数据库的同时触发脚本生成器模块,脚本生成器模块再从逻辑规则数据库中获取新保存的逻辑规则列表并结合相应类型的逻辑规则定义描述文件生成规则脚本,而后将生成的规则脚本传输到规则引擎模块,规则引擎模块将得到的规则脚本保存到规则脚本数据库,当规则引擎模块需要执行某规则时先在规则脚本数据库中搜寻对应的规则脚本并进行编译然后获取到输入条件的时候,会运行相应的规则脚本进行规则的判断,最终按照规则配置输出相应的结果。本发明克服了现有技术中规则与规则引擎无法解耦的缺点,采用逻辑规则概念,通过先生成逻辑规则,再生成具体的规则引擎的脚本的方式,实现规则与规则引擎的解耦;本发明由于将规则与规则引擎解耦,可以对用户界面进行一步优化,使业务人员可以专注于业务规则的配置,降低了业务人员的配置上手难度;而且业务人员配置的业务规则可以实时部署到生产环境,无需通过专业的工具,以免增加额外的成本。[0026]以上所述实施例仅表达了本技术的具体实施方式,其描述较为具体和详细,但并不能因此而理解为对本技术保护范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术技术方案构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。当前第1页12当前第1页12