EasyRule规则引擎设计及使用说明Word下载.docx
- 文档编号:5265738
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:11
- 大小:160.67KB
EasyRule规则引擎设计及使用说明Word下载.docx
《EasyRule规则引擎设计及使用说明Word下载.docx》由会员分享,可在线阅读,更多相关《EasyRule规则引擎设计及使用说明Word下载.docx(11页珍藏版)》请在冰点文库上搜索。
4.如何调用规则引擎
将规则引擎作为子模块加入的主业务系统后,主业务系统只需在程序里调用规则引擎的com.git.easyrule.service.RuleService类的runRule()和runModel()方法即可,规则引擎启动之后便根据自身的规则配置项对数据进行校验处理,处理结果将存入规则文件配置的指定表当中。
在调用RuleService类的runRule()和runModel()方法时需传入几个参数,以下表格是参数说明:
参数名
类型
中文说明
备注
RuleID/ModelID
String
规则ID/规则模型ID
数据校验规则文件
paramMap
Map<
String,Object>
参数对象
后台所有规则需要用到的变量集合
源方法代码:
RuleServicers=newRuleService();
Map<
paramMap=newHashMap<
String,Object>
();
paramMap.put("
num"
"
1"
);
cardNo"
130********7125635"
List<
MessageObj>
msgList=rs.runModel("
M0002"
paramMap);
msgList=rs.runRule("
R0001"
5.配置使用说明
规则引擎的配置由三大部分组成:
1.数据库配置:
配置被检测的数据源。
2.公式函数配置:
系统所有的公式函数类由该配置文件管理。
3.校验规则配置:
系统所有的规则由该配置文件管理。
4.校验规则模型配置:
系统所有的规则校验模型由该配置文件管理。
5.1数据库配置文件env.properties
规则引擎的数据配置既可以共用主业务系统的配置文件,也可以独立采用该文件对其进行灵活配置,以下是具体的配置说明:
配置项
easyDriver
JDBC访问数据库的驱动
easyUrl
数据库路径
easyUsername
用户名
easyPassword
密码
5.2公式、函数配置文件ruleEngine_beans.xml
具体详细请参考本配置文件里的内容,本文件是标准的Spring配置文件。
5.3数据校验规则文件ruleEngine_rules.xml
1.rule节点:
对表数据的纵向校验以及逻辑校验。
节点
属性
含义
rule
id
规则ID
name
规则名称
checktype
检测的公式
1.该ID应与
ruleEngine_beans.xml
配置的ID保持一致。
2.公式可以有多个,以“-”符号分隔。
startValue
范围顶值
endValue
范围底值
checkedFieldName
被检测的值
errCode
错误码
errMsg
错误信息
targetDataList
比对值
可以有多个,以”;
”符分隔
checkLevel
检查级别
1:
info;
2:
warn;
3:
err
sql
通过该SQL语句获取结果集,SQL可以有变量以@开头
示例:
<
ruleid="
R0002"
name="
客户存在不良贷款"
checktype="
greater-less-eqn"
checkedFieldName="
#sum(#sum($v1,$v2,-25),$v3)"
targetDataList="
25"
startValue="
20"
endValue="
30"
errcode="
2101015-012"
errMsg="
checkLevel="
warn"
>
<
sql>
selectcount(loan_id)v1,nvl(max(loan_length),0)v2fromTB_LON_LOANwhereCLOSE_FLAG='
0'
andLOAN_LEVEL_FIVE_CLASSin('
3'
'
4'
5'
)andCUS_ID=@cusId<
/sql>
selectcount(loan_id)v3fromTB_LON_LOAN_APPLICATIONwhereCUS_ID=@cusId<
<
/rule>
示例说明:
规则引擎执行“R0002”规则的顺序如下:
1.规则引擎获取SQL节点的语句,如果该SQL语句有变量,规则引擎根据将预设的变量值赋给SQL语句组成一个可以执行的字符串,并通过该字符串到数据库查出符合条件的结果集。
如果结果集没有数据将不执行本节点的所有规则。
2.如果结果集有数据,规则引擎先执行R0001规则:
获取结果集中的v1,v2,v3字段对应的值,并将这三个变量值作为参数执行checkedFieldName设置的函数,计算出的结果作为此规则的被检测值传入checktype节点定义的所有公式中,greater公式将该值和startValue配置的值进行是否大于运算,如果返回true继续执行下一个公式,如果返回false,该规则直接不通过。
5.4数据校验规则模型文件ruleEngine_models.xml
本文件的配置节点由两部分组成,规则引擎根据不同节点进行相应的规则校验:
1、model节点:
提供负责的逻辑模型校验。
model
规则模型ID
规则模型名称
isIgnore
是否忽略错误
1.true:
忽略规则模型中的规则错误
2.false:
不忽略规则模型中的规则错误
当模型配置为true(忽略错误)时,模型中的所有规则都会执行,最后将返回所有错误规则的检查结果集合;
当模型配置为false(不忽略错误)时,模型中只要有一条规则不符合规则,就会停止检查,返回该条规则的错误信息。
配置模型中包含的规则ID
2、rule节点:
如果是sql查询的结果以$开头,如果是外部传入则以@开头。
可以包含规则参数,参数名与规则内的参数名一致即可。
通过该SQL语句获取的结果可以作为规则的参数,以$开头,SQL可以有变量以@开头,通过外部传入。
6.引擎现有的公式、函数
1.公式
公式名
说明
是否已经支持
eqs
判断字符串是否相等
是
ineqs
判断字符串是否不相等
eqn
判断数字是否相等
ineqn
判断数字是否不相等
greater
大于
less
小于
ge
大于等于
le
小于等于
isnum
判断是数字
notnum
判断不是数字
isint
判断是整数
idvalid
判断身份证合法
dateafter
在XX日期之后
否
datebegin
在XX日期之前
2.函数
函数名
Sum(p…..N)
汇总多个参数值得和,参数可以有多个,中间以逗号分隔
Len(p)
取参数的长度
注:
1.P:
代表参数,N代表可以有多个。
2.规则引擎的函数支持函数嵌套,嵌套之后的函数会预先执行最里面的函数再依次执行外面的函数,如:
checkedFieldName="
#sum(#sum($v1,$V5),#sum($v2,$V6),$v3,$v4)"
执行顺序:
首先执行#sum($v1,$V5)函数,然后执行#sum($v2,$V6)函数,最后执行最外面的#sum函数。
7.扩展规则引擎
由于目前规则引擎提供的规则数量有限,为了使其更加符合主业务系统各方面的数据校验处理,规则引擎提供了相关接口供开发人员再次扩展。
规则引擎的扩展主要包括两部分:
一.函数扩展,二.公式扩展。
7.1.扩展函数
1.实现函数接口:
主要实现com.git.easyrule.func.Function接口的publicStringgetValue(List<
String>
list)方法,同时实现类放在com.git.easyrule.func目录
2.添加配置项:
在ruleEngine_beans.xml文件中添加配置Bean,同时Bean的Name
以”function_”开头,如下:
beanid="
function_sum"
class="
com.git.easyrule.func.Sum"
/bean>
7.2扩展公式
1.实现公式接口:
主要实现com.git.easyrule.formula.Formula接口的
publicbooleanexecute(Rulerule,Map<
record,Map<
sysVarMap)方法,同时实现类放在com.git.easyrule.formula.impl目录下,参数说明如下:
rule:
具体规则。
Record:
MAP结果集
sysVarMap:
系统变量MAP。
2.添加配置项:
以”Formula_”开头,如下:
formula_ineqs"
class="
com.git.easyrule.formula.impl.FormulaForIneqString"
8结束语
规则引擎为管理多变的业务逻辑提供了一种解决方案。
规则引擎既能管理应用层的业务逻辑又能使表示层的页面流程可订制。
这就给软件架构师设计大型信息系统提供了一项新的选择。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EasyRule 规则 引擎 设计 使用说明
![提示](https://static.bingdoc.com/images/bang_tan.gif)