当前位置: 首页 > 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博客

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SpringBoot教程(二十三) | SpringBoot实现分布式定时任务之xxl-job
  • 大数据系列之:TiCDC采集TiDB数据库数据以Debezium JSON格式发送到Kafka Topic详细步骤
  • 软中断、Tasklet 与工作队列的机制分析
  • Python 中的 Input 函数及其实现机制
  • 2024新型数字政府综合解决方案(八)
  • flume系列之:查询多个flume agent组是否有topic重复接入情况
  • 电商平台的推荐算法需要备案吗?
  • 关联分析之fp-growth
  • Sublime Text 4 (Build 4180) 编译环境设置
  • uniapp接口请求this.$request
  • Idea使用Maven下载源码
  • Gafgyt僵尸网络针对云原生环境,SSH弱密码成GPU挖矿新目标
  • 开始使用 AWS SAM CLI
  • Java知识点一——列表、表格与媒体元素
  • 【安卓】解析XML格式数据
  • css选择器
  • Intervention/image 图片处理扩展包的安装和使用
  • IOS评论框不贴底(ios12新bug)
  • JavaScript对象详解
  • Java教程_软件开发基础
  • SpiderData 2019年2月25日 DApp数据排行榜
  • 对象引论
  • 判断客户端类型,Android,iOS,PC
  • 跳前端坑前,先看看这个!!
  • 硬币翻转问题,区间操作
  • 你对linux中grep命令知道多少?
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​用户画像从0到100的构建思路
  • ‌U盘闪一下就没了?‌如何有效恢复数据
  • #NOIP 2014#Day.2 T3 解方程
  • $jQuery 重写Alert样式方法
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (4)事件处理——(7)简单事件(Simple events)
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (SpringBoot)第二章:Spring创建和使用
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (南京观海微电子)——示波器使用介绍
  • (一)kafka实战——kafka源码编译启动
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .net 调用海康SDK以及常见的坑解释
  • :“Failed to access IIS metabase”解决方法
  • @component注解的分类
  • @Transactional事务注解内含乾坤?
  • @Validated和@Valid校验参数区别
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [AIGC] CompletableFuture的重要方法有哪些?
  • [CTF]2022美团CTF WEB WP
  • [EFI]NUC11电脑 Hackintosh 黑苹果efi引导文件
  • [Electron]ipcMain.on和ipcMain.handle的区别