美文网首页
Drools规则引擎+积分模块简谈

Drools规则引擎+积分模块简谈

作者: 代码届的泥石流sc | 来源:发表于2023-02-16 12:30 被阅读0次

项目设计积分模块的时候,采用drools 规则引擎做poc ,做一下Drools规则介绍

一、规则引擎

1.规则

我们的日常生活是由规则驱动的。每次我们在开车的时候停在红灯处,之所以这样做,因为我们遵循一条规则,灯变红时我们应该停下来。如果你跳起来,最终会落到地面,这是由地球引力所决定的,它可以被表示成简单的数学方程。然而,对于我们生活日常中的规则,我们使用更加简单的结构来表示
当 XXX 的时候,做 XXX 的事,
IF <conditions> THEN <actions>

image.png

2.规则引擎

规则引擎是处理复杂规则集合的引擎。通过输入一些基础事件,以推演或者归纳等方式,得到最终的执行结果。规则引擎的核心作用在于将复杂、易变的规则从系统中抽离出来,由灵活可变的规则来描述业务需求。
Drools 是一款基于 Java 的开源规则引擎,以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效。

image.png

二、问题与矛盾

1.业务规则在实现上的矛盾

image.png

2.T管理者角度

image.png

3.开发人员易用性角度

image.png

三、业务规则技术

1.业务规则技术

image.png

2.引入业务规则技术的目的

2.1对系统的使用人员

 1.把业务策略(规则)的创建、修改和维护的权利交给业务经理
 2.提高业务灵活性
 3.加强业务处理的透明度,业务规则可以被管理
 4.减少对IT人员的依赖程度
 5.避免将来升级的风险

2.2对IT开发人员

1.简化系统架构,优化应用
2.提高系统的可维护性
3.方便系统的整合
4.减少编写“硬代码”业务规则的成本和风险
5.解决复杂的和复合的问题,其中有大量细粒度的规则和事实互动
6.让业务用户开发和维护规则以降低成本

四、Business Rules Management System

image.png

五、Drools 规则引擎

1.Drools匹配规则

image.png image.png

2.Drools执行流程

image.png

3.积分规则场景

image.png

3.1 积分和drools模块大致流程

image.png

3.2drools相关脚本

rule "order_base_rule"
no-loop true
when
$order : ActuatorOrderDTO(ruleType == 'base')
$time : RuleTimeDTO()
$ruleContext : RuleContext()
eval(ruleCommonCheckService.checkCommonRule($order.getPointsRule(), $time))
eval(orderCheckService.checkFoStore($order))
eval(orderCheckService.checkBaseRuleProduct($order))
eval(orderCheckService.checkOrderType($order.getOrderPointsDTO(), $ruleContext.getPointsRulesOrder()))
eval(orderCheckService.discount($order, $ruleContext.getPointsRule()))
then CalculateCommon.calculateBase($order);
end

rule "order_promotion_rule"
no-loop true
when
$order : ActuatorOrderDTO(ruleType == 'promotion')
$time : RuleTimeDTO()
$ruleContext : RuleContext()
eval(ruleCommonCheckService.checkCommonRule($order.getPointsRule(), $time))
eval(orderCheckService.checkMemberLimit($order.getOrderPointsDTO(), $ruleContext.getPointsRulesMemberLimit()))
eval(orderCheckService.checkFoStore($order))
eval(orderCheckService.checkPromotionProduct($order,$ruleContext))
eval(orderCheckService.checkOrderType($order.getOrderPointsDTO(), $ruleContext.getPointsRulesOrder()))
eval(orderCheckService.checkStore($order.getOrderPointsDTO(), $ruleContext.getPointsRulesStore(), $ruleContext.getStoreInfoVo()))
eval(orderCheckService.checkConsumer($order,$ruleContext.getPointsPromotionRule(), $ruleContext.getPointsRulesConsumer(), $ruleContext.getConsumerCodes()))
eval(orderCheckService.checkPromotion($order.getMatchedOrder(), $order.getPointsPromotionRule()))
then CalculateCommon.calculatePromotion($order);
end

rule "order_birthday_rule"
no-loop true
when
$order : ActuatorOrderDTO(ruleType == 'promotion')
$time : RuleTimeDTO()
$ruleContext : RuleContext()
eval(ruleCommonCheckService.checkCommonRule($order.getPointsRule(), $time))
eval(orderCheckService.checkOrderType($order.getOrderPointsDTO(), $ruleContext.getPointsRulesOrder()))
eval(orderCheckService.checkFoStore($order))
eval(orderCheckService.checkStore($order.getOrderPointsDTO(), $ruleContext.getPointsRulesStore(), $ruleContext.getStoreInfoVo()))
eval(orderCheckService.checkConsumer($order,$ruleContext.getPointsPromotionRule(), $ruleContext.getPointsRulesConsumer(), $ruleContext.getConsumerCodes()))
eval(orderCheckService.checkBirthdayPromotion($order.getOrderPointsDTO(), $order.getPointsPromotionRule()))
then CalculateCommon.calculateBirthDayPromotion($order);
end

5.drools 总结

image.png

相关文章

  • Drools

    一. Drools规则引擎 Drools就是为了解决业务代码和业务规则分离的引擎。Drools 规则是在 Java...

  • Drools 规则动态编译运行

    背景 近期遇到一个规则引擎项目,甲方明确要求用Drools规则引擎,之前想象中Drools应该应用在风控、预警类场...

  • Drools介绍与使用

    Drools 是用 Java 语言编写的开放源码规则引擎,使用 Rete 算法对所编写的规则求值。Drools 允...

  • Drools集成SpringBootStarter

    1.说明 基于fast-drools-spring-boot-starter,能够方便的将规则引擎Drools集成...

  • Drools详解

    Drools规则引擎的结构示意图 Drools相关概念 事实(Fact):对象之间及对象属性之间的关系 规则(ru...

  • 规则引擎_Drools

    01、背景 技术产生的背景: 概念拆解:规则的引擎 规则,在怎样的情况(条件)下做什么事情(结论),转化为伪代码:...

  • drools的简单入门案例

    一、背景 最近在学习规则引擎drools,此处简单记录一下drools的入门案例。 二、为什么要学习drools ...

  • 关于规则引擎--easy rules

    一、常用规则引擎 Drools、easyRule、QlExpress、Aviator、Vincio按照GitHu...

  • SpringBoot入门建站全系列(三十四)使用Drools规则

    SpringBoot入门建站全系列(三十四)使用Drools规则引擎做排班系统 一、概述 Drools 是用 Ja...

  • Drools入门-实现评分专家系统

    1.什么是Drools Drools是一个规则引擎,可以通过自定义规则实现不同的专家语境,而不需要修改源代码,规则...

网友评论

      本文标题:Drools规则引擎+积分模块简谈

      本文链接:https://www.haomeiwen.com/subject/kzjpkdtx.html