规则引擎教程--多维决策表
规则引擎配置指标-概述说明以及解释

规则引擎配置指标-概述说明以及解释1.引言1.1 概述概述部分旨在引入读者进入文章的主要内容,为读者提供文章的背景和概念基础,以帮助读者更好地理解后续内容。
在这篇长文中,我们将讨论规则引擎配置指标,这是指在配置规则引擎时需要考虑和设定的一些关键指标。
规则引擎作为一种关键的技术工具,在各个领域都起到了重要的作用。
它被广泛应用于金融、电信、保险、制造等各个行业,用于处理大量复杂的业务规则和决策逻辑。
规则引擎可以通过配置规则来实现业务逻辑的自动化执行,从而提高业务处理的效率和准确性。
然而,在配置规则引擎时,我们需要考虑和设定一些关键的指标,以确保规则引擎的运行和性能能够达到预期的要求。
这些指标包括但不限于规则匹配的效率、规则执行的准确性、规则的维护和扩展性,以及规则引擎与其他系统的集成等。
在接下来的文章中,我们将深入探讨这些规则引擎配置指标的分类、重要性和实际应用。
我们将首先介绍规则引擎的基本概念和原理,以帮助读者建立对规则引擎的初步认识。
随后,我们将重点关注配置规则引擎的重要性,并详细探讨规则引擎配置指标的各个方面。
最后,我们将总结本文的主要内容,并强调规则引擎配置指标的重要性。
同时,我们也将展望未来,探讨规则引擎配置指标的发展趋势和应用前景。
通过阅读本文,读者将能够全面了解规则引擎配置指标的相关知识,并了解如何在实际应用中合理设置这些指标。
无论是从事规则引擎配置和管理的技术人员,还是对规则引擎感兴趣的领域专家,本文都将为您提供有价值的参考信息。
请继续阅读后续章节,以深入了解规则引擎配置指标的重要性和实践应用。
1.2 文章结构文章结构部分应包括以下内容:文章结构部分主要讲述了本文的整体架构和内容安排。
通过明确文章的结构,读者可以更清晰地了解文章的脉络和主题,有助于读者更好地理解和吸收文章的内容。
本文按照以下结构组织:1. 引言部分:介绍了本文的背景和主题,概述了规则引擎配置指标的重要性和应用场景。
2. 正文部分:主要分为三个小节,分别是理解规则引擎、配置规则引擎的重要性以及规则引擎配置指标的分类。
drools Decision Table(决策表)

Drools决策表的使用1简单了解这几天在研究drools,drools到底是怎么与决策表交互的呢,报这个疑问开始了寻找之路。
●何时使用决策表——如果规则能够被表达为模板+数据的格式,那你应该考虑使用决策表。
决策表中的每一行就是对应模板的一行数据,将产生一个规则。
●运行决策表——Drools引擎所部署的系统中执行决策表。
首先,决策表转换成的Drools规则语言(DRL),然后执行规则引擎需求。
这意味着它是可能的业务规则的变更,无需停止和启动,或重新部署任何软件。
2创建java类●公共java类:Caluculation.java●执行java类及规则文件(drl文件):CalculationDrl.java和calculation.drl●执行java类及决策表(xml文件):CalculationXls.java和calculation.xls(运行决策表方法一)●执行java类及决策表(xml文件)生成规则,将得到的规则放入规则文件中(drl文件中):GenerationRules.java、calculation.xls、calculations.drl、CalculationDrlXls (运行决策表方法二)2.1.1Caluculation.javapackage com.flagleader.bean;public class Calculation {private double wage;//当月工资private double actualwage;//当月税后工资private double wagemore;//全月应纳税所得额private double cess;//税率private double preminus;//速算扣除数private double wageminus;//当月工资扣减数/*** 当月工资* @return*/public double getWage() {return wage;}public void setWage(double wage) {this.wage = wage;}/*** 当月税后工资* @return*/public double getActualwage() {return actualwage;}public void setActualwage(double actualwage) { this.actualwage = actualwage;}/*** 全月应纳税所得额* @return*/public double getWagemore() {return wagemore;}public void setWagemore(double wagemore) { this.wagemore = wagemore;}/*** 税率* @return*/public double getCess() {return cess;}public void setCess(double cess) {this.cess = cess;}/*** 速算扣除数* @return*/public double getPreminus() {return preminus;}public void setPreminus(double preminus) {this.preminus = preminus;}/*** 当月工资扣减数* @return*/public double getWageminus() {return wageminus;}public void setWageminus(double wageminus) {this.wageminus = wageminus;}public Calculation() {}public Calculation(double wage) {super();this.wage = wage;}public Calculation(double wage,double wagemore) {super();this.wage = wage;this.wagemore=wagemore;}@Overridepublic String toString() {return"当月工资="+wage+"\n当月税后工资="+actualwage+"\n全月应纳税所得额="+wagemore+"\n税率="+cess+"\n速算扣除数="+preminus+"\n当月工资扣减数="+wageminus;}}2.1.2calculation.drlpackage com.flagleader.beanglobal Calculation cal;no-loop truerule"全月应纳税额"salience 3when$cal : Calculation(wage>0)then#System.out.println("-----全月应纳税额------");c al.setWagemore(cal.getWage()-3500);update(cal);endrule"设置税率"salience 2whene val(true)then#System.out.println("-----设置税率------");i f ( cal.getWagemore()<=1500 ) {cal.setCess(0.03);cal.setPreminus(0);}else if ( cal.getWagemore()>1500 && cal.getWagemore()<=4500 ) {cal.setCess(0.1);cal.setPreminus(105);}else if (cal.getWagemore()>4500 && cal.getWagemore()<=9000 ) { cal.setCess(0.2);cal.setPreminus(555);}else if(cal.getWagemore()>9000 && cal.getWagemore()<=35000 ) { cal.setCess(0.25);cal.setPreminus(1005);}else if(cal.getWagemore()>35000 && cal.getWagemore()<=55000) { cal.setCess(0.3);cal.setPreminus(2755);}else if ( ( cal.getWagemore()>55000 &&cal.getWagemore()<=80000 ) ) {cal.setCess(0.35);cal.setPreminus(5505);}else if ( cal.getWagemore()>80000 ) {cal.setCess(0.45);cal.setPreminus(13505);}insert(cal);endrule"税后工资"salience 1whene val(true)then#System.out.println("-----税后工资------");cal.setWageminus(cal.getWagemore()*cal.getCess()-cal.getPreminus( ));c al.setActualwage(cal.getWage()-cal.getWageminus());insert(cal);end2.1.3CalculationDrl.javapackage com.flagleader.bean;import org.apache.log4j.Logger;import org.drools.KnowledgeBase;import org.drools.builder.KnowledgeBuilder;import org.drools.builder.KnowledgeBuilderFactory;import org.drools.builder.ResourceType;import org.drools.io.ResourceFactory;import org.drools.runtime.StatefulKnowledgeSession;@SuppressWarnings("restriction")public class CalculationDrl {static Logger logger = Logger.getLogger(CalculationDrl.class);public static void main(String[] args) {("开始");KnowledgeBuilderkBuilder=KnowledgeBuilderFactory.newKnowledgeBuilder();//规则生成器:将编写好的规则进行编译kBuilder.add(ResourceFactory.newClassPathResource("calculation.dr l", CalculationDrl.class), ResourceType.DRL);//添加规则到规则生成其中进行编译KnowledgeBase kBase=kBuilder.newKnowledgeBase();//收集应用当中的知识定义知识库对象kBase.addKnowledgePackages(kBuilder.getKnowledgePackages());//添加规则包StatefulKnowledgeSessionsession=kBase.newStatefulKnowledgeSession();//与规则的交互通道Calculation cal=new Calculation(10000);//输入当月工资session.setGlobal("cal", cal);session.insert(cal);//将对象添加到交互通道中session.fireAllRules();//执行规则session.dispose();//释放资源System.out.println(cal.toString());("结束");}}2.1.4calculation.xls2.1.5CalculationXls.javapackage com.flagleader.bean;import org.apache.log4j.Logger;import org.drools.KnowledgeBase;import org.drools.builder.DecisionTableConfiguration; import org.drools.builder.DecisionTableInputType;import org.drools.builder.KnowledgeBuilder;import org.drools.builder.KnowledgeBuilderFactory;import org.drools.builder.ResourceType;import org.drools.io.ResourceFactory;import org.drools.runtime.StatefulKnowledgeSession;@SuppressWarnings("restriction")public class CalculationXls {static Logger logger = Logger.getLogger(CalculationDrl.class);public static void main(String[] args) {("开始");DecisionTableConfigurationdtc=KnowledgeBuilderFactory.newDecisionTableConfiguration();dtc.setInputType(DecisionTableInputType.XLS);KnowledgeBuilderbuilder=KnowledgeBuilderFactory.newKnowledgeBuilder();builder.add(ResourceFactory.newClassPathResource("com/flagleader/ bean/calculation.xls",CalculationXls.class),ResourceType.DTABLE,dtc);KnowledgeBase base=builder.newKnowledgeBase();base.addKnowledgePackages(base.getKnowledgePackages());StatefulKnowledgeSessionsession=base.newStatefulKnowledgeSession();Calculation cal=new Calculation(10000,6500.0);session.insert(cal);session.fireAllRules();session.dispose();//释放资源("结束");}}2.1.6GenerationRules.javapackage com.flagleader.bean;import java.io.*;import org.drools.decisiontable.InputType;import org.drools.decisiontable.SpreadsheetCompiler;import org.junit.Test;public class GenerationRules {@Testpublic void compile() throws FileNotFoundException {File file = new File("E:\\qzxx_workspace\\calculation\\src\\main\\java\\com\\flagleade r\\bean\\calculation.xls");InputStream is = new FileInputStream(file);SpreadsheetCompiler converter = new SpreadsheetCompiler();String drl = pile(is, InputType.XLS);System.out.println("\n\n" + drl);}2.1.7calculations.drlpackage com.flagleader.bean//generated from Decision Tableimport com.flagleader.bean.Calculation;import ng.Object;function double getCes(double cess){//System.out.println("cess="+cess);return cess;}function double getPre(double preminus){//System.out.println("preminus="+preminus);return preminus;}global Calculation cal;rule"全月应纳税额"no-loop truesalience 65526when$cal : Calculation(wage>0)thenSystem.out.println("-----全月应纳税额------");c al.setWagemore(cal.getWage()-3500);update(cal);end// rule values at D11, header at D6rule"test_11"salience 65525whenCalculation(wagemore>0,wagemore<=1500) thencal.setCess(getCes(0.03));c al.setPreminus(getPre(0.00));insert(cal);end// rule values at D12, header at D6rule"test_12"salience 65524whenCalculation(wagemore>1500,wagemore<=4500) thencal.setCess(getCes(0.1));c al.setPreminus(getPre(105.00));i nsert(cal);end// rule values at D13, header at D6rule"test_13"salience 65523whenCalculation(wagemore>4500,wagemore<=9000) thencal.setCess(getCes(0.2));c al.setPreminus(getPre(555.00));i nsert(cal);end// rule values at D14, header at D6rule"test_14"salience 65522whenCalculation(wagemore>9000,wagemore<=35000) thencal.setCess(getCes(0.25));c al.setPreminus(getPre(1005.00));i nsert(cal);end// rule values at D15, header at D6rule"test_15"salience 65521whenCalculation(wagemore>35000,wagemore<=55000) thencal.setCess(getCes(0.3));c al.setPreminus(getPre(2755.00));i nsert(cal);end// rule values at D16, header at D6rule"test_16"salience 65520whenCalculation(wagemore>55000,wagemore<=80000)thencal.setCess(getCes(0.35));c al.setPreminus(getPre(5505.00));i nsert(cal);end// rule values at D17, header at D6rule"test_17"salience 65519whenCalculation(wagemore>80000,wagemore<=100000)thencal.setCess(getCes(0.45));c al.setPreminus(getPre(13505.00));i nsert(cal);endrule"税后工资"salience 65518whene val(true)thenS ystem.out.println("-----税后工资------"+cal.getCess());cal.setWageminus(cal.getWagemore()*cal.getCess()-cal.getPreminus( ));c al.setActualwage(cal.getWage()-cal.getWageminus());insert(cal);end2.1.8CalculationDrlXls.javapackage com.flagleader.bean;import org.apache.log4j.Logger;import org.drools.KnowledgeBase;import org.drools.builder.KnowledgeBuilder;import org.drools.builder.KnowledgeBuilderFactory;import org.drools.builder.ResourceType;import org.drools.io.ResourceFactory;import org.drools.runtime.StatefulKnowledgeSession;@SuppressWarnings("restriction")public class CalculationDrlXls {static Logger logger = Logger.getLogger(CalculationDrlXls.class);public static void main(String[] args) {("开始");KnowledgeBuilderkBuilder=KnowledgeBuilderFactory.newKnowledgeBuilder();//规则生成器:将编写好的规则进行编译kBuilder.add(ResourceFactory.newClassPathResource("calculations.d rl", CalculationDrlXls.class), ResourceType.DRL);//添加规则到规则生成其中进行编译KnowledgeBase kBase=kBuilder.newKnowledgeBase();//收集应用当中的知识定义知识库对象kBase.addKnowledgePackages(kBuilder.getKnowledgePackages());//添加规则包StatefulKnowledgeSessionsession=kBase.newStatefulKnowledgeSession();//与规则的交互通道Calculation cal=new Calculation(10000);//输入当月工资session.setGlobal("cal", cal);session.insert(cal);//将对象添加到交互通道中session.fireAllRules();//执行规则session.dispose();//释放资源System.out.println(cal.toString());("结束");}}3决策表资料决策表\Drools的- 决策表.htm原网址:/Decision+Tables决策表\Drools的- 决策表中的业务规则解释.htm原网址:/Business+rules+in+decision+tables+explained。
规则引擎教程--交叉决策表

交叉决策表交叉决策表 (1)1.1 业务需求 (2)2.1规则实现 (2)2.1.1 规则包创建 (2)2.1.2 变量定义 (3)2.1.3 创建交叉决策表 (3)2.1.4 规则实现 (4)3.1 测试 (9)3.1.1规则单元测试 (10)3.1.2 批量测试 (10)1.1 业务需求现需解决每个员工每个月(上半年)的基本业务工资。
由于每个员工每个月都有相对应的工资,同样的每个月也对应着每个员工,他们之间存在一一对应的关系。
这里我们就可以设计个“交叉决策表”,把月份和员工分别作为“交叉决策表”的横向和纵向条件,把工资作为“交叉决策表”的赋值元素。
需要注意的是:交叉决策表的赋值元素只能有一个!员工的工资清单如下:2.1规则实现2.1.1 规则包创建右键名为“功能解析”的工程,点击“新建规则包”,创建一个名为:“交叉决策表的”规则包,如下图所示:2.1.2 变量定义该规则包中需要在对象库中,定义三个变量:员工姓名(name),月份(month),基本工资(salary)。
如下图所示:2.1.3 创建交叉决策表右键名为“交叉决策表”的规则包,选择添加“交叉决策表”。
添加完成后,需将该决策表重命名为“员工基本工资”,操作截图如下所示:创建了“员工基本工资”的“交叉决策表”之后,需处理该决策表的业务逻辑。
2.1.4 规则实现在该例“交叉决策表”中,有两个条件:员工姓名、月份。
但是在“交叉决策表”中,横向条件是缺省存在的,所以在该“交叉决策表”的属性窗口只需一个纵向条件,然后在“赋值元素”中选择“基本工资”。
设置完成后,“交叉决策表”的属性如下图所示:属性设置完成后,我们要为该交叉决策表设置对应的条件,操作步骤如下图所示:员工姓名设置完成以后,我们还要在条件部分添加6种月份信息。
双击“基本工资”右下方的黑色区域,设置如下图所示的逻辑,步骤如下图所示:确认后,我们可以看到下图所示的页面:最后我们依次修改每个员工,每个月份的的工资,完成的结果如下:我们点击图中黑色框中的“交叉决策表条件”,可以看到具体的逻辑。
【原创】Drools规则引擎初窥---drl和决策表实现[实例]
![【原创】Drools规则引擎初窥---drl和决策表实现[实例]](https://img.taocdn.com/s3/m/bfe4631a54270722192e453610661ed9ad5155bf.png)
【原创】Drools规则引擎初窥---drl和决策表实现[实例]因项⽬需要,看了下drools规则引擎。
写了⼀个⽐较简单的drools的drl规则和决策表实现的例⼦。
规则说明: ⽹络商城要举办活动(奖励额外积分), 订单原价⾦额在 100以下, 不加分 100-500 加100分 500-1000 加500分 1000 以上加1000分1.建⽴最基本的Drools项⽬结构并引⼊必须的类库。
(这⾥采⽤junit来执⾏单元测试)。
创建⼀个Java Project,建⽴maven形式的源码包。
2.定义实体类Order.java1import java.util.Date;23public class Order {4private Date bookingDate;// 下单⽇期56private int amout;// 订单原价⾦额78private User user;// 下单⼈910private int score;//积分1112public Order(Date bookingDate,int amout, User user, int score){13this.bookingDate = bookingDate;14this.amout = amout;er = user;16this.score = score;17 }1819public Order(){20 }2122 //省略get、set⽅法5354 }3.定义实体User.javapublic class User {private String name;// 姓名private int level;// ⽤户级别public User(){}public User(String name, int level){ = name;this.level = level;}//省略get、set⽅法4.编写规则⽂件point-rules.drlpackage droolsimport com.wang.drools.point.Orderimport errule "zero"no-loop true//只检查⼀次lock-on-active truesalience 9 //值越⼤,优先级越⾼when//购物⾦额100以下不加分$s : Order(amout <= 100);then$s.setScore(0);update($s);endrule "add100"no-loop true//只检查⼀次lock-on-active truesalience 8 //值越⼤,优先级越⾼when//购物⾦额100以上500以下加100积分$s : Order(amout > 100 && amout <= 500);then$s.setScore(100);update($s);endrule "add500"no-loop true//只检查⼀次lock-on-active truesalience 6 //值越⼤,优先级越⾼when//购物⾦额500以上1000以下加500积分$s : Order(amout > 500 && amout <= 1000);then$s.setScore(500);update($s);endrule "add1000"no-loop true//只检查⼀次lock-on-active truesalience 5 //值越⼤,优先级越⾼when//购物⾦额1000以上加1000积分$s : Order(amout > 1000);then$s.setScore(1000);update($s);end说明:rule表⽰规则的开始,salience表⽰规则的优先级,当有多条规则同时存在是,优先级越⾼的越先被匹配执⾏。
规则引擎教程--数据库操作

数据库操作数据库操作 (1)1 业务需求 (2)2 操作实现 (2)2.1 创建规则工程对象库 (2)2.2 新建规则包数据库操作 (3)2.3 从dbs文件中导入表 (4)2.4 数据库表 (6)2.5 根据向导生成查询语句 (8)2.6 查询结果集 (13)2.7 SQL执行语句 (15)2.8 视图 (17)2.9 存储过程 (19)2.10 查询分析器 (21)2.11 生成数据库连接配置文件 (22)1 业务需求数据库操作。
2 操作实现2.1创建规则工程对象库点击菜单栏上的“文件”,点击菜单项中的“新建规则工程”,如下图:弹出对话框“创建新的工程”,在工程名称对应的文本框中输入“对象库”,如下图:点击确定,如下图:规则工程创建完成。
2.2新建规则包数据库操作选中工程名为“对象库”的工程,右键点击“对象库”,点击菜单项中的“新建规则包”,如下图:并将其命名为“数据库操作”,显示如下:“数据库操作”规则包创建完成。
2.3从dbs文件中导入表将“数据库操作”规则包点开,可以看到“对象库”,右键点击对象库,选择菜单项中的“从dbs文件中导入表”,如下图:弹出“打开”窗体,开始寻找dbs文件,找到后点击打开,如下图:弹出窗体,选择“部门信息”,点击“确定”,如下图:点击“部门信息”,查看“部门信息表数据”菜单项,显示如下:2.4数据库表右键点击数据库连接文件“hr”,点击菜单项中的“添加数据库表”,如下图:弹出窗体,选择点击下拉框,选择数据库表“loginlog”,显示如下:选好后点击“确定”,点击“loginlog”,查看“loginlog表数据”菜单项,显示如下:这样数据库表“loginlog”就添加进来了。
2.5根据向导生成查询语句右键点击数据库连接文件“hr”,点击菜单项中的“添加数据库表”,如下图:弹出“打开”窗体,开始寻找dbs文件,找到后点击打开,如下图:弹出窗体,选择“部门信息”,点击“确定”,如下图:弹出窗体,勾选上部门编号、部门名称,点击“下一步”,进行条件设置,如果不需要条件,可点击“完成”,如下图:勾选上部门编号,点击“完成”,如下图:这样根据部门编号查询部门编号和名称的查询语句就生成好了,将弹出窗口中的显示名称改为“根据部门编号查询部门信息”,然后点击“确定”,如下图:点击确定后,查询结果集也生成了,点击“根据部门编号查询部门信息”,查看“根据部门编号查询部门信息表数据”菜单项,会弹出窗体,该窗体的作用是输入条件,将1输入到部门编号文本框中,显示如下:点击“确定”,显示如下:这样结果集就生成好了。
Activiti6系列(1)-核心数据库表及字段注释说明

Activiti6系列(1)-核⼼数据库表及字段注释说明前⾔本⽂是根据《疯狂⼯作流讲义-Activiti6.0》⼀书中提取过来的,有兴趣的可以去当当⽹买这本书,讲的很不错,最后还有实战案例。
虽然是提取过来的,但完全靠⼿打梳理,觉得有⽤的⼩伙伴可以给予⼀定⽀持,谢谢。
共分为六⼤部分1、通⽤数据表2、流程存储数据表3、⾝份数据表4、运⾏时数据表5、历史数据表6、DMN规则引擎数据表⼀、通⽤数据表1、资源表,act_ge_bytearray⽤于保存和流程引擎相关的资源,只要调⽤了Activiti存储服务的API,涉及的资源均会被转换为byte数组保存到这个表中。
⼀般情况下,Activiti使⽤这个表来保存字符串、流程⽂件的内容、流程图⽚内容。
主要包含如下字段:字段注释REV_数据版本,Activiti为⼀些有可能会被频繁修改的数据表,加⼊该字段,⽤来表⽰该数据被操作的次数。
Name_资源名称,类型为varchar,长度为255字节。
DEPLOYMENT_ID_⼀次部署可以添加多个资源,该字段与部署表act_re_deployment的主键相关联。
BYTES_资源内容,数据类型为longblob,最⼤可存4GB数据。
GENERATED_是否由Activiti⾃动产⽣的资源,0表⽰false,1为true。
2、属性表,act_ge_propertyActiviti将全部的属性抽象为key-value对,每个属性都有名称和值,使⽤act_ge_property来保存这些属性,该表有以下三个字段。
字段注释NAME_属性名称,varchar类型。
VALUE_属性值,varchar类型。
REV_数据的版本号。
⼆、流程存储数据表1、部署数据表,act_re_deployment。
部署信息会被保存在部署表中主要包含字段:字段注释NAME_部署的名称,可以调⽤Activiti的流程存储API来设置,类型为varchar,长度为255字节。
EasyRule规则引擎设计及使用说明

规则引擎使用文档2012年10月目录1.设计背景 (3)2.什么是规则引擎 (3)3.体系结构 (3)4.如何调用规则引擎 (5)5.配置使用说明 (6)6.引擎现有的公式、函数 (8)7.扩展规则引擎 (9)7.1.扩展函数 (9)7.2扩展公式 (9)8 结束语 (10)1.设计背景复杂企业级项目的开发以及其中随外部条件不断变化的业务规则(business logic),迫切需要分离商业决策者的商业决策逻辑和应用开发者的技术决策,并把这些商业决策放在中心数据库或其他统一的地方,让它们能在运行时(即商务时间)可以动态地管理和修改从而提供软件系统的柔性和适应性。
规则引擎正是应用于上述动态环境中的一种解决方法。
2.什么是规则引擎为了进一步规范系统数据的有效性、完整性,加强对数据的校验在目前各个系统是必不可少的一部分,规则引擎实现对系统数据的纵向、横向校验以及表与表之间逻辑关系校验,它可以作为一个子模块添加到任意以JAVA为基础的系统当中去,同时制定相关接口规范,开发人员只需按照规范便可以对它进行二次扩展性的开发。
3.体系结构规则引擎由以下六大部分组成:1.函数:负责对数据的格式化处理,比如数据统计。
2.公式:负责对数据的逻辑处理,比如值之间比大小。
3.规则配置文件:配置校验数据的规则。
4.规则模型配置文件:配置校验数据规则的集合。
5.公式、函数配置文件:配置系统所有相关的函数以及公式。
6.引擎主程序:调用规则引擎的入口。
7.数据库配置文件:与数据库相关的配置文件。
以上几大部分均可由开发人员灵活配置以便后续再次扩展,程序类包机构如下如下:规则文件节点属性类系统数据源接口数据计算公式接口数据计算函数接口规则引擎入口主程序工具类数据库操作接口计算公式、函数容器配置文件规则文件数据库配置类图如下:4.如何调用规则引擎将规则引擎作为子模块加入的主业务系统后,主业务系统只需在程序里调用规则引擎的com.git.easyrule.service.RuleService类的runRule()和runModel()方法即可,规则引擎启动之后便根据自身的规则配置项对数据进行校验处理,处理结果将存入规则文件配置的指定表当中。
URule可视化规则引擎入门教程v2.0

URule可视化规则引擎入门教程本文档以使用URule实现保险行业一个业务场景的详细过程为例,讲解URule可视化规则引擎的基本使用方法,通过该文档可以掌握采用URule规则引擎开发一个项目的完整过程及URule提供的各种决策工具的基本使用方法。
业务场景对申请参保寿险、意外险的客户,保险公司根据客户的年龄、性别、收缩压、舒张压、总胆固醇、低密度脂蛋白等客观情况,运用血压寿险评点规则和高胆固醇血症评点规则进行风险分析,分别计算得出血压寿险评点结果和高胆固醇血症评点结果,再运用总评点结果计算规则,得出总评点结果,用于承保决策。
名词解释:评点结果是保险公司为具体客户评定的一个数值或文字核保结论(如咨询再保公司、延期、拒保等),运用每条参保规则计算都会得出一个评点结果。
需求分析根据业务场景进行需求分析,梳理出具体业务流程及业务规则分别如下:1) 业务流程2) 血压寿险评点规则(女)女性-16-49女性-493)血压寿险评点规则(男)男性-16-49周岁男性-494)高胆固醇血症评点规则不同总胆固醇及低密度脂蛋白指标对应不同的级别,两者取最高级别,级别结合年龄得出评点结果,详见下表。
高胆固醇血症评定级别规则表 5不同级别对应评点如下:低血脂、正常、接近正常边缘轻度特别严重5)总评点结果规则总评点结果=血压寿险评点结果1+高胆固醇血症评点结果2,详细评点规则如下:采用URule开发实现1)开发环境搭建开发前需先搭建URule开发环境,搭建方法步骤请查看前面已经写过的文章“创建urule 规则引擎maven工程”(https:///p/629b59e2bede);若要搭建非Maven工程请点击查看URule安装与配置教程(/resources/doc/2an-zhuang-yu-pei-zhi.html)。
为了更便捷开发,本教程采用URule-Pro版本实现,具体版本号为2.2.0,按照此教程开发时需先将urule版本号改为一致,否则有些操作方法可能在低版本中尚不支持。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多维决策表
1.1业务需求 (2)
2.1 规则实现 (3)
2.1.1 规则包创建 (3)
2.1.2 变量定义 (4)
2.1.3 逻辑实现 (4)
2.1.4 保存和编译 (10)
3.1测试 (11)
1.1业务需求
在交叉决策表以及关联决策表中,条件之间的通常是一对一的关系(也可以实现一对多),但是在实际情况中往往会出现一对多的关系。
如在下面的列子中,一个学生要考很多学科,一个学期又要考很多场试。
若用交叉决策表会造成逻辑上的冗余,而多维决策却很容易的实现一对多的关系,。
学生考试的考试情况如下图所示:
我们可以看到,每个学生每学期要有三次考试,而每次考试要考三门学科。
这样多维决策表的条件部分应该有三个:学生姓名、考试类型、学科。
而结果只有一个:分数。
需要注意的是:虽然多维决策表可以实现多对多的关系,但是在每个条件之间必须公用同一个条件。
例如,在本例子中若实际情况中有的学生没有学习英语,但是在多维决策表中还是会有该学生的英语成绩的。
若要实现每个条件下的子条件不同,就要用交叉决策表来实现了。
2.1 规则实现
2.1.1 规则包创建
右键名为“功能解析”的工程,点击“新建规则包”,创建一个名为:“多维决策表的”规则包,如下图所示:
2.1.2 变量定义
需要在该规则包的对象库中,定义四个变量:学生姓名(stuName),考试(test),学科(subject),得分(score)。
如下图所示:
2.1.3 逻辑实现
创建名为“学生考试得分”的多维决策表,创建过程如下图所示:
创建好了“多维决策表”我们需要设置其属性,首先要在属性窗口,把条件个数设置为3,赋值元素设置成“得分”(score)。
操作流程如下所示:
属性设置好了之后,我们要在“多维决策表”的条件部分中设置具体的逻辑以及该条件下的“得分”。
条件设置过程如下:
按照上述的步骤,再添加两个学生,添加完成后,如下图所示:
这样学生姓名就设置好了,然后我们再添加考试信息,完成后如下图:
考试信息的条件设置完成之后,我们还要给学科添加信息,其添加完成后如下图所示:
学科的条件设置完成之后,这样多维决策表的条件部分就完成。
多维决策表的条件,如下图所示:
最后,我们要为每个学生的每次考试中的每个学科,赋予相应的分数。
如下图:
2.1.4 保存和编译
规则逻辑完成后,我们需要对规则进行编译,步骤如下:
我们选择“全部保存”,然后在消息窗口出现,下图所示的信息:
这两句话表示该规则包已成功保存并编译。
若该规则包出现错误,在消息窗口将会出现红色字体的提示。
3.1测试
在规则包完成之后,我们需要测试该规则包的输入,输出结果值是否正确。
首先,我们为该规则包添加一个“批量测试”,步骤如下图所示:
添加完成后,如下图所示:
然后我们需要给该“批量测试”添加若干个测试用例,点击上图中黑色框中的添加按钮,弹出的界面如下所示,其中“传入值”是你输入值,“期望结果值”是在该输入值下希望输出结果值,若“期望结果值”与实际输出结果值相同,则说明该条测试数据测试成功!
我们多为该规则包添加几条测试数据,完成后结果如下:
保存之后,点击测试按钮,分别在批量测试和消息窗口出现下图所示的提示消息:
最后,可以在消息窗口栏查看该“批量测试”的测试结果。
如下图所示:。