最近在开发商城项目,其中有一个需求是用户下单时如何选择优惠券的问题。现在有时间总结下三种优惠券组合方式。

先假设一个场景:
        当前有三个商品,分别是商品A\B\C,三个优惠券(假设优惠力度相同),分别是优惠券1\2\3,其中优惠券1可用于商品A\B,优惠券2可用于商品C,优惠券3可用于商品B\C,现在购物车中有A\B\C三个商品,并且三个优惠券也都满足使用门槛。

  1. 组合方式1(有利于商城用户)
    首先我们先根据商品进行分层去构造一个优惠券树,因为存在三个商品,所以加上根节点,这棵优惠券树最多可分4层。

    优惠券树的每一层代表一种商品使用优惠券的情况,第一层代表商品A,第二次代表商品B,第三次代表商品C,通过遍历优惠券树我们可以发现,最优的组合应该是商品A使用优惠券1,商品B使用优惠券2,商品C使用优惠券3。
  2. 组合方式2(有利于商城店主)
    一个订单只能使用一张优惠券,则默认给出满足条件的最大面值优惠券即可。
  3. 组合方式3(兼顾商城店主、用户)
    我们还是去构造一个树,不过这次构造的是一棵商品数,根据优惠券进行分层,同理这棵树最多也是4层。

    商品树的每一层代表一种优惠券可用在哪些商品的情况,第一层代表优惠券1,可用于商品A/B,第二次代表优惠券2,可用于商品C,第三层代表优惠券3,可用于商品B/C。通过遍历商品树去找到最优组合。

第二种组合方式是最简单粗暴的方式,直接不允许优惠券叠加使用。
第一种方式和第三种方式的区别在于:如果一个优惠券可供多个商品使用,是否允许这个优惠券再做拆分。
第一种方式中,最优的组合就同时使用了三张优惠券,其中优惠券1可以同时作用于商品A/B,优惠券3可以同时作用于商品B/C,这种方式就把优惠券1/2进行了拆分,从而使用优惠券1只作用于商品A,优惠券3只作用于商品B。
第三种方式中,最优的组合只能同时使用两张优惠券,因为这种方式不允许对优惠券进行拆分。如果优惠券1在商品A中使用,则不允许商品B再去使用优惠券。