需求和定义
设计一个灵活的促销架构,可以容纳当前可预见到的所有促销活动类型。活动的配置方式要足够自由,允许运营管理员自由配置活动的参与人群、活动包含的商品范围、特别是不同活动的叠加关系。
配置时,一个商品可以同时在同一时间参加多个活动。而在结算时互斥的多个活动中只能选择其中一个参加,这个选择可以是系统自动的,也可以是用户自己选择的。不互斥的活动可以则同时参加。
这里的促销活动是指用户购买商品时会改变订单的实付价格或者订单商品数量的促销类型,例如限时降价、满100减10、买1赠1、会员打折等。不在下单过程中起作用的活动不包括在这个范围里,例如新用户注册送券、下单后赠券、下单后返现等。
逻辑架构
这个架构设计最关键的问题是要解决不同促销活动叠加使用的问题,而且能否叠加是可以由运营在配置的时候来指定的,而不是在代码里固定不变。例如运营设置了一个限时价活动为原价的2折,已经突破了成本价,这时候运营可能不希望用户再使用其它的促销活动;而另一个限时价活动只是原价的9折,这时候运营可能就允许用户叠加使用其它活动。
活动叠加存在先后关系,后面的促销结果基于前面的促销结果进行计算。
根据这个以上需求,设计一个分层的促销活动架构,处在同一层的促销表示互斥的、不能同时参加的活动类型,不同一层的活动则可以叠加使用。一个常见的分层方式是这样的:
层级 | 促销方式 | 举例 |
---|---|---|
1级 | 直接修改价格 | 直降价、秒杀、拼团、预订 |
2级 | 范围促销 | 指定商品买1送1;指定品牌买满100减10;全场商品满1 |