Spring boot整合Drools、flowable决策引擎解决方案

  • Post author:
  • Post category:其他



一、


D


rools:

DROOLS(JBOSS RULES )具有一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。

官方文档:





https://docs.jboss.org/drools/release/6.5.0.Final/drools-docs/html_single/index.html




二、Spring 整合Drools示例:

  1. 项目依赖

2.规则文件

实体类

规则文件

3. 操作符支持:



约束连接:



对于对象内部的多个约束的连接,可以采用“&&”(and)、“||”(or)和“,”(and)来实现,“&&”(and)、“||”(or)和“,”这三个连接符号如果没有用小括号来显示的定义优先级的话,那么它们的执行顺序是:“&&”(and)、“||”(or)和“,” “&&”优先级最高,表面上看“,”与“&&”具有相同的含义,但是有一点需要注意,“,”与“&&”和“||”不能混合使用,也就是说在有“&&”或“||”出现的LHS 当中,是不可以有“,”连接符出现的,反之亦然。



比较操作符:



在当中共提供了十二种类型的比较操作符,分别是:>、>=、<、<=、= =、!=、contains、not contains、memberof、not memberof、matches、not matches;



比较操作符contains



是用来检查一个Fact 对象的某个字段(该字段要是一个Collection或是一个Array 类型的对象)是否包含一个指定的对象。


when


$order:Order();


$customer:Customer(age >20, orders contains $order);


then


System.out.println($customer.getName());


End


contains 只能用于对象的某个Collection/Array 类型的字段与另外一个值进行比较,作为比较的值可以是一个静态的值,也可以是一个变量(绑定变量或者是一个global 对象)。



比较操作符memberOf



是用来判断某个Fact 对象的某个字段是否在一个集合(Collection/Array)当中,用法与contains 有些类似,但也有不同,memberOf 的语法如下:Object(fieldName memberOf value[Collection/Array])可以看到memberOf 中集合类型的数据是作为被比较项的,集合类型的数据对象位于memberOf 操作符后面,同时在用memberOf 比较操作符时被比较项一定要是一个变量(绑定变量或者是一个global 对象),而不能是一个静态值。



matches



是用来对某个Fact 的字段与标准的Java 正则表达式进行相似匹配,被比较的字符串可以是一个标准的Java 正则表达式,但有一点需要注意,那就是正则表达式字符串当中不用考虑“\”的转义问题


when


$customer:Customer(name matches “李.*”);


then


System.out.println($customer.getName());


end


该规则是用来查找所有Customer 对象的name 属性是不是以“李”字开头,如果满足这一条件那么就将该Customer 对象的name 属性打印出来。


其他语法说明参考:


https://blog.csdn.net/u012373815/article/details/53872025

4. 读取规则文件测试

结果:

总共触发了: 1 条规则

RequestTemplate(custId=330692, custName=上海诺基亚贝尔股份有限公司, signalCode=C-03ZQ-002-B, signalName=企业发行的债券有退市风险, signalId=IIONUUUs222991, judgment_result=负, judgment_amt=62388.0, fin_owner_interests=7223775.23, signalLevel=关注)

5. excel自定义决策表

6. 决策表语法

7. 读取excel生成规则文件

8. 直接读取excel处理业务规则

9. 内存加载规则文件


三、Flowable:





Flowable是一个流行的轻量级的采用Java开发的业务流程引擎。通过Flowable流程引擎,我们可以部署BPMN2.0的流程定义(一般为XML文件),通过流程定义创建流程实例,查询和访问流程相关的实例与数据,等等。Flowable可以灵活地添加到我们的服务、应用、架构中,可以通过引入Flowable jar包,或者直接使用Flowable的Rest API来进行业务流程引擎的操作。Flowable是基于Activity5.0的一个分支开发的,因此内部的很多概念都相似。

官方文档:





https://flowable.com/open-source/docs/dmn/ch06-DMN-Introduction/




四、spring整合drools+flowable决策引擎:

1. 决策表

2. BPMN决策流程



版权声明:本文为wormtown原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。