经过上一章的讨论相信你已经被猿人工厂君恶补了一波促销的业务知识。促销是一个高风险的系统,因为一个电商网站的销售手段更多是以促销的形式进行的。所谓高风险,业务上就很高,错误的促销设置会带来巨额的亏损。今天,我们一起来聊一聊促销的促销系统的思考和设计。
说到促销系统的设计,上一章节我们已经提到了,促销的几种常见的方式——直降、满减满折、套装、赠品、加价购、满赠、定金预售、拼团、加价购。要设计一个促销系统,就需要去支撑这些促销方式。我们还是本着先抓取实体的原则,逐步完善系统的设计。
我们很自然的想到,促销具备的实体——促销信息。
实在很茫然,不知道怎么下手,不过最基本的信息总还是有的,主键得有吧,名字得有吧,扩展字段、记录状态、修改人、创建时间、修改时间啥的必须有吧?接下来呢?怎么办?看看页面吧。
硕大的字就在图上,满减,满xxx减xxx,促销的类型得有吧?后面那个满xxx减xxx算是促销广告语了吧?好的,看见了就加上。
接下来又怎么办呢?只好发散思维了。促销总是有规则的吧?满多少,减多少?满多少,折扣多少?还有促销这种行为总有一个时间限制吧?什么时间开始、什么时间结束?好嘛,赶紧加上。
表达式的设计,到具体的详细设计再来考虑,我们先思考一个问题:促销最终是要体现在商品上才有作用。那么,促销和商品必然有联系了。那么如果某次活动需要参与促销的商品比较多怎么办?比如,运营人员要求,某年月日手机下的所有商品都满1000减10块。嗯,在这样的背景下,促销有一个作用域范围的事情。
促销的行为涉及网站运营的成本,大力度的促销可能导致网站亏损,因此促销活动的创建,不能立即生效,必须需要通过相营销负责人的审核才可以进行。因此,我们简单的处理下审核这个事情。
好了,之前提到过,促销是一个比较有风险的事情,因为促销如果设置错了,可能带来促销成本的不可控,但是在一些情况下,确实又需要大额度的促销。但是真因为促销活动造成资损的事情了,那么至少应该知道,谁创建的促销,谁修改过促销吧?要是到时候连这个都找不到,那多半要杀只程序猿祭天了……为了保证我们不被祭天,促销相关的操作还是要记录一下吧。
仔细看一看设计,这样子去设计做真的就够了吗?很显然是不能够满足实际使用的要求的。之前提到过一个比较关键的信息——促销规则,我们只是给出了简单的一个设计,用一个promoRule来体现,但具体内容是什么,这里还是一篇空白。我们一起来想一想怎样去设计这些规则。可能涉及到我们需要定义自有协议。
关于促销的自有协议,每个系统的设计者可能都有不同的见解,这里我先抛出几个简单的设计,有不同的设计也希望你分享出来大家一起去完善它。
从促销类型来看,我们去要支持,直降、满减满折、套装、赠品、满赠、加价购、秒杀这几种常规的促销方式(定金预售和拼团需要其他系统参与暂时不在此列,秒杀之所以列入,是因为它是一种特定类型的直降)。
从整体来看,所有的促销都有类型,以及具体的规则,我们可以设计一个json格式的协议方便程序识别和处理。
直降促销:
{promoType:1,rule:” 5.00” }
直降促销类型为1,优惠金额5元。
满减
{promoType:2,rule:”100-20,200-30”}
满减促销类型为2,100-20表示满100减20,多个满减逗号分隔。
每满减
{promoType:3,rule:”100-20”}
每满减促销类型为3,100-20表示每满100减20
满折
{promoType:4,rule:” 100-0.95,200-0.9”}
满折促销类型为4,100-20表示满100打95折,多个满减逗号分隔。
套装促销
{promoType:5, mainSkuIds:”skuId1,skuId2”,subSkuIds: ”skuId1,skuId2”,promoMoney:”50.00”}
套装促销类型为5,mainSkuIds表示主sku, subSkuIds表示主sku以外的sku。promoMoney表示优惠的金额。
赠品促销
{promoType:6, mainSkuIds:”skuId1,skuId2”,subSkuIds: ”skuId1,skuId2” }
赠品促销类型为6,mainSkuIds 表示主sku,subSkuIds表示赠品sku。
满赠促销
{promoType:7, rules:[startMoney:”100”,subSkuIds: ”skuId1,skuId2”] }
赠品促销类型为7,注意规则是一个集合。mainSkuIds 表示主sku, subSkuIds表示赠品sku。
加价购
{promoType:8,rules:[ startMoney:”100”,mainSkuIds:”skuId1,skuId2”,subSkuIds:”skuId1,skuId2”] }
加价购促销类型为8,注意规则是一个集合。mainSkuIds 表示需要购买的sku, subSkuIds表示加购超过100元后,赠送的sku。
(8)秒杀
{promoType:9,rule:” 5.00” }
直降促销类型为1,售卖金额5元。
到目前为止,促销的设计大致完成了,大家可以想一想还有什么问题?且听下回分解噢。