Devs--开源规则引擎介绍

Devs Devs是一款轻量级的规则引擎。
开源地址:https://github.com/CrankZ/devs
基础概念 此规则引擎的基础概念有字段、条件、规则等。
其中字段组成条件,条件组成规则,并且支持多个条件通过与或组成一个规则。下面用常见的代码说明各个概念
代码举例 【Devs--开源规则引擎介绍】Devs--开源规则引擎介绍
文章图片

规则分类 多个规则可组成一个模板,调用接口执行的时候是以模板为维度执行的。
模板

模板名称
模板1
规则模板映射表
模板id 规则id
1 1
1 2
1 3
规则相关 字段
字段名称 字段编码 字段类型 取数类型 取数路径
name 姓名 STRING REFLECT engineServiceImpl#testReflect
age 年龄 NUMBER REFLECT engineServiceImpl#testReflect
条件
条件名称 条件编码 字段编码 逻辑比较符 期望值
姓名是否等于张三 C_NAME_IS_ZS name StringMethod.equals($EXPECT,$FACT) 张三
年龄是否大于18岁 C_AGE_GT18 age NumberMethod.gt($EXPECT,$FACT) 18
规则
规则名称 条件组
姓名是否等于张三 C_STRING_EQUALS1
年龄是否大于18岁 C_NUMBER_GE1
用户是否符合条件 C_STRING_EQUALS1 && C_NUMBER_GE1
规则结果 调用接口执行时,结果会直接通过接口返回。
TODO: 保存规则执行结果
TODO: 添加规则触发器
ER图 模板-规则关系 Devs--开源规则引擎介绍
文章图片

规则相关 Devs--开源规则引擎介绍
文章图片

规则执行结果 Devs--开源规则引擎介绍
文章图片

执行接口 URL:/engine/execute
METHOD:POST
入参
字段名 字段类型 是否必填 解释
templateId Long TRUE 模板ID
params Map FALSE 参数
例子
{ "templateId": 1, "params": { "userId": 123 } }

出参 验收结果只有是、否、NULL。
执行结果为NULL,则只输出内容,需要手动判断
规则名称 执行结果 条件组 实际取值
姓名是否等于张三 TRUE 姓名是否等于张三 "姓名": "张三"
年龄是否大于18岁 FALSE 年龄是否大于18岁 "年龄": 10
用户是否符合条件 FALSE 姓名是否等于张三 && 年龄是否大于18岁 "姓名": "张三", "年龄": 10
例子
{ "code": "0000", "msg": "success", "requestId": "", "timestamp": 1637996239325, "data": { "templateId": 1, "params": {}, "ruleResult": [ { "ruleName": "姓名是否等于张三", "trigger": true, "conditions": "姓名是否等于张三", "facts": { "姓名": "张三" } }, { "ruleName": "年龄是否大于18岁", "trigger": false, "conditions": "年龄是否大于18岁", "facts": { "年龄": 10 } }, { "ruleName": "用户是否符合条件", "trigger": false, "conditions": "姓名是否等于张三 && 年龄是否大于18岁", "facts": { "姓名": "张三", "年龄": 10 } } ] } }

    推荐阅读