Devs--开源规则引擎介绍
Devs
Devs是一款轻量级的规则引擎。
开源地址:https://github.com/CrankZ/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<String,Object> | 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
}
}
]
}
}
Devs--开源规则引擎介绍的更多相关文章
- Fixflow引擎解析(一)(介绍) - Fixflow开源流程引擎介绍
Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...
- SNF快速开发平台--规则引擎介绍和使用文档
设计目标: a) 规则引擎语法能够满足分单,计费,WMS策略的配置要求.语法是一致和统一的 b) 能够在不修改规则引擎模块的情况下,加入任意一个新的规则:实现上述需求之外的规则配置需求 c) 运算速度 ...
- 开源规则引擎 Drools 学习笔记 之 -- 1 cannot be cast to org.drools.compiler.kie.builder.impl.InternalKieModule
直接进入正题 我们在使用开源规则引擎 Drools 的时候, 启动的时候可能会抛出如下异常: Caused by: java.lang.ClassCastException: cn.com.cheng ...
- .Net规则引擎介绍 - REngine
规则引擎 规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策.接受数据输入,解释业务规则,并根据业务规则做出业务决策 ...
- 开源规则引擎 drools
java语言开发的开源业务规则引擎 DROOLS(JBOSS RULES )具有一个易于访问企业策略.易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快.效率高.业务分析师或审核人员可以利用 ...
- 转:开源3D引擎介绍
Delta3D:Delta3D是一个功能齐全的游戏引擎,可用于游戏,模拟或其他图形应用.其模块化设计集成了其他的开源项目,如‘开放场景图’,‘开放动力学引擎’,‘人物动画库’和‘OpenAL’ .De ...
- FunnelWeb 开源Blog引擎介绍
FunnelWeb is an open source blog engine, built by developers for developers. Instead of fancy quotes ...
- SNF快速开发平台--规则引擎整体介绍及使用说明书
一.设计目标 a)规则引擎语法能够满足分单,计费,WMS策略的配置要求.语法是一致和统一的 b)能够在不修改规则引擎模块的情况下,加入任意一个新的规则:实现上述需求之外的规则配置需求 c)运算速度快 ...
- Scala化规则引擎
1. 引言 什么是规则引擎 一个业务规则包含一组条件和在此条件下执行的操作,它们表示业务规则应用程序的一段业务逻辑.业务规则通常应该由业务分析人员和策略管理者开发和修改,但有些复杂的业务规则也可以由技 ...
随机推荐
- python pip使用国内镜像安装第三方库:命令行或PyCharm
python pip使用国内镜像安装第三方库:命令行或PyCharm 转载: https://blog.csdn.net/lly1122334/article/details/80646996
- 这样学BAT必面之软件设计原则,还不会就是我的问题
学习设计原则是学习设计模式的基础.在实际开发过程中,并不要求所有代码都遵循设计原则,我们要考虑人力.时间.成本.质量,不能刻意追求完美,但要在适当的场景遵循设计原则,这体现的是一种平衡取舍,可以帮助我 ...
- [no_code][Alpha]测试报告
项目 内容 2020春季计算机学院软件工程(罗杰 任健) 2020春季计算机学院软件工程(罗杰 任健) 作业要求 测试报告 我们在这个课程的目标是 设计出一个OCR表单处理软件 这个作业在哪个具体方面 ...
- makedown笔记
makedown语法 表格 这个表格的主题 |姓名|性别|年龄|职业| | ----- | ----- | ----- | ----- | |张三|男|34|码农| |李四|男|27|代驾| 这个表格 ...
- 个人宽带如何开启IPv6网络访问
IPv6是大势所趋,就在前段时间湖南联通发布公告,对家庭宽带提供 IPv6 地址,不再提供 IPv4地址,那本文就介绍 个人宽带如何开启 IPv6网络访问. 湖南联通停止向普通家庭宽带用户提供公网 I ...
- Oracle日志 归档模式管理
一.查看当前归档模式 archive log list; 二.归档/不归档切换 shutdown immediate; -- 或shutdown normal startup mount; alter ...
- MySql表、约束、视图
MySql表.约束.视图 索引组织表 在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表成为索引组织表(index organized table). 每张表都有主键,如果创建表 ...
- 干货分享之spring框架源码分析02-(对象创建or生命周期)
记录并分享一下本人学习spring源码的过程,有什么问题或者补充会持续更新.欢迎大家指正! 环境: spring5.X + idea 之前分析了Spring读取xml文件的所有信息封装成beanDef ...
- Java-基础-HashMap
1. 简介 Java8 HashMap结构(数组 + 列表 + 红黑树)如图: 基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了非同步和 ...
- pip 更新方法
使用python -m pip install --upgrade pip 使用python -m pip install -U --force-reinstall pip 使用pip install ...