根据部分商品的总数量制定促销规则

2020-09-15 11:03发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我正在建立一个促销规则,一旦有某些产品属于某个特定品牌或类别,并且这些产品的总金额高于$ 100(例如,总金额可以根据该条件进行折扣),就会被触发。

例如:在购物车上,有4个产品P1,P2,P3,P4,其中P1是$ 100,P2是$ 150,P3是$ 400,P4是$ 10。 P1和P2是苹果产品,但P3,P4不是苹果产品。

一旦购物车中的Apple产品总金额高于$ 200,就会触发该促销活动,因此在该购物车中,有$ 100 + $ 150 = $ 250,这是促销规则。

我不知道如何在Hybris 6中使用默认的预定义条件构建该规则。请有人帮忙看看并给我一个想法。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我正在建立一个促销规则,一旦有某些产品属于某个特定品牌或类别,并且这些产品的总金额高于$ 100(例如,总金额可以根据该条件进行折扣),就会被触发。

例如:在购物车上,有4个产品P1,P2,P3,P4,其中P1是$ 100,P2是$ 150,P3是$ 400,P4是$ 10。 P1和P2是苹果产品,但P3,P4不是苹果产品。

一旦购物车中的Apple产品总金额高于$ 200,就会触发该促销活动,因此在该购物车中,有$ 100 + $ 150 = $ 250,这是促销规则。

我不知道如何在Hybris 6中使用默认的预定义条件构建该规则。请有人帮忙看看并给我一个想法。

付费偷看设置
发送
3条回答
Violet凡
1楼-- · 2020-09-15 11:48

您可以通过在自定义的新操作实现中添加额外条件来实现此目的,在这里您可以验证合格条目(苹果产品)的价格总和是否大于金额(按照您的示例为200 $)。 如果您对容器使用条件,则可以使用以下Rao操作代码

  @Override
      public void performAction(RuleActionContext context,Map 参数){
          Preconditions.checkArgument(MapUtils.isNotEmpty(parameters),
                  "作为方法参数传递的属性不能为空");
          this.validateRule(context);
          最终的BigDecimal值=(BigDecimal)parameters.get(" value"); //购物车上的折扣百分比
          最终的BigDecimalqualifyingAmtOfProducts =(BigDecimal)parameters.get(" value"); //类别的合格数量
 
          OrderEntrySelectionStrategy selectionStrategy =(OrderEntrySelectionStrategy)参数
                  .get(" selection_strategy");
          最终Map  qualifyingContainers =(Map )parameters.get(" qualifying_containers");
         
          如果(Objects.isNull(selectionStrategy)){
              selectionStrategy = OrderEntrySelectionStrategy.DEFAULT;
          }
 
          最终List  selectionContainers = this.createSelectionStrategyRPDsQualifyingProducts(context,selectionStrategy,
                  合格的容器);
          List  list = new ArrayList <>();
          用于(EntriesSelectionStrategyRPD容器:selectionContainers){
              list.addAll(container.getOrderEntries()。stream()。map(o-> o.getTotalPrice())。collect(Collectors.toList()));
              }
          BigDecimal totalOfEntries = list.stream()。reduce(BigDecimal :: add).get();
          if(totalOfEntries.compareTo(qualifyingAmtOfProducts)> = 0){
              performAction(上下文,值);
          }
 
      }
     
      受保护的void performAction(RuleActionContext上下文,BigDecimal量){
          CartRAO cartRao = context.getCartRao();
          DiscountRAO折扣= this.getRuleEngineCalculationService()。addOrderLevelDiscount(cartRao,false,amount);
          RuleEngineResultRAO结果= context.getRuleEngineResultRao();
          result.getActions()。add(discount);
          this.setRAOMetaData(context,new AbstractRuleActionRAO [] {discount});
          context.updateFacts(new Object [] {cartRao,result});
          context.insertFacts(new Object [] {discount});
      }
 
  
吹牛啤
2楼-- · 2020-09-15 11:37

我认为没有条件可以满足您的要求,因此您需要构建自己的条件

打个大熊猫
3楼-- · 2020-09-15 11:35

您好,您可以在下面的博客中尝试使用 https://hybrismart.com/2016/12/17/排除某些商品的总购物车价值计算 promoengine/

创建一个促销活动(例如主促销活动),该促销活动又调用另一个促销活动(例如子促销活动),在子促销活动中,您可以为您的产品创建合格条件,并且作为此子促销活动的用途,您可以计算新的总计 (例如specialTotal),它是CartRao中的新属性...。回到第一个促销或主要促销中,您可以在此为特殊总计写一个大于特定数量的条件,然后应用您要执行的操作 想在这里做。

一周热门 更多>