一、前言
在电子商务网站中存在着纷繁复杂的促销规则,这些促销规则可以是作用在产品上、购物车内若干产品或整个购物车,
也可以是减免运费,额外赠送礼品、积分等。而且获得这些促销规则存在获取资格,比如某个会员级别、甚至是指定的用户等,
那么如何在电子商务系统中通过一种统一的设计来实现各种各样的促销规则,并提供友好的扩展性方便以后挖掘的更多的未知促销手段呢?
二、常见促销规则和例子
首先,让我们整理一下常见的促销规则和对应的例子。
整张订单消费满 x 节省百分比 或 数值 y
适合全站促销。
从指定的目录或者产品集合里 面选购满 x 减百分比 或 数值
比如图书分类,满100减10,满200减25等
购买某个或指定范围的产品节省百分比 或 数值
符合某个条件赠送某个产品
符合某个条件赠送指定产品集合里面某个产品(任选一)
比如满98元任选一赠品。
买 x 则 y 免费(同上)
买 x 后,若买y 则节省y% 或某数值
这种和前面的不同,更加复杂,类似产品包优惠。
某个产品特价(指定价格)
减、免运费(无条件)
减、免运费(有条件)
比如订单满多少金额,或某个会员级别。
满足某个条件则最便宜的免费
在指定的产品范围内,超过3件产品,则最便宜的免费(即最高折扣为33% off)
额外的积分赠送
免费的礼品包装
满 x 送 y 优惠券
使用优惠券(Coupon)获得指定的优惠
.... 更多的或由上面的类型衍生出的促销类型
三、促销规则规律和设计分析
这些促销类型让人眼花缭乱,接下来我们要进一步分析,整理出隐藏在这些类型后面的规律。
在这之前,我要定义一个说明:促销规则是在购物车和结帐页面才会生效的。
在结帐页面比购物车多出的是对运费的处理(比如某些省份才免运费),其它的和在购物车内一致。
只有在顾客将某个产品加入购物车后,基于购物车内的产品进行计算分析才会得出折扣后的价格、赠送或其它信息。
而在产品列表页面或详细页面,某些促销规则可以显示完整(如特价),某些则只能显示适用的促销活动标题了。
基于这个原则,我将上述的促销规则分成下面的几部分,即每种促销类型均可以通过这些部分来表示和维护:
基本信息
包括标题、说明、图片等。
规则有效时间
起始时间和结束时间
规则组编号和优先级
适用于除生效条件和规则优惠不同外,其它参数均相同的促销活动。
关于分组和优先级的作用下面会详细阐述。
规则适用产品范围
分为单个产品、多个产品、产品目录、产品种类(含多个目录)和全部产品
规则生效条件
最小数量(含)或金额(含)
规则享受资格
全体会员、最低会员级别(含)、会员组(一般是临时组)、指定会员。
规则优惠
节省x%-->百分比值
节省x-->金额
赠送优惠券-->选择1~N优惠券类型
减运费-->金额
免运费
额外积分(百分比)-->积分百分比值
额外积分(数量)-->积分数值
赠品-->选择指定产品-->赠品数量
赠品-->选择赠品组-->可选赠品数量
指定产品-->折扣-->百分比
指定产品-->折扣-->节省金额
四、分组和优先级
在实际应用中,往往存在多个促销规则是类似的,比如:
图书满100减20元
图书满200减50元
图书满300减100元
(京东用过)
这三个促销规则除了生效条件和对应的规则优惠不同外,其它的都是相同的,在促销引擎计算时,实际上
只会计算一个最符合的促销规则,而不会累加。
比如当前购买的图书是310元,那么适用促销规则3;240元,适用方式2,110元适用方式1等。
针对这类业务,我们可以通过增加一个分组编号和优先级来进行处理。
对于这三个促销规则,我们在维护时,可以设置分组均为1(简单的数字,默认是0)。
而优先级从上到下,依次增加,数值越大优先级越高。这样促销引擎在计算时,就会按优先级来匹配,一旦匹配成功,
同一组的其它规则就不再处理。