赞
踩
在实际业务中,售前根据客户需求选择相应的产品和对应的物料来生成报价单。然而,在填写报价单的过程中,可能会出现物料漏选或数量不准确的情况,这会对后续备货和生产效率造成重大影响。此外,由于产品和物料种类繁多,数量众多,以及物料之间的关联规则复杂,传统的业务代码实现逻辑规则已经不再适用。
为了解决这一问题,我们采用了开源的Drools规则引擎结合低代码平台Odoo进行审单系统的开发。通过这种方式,成功实现了规则与程序的解耦,使业务人员能够自行配置所需的规则,从而实现真正的规则审核自动化。
这样一来,我们能够提高效率,减少人为错误,并确保整个流程的顺利进行。
规则引擎,全称为业务规则管理系统,英文名为BRMS(即Business Rule Management System)。规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用预定义的语义模块编写业务决策(业务规则),由用户或开发者在需要时进行配置、管理。
需要注意的是规则引擎并不是一个具体的技术框架,而是指的一类系统,即业务规则管理系统。目前市面上具体的规则引擎产品有:drools、VisualRules、iLog等。规则引擎实现了将业务决策从应用程序代码中分离出来,接收数据输入,解释业务规则,并根据业务规则做出业务决策。
规则引擎其实就是一个输入输出平台。
系统中引入规则引擎后,业务规则不再以程序代码的形式驻留在系统中,取而代之的是处理规则的规则引擎,业务规则存储在规则库中,完全独立于程序。业务人员可以像管理数据一样对业务规则进行管理,比如查询、添加、更新、统计、提交业务规则等。
业务规则被加载到规则引擎中供应用系统调用。
●使用规则引擎的优势如下
●规则引擎常用应用场景
对于一些存在比较复杂的业务规则并且业务规则会频繁变动的系统比较适合使用规则引擎,如下:
drools是一款由JBoss组织提供的基于Java语言开发的开源规则引擎,可以将复杂且多变的业务规则从硬编码中解放出来,以规则脚本的形式存放在文件或特定的存储介质中(例如存放在数据库中),使得业务规则的变更不需要修改项目代码、重启服务器就可以在线上环境立即生效。
Drools基本构成,主要由以下三部分组成:
其中Inference Engine(推理引擎)又包括:Pattern Matcher(匹配器) 具体匹配哪一个规则,由这个完成,Agenda(议程),Execution Engine(执行引擎)
● Drools基础语法:
规则文件的构成:
在使用Drools时最重要的工作就是编写规则文件,规则文件的后缀为.drl。drl是Drools Rule Language的缩写。在规则文件中编写具体的规则内容。
Drools语法结构:由规则名称(唯一),规则对象属性,条件语句与执行语句结合成为一个完整的规则:
● Pattern模式匹配:
Drools中的匹配器可以将Rule Base中的所有规则与Working Memory中的Fact对象进行模式匹配,我们需要在规则体的LHS部分定义规则并进行模式匹配。LHS部分由一个或者多个条件组成,条件又称为pattern。
pattern的语法结构为:绑定变量名:Object(Field约束),绑定变量既可以用在对象上,也可以用在对象的属性上,其中绑定变量名可以省略,通常绑定变量名的命名一般建议以$开始。如果定义了绑定变量名,就可以在规则体的RHS部分使用此绑定变量名来操作相应的Fact对象。Field约束部分是需要返回true或者false的0个或多个表达式。
LHS部分可以定义多个pattern,多个pattern之间可以使用and或者or进行连接,也可以不写,默认连接为and。
Drools语法的比较操作符:
审单系统首页展示:包括多型号规则匹配,规则运行数量与拦截数量。
1、业务部门导入规则(excel,xml)
由于drools没有excel导入规则的做法,也没有把业务部门规则语言转为drl的做法,所以这里自己实现文件解析,拼接规则成drl正确语法等:
用户导入规则时需要按照特定的模板来编写规则,excel中一共有7列数据,第一列为机器型号,第二列为规则名称(唯一),第三列为if条件,对应drools中的when关键字,第四列为then,对应drools中的then关键字,第五列为action,表示带出规则时,需要报价系统带出的物料和数量,第六列为msg,是规则不通过时的提示信息,第七列为规则状态,可选生效或者不生效:
excel编写示例规则:
2、规则加载到drools
规则在导入时会存入到数据库中,加载到drools引擎之前,需要将这样写的规则替换成drl语法的规则,可以看到经过处理之后的文档会变成很多drl文件,其中做到了自动转换为drl语法:
drl文件内容示例如下,已经将一行excel数据自动转换为drools引擎熟悉的语句:
3、报价单提交时执行批量规则
报价单在提交时会将配置传给drools,drools根据加载的规则执行每一条规则。每一条规则每一个配置都会执行,并且是毫秒级别,这就是drools的高效性。
4、返回规则执行结果(通过、未通过)
drools可以将未通过的规则,以及为什么不通过规则的物料返回,同时也会让通过的规则返回:
本文章讲述了基于odoo平台开发的审单系统的业务以及drools规则引擎的结合,但是还有许多需要完善的地方,比如现在生成的drl文件是很多的,一条数据对应一个drl文件,后来考虑是否10条数据对应一个drl文件。
作者:李建伟| 后端开发工程师
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。