一、前言
在電子商務網站中存在着紛繁復雜的促銷規則,這些促銷規則可以是作用在產品上、購物車內若干產品或整個購物車,
也可以是減免運費,額外贈送禮品、積分等。而且獲得這些促銷規則存在獲取資格,比如某個會員級別、甚至是指定的用戶等,
那么如何在電子商務系統中通過一種統一的設計來實現各種各樣的促銷規則,並提供友好的擴展性方便以后挖掘的更多的未知促銷手段呢?
二、常見促銷規則和例子
首先,讓我們整理一下常見的促銷規則和對應的例子。
- 整張訂單消費滿 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)。
而優先級從上到下,依次增加,數值越大優先級越高。這樣促銷引擎在計算時,就會按優先級來匹配,一旦匹配成功,
同一組的其它規則就不再處理。