当前位置: 首页 > news >正文

drools规则引擎 规则配置文件drl语法使用案例

前提环境搭建,参考博文
springboot整合drools规则引擎 示例入门-CSDN博客

案例1,商城系统消费赠送积分


100元以下, 不加分
100元-500元 加100分
500元-1000元 加500分
1000元 以上 加1000分

订单pojo编写

package cn.beijing.model;import lombok.Data;
import lombok.experimental.Accessors;
import java.util.Date;
@Data
@Accessors(chain = true)
public class Order {/*** 订单原价金额*/private int amout;/***下单人*/private String user;/***积分*/private int score;/*** 下单日期*/private Date bookingDate;
}

规则drl文件编写

package rules
import cn.beijing.model.Orderrule "zero"no-loop true //防止陷入死循环lock-on-active true //用于确保规则仅执行一次,防止因其他规则触发导致的重复执行salience 1 //指定优先级,数值越大优先级越高,不指定的情况下由上到下执行when$s : Order(amout <= 100)then$s.setScore(0);// update($s);
endrule "add100"no-loop truelock-on-active truesalience 1when$s : Order(amout > 100 && amout <= 500)then$s.setScore(100);//  update($s);
endrule "add500"no-loop truelock-on-active truesalience 1when$s : Order(amout > 500 && amout <= 1000)then$s.setScore(500);// update($s);
endrule "add1000"no-loop truelock-on-active truesalience 1when$s : Order(amout > 1000)then$s.setScore(1000);//  update($s);
end


案例2,规则里比较等操作符使用

pojo文件

package cn.beijing.model;import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;@Data
@Accessors(chain = true)
public class ComparisonEntity {/***名字集合*/private String names;/*** 字符串集合*/private List<String> list;}

规则drl文件

package rules
import cn.beijing.model.ComparisonEntity/*用于测试Drools提供的比较操作符
*///测试比较操作符contains
rule "rule_comparison_contains"whenComparisonEntity(names contains "张三")ComparisonEntity(list contains names)thenSystem.err.println("规则rule_comparison_contains触发-----包括张三");
end//测试比较操作符not contains
rule "rule_comparison_notContains"whenComparisonEntity(names not contains "张三")ComparisonEntity(list not contains names)thenSystem.err.println("规则rule_comparison_notContains触发----不包括张三");
end//测试比较操作符memberOf
rule "rule_comparison_memberOf"whenComparisonEntity(names memberOf list)thenSystem.err.println("规则rule_comparison_memberOf触发-----name在list里");
end//测试比较操作符not memberOf
rule "rule_comparison_notMemberOf"whenComparisonEntity(names not memberOf list)thenSystem.err.println("规则rule_comparison_notMemberOf触发-------name不在list里");
end//测试比较操作符matches
rule "rule_comparison_matches"whenComparisonEntity(names matches "张.*")thenSystem.err.println("规则rule_comparison_matches触发------name匹配张.*");
end//测试比较操作符not matches
rule "rule_comparison_notMatches"whenComparisonEntity(names not matches "张.*")thenSystem.err.println("规则rule_comparison_notMatches触发------name--不----匹配张.*");
end

案例3,global全局变量使用

pojo文件

package cn.beijing.model;
import lombok.Data;// 业务模型类
@Data
public class OrderRequest {private Integer amount;
}//------------------------------------package cn.beijing.model;
import lombok.Data;// 订单折扣类
@Data
public class OrderDiscount {private Integer discount = 0;
}

规则drl文件

package rulesimport cn.beijing.model.OrderRequest;global cn.beijing.model.OrderDiscount orderDiscount;rule "规则111111111111111"
when$order: OrderRequest(amount < 20 || amount > 50)
thenorderDiscount.setDiscount(orderDiscount.getDiscount() + 10);System.err.println("orderDiscount.toString() = " + orderDiscount.toString());System.err.println("触发规则:" + drools.getRule().getName());
end

调用代码

@RequestMapping("global_test_1")public Object quyu_jianche_global_test_1(OrderRequest orderRequest){KieSession kieSession = kieContainer.newKieSession("ksession");OrderDiscount orderDiscount = new OrderDiscount();//设置全局变量kieSession.setGlobal("orderDiscount", orderDiscount);try {kieSession.insert(orderRequest);kieSession.fireAllRules();} finally {kieSession.dispose();}return orderDiscount;}

 

部分代码,参考博文
Drools基本介绍,入门案例,基本语法-CSDN博客

http://www.lryc.cn/news/425102.html

相关文章:

  • C++编程:高性能通信组件Capnproto与Protobuf的对比分析
  • 【Python读书数据,并计算数据的相关系数、方差,均方根误差】
  • 垃圾收集器G1ZGC详解
  • AI芯片:高性能卷积计算中的数据复用
  • gitlab修改默认访问端口
  • python——异常
  • 【人工智能】利用TensorFlow.js在浏览器中实现一个基本的情感分析系统
  • Python——扩展数据类型
  • JavaScript 详解——Vue基础
  • 机械行业数字化生产供应链产品解决方案(十二)
  • Git——命令集合
  • python 数据可视化折线图练习(下:代码演示)
  • 深入探索 Go 1.18 的 debug/buildinfo:构建信息的获取与应用
  • Nios II的BSP Editor
  • Android-自适用高度的ViewPager
  • 代码随想录day38|| 322零钱兑换 279完全平方数 139单词拆分
  • Cesium天空盒子(Skybox)制作(js代码)和显示
  • JAVA中的缓冲流BufferedInputStream
  • WindowContainerTransaction类详解(一)
  • 安装NFS扩展
  • 计算机网络——运输层(进程之间的通信、运输层端口,UDP与TCP、TCP详解)
  • 代码随想录算法训练营第一天 | 二分查找
  • python相关知识
  • Visual Studio 2022 LNK2001无法解析的外部符号 _wcscat_s 问题记录
  • Java高并发处理机制
  • 7 数据存储单位,整型、浮点型、字符型、布尔型数据类型,sizeof 运算符
  • 导游职业资格考试真题题库
  • 【Rust】使用开源项目搭建瓦片地图服务
  • 【面试宝典】mysql常见面试题总结(上)
  • 第1章 初识C语言