流口水,如何在不使用显着性的情况下控制多种情况

时间:2019-09-05 18:58:10

标签: drools rule-engine

我遇到的一种情况是,可以根据用户选择的产品是否是受限制的礼物类别以及他的购买达到一定的限制来向用户提供免费礼物。例如,如果他的购买量小于150,则可以授予他礼物,只要它不在PREMIUM类别中即可。如果他购买了一定数量的东西,他仍然可以随机挑选礼物,但仍然必须属于产品类别。产品类别是季节性的,因此不是固定的。这些情况有很多,但我只是强调了一种情况,他可能会收到礼物,而另一种情况下他可能会打折。

product-rewards.drl

rule "check if the user has picked a free gift not premium product"
      when 
          $customer: Customer(purchase < 150, discounts == null)
          $product: Product( $productCode: this.productId, category! = Category.PREMIUM ) from product.rewardProducts
          $giftReward: GiftReward($giftCode: code == $productCode)
       then
         log.info("Yes, gift reward is in correct category!!");
         $customer.addToBasket($giftReward);
end

rule "user selects a gift not in rewards category, offer 10% discount"
 when 
      $customer: Customer(purchase > 150, rewards == null )

      $product: Product( $productCode: this.productId ) from product.rewardProducts
     $giftReward: GiftReward($giftCode: code != $productCode)
 then
   $customer.applyDiscount(10);
end

我有这些类型的方案,但是我想创建它们而不用显着性来控制客户得到什么。选择的礼物奖励主要控制某些情况下的情况,而不控制其他情况。对于此用例,我可以使用显着性,但是后来我很快意识到,在其他情况下,我将不得不更改显着性,即所选择的礼物不再控制客户获得的奖励。如果我已经申请了折扣,则不应给予用户奖励,反之亦然。

我在Mastering Drools中读到,使用显着性来做这种事情不是一个好主意,我同意。用这种方法来管理业务规则很快变得困难。但是,我看不出如何才能避免规则以不确定的方式触发。如果折扣规则生效

0 个答案:

没有答案
相关问题