Devs--开源规则引擎介绍
Devs
Devs是一款轻量级的规则引擎。
开源地址:https://github.com/CrankZ/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图 模板-规则关系
文章图片
规则相关
文章图片
规则执行结果
文章图片
执行接口 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
}
}
]
}
}
推荐阅读
- 难道你仅会钻规则的漏洞吗()
- 探索免费开源服务器tomcat的魅力
- SwiftUI|SwiftUI iOS 瀑布流组件之仿CollectionView不规则图文混合(教程含源码)
- 要玩转这个星际争霸II开源AI,你只需要i5+GTX1050
- 整理大部分Eslint规则
- redis|redis 常见问题一
- 读《12条生活规则》,在噪杂混乱的环境里找到生活的目的和意义
- java|微软认真聆听了开源 .NET 开发社区的炮轰( 通过CLI 支持 Hot Reload 功能)
- PHP简易规则引擎
- SwiftUI|SwiftUI 动画组件之Lottie小型高质量交互式的开源动画文件格式