电商所谓营销,归根结底都是订单金额的变化;如果我们清楚的知道订单金额的计算流程是怎样的,那么我们只需要顺着系统的计算流程做促销,就不用担心各种促销类型之间产生重叠或者冲突的情况了。当我们知道这个关系后,就可以将营销活动区分为三种类型:改商品价格、改商品小计价格、改订单价格,因为无论什么营销归根结底都是可以描述成改价格。
购物车中任何增删查改都要重新计算促销,所以促销的计算变得尤为重要,感觉京东已经把促销做到了极致。
从模式上来讲,我们公司的促销就相当于京东自营,所以很多也都是参考京东自营的,但我们还没法做到像京东促销那样强大。
这里,将我们做的促销跟大家分享一下,只涉及后台接口逻辑部分。
接口的功能就是输入商品列表,返回加了促销分组后的商品列表。
首先要声明两点:
一、不是通用的促销设计,只是我们公司目前支持的促销设计及逻辑;
二、作者水平有限,不会画图,所以图画得比较丑,也很粗,希望大家不要介意;
三、不谈性能
废话就不多说了,下面正式开始。。。
促销类型前面说了,促销归根结底是改价格。在我们这里其它单品促销就是改商品价格;而条件促销就相当于改小计的价格;至于赠品促销不设计改价格,可以认为是单品促销的一种类型。
主流程“同类型通过实体进行互斥、不同类型可以相互叠加。”这是别人总结的设计电商促销系统的基本原则,我也比较认同。
上面接口主流程就是先应用单品促销,再应用条件促销。稍微再细化一点儿就是这样的:
先处理赠品促销,将赠品挂载到主商品(原先用户添加的购物车中的商品我称之为主商品)上,再应用单品促销。
在进行单品促销的时候,很有可能同一个商品命中多个单品促销。这个时候只能取一个促销,此处的计算逻辑是这样的:
优惠券力度最大的优先
优惠力度相同时,取最新创建的那个(创建时间最新)
例如:
商品A命中四条促销,分别是:【促销1】直降2元,【促销2】折扣8折,【促销3】直降1元。假设A的原价时10元,那么经过计算【促销1】8元,【促销2】8元,【促销3】9元。这个时候,【促销3】应该被剔除,假设【促销2】的创建时间比【促销1】要晚,那么应该取【促销2】。即商品A最终命中【促销2】。原价10元,促销价8元。
计算商品价格流程稍微解释一下:
特价:商品A原价12元,今日特价9.9元。
折扣:商品打几折。
直降:商品A原价12元,今日直降3元,所以最终9元。且当促销价低于原价的70%时恢复原价。
限购流程这里有两点需要说明:
限购的话需要查订单系统,但是刚才说了购物车中的任意增删查改都要重新计算促销,所以如果这里直接调订单的话可能订单的顶不住(技术实力还比较薄弱,无奈!!!),考虑到这里我们冗余了订单数据,每次从本地数据库去查。当然,这样肯定不准,但是我们只保证90%的情况就可以了,所以这里我们采用这种方式。
拆商品行。还是用上面的例子,商品A命中了【促销2】,假设【促销2】限购每人每单1件,而现在A 的数量时3,那么我们会拆成2行,第一行商品A售价8元数量1件,第二行商品A售价10元数量2件。
条件促销分组同一个商品可能会命中多个条件促销,而最终每个商品只能应用一个条件促销(即每个商品最终只能属于一个组)