Skip to content

动态更新规则的drools规则引擎demo

License

Notifications You must be signed in to change notification settings

bellmit/dynamic-drools

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 

Repository files navigation

dynamic-drools

动态更新规则的drools规则引擎demo

背景

遇到一个业务场景,现在需要对于审批的发票做各种规则校验,
对于提交审批的发票,符合规则的则自动审批通过,不符合的驳回。
通常对于发票字段的比较就是一个一个字段的去与定义的规则比较,硬编码,代码不高级,手动呵呵:)
了解到规则引擎,可以把比较的过程交给规则引擎执行,只需要定义相应的规则语句。
想了解下drools的使用,整体流程框架已写好,测试了下火车票根据规则检查,返回提示信息

为啥叫动态的更新规则?
因为一开始drools使用drl文件写死的规则语句,现在是把生成的规则语句存在表里,
修改规则信息,立马重新生成更新掉库里的规则语句,使之匹配时立马生效.

这里面可以做很多优化,比如规则语句可以放redis里,只要保证redis与数据库读写一致, 就不用校验时频繁的去查数据库获取rule_detail

主要使用技术栈

  • drools (规则引擎)
  • freemarker (模板引擎)
  • mysql

项目结构-包划分

项目结构-包划分

执行流程

执行流程

票据检查实现思路

主要分成两部分

  • 规则生成
    • 规则数据
    • 模板生成
  • 发票校验
    • 读取规则
    • 校验

测试类

1st.建库drools,根据sql建表
2nd.执行测试类方法
DroolsDemoApplicationTests

添加定义规则数据方法:insertInvoiceRuleDetail

计算drools规则并保存方法:saveRule

测试验证数据方法:getTrainInvoiceTest

票种

增值税票

火车发票票

汽车轮船发票

二手车发票

卷式发票

定额发票

机动车发票

通用发票

飞机航行单

其他发票

About

动态更新规则的drools规则引擎demo

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 99.2%
  • FreeMarker 0.8%