`
wangmengbk
  • 浏览: 288424 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

drools引擎使用决策表

 
阅读更多

前提准备:java 虚拟机 
                 Drools核心库
                 Junit4.0以上版本
                 规则Excel模板表(将下面的图片的内容新建到Excel中)
典型的用法就是根据excel创建KnowledgeBase,然后将它丢给session执行,执行的参数和结果都在params里面

package com.xxx.yyyy;
  2 
  3 import java.io.File;
  4 import java.io.FileInputStream;
  5 import java.io.InputStream;
  6 import java.util.Arrays;
  7 import java.util.Collection;
  8 import java.util.HashMap;
  9 import java.util.Map;
 10 import junit.framework.Assert;
 11 import org.drools.KnowledgeBase;
 12 import org.drools.KnowledgeBaseFactory;
 13 import org.drools.builder.DecisionTableConfiguration;
 14 import org.drools.builder.DecisionTableInputType;
 15 import org.drools.builder.KnowledgeBuilder;
 16 import org.drools.builder.KnowledgeBuilderFactory;
 17 import org.drools.builder.ResourceType;
 18 import org.drools.definition.KnowledgePackage;
 19 import org.drools.io.ResourceFactory;
 20 import org.drools.runtime.StatelessKnowledgeSession;
 21 import org.junit.Test;
 22 import org.junit.runner.RunWith;
 23 import org.junit.runners.Parameterized;
 24 import org.junit.runners.Parameterized.Parameters;
 25 
 26 @RunWith(Parameterized.class)
 27 public class IsP4PTest
 28 {
 29     private IsP4P param;
 30 
 31     private String extected;
 32 
 33     public IsP4PTest(IsP4P param, String extected)
 34     {
 35         this.param = param;
 36         this.extected = extected;
 37     }
 38 public Map<String, Object> getParams()
 39         {
 40             Map<String, Object> params = new HashMap<String, Object>();
 41 
 42             params.put("productLine", productLine);
 43             params.put("productType", productType);
 44             params.put("playType", playType);
 45 
 46             return params;
 47         }
 48 public void testExcel(String fileName, Map<String, Object> params)
 49             throws Exception
 50     {
 51         System.out.println("---------------begin------------------------");
 52 
 53         DecisionTableConfiguration dtableconfiguration = KnowledgeBuilderFactory
 54                 .newDecisionTableConfiguration();
 55 dtableconfiguration.setInputType(DecisionTableInputType.XLS);
 56         final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
 57                 .newKnowledgeBuilder();
 58 File file = new File(
 59                 "F:\\juny.qu\\rule_workspace\\com.deppon.rules\\src\\main\\java\\com\\xxx\\yyyy\\"
 60                         + fileName);
 61         InputStream is = new FileInputStream(file);
 62 kbuilder.add(ResourceFactory.newInputStreamResource(is, "UTF-8"),
 63                 ResourceType.DTABLE);
 64         if (kbuilder.hasErrors())
 65         {
 66             System.out.println(kbuilder.getErrors().toString());
 67         }
 68 Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
 69         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
 70         kbase.addKnowledgePackages(pkgs);
 71 
 72 StatelessKnowledgeSession ksession = kbase
 73                 .newStatelessKnowledgeSession();
 74         ksession.execute(Arrays.asList(new Object[] { params }));
 75 
 76 System.out.println("---------------end------------------------");
 77 }
 78 
 79 
 80 @Parameters
 81     public static Collection<?> contructData()
 82     {
 83 return Arrays.asList(new Object[][] {
 84                 { new IsP4P("搜索推广", "true", "null"), "true" },
 85                 { new IsP4P("网盟推广", "true", "null"), "true" },
 86                 { new IsP4P("掘金推广", "true", "非轮播"), "false" },
 87                 { new IsP4P("其他", "false", "其他"), "other" } });
 88 }
 89 
 90 @Test
 91     public void testP4P() throws Exception
 92     {
 93         Map<String, Object> params = new HashMap<String, Object>();
 94         params.putAll(param.getParams());
 95         testExcel("ka/isP4P.xls", params);
 96         Assert.assertEquals(extected, params.get("isP4P"));
 97     }
 98 }
 99 
100 

 


 1 package com.xxx.yyyy;
 2 
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileNotFoundException;
 6 import java.io.InputStream;
 7 
 8 import org.drools.decisiontable.InputType;
 9 import org.drools.decisiontable.SpreadsheetCompiler;
10 import org.junit.Test;
11 
12 public class SpreadsheetCompilerTest {
13 
14 @Test
15     public void compile() throws FileNotFoundException{
16         //File file = new File("F:\\juny.qu\\rule_workspace\\com.deppon.rules\\src\\main\\java\\com\\xxx\\yyyy\\ka\\isP4P.xls");
17         //File file = new File("F:\\collections_study\\规则引擎系统开发小组\\规则引擎doc\\02开发\\06-详细设计\\增值服务折扣测试1.xls");
18         File file = new File("F:\\rules.xlsx");
19         
20         InputStream is = new FileInputStream(file);
21         
22         SpreadsheetCompiler converter = new SpreadsheetCompiler();
23         String drl = converter.compile(is, InputType.XLS); //--------exception here-------- 
24         System.out.println("\n\n" + drl);
25         
26     }
27 
28 }
运行结果如下:package rule_table;
//generated from Decision Table
import java.util.*;
// rule values at B22, header at B17
rule "ContractP4P_22"
when
$constract:java.util.HashMap($constract.get("productLine")=="搜索推广")
$constract.get("productType")=="true"
$constract.get("playType")=="null"
then
$constract.put("isP4P","true");
end
// rule values at B23, header at B17
rule "ContractP4P_23"
when
$constract.get("playType")=="null"
then
$constract.put("isP4P","true");
end
// rule values at B24, header at B17
rule "ContractP4P_24"
when
$constract:java.util.HashMap($constract.get("productLine")=="掘金推广")
$constract.get("productType")=="true"
$constract.get("playType")=="非轮播"
then
$constract.put("isP4P","false");
end
// rule values at B25, header at B17
rule "ContractP4P_25"
when
$constract:java.util.HashMap($constract.get("productLine")=="其他")
$constract.get("productType")=="false"
$constract.get("playType")=="其他"
then
$constract.put("isP4P","other");
end 
 
  • 什么时候考虑使用规则表
  如果规则可以表示成 templates+data(模板+数据),可以考虑使用 decision tables。在决策表的每一行,采集数据和模板一起生成规则。使用基于决策表的SpreadsheetAPIDrools-decisiontables模块中。只有一个类:SpreadsheetCompiler. 这个类可以操作各种格式的Spreadsheet,并生成DRL规则(然后就可以常规的方式使用)。

一个典型的规则表的格式


 
决策表中的关键字说明:


 

 
  • 大小: 131.6 KB
  • 大小: 292.2 KB
  • 大小: 247.8 KB
分享到:
评论

相关推荐

    Drools规则引擎从入门到精通

    9 Drools WorkBench使用9.1 WorkBench基本使用9.2 创建会话9.3 编译并部署9.4 执行代码10 Drools决策表入门11 Drools决策表加强12 Drools决策表整合Springboot和MybatiesPlus13 动态编译Class文件实现Drools规则调用...

    Drools规则引擎从入门到精通源码

    后面通过搭建具体的项目并结合springboot框架联合使用Drools的相关知识包括决策表的使用,囊括一般项目中所需要的知识点,理论结合实际,让真正入门到熟练。本资源是...

    drools-example 为drools 规则引擎的使用demo,包括,决策表、领域语言、CEP(复杂事件处理)等规则引擎

    为drools 规则引擎的使用demo,包括,决策表、领域语言、CEP(复杂事件处理)等规则引擎。 springboot-drools-dynamic-db 为drools 规则引擎基于数据库实现动态规则 springboot-drools-dynamic-rules 为drools ...

    Drools规则引擎用户手册

    4.1.1. 何时使用决策表 78 4.1.2. 概述 79 4.1.3. 决策表如何工作 81 4.1.4. 关键字和语法 83 4.1.5. 基于决策表建立并集成电子表格 87 4.1.6. 在决策表中管理业务规则 88 第五章. 规则工作台 (IDE) 89 5.1. ...

    drools-springboot:规则引擎drools与springboot的使用,Drools动态规则与决策表

    规则引擎Drools与SpringBoot的使用 SpringBoot与Drools SpringBoot项目 略 流口水 依赖 &lt;drools&gt;6.5.0.Final&lt;/drools&gt; &lt;!--Drools--&gt; &lt;groupId&gt;org.kie &lt;artifactId&gt;kie-api ${drools.version} ...

    drools最全中文文档

    drools入门规则引擎,内含决策表,经测可用,比较适合入门者学习,决策树亦可以指导非IT人员操作。 决策表使用起来有点麻烦,需要和业务部门多沟通(密码:Droolszn

    Drools4.0官方使用手册中文

    4.1.1. 何时使用决策表 88 4.1.2. 概述 89 4.1.3. 决策表如何工作 91 4.1.4. 关键字和语法 93 4.1.5. 基于决策表建立并集成电子表格 97 4.1.6. 在决策表中管理业务规则 97 第五章. 规则工作台 (IDE) 99 5.1. ...

    Drools7规则引擎入门教程

    Drools规则引擎是一种嵌套在应用程序中的组件,它实现了将业务规则从应用程序代码中分离出来。本次课程的主要内容分为以下几个方面:1....各类基础函数以及决策表,动态加载规则4.实战式教学以及课程总结

    spring-engines-drools:规则引擎的使用

    2015-04-24 spring3.2+drools5.6测试通过excel决策表和drl决策文件; spring4.1+drools5.6测试通过excel决策表和drl决策文件;

    盘古BPM工作流平台是国内首款开源的互联网决策引擎系统

    盘古BPM工作流平台(DMN)是国内首款开源的互联网决策引擎系统,拥有独立的DMN1.3标准设计器、解析器、决策引擎、支持决策表(decision table)、DRD、DRG。目标是打造一款集成主流工作流且轻量易用的DMN决策引擎系统...

    LockApproval.xlsx

    Drools 规则引擎中的决策表示例,包含ruleSet import Functions ruleTable 等模块的示例,提供一个模板方便使用。

    flowable demo 7.0.0

    Flowable 7.0.0 测试 Demo 进行了用户、脚本、Shell、接收、ServiceTask 等节点的实现测试 同时集成了 Drool 规则引擎和配置 集成了DMN决策表测试

Global site tag (gtag.js) - Google Analytics