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.Order

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

rule "add100"
    no-loop true
    lock-on-active true
    salience 1
    when
        $s : Order(amout > 100 && amout <= 500)
    then
        $s.setScore(100);
      //  update($s);
end

rule "add500"
    no-loop true
    lock-on-active true
    salience 1
    when
        $s : Order(amout > 500 && amout <= 1000)
    then
        $s.setScore(500);
       // update($s);
end

rule "add1000"
    no-loop true
    lock-on-active true
    salience 1
    when
        $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"
    when
        ComparisonEntity(names contains "张三")
        ComparisonEntity(list contains names)
    then
        System.err.println("规则rule_comparison_contains触发-----包括张三");
end

//测试比较操作符not contains
rule "rule_comparison_notContains"
    when
        ComparisonEntity(names not contains "张三")
        ComparisonEntity(list not contains names)
    then
        System.err.println("规则rule_comparison_notContains触发----不包括张三");
end

//测试比较操作符memberOf
rule "rule_comparison_memberOf"
    when
        ComparisonEntity(names memberOf list)
    then
        System.err.println("规则rule_comparison_memberOf触发-----name在list里");
end

//测试比较操作符not memberOf
rule "rule_comparison_notMemberOf"
    when
        ComparisonEntity(names not memberOf list)
    then
        System.err.println("规则rule_comparison_notMemberOf触发-------name不在list里");
end

//测试比较操作符matches
rule "rule_comparison_matches"
    when
        ComparisonEntity(names matches "张.*")
    then
        System.err.println("规则rule_comparison_matches触发------name匹配张.*");
end

//测试比较操作符not matches
rule "rule_comparison_notMatches"
    when
        ComparisonEntity(names not matches "张.*")
    then
        System.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 rules

import cn.beijing.model.OrderRequest;

global cn.beijing.model.OrderDiscount orderDiscount;

rule "规则111111111111111"
when
    $order: OrderRequest(amount < 20 || amount > 50)
then
    orderDiscount.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博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值