看到网友提的一个问题:
http://drools.group.iteye.com/group/topic/39063
鄙人刚刚开始研究Drools,但看了些例子,仍然不知道怎么处理下面的业务:
超市打折促销,某种商品(按照类别code)促销规则:
1.在指定日期区间内(比如1月1日-1月3日),
2.买第1件按原价,第2件则价格打6折。第3件原价,第4件打6折... ...
现在顾客推着购物车来消费,里面有很多种商品,其中上面促销的那种有5件,结果应该是3件原价,两件要打折。
哪位大大提供个思路,怎么用drools来给顾客的购物票算总额。
由于之前使用的是excel规则表,我也使用excel规则表。
测试的父类如下:
import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.Arrays; import java.util.Collection; import java.util.Map; import org.drools.KnowledgeBase; import org.drools.KnowledgeBaseFactory; 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.definition.KnowledgePackage; import org.drools.io.ResourceFactory; import org.drools.runtime.StatelessKnowledgeSession; public class KATestBase { public void testExcel(String fileName, Map<String, Object> params) throws Exception { System.out.println("---------------begin------------------------"); DecisionTableConfiguration dtableconfiguration = KnowledgeBuilderFactory .newDecisionTableConfiguration(); dtableconfiguration.setInputType(DecisionTableInputType.XLS); final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory .newKnowledgeBuilder(); File file = new File("E:\\workspace\\epct\\rule\\src\\test\\resources\\" + fileName); InputStream is = new FileInputStream(file); //InputStream is = new ClassPathResource(fileName).getInputStream(); kbuilder.add(ResourceFactory.newInputStreamResource(is,"UTF-8"), ResourceType.DTABLE); if (kbuilder.hasErrors()) { System.out.println(kbuilder.getErrors().toString()); } Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages(); KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages(pkgs); StatelessKnowledgeSession ksession = kbase .newStatelessKnowledgeSession(); ksession.execute(Arrays.asList(new Object[] {params})); System.out.println("---------------end------------------------"); } }
测试的子类如下:
import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.Map; import junit.framework.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; @RunWith(Parameterized.class) public class DroolsTest extends KATestBase{ private KADest param; private String extected; public DroolsTest(KADest param,String extected) { this.param = param; this.extected = extected; } public static class KADest { private String orderTime; private String orderTotal; public KADest(String orderTime, String orderTotal) { this.orderTime = orderTime; this.orderTotal = orderTotal; } public Map<String,Object> getParams(){ Map<String,Object> params = new HashMap<String,Object>(); params.put("orderTime", orderTime); params.put("orderTotal", orderTotal); params.put("discountTotal", 0); return params; } } @Parameters public static Collection<?> contructData(){ return Arrays.asList(new Object[][]{ {new KADest("2013-01-02 12:30:31","6"),"3"}, {new KADest("2013-01-02 12:30:31","1"),"0"}, {new KADest("2013-01-02 12:30:31","2"),"1"}, {new KADest("2013-01-01 12:30:31","2"),"1"}, {new KADest("2013-01-01 12:30:31","2"),"1"}, {new KADest("2013-01-01 12:30:31","2"),"1"}, {new KADest("2013-01-04 12:30:31","2"),"0"}, {new KADest("2013-01-04 12:30:31","2"),"0"}, {new KADest("2013-01-04 12:30:31","2"),"0"}, }); } @Test public void testKaDest() throws Exception{ Map<String,Object> params = new HashMap<String,Object>(); params.putAll(param.getParams()); System.out.println(params); super.testExcel("ka/drools.xls", params); System.out.println(params); Assert.assertEquals(extected, "" +params.get("discountTotal")); }
单元测试结果如下:
相关推荐
drools drools drools drools drools
drools5.4 API 帮助文档 CHM
drools
个人整理的 Drools 最新版6.3 帮助文档,方便查阅,喜欢拿去
Drools开发实例,有两个例子,都能运行,一个是解决一个数学问题的,另一个是工资方面的,都比较简单,希望对初学者有用
Drools开发最全中文版技术指南。 Drools开发最全中文版技术指南,介绍了常见的drools如何进行开发,注意是:中文版中文版中文版! drools 中文文档 规则引擎 drools6 drools7 Java
9 Drools WorkBench使用9.1 WorkBench基本使用9.2 创建会话9.3 编译并部署9.4 执行代码10 Drools决策表入门11 ...Drools实战14.1 实战一贷款准入规则14.1.1 测试案例一14.1.2 测试案例二14.2 实战二贷款评分卡14.2.1
Drools-WorkBench 6.4.0安装及问题解决,从0开始搭建workbench,并与kie-server整合,通过firefox插件httprequester来进行发送请求
drools动态生成规则文件
NULL 博文链接:https://justsee.iteye.com/blog/1199337
drools
drools最新版本学习资料,里面系统的介绍了drools规则引擎的简介以及集成到项目的教程内容。欢迎下载,收集不易,欢迎点赞。
这个是本人在研究drools flow总结的报告,希望对大家有帮助
官网Drools5.3使用手册,有介绍与spring jbpm drools集成等内容
Java的规则编译器
drools决策表模版
刚学drools6.0,写了个drools的实例,供像我一样的新人学习。
drools 的Drools Workbench 运行时所需jar包
Drools Flow User Guide