美文网首页
go规则引擎 grule

go规则引擎 grule

作者: nil_ddea | 来源:发表于2020-09-14 00:07 被阅读0次

规则引擎由是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。
grule是golang实现的开源规则引擎。

grl

grule有自己的DSL语言来定义规则,GRL,类似Drools(java实现的一款规则引擎)中的DRL。
结构:

rule  <rule_name> <rule_description>
   <attribute> <value> {
   when
      <conditions>

   then
      <actions>
}

实例:

rule SpeedUp "When testcar is speeding up we keep increase the speed." salience 10  {
    when
        TestCar.SpeedUp == true && TestCar.Speed < TestCar.MaxSpeed
    then
        TestCar.Speed = TestCar.Speed + TestCar.SpeedIncrement;
        DistanceRecord.TotalDistance = DistanceRecord.TotalDistance + TestCar.Speed;
}

SpeedUp是规则的名字
"When testcar is speeding up we keep increase the speed." 是规则的描述
salience 10 是规则执行的优先级

实例

一个商品税收分级的例子
2020年前的商品无税 奢侈品15%税率 普通商品10% 税率 其他商品20%税率
GRL如下

rule OnlyCalculatePurchaseInYear2020 "All other purchase dated not in 2020, we should ignore" salience 100 { // 最优先判断非2020未免税
    when
        Purchase.IgnoredPurchase == false && GetTimeYear(Purchase.PurchaseDate) != 2020 && Purchase.PriceAfterTax == 0
    then
        Purchase.IgnoredPurchase = true;
        Retract("OnlyCalculatePurchaseInYear2020");
}

rule TaxingLuxuryItems "When its a luxury Item, you tax them 15 percent." salience 10 {
    when
        Purchase.IgnoredPurchase == false && Purchase.Tax == 0 && Purchase.ItemType == "LUXURY" // 奢侈品税率
    then
        Purchase.Tax = Purchase.Price + (Purchase.Price * 0.15);
}

rule TaxingNormalItems "When its a Normal Item, you tax them 10 percent." salience 8 {
    when
        Purchase.IgnoredPurchase == false && Purchase.Tax == 0 && Purchase.ItemType == "NORMAL"  // 普通税率
    then
        Purchase.Tax = Purchase.Price + (Purchase.Price * 0.1);
}

rule TaxingOtherTypeItems "When its not Normal or Luxury Item, you tax them 20 percent." salience 7 {
    when
        Purchase.IgnoredPurchase == false &&  Purchase.Tax == 0 && Purchase.ItemType != "NORMAL" && Purchase.ItemType != "LUXURY"
    then
        Purchase.Tax = Purchase.Price + (Purchase.Price * 0.2);
}

rule CalculatePriceAfterTax "When tax is calculated, time to calculate price after tax" {
    when
        Purchase.Tax > 0 && Purchase.PriceAfterTax == 0 
    then
        Purchase.PriceAfterTax = Purchase.Price + Purchase.Tax;// 计算税后价格
}

rule SumUpPurchase "When price after tax calculated, sum it up" {
    when
        Purchase.PriceAfterTax > 0
    then
        CashFlow.PurchaseCount = CashFlow.PurchaseCount + 1;
        CashFlow.TotalPurchases = CashFlow.TotalPurchases + Purchase.Price;
        CashFlow.TotalTax = CashFlow.TotalTax + Purchase.Tax;
        CashFlow.PurchasesAfterTax = CashFlow.PurchasesAfterTax + Purchase.PriceAfterTax;
        Retract("SumUpPurchase");
}


相关文章

  • go规则引擎 grule

    规则引擎由是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决...

  • 谈一谈规则引擎在活动系统中的落地

    本文从 “为什么需要规则引擎” “规则引擎的定义” “规则引擎在营销活动系统中的落地” “规则引擎平台内部架构” ...

  • php写个简单的规则引擎demo

    1、规则引擎简介 规则引擎是一种推理引擎,它是根据已有的事实,从规则知识库中匹配规则,并处理存在冲突的规则,执行最...

  • Java常用的规则引擎

    概述 在本文中,我们将介绍Java中一些最受欢迎的规则引擎。 规则引擎简介 规则引擎由推理引擎发展而来,是一种嵌入...

  • 规则引擎的优缺点

    为何要使用规则引擎? 讨论规则引擎时,下边这些问题经常被提及: 什么时候应当使用规则引擎? 相较与使用使用“if....

  • 自学Java项目之规则引擎

    项目:规则引擎专题 规则引擎,全称为业务规则管理系统,英文名BRMS(Business Rule Manageme...

  • 规则引擎

    场景 业务风控,主要是下单、支付、优惠券、红包、签到等行为的风险控制,对抗的风险行为包括黄牛刷单、恶意占用库存、机...

  • 规则引擎

    1.正向链、反向链 2.误差的分类 4.复合概率

  • 规则引擎

    什么是规则引擎? 所谓的规则引擎就是一组规则加上一组动作, 当某种规则被满足后触发某个动作 业务痛点 多变的需求 ...

  • 规则引擎

    规则引擎https://www.yuque.com/yangdakang/kb/bstdgr[https://ww...

网友评论

      本文标题:go规则引擎 grule

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