1、依赖引入
引入自己对应版本的drools-decisiontables依赖包
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-decisiontables</artifactId>
<version>7.11.0.Final</version>
</dependency>
2、决策表绘制
创建一个职员Staff
类,并定义相关属性
public class Staff {
private String name; //姓名
private int age; //年龄
private BigDecimal income; //月收入
//get/set方法...
}
编写如下决策表,根据收入判断职员的等级(初级或中级)
RuleSet
表示规则包名定义
Import
表示导入的类
RuleTable
表示自定义的规则名称
CONDITION
表示条件部分(即when部分)
ACTION
表示结果部分(即then部分)
3、决策表执行
编写测试方法testDecision()
@Test
public void testDecision() {
// 1.打印输出生成的drl文件内容
SpreadsheetCompiler compiler = new SpreadsheetCompiler();
String drl = compiler.compile(ResourceFactory.newClassPathResource("com/decision/test/decision.xls"), InputType.XLS);
System.out.println(drl);
// 2. 初始化KieSession会话
KieContainer container = KieServices.get().getKieClasspathContainer();
Results results = container.verify();
if (results.hasMessages(Message.Level.ERROR)) {
List<Message> messages = results.getMessages();
for (Message message : messages) {
System.out.println("错误信息: "+ message);
}
}
KieSession kieSession = container.newKieSession("decision-test-rules");
// 3.定义两个职员对象
Staff staff1 = new Staff();
staff1.setName("张三");
staff1.setIncome(new BigDecimal(8000));
Staff staff2 = new Staff();
staff2.setName("李四");
staff2.setIncome(new BigDecimal(15000));
// 4.传入fact对象,匹配执行规则
kieSession.insert(staff1);
kieSession.insert(staff2);
int count = kieSession.fireAllRules();
System.out.println("Fire " + count + " rule(s)!");
kieSession.dispose();
}
4、执行结果
...
规则一匹配结果:张三月收入[8000],为初级员工
规则二匹配结果:李四月收入[15000],为中级员工
Fire 2 rule(s)!