规则引擎设计

最近用到了规则引擎 ,简单做一个总结。 规则,说白了,就是,现状(fact)怎么样,如果(condition)怎么样,那么(action)怎么样. 规则引擎使用了rete算法,我这边使用的是drools, 总之归绕一个核心,生成drl文件,其他的都有drools来执行。

为了方便设计,对业务进行了统一的封装OP(入参:param,实体:body,出参:res),执行器Exector,这样就可以少引入class。 一个标签表,一个规则引擎表。 标签里有各种数据,变量,实例变量,关系运算,指令。

条件直接生成

行为
sql填充:把sql给规则引擎。sql是可以带参数的,使用的是变量库里的参数。
$op.setBody
{
        "$op.setBody": " select lock_on_active from t_rule_engine where id='${id}' "
    }
查询数组:查询sql,得到数组。
Executor.sqlList($op);
{"Executor.sqlList ($op);":""},
查询数值:查询sql得到数字
Executor.sqlLong($op);
{"Executor. sqlLong($op);":""},
查询map:查询sql得到map
Executor.sqlMap($op);
{"Executor. sqlMap($op);":""},
查询字符:查询sql得到字符串。
Executor.sqlStr($op);
{"Executor. sqlStr($op);":""},
触发规则:重新在规则文件里执行。
update($op);
{"update($op);":""},
变量copy:把执行的结果放到入参当条件。
Executor.paramCopy
{"Executor.paramCopy":["data","data1"]}   //把查询结果data的值,赋值到参数里data1
变量赋值:把一个常量值赋值给变量,这个常量,也可以是实例变量库里的值。
Executor.let
{"Executor.let":["data","cheitemContent"]}  //把 data 赋值给参里里的 cheitemContent

目前,只有“sql填充”、“变量copy”是有参之外,其他都是无参动作。


最终生成规则文件drl 

转载于:https://my.oschina.net/internetafei/blog/3100714

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值