答案是:逻辑上是没有任何问题的,但是实际场景中并不常见(在业务层面一般不允许这样操作),至少笔者没遇到过这样的好事,如下图所示: 商品同时参与三种类型促销活动 比如:一罐原价200的奶粉,既参与了 特价180 销售,又参与了指定奶粉类型的 满100减10 的活动,还使用了全场通用的 满150减10 的优惠券,最后支付金额为160。 所以这条原则: 同类型通过实体进行互斥、不同类型可以相互叠加。 即使是在实际使用场景中,也仍然具备它的实际价值,笔者再次总结如下: 第一种类型促销:即:商品低价促销,有:拼团/阶梯拼团、团购、秒杀、限时折扣、降价拍等 第二种类型促销:即:商品小计促销,有:指定商品的(品牌、类目、店铺等不同维度)满减、满赠、折扣,N元任选、加价购。 第三种类型促销:即:订单金额促销,有:全场满减、满赠,全场满xx包邮,优惠券等 当你设计促销类产品时,你应该这样做: 首先,你需要先和 架构师/项目经理 从整体上定义好各种促销活动之间的关系(如上所述),搭好架构; 其次,当你实际设计促销产品时,需要判断你设计的促销产品属于哪种类型,归为同一类型的促销活动需要通过商品进行互斥; 例如:同为针对商品的促销,不能同时对同一个商品进行满减和满赠; 针对订单的促销,需要定义优先级,例如:全场满减的促销计算应该在全场满x包邮之前。也就是说计算包邮的金额应该是所有促销计算完成后的金额,也就是用户实付金额。 最后,不同类型之间可以进行叠加,例如:针对商品金额的促销可以和针对同一商品的满减促销进行叠加。 在我们知道这些之后再来看看关于促销的时序图,通过它可以帮助你完成任意形式的促销产品设计: 促销时序图 对该时序图简要描述如下: 当用户打开产品、并把商品加入购物车,然后用户进入购物车进行结算 这时,系统首先需要将购物车商品与促销引擎的商品池进行比对,将所有参与第一类促销的商品全部拿出来并做好标记与没有参与第一类促销的商品区分开; 再次将购物车所有商品与促销引擎的商品池进行匹配,将所有参与第二类促销活动的商品按照促销活动不同进行分组展示,同一促销活动商品归为同一组,不同活动则分为不同的组,没有参加活动的归为一组,每组活动根据促销金额门槛和当前组商品金额提示用户进行凑单; 针对订单的促销活动,作为全局条件在购物车顶部或者底部进行展示(不针对商品所以没有分组),并根据用户购物车勾选的商品进行提示需要再做哪些购买操作才能满足全局优惠条件 将这些结果返回给购物车并显示给用户,引导用户做出选择。 (责任编辑:admin) |