Skip to content

规则引擎

概述

创建一些带有条件和动作的对象,将它们存储在一个集合中,然后遍历它们以评估条件并执行这些动作。

适用范围

Pangea v2.0.1.3+

快速上手

1、在业务模块的pom.xml中添加依赖

html
<!-- 规则模块 -->
<dependency>
    <groupId>com.hisense.pangea</groupId>
    <artifactId>pangea-common-easyrules</artifactId>
    <version>${pangea.version}</version>
</dependency>

2、在Application类或Configuration类上添加注解@EnableEasyRules

java
@EnableEasyRules
public class PangeaSampleApplication {
    public static void main(String[] args) {
        SpringApplication.run(PangeaSampleApplication.class, args);
    }
}

3、在applicatiom.yml中标记dev环境,可以实现在UI上自动生成规则组(这个原理是pangea-common-easyrules代码包中RulesActuator类增加了判断,如果"dev".equals(activeProfile)就会生成规则组)

html
spring:
  profiles:
    active: dev

生产环境请标记为prod,将停止UI更新规则组 注意:规则组名称需要满足正则表达式("^[A-Za-z0-9.]*$")

4、在系统管理-规则引擎组菜单下维护对应规则及规则组特性

规则组特性:

  • skip_on_first_applied_rule 应用当前规则时,跳过其余规则
  • skip_on_first_non_triggered_rule 没有触发规则时,跳过其余规则
  • skip_on_first_failed_rule 应用当前规则失败时,跳过其余规则
  • priority_threshold 自定义规则的优先级超过定义的阈值时,跳过其余规则

5、在应用规则引擎的类上根据查询的规则执行相应的操作

java
//业务类中注入规则解析器
@Autowired
RulesActuator rulesActuator;
 
 public void ruleTest(){
    //调用规则引擎
    // 处理事实对象 T t
    RuleResult  result =rulesActuator.usingRules("规则组名称")  //仅可以使用英文、数字和点.   //中文名称可以在页面上编辑,以便于阅读
                            .put("param1",t)        //添加事实对象,可以添加多个,参数名可以任意(比如实例中的param1)
                            .put(具体规则)          //当有代码自定义规则时使用,可以省略。
                            .fire();
    //获取运算后对象
    T t = result.get("param1");
 }

注意:以上代码在实际业务使用中建议分三步来写: 第一步 获取规则执行器:RulesActuatorBuilder rulesActuatorBuilder = rulesActuator.usingRules(ruleGroupName); 这段代码执行后会创建规则组,名称不可重复 第二步 添加事实对象:RuleResult ruleResult = rulesActuatorBuilder.put("input", demo).fire();//demo就是事实对象 第三步 获取运算后的对象:Demo demo2 = ruleResult.get("input");

参考文档

https://github.com/j-easy/easy-rules/wiki
https://github.com/j-easy/easy-rules