Drule 使用说明文档
文章目录
Drule业务规则可视化平台。基于Drools 封装的业务规则可视化平台,通过逻辑可视化结构(规则表达式/条件/结果动作)、零代码拖拽式编排及业务语义级模板库,实现规则开发效率显著提升,使非技术用户也能快速构建金融风控、智能营销等决策系统。具备优秀的执行性能,测试环境下单次执行耗时最高可达0.5ms内,99%不超过2ms。
项目源码地址:https://gitee.com/ahaow/rule_engine。
体验地址:http://ahaoweb.cn/drule/visual,账号:test,密码:123456。
⚠️ 当前系统还在迭代当中,功能有限,还请谅解。
1.页面结构
当前版本,主要包含五部分,左侧为规则内容目录,右侧分为规则调用、调用记录、变更记录和规则配置。
2.规则内容目录
如下所示,用于展示规则内容的Tree树形结构,目前分为3层,第1层为整个规则文件的名称,第2层为规则内部的分组,第3层为每个分组内部的规则块。该树形结构的第2,3层级支持拖拽,同层次的节点只能拖拽至同层次,即不支持节点跨层次的修改。
- 规则文件
- 分组(激活组):支持拖拽,只能拖拽到第2层级。
- 规则块:支持拖拽,只能拖拽到所属分组的第3层级;支持点击锚点定位。
- 规则块:支持拖拽,只能拖拽到所属分组的第3层级;支持点击锚点定位。
- 分组(激活组):支持拖拽,只能拖拽到第2层级。
[!NOTE]
支持右侧规则配置的内容联动。新增、修改(分组改变)、删除规则块都会触发该树形结构变化。
3.规则调用
-
左侧为请求体,必须为JSON格式。
-
右侧为返回的响应结果。
3.1.请求体
JSON格式,一个完整的示例入参对象的结构如下:
{
"name":"food",
"tag":"好吃",
"price":100.1,
"stock":10
}
编辑好请求体之后,即可点击右上角的执行按钮,右侧将会显示结果。
3.2.响应结果
返回的内容格式:
- 执行时间:yyyy-MM-dd HH:mm:ss.SSS。
- 总耗时:单位毫秒。
- 入参反序例化耗时:单位毫秒。
- 执行规则耗时:单位毫秒。
- 出参序列化耗时:单位毫秒。
- 命中规则:字符串数组。
- 出参结果:json字符串。
4.调用记录
每次在规则调用中执行规则成功后,会记录其调用信息,当前仅展示最近10条调用记录,如下所示。
点击查看操作,会将其记录的数据自动填充至规则调用中,以便于查看和重复测试,如下所示。
5.变更记录
5.1.分页列表
当前变更内容包含:记录id(序号)、版本号、变更状态、变更名称(概括性内容)、变更描述(变更内容描述)、提交人、创建时间、操作栏。
5.2.操作栏
5.2.1.变更详情
包含两部分内容,第一部分为差异对比,如下所示,支持将可视化配置内容转为中文,并进行文本差异分析。左侧文本内容为提交变更时的生效版本,右侧内容为提交时生成的版本。
该差异对比使用 Java DIFF框架
java-diff-utils
,官网地址 https://java-diff-utils.github.io/java-diff-utils
第二部分为编译内容,如下所示,转换为规则脚本文件的内容。
5.2.2.可视化
可视化指将该版本的规则结构,渲染到下方的规则配置中,也就是支持查看旧版本的规则。
5.2.3.作废
当变更状态为新增或者申请中时,可以作废本次记录。
5.2.4.发布
当变更状态为待发布时,可发布该版本规则。
6.配置规则
交互式可视化规则逻辑块结构。通过页面上的配置(可视化编辑器)替代传统代码编写,显著降低技术门槛,简化了学习成本和开发成本,让非专业人员也能上手操作。
6.1.新增规则
点击之后,在规则配置的最下方会自动新增一个名称为test的规则块,内容如下。
6.2.提交保存
会将配置好的可视化结构转换为DRL文件内容并保存。当前版本仅支持编译为DRL文件内容,支持保存功能(仅授权给系统管理员),同时也支持对可视化结构进行正确性效验。如果提交成功将会返回与当前生效版本的差异内容和编译后的规则脚本内容,如下所示。
如果提交失败,会显示失败原因,如下所示。
6.3.规则名称
用于唯一标识规则块,在整个规则文件中唯一。
6.4.规则分组
用于给规则块分组,在同一个分组中的规则最多只能有一个被命中,位置越靠前的规则,其优先级越高。如下所示:
分组a中的规则有:[a-1, a-2, a-3],执行规则时,最多只能有一个规则被命中,也就是a-1或者a-2或者a-3,并且按照优先级,先判断a-1,如果a-1没命中,再判断a-2,如果a-2未命中,再判断a-3。
6.5.描述
用于说明该规则块。
6.6.条件
支持两层嵌套,所以暂且称为外层逻辑和内层逻辑。
6.6.1.外层逻辑
如下所示,该条件只存在外层逻辑判断,实际内容为: (商品价格 >= 0 并且 商品价格 <= 100 并且 商品库存量 <= 10)
。
6.6.2.内层逻辑
点击关联条件按钮,将会出现内层逻辑的按钮。
如下所示,该条件存在内层逻辑,外层逻辑为并且(与),内层逻辑为或者(或),实际内容为:((商品价格 < 0 或者 商品价格 >= 1000) 并且 商品库存量 >= 0 并且 商品库存量 <= 10000 )
。
6.6.3.新增条件
点击新增条件,将会在条件最下方,新增一个外层条件。
6.7.结果
如下所示,命中该规则块的条件后,将会执行的结果内容。也就是给出参对象中属性赋值。