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

ops/2024/9/25 10:33:19/

前提环境搭建,参考博文
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.ppmy.cn/ops/95002.html

相关文章

【Py/Java/C++三种语言详解】LeetCode743、网络延迟时间【单源最短路问题Djikstra算法】

可上 欧弟OJ系统 练习华子OD、大厂真题 绿色聊天软件戳 od1441了解算法冲刺训练&#xff08;备注【CSDN】否则不通过&#xff09; 文章目录 相关推荐阅读一、题目描述二、题目解析三、参考代码PythonJavaC 时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 相关推荐阅读 …

Oracle-OraclePartition

提示&#xff1a;OraclePartition 是 Debezium 中用于跟踪和处理 Oracle 数据库分区变更的核心组件之一。 文章目录 前言一、核心功能二、代码分析总结 前言 提示&#xff1a;OraclePartition 类用于标识和管理 Oracle 数据库中的逻辑分区&#xff0c;支持数据同步任务中的分区…

Flutter-->使用dart编写蒲公英上传脚本

之前写过使用gradle groovy语言写过一次: AS–›Gradle上传文件至蒲公英-CSDN博客 这次使用dart语言与时俱进. 蒲公英上传文档请查看 Pgyer - FAQ - API 2.0 脚本特性: 支持当前最新的蒲公英接口2.0支持apk和ipa文件后缀支持飞书Webhook通知 脚本配置 脚本自动读取项目根…

Android笔试面试题AI答之Kotlin(14)

文章目录 64. Kotlin中定义函数还是属性场景?使用属性的场景使用函数的场景示例 65. 阐述Kotlin中变量初始化有几种?其中lateinit、by lazy、delegates.notNull有什么区别 &#xff1f;Kotlin中变量初始化的几种方式lateinit、by lazy、Delegates.notNull的区别 66. Kotlin中…

Vision Transformer学习笔记

论文链接&#xff1a;https://arxiv.org/abs/2010.11929 项目链接&#xff1a;https://github.com/google-research/vision_transformer 本文代码链接&#xff1a;https://gitcode.com/gh_mirrors/de/deep-learning-for-image-processing/tree/master/pytorch_classification/v…

使用Jenkins打包Untiy问题集

1.乱码问题 使用windows的批处理打包&#xff0c;正常echo可以显示中文&#xff0c;但是调用python命令提示找不到的字符却显示乱码 添加下面的转码 chcp 650012.环境变量中添加python了&#xff0c;却报找不到 把环境变量添加到系统变量里面就好了 3.使用for命令失败 使用for…

使用 onBeforeRouteUpdate 组合式函数提升应用的用户体验

title: 使用 onBeforeRouteUpdate 组合式函数提升应用的用户体验 date: 2024/8/15 updated: 2024/8/15 author: cmdragon excerpt: 摘要&#xff1a;本文介绍如何在Nuxt 3开发中使用onBeforeRouteUpdate组合式函数来提升应用用户体验。通过在组件中注册路由更新守卫&#xf…

CSS——字体背景(Font Background)

一、字体族 1、字体的相关样式&#xff1a; ① color 用来设置字体颜色&#xff08;前景颜色&#xff09; ② font-size 字体的大小 和font-size相关的单位&#xff1a; em 相对于当前元素的一个font-size rem 相对于根元素的一个font-size ③ font-family 字体族&#x…