规则引擎rule-engine(三)可视化api设计和实现解释

可视化设计

设计服务通过拖拉拽组件,配置构建规则,下图是设计服务的原型示意

左侧:组件类型选择,其中"决策"下有两个扩展子组件"其他"和"分支决策";"跳过"和"跳出"是条件循环控制的子组件;语句有左右两个表达式项构成,表达式项可以是变量,常量,表达式

右侧,上方:展示可用的变量,上级,包括到最上级的变量,以及全局可用的工具类;本快的变量,

右侧,下方:组件的编辑配置框,每个组件可单独预览,框中的组件链式排序构成完整规则

上图看,组件是链状,但实际分支嵌入到决策组件,因此元模型是树状的结构

设计元素

本节介绍规则组件的可视化配置属性,篇幅较大,分3部分

设计元素1

  • 类型

类型有3个配置属性,其中**++名称++** 必填,++全名++ 可选,**++维度++**集合类型可选

类型是类型表选择,通常不需要手动配置

  • 变量/常量

变量/常量有两个必填属性,++名称++ 和**++类型++** ,++语句++ 可选,当声明变量需初始化配置。**++值++**属性常量必填,变量可选

变量/常量声明后,进入变量/常量表,用于后续遍历参与的组件配置

方法参数多参数需要配置

  • 决策

++决策++ 可配置多个**++分支决策++** ,++其他++ 是可选最后一个,**++分支决策++**有两个配置条件,

1 条件,返回true/false的**++语句++** 组件,决定是否执行改决策,**++其他++**没有条件配置

2 动作,语句组,若干语句,决策内的逻辑

  • 语句

语句可认为是带";"的表达式,有3个配置

1 ++操作符++ 操作符列表中选择

2 左**++语句项++** 变量语句项,常量语句项,语句语句项

++变量语句项/++ ++常量语句项++ 与配置++变量++ ++/++ ++常量++ 一致++语句语句项++,自身是语句,递归配置

3 右**++语句项++** 同左语句项

设计元素2

参数和语句项 图中所示比较清楚,不再过多解释

  • 返回

++返回++ 有可选属性**++语句++**,设置返回变量,常量或者语句

设计元素3

本节介绍规则组件可视化配置属性,for ,while

for/while差不多,上面语句项是断言,循环的条件

可视化api

本节详细说明设计api,后面章节详细说明api

public ResultT<IPage<RuleLogic>> searchRuleLogic(

Integer pageNum, Integer pageSize, String searchWords)

public ResultT<List<++RuleComponent++ >> getRuleLogicComponent(Long ruleLogicId)

public ResultT<String> previewRuleComponent(@RequestBody ComponentBean bean)

public ResultT<String> previewRuleLogic(@RequestBody List<ComponentBean> beans)

public <R> ResultT<R> testRuleLogic(@RequestBody RuleLogic logic,

@RequestParam String factType,

@RequestParam String json) throws Exception

public <R> ResultT<R> testRuleLogic(@RequestBody RuleLogic logic,

@RequestParam String factType1, @RequestParam String json1,

@RequestParam String factType2, @RequestParam String json2) throws Exception

public ResultT<RuleLogic> saveRulesLogicDraft(@RequestBody RuleLogic logic)

public ResultT<ContainedRule<?, ?>>

releaseRuleLogic (Long ruleLogicId) throws RuleLowCodeException

public ResultT<Void> resetRuleLogic (Long ruleLogicId) throws RuleLowCodeException

接口说明

本节以postman脚本说明接口使用,下图是规则组件元模型的json

搜索规则逻辑

方法:POST

URL: /ruledesign/searchRuleLogic

参数:

返回:

获取规则逻辑组件

方法:GET

参数:

返回:

上图规则逻辑的组件,content是组件bean的返回,元模型json格式

预览规则组件1-声明组件

本节示例预览声明变量规则组件

方法:POST

参数:

返回示例:

返回生产的代码,上图是带赋值表达的声明

预览规则组件2-ifelse

本机示例组合ifelse规则组件

方法:POST

参数:

上图一组if-elseif*-else组件,COMPOSITED组合组件类型包装

返回:

预览规则组件-for/continue

示例预览for规则组件

方法:POST

URL: ruledesign/previewRuleLogic

参数:

for类型组件,集合遍历,并带有内嵌语句

返回:

上图for规则脚本,fact.x 传入的事实,x是其list类型的属性

预览规则组件-while/break

示例预览while规则组件

方法:POST

URL: ruledesign/previewRuleLogic

参数:

while组件根据条件的循环,并带有内嵌语句

返回:

上图while规则脚本

预览规则逻辑

本接口预览完整的规则逻辑,是规则组件列表集合(list)

方法:POST

URL: ruledesign/previewRuleLogic

参数:

参数规则逻辑,代表完整功能的规则,包括一个声明组件,一组ifelse组件

返回:

上图完整规则预览返回,包括声明组件一组 ifelse组件

测试规则逻辑1fact

本机介绍在线测试规则逻辑,单个事实

方法:POST

URL: ruledesign/testRuleLogic1?factType=com.grp.base.ruleengine.fact.TestFact&json={"x": 51, "y": 55}

参数:

参数分两部分,上面url带了事实参数,分别是事实类型,事实示例json

另一部分是在线规则组件,上一篇的预览规则逻辑

返回:

测试规则逻辑2fact

本节展示两个事实的规则逻辑测试

方法:POST

URL: http://localhost:8080/ruledesign/testRuleLogic2?

factType1=com.grp.base.ruleengine.fact.TestFact1

&json1={"x": "rule"}&factType2=com.grp.base.ruleengine.fact.TestFact2&json2={"y": "engine"}

定义两个fact,分别带有x,y字符串属性

对应的脚本 "return su.reverse(fact1.x + fact2.y);",使用了su字符串工具类的方法

返回:

x+y的反转

保存规则逻辑

方法:POST

URL: ruledesign/saveRulesLogicDraft

参数:

参数是完整的规则逻辑,其中,rcs规则逻辑的组件,pck/name 规则逻辑的包和名称

返回:

返回,code/msg返回信息,还有规则逻辑,此时带有id,实现是保存到数据库

发布规则逻辑

发布规则,规则逻辑设置为RELEASED,生成规则

方法: POST

URL: ruledesign/releaseRuleLogic?ruleLogicId=

参数:ruleLogicId 规则逻辑Id

返回:

返回创建的规则,规则脚本逻辑元模型生成

重置规则逻辑

规则发布后,可以重置为DRAFT状态,二次修改后再发布

总述

所有设计服务api测试示例