跳到主要内容

促销金额拆分需求说明

活动分类

促销活动共分为3类:

  1. 单品促销活动:单品立减、第二件半价、限时抢购和拼团
  2. 组合促销活动:满减和满赠
  3. 特殊促销活动:优惠券

促销活动叠加说明

活动与商品

  1. 同一时间段可以发布多个相同类型的促销活动,但是每个活动中的商品不能重复

  2. 同一个商品,在相同时间段(或有重合的时间段),不能同时参与同类型的促销活动

  3. 根据上面两条需求,可得出结论:同一个商品,在相同时间段(或有重合的时间段),最多能同时参与一个单品促销活动和一个组合促销活动

  4. 举例说明

    • 如果商品A参与了满100减5元的满减促销活动,活动时间为2023-04-11 08:00:00 - 2023-04-15 08:00:00,那么商品A在相同时间段(或有重合的时间段)还能同时参与哪些活动,如下:

      活动类型是否可以参与
      满减
      满赠
      单品立减
      第二件半价
      限时抢购
      拼团
    • 如果商品A参与了单品立减2元的单品立减促销活动,活动时间为2023-04-11 08:00:00 - 2023-04-15 08:00:00,那么商品A在相同时间段(或有重合的时间段)还能同时参与哪些活动,如下:

      活动类型是否可以参与
      满减
      满赠
      单品立减
      第二件半价
      限时抢购
      拼团

优惠叠加

  1. 单品促销活动优惠都是可以叠加的,也就是购买的商品数量越多,优惠越多

    例如单品立减2元活动,购买1件商品优惠2元,购买2件商品优惠4元,购买3件商品优惠6元...以此类推

  2. 组合促销活动虽然是多阶梯优惠,但是各个阶梯优惠是不可以叠加的

    例如满减活动有两个优惠阶梯:

    1、购满50元减1元

    2、购满100元减3元

    当用户购满100元时,只能减3元,不能将满50减1元的优惠也叠加上

  3. 店铺优惠券和平台优惠券可以叠加使用

    现阶段每笔交易最多只能使用1张平台优惠券,每笔交易中的店铺商品只允许使用1张店铺优惠券

优惠计算顺序

image-20230410105545027

  • 单品促销活动优惠计算基础是以商品原价进行计算的

  • 组合促销活动优惠计算基础是以商品在单品促销活动优惠计算完之后的价格进行计算的

  • 优惠券优惠计算优先级为最后,商品在计算完其它促销活动优惠后,再计算优惠券优惠金额

    在程序上,是要先计算店铺优惠券,再计算平台优惠券;但是也有特殊情况,比如在结算页先使用平台优惠券,再使用店铺优惠券,那么在计算店铺优惠券时,店铺优惠券的计算基础就是以使用完平台优惠券之后的价格来进行计算的

优惠拆分

现阶段只有满减促销活动和优惠券涉及到金额拆分

拆分公式

拆分到SKU上的优惠金额 = 优惠金额 * (SKU售价 / 所有SKU售价)

sku售价是指:上一个优惠后的金额,比如A商品原价100元,单品立减减10元,之后又参与满减,那么参与满减的金额为90元(100-10)

拆分逻辑

背景:SKU-A,购买m件;SKU-B,购买n件

  • 先对SKU的售价乘以数量进行从低到高的排序,拆分计算顺序为从低到高;

    如果

    A*m < B*n

    则要先对SKU-A进行优惠金额拆分。

  • 拆分满减活动优惠金额或者优惠券优惠金额(优惠金额X元)在skuA上面享受的优惠。公式为:

    S1 = X * A * m / (A * m + B * n)

    此时注意:是先用优惠金额乘以SKU的金额,再除以SKU总金额。

    为什么是先乘再除呢?反过来先除再乘是否可以?是不可以的,因为这样会有丢失精度的问题,也是为了保证所有系统数据的一致性。

  • 拆分满减活动优惠金额或者优惠券优惠金额(优惠金额X元)在skuB上面享受的优惠。公式为:

    S2 = X - S1

    其他的订单级别优惠采用类似的方式。(补差法)

精度要求

  • 小数点保留2位,四舍五入
  • 最后sku的计算要用补差法,保证总和平衡

优惠拆分举例

优惠活动一

背景

用户同时购买10件商品A、10件商品B和10件商品C

商品信息如下:

商品单价
A5
B3
C2

活动信息如下:

活动信息商品A商品B商品C
满减活动--满100元减10元(或者是满100元减10元的优惠券)参与参与参与

计算

image-20230410145315114

退款金额

商品优惠分摊(总计)实付全部退款部分退款
A550-5=4545(45/购买数量)*退货数量
B330-3=2727(27/购买数量)*退货数量
C220-2=1818(18/购买数量)*退货数量

整单退款金额为订单实付金额,也就是45+27+18=90

优惠活动二

背景

用户同时购买10件商品A、10件商品B和10件商品C

商品信息如下:

商品单价
A6
B4
C2

活动信息如下:

活动信息商品A商品B商品C
满减活动--满100元减10元(或者是满100元减10元的优惠券)参与参与不参与

计算

image-20230410150552743

退款金额

商品优惠分摊(总计)实付全部退款部分退款
A660-6=5454(54/购买数量)*退货数量
B440-4=3636(36/购买数量)*退货数量
C02020(20/购买数量)*退货数量

整单退款金额为订单实付金额,也就是54+36+20=110