關(guān)鍵詞:Java Web;促銷規(guī)則引擎;促銷活動;設(shè)計模式
中圖法分類號:F721 文獻標識碼:A
1基本設(shè)計方案
1.1功能模塊結(jié)構(gòu)設(shè)計
1.1.1后端功能
(1)促銷活動動態(tài)配置。
促銷活動通過配置頁面,配置不同的促銷規(guī)則,可以配置促銷的基本信息、促銷類型、時間周期、疊加規(guī)則、促銷范圍、促銷商品等。
(2)促銷活動自啟和自停。
系統(tǒng)定時掃描完成配置的促銷活動,在時間規(guī)則命中的范圍內(nèi)自動啟用,在時間規(guī)則范圍外自動失效。
(3)促銷算價。
實時算價:在PC端收銀臺或小程序結(jié)算頁面,基于購買商品,實時計算本次結(jié)算最優(yōu)金額,即命中的最優(yōu)促銷活動。
1.1.2前端功能
(1)促銷活動配置。
前端構(gòu)建促銷活動配置頁面,基于不同的促銷類型切換不同的配置方式,主要包含促銷基本信息配置、促銷類型配置、時間周期規(guī)則配置、促銷范圍配置、促銷商品配置,以及活動頁展示配置等,
(2)收銀臺支持促銷算價。
推薦算價:支持展示推薦的最優(yōu)算價,內(nèi)部集成促銷活動,會員等級折扣,優(yōu)惠券等優(yōu)惠方式下的最優(yōu)價格。
手工算價:支持切換促銷活動,會員等級或優(yōu)惠券等單一優(yōu)惠方式。
1.2系統(tǒng)框架結(jié)構(gòu)設(shè)計
1.2.1促銷概念定義
(1)促銷大類。
單品促銷:針對指定商品,進行單一化的促銷。
買贈促銷:針對指定商品,進行贈品附加贈送。
條件促銷:針對指定商品,在滿足某種規(guī)則條件下,才可以命中促銷優(yōu)惠,其中條件包含滿減促銷,滿件促銷,第N件折扣等。
(2)促銷類型。
單品促銷:只針對商品緯度的單一化促銷方式,例如,特價商品,即一口價商品;固定折扣比例商品,即打折商品。
買贈促銷:針對指定商品的購買,進行贈品贈送的促銷活動,贈品可以有多個也可以任選一個。
滿減促銷:滿減,針對指定商品的購買,商品總價滿X元,進行減免Y元的促銷活動;每滿減,針對指定商品的購買,商品總價每滿X元,多次減免Y元的促銷活動;滿額折扣,針對指定商品的購買,商品總價滿X元,進行打Y折扣的促銷活動;階梯滿減,針對指定商品的購買,商品總價滿足多個不同的門檻金額,進行對應(yīng)不同的減免金額的促銷活動。
滿件促銷:M件N元,針對指定商品的購買,商品總件數(shù)滿M件,則支付N元的促銷活動,例如,某商品3件10元;滿M件折扣,針對指定商品的購買,商品總件數(shù)滿M件,進行打N折扣的促銷活動,例如,某商品3件6折;滿M件免,針對指定商品的購買,商品總件數(shù)滿M件,則進行減免Ⅳ件價格的促銷活動,例如,某商品買2送1,即滿3件免1件;滿M件立減,針對指定商品的購買,商品總件數(shù)滿M件,進行減免Ⅳ元的促銷活動。同時,以上指定商品包含任意商品,相同商品和不同商品3種情況。
第N件打折:第N件折扣,針對指定商品的購買,商品購買N件,則對第N件商品進行打X折扣的促銷活動;第N件立減,針對指定商品的購買,商品購買N件,則對第N件商品進行減免X元的促銷活動;第N件特價,針對指定商品的購買,商品購買Ⅳ件,則對第N件商品進行特價的促銷活動。
1.2.2基礎(chǔ)模型設(shè)計
(1)促銷基礎(chǔ)信息。
用于配置促銷活動的基本信息,包含促銷名稱、促銷大類、促銷類型、促銷級別、疊加規(guī)則等基礎(chǔ)信息。
(2)促銷規(guī)則定義。
用于配置促銷的核心規(guī)則,抽象為RULE和ACTION兩個概念。
RULE:促銷條件規(guī)則,即在滿足什么條件下,促銷才可以生效,為空代表無條件。
ACTION:促銷行為,即消費活動滿足Rule后,將執(zhí)行的優(yōu)惠動作規(guī)則。
(3)促銷時間規(guī)則。
用于配置促銷活動生效的時間范圍。
普通時間段:指定開始時間和結(jié)束時間。
限制時間段:在普通日期時間段下,可以進行進一步的細化,可指定某些時間范圍內(nèi)不可命中促銷活動,例如,2022年12月1日~2022年12月31日,每天或某幾天的15:00至16:00不可命中促銷活動。
(4)促銷覆蓋人群。
用于配置促銷活動能夠覆蓋的人群范圍,可基于會員級別指定范圍或基于標簽人群指定范圍。
(5)促銷商品。
用于配置促銷活動覆蓋的商品范圍。其商品覆蓋范圍分為基于商品維度的選擇、基于商品主類別維度的選擇、基于商品多級品類維度的選擇、從細粒度到粗粒度的多種選擇方式。
1.2.3基于設(shè)計模式的架構(gòu)模型設(shè)計(見圖1)
(1)上下文模型。
促銷處理器工廠:使用設(shè)計模式之工廠模式,工廠類根據(jù)傳入的標記,創(chuàng)建對應(yīng)產(chǎn)品的實例.即創(chuàng)建一個促銷處理器生成工廠,通過傳入的促銷處理器類型,創(chuàng)建對應(yīng)類型的促銷處理器實例。
促銷處理器執(zhí)行鏈:使用設(shè)計模式之責任鏈模式,將請求的發(fā)送者和請求的處理者解耦合,使多個處理者都有機會處理這個請求,即創(chuàng)建一個促銷處理器責任鏈,將命中的多個由促銷處理器工廠創(chuàng)建出來的促銷處理器實例,按照順序規(guī)則掛載到此促銷處理器責任鏈上,使得促銷算價請求,可以被多個促銷處理器依此處理。
核心計算模型:使用設(shè)計模式之中介者模式,用一個中介對象來封裝一系列的對象交互,即創(chuàng)建一個促銷計算單元對象,其中封裝了鏈路促銷信息、促銷商品信息、促銷疊加規(guī)則等,作為促銷計算的核心單元。
(2)處理器抽象模型。
促銷執(zhí)行器接口:使用設(shè)計模式之策略模式,使用一系列的算法,將一些對象封裝起來,使其可以在不同的場景進行切換,即通過一個促銷處理器上層接口,其中定義一系列算法規(guī)則,不同的促銷處理器實現(xiàn)類實現(xiàn)同一個上層接口,并實現(xiàn)具體的算法邏輯。
促銷執(zhí)行器抽象類:使用設(shè)計模式中的模板模式,定義一個算法結(jié)構(gòu),并將一些步驟延遲到子類實現(xiàn),即創(chuàng)建一個促銷處理器抽象類,其中定義一些計算方法結(jié)構(gòu),內(nèi)部實現(xiàn)公共計算邏輯,同時將一些差異計算邏輯下放到實現(xiàn)此促銷處理器抽象類的子類促銷處理器中,并具體實現(xiàn)。
(3)處理器實現(xiàn)模型。
促銷執(zhí)行器(單品促銷-特價):實現(xiàn)單品促銷中特價計算邏輯。
促銷執(zhí)行器(單品促銷-折扣):實現(xiàn)單品促銷中折扣計算邏輯。
促銷執(zhí)行器(條件促銷-滿減促銷-滿減):實現(xiàn)滿減促銷中的滿減計算邏輯。
促銷執(zhí)行器(條件促銷-滿減促銷-每滿減):實現(xiàn)滿減促銷中的每滿減計算邏輯。
促銷執(zhí)行器(條件促銷-滿減促銷-階梯滿減):實現(xiàn)滿減促銷中的階梯滿減計算邏輯。
促銷執(zhí)行器(條件促銷-滿減促銷-滿額折扣):實現(xiàn)滿減促銷中的滿額折扣計算邏輯。
促銷執(zhí)行器(條件促銷-滿件促銷-滿M件折扣):實現(xiàn)滿件促銷中的滿M件折扣計算邏輯。
促銷執(zhí)行器(條件促銷-滿件促銷-滿M件立減):實現(xiàn)滿件促銷中的滿M件立減計算邏輯。
促銷執(zhí)行器(條件促銷-滿件促銷-M件N元):實現(xiàn)滿件促銷中的M件N元計算邏輯。
促銷執(zhí)行器(條件促銷-滿件促銷-滿M件免):實現(xiàn)滿件促銷中的滿M件免計算邏輯。
促銷執(zhí)行器(買贈促銷-買贈促銷-贈品任選1):實現(xiàn)買贈促銷中贈品任選1計算邏輯。
促銷執(zhí)行器(條件促銷-第N件促銷-第N件特價):實現(xiàn)第N件促銷中第N件特價計算邏輯。
促銷執(zhí)行器(條件促銷-滿件促銷-第N件立減):實現(xiàn)第N件促銷中第N件立減計算邏輯。
促銷執(zhí)行器(條件促銷-滿件促-第N件折扣):實現(xiàn)第N件促銷中第N件折扣計算邏輯。
2詳細實現(xiàn)過程
2.1技術(shù)框架引入
2.1.1后端技術(shù)
(1)程序?qū)崿F(xiàn)語言。
Java:Java是一種面向?qū)ο蟮母呒壋绦蛘Z言,且具有大部分編程語言所共有的一些特征,其被用在互聯(lián)網(wǎng)的分布式環(huán)境中。
(2)數(shù)據(jù)庫。
MySQL:MySQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),通過字段維度關(guān)聯(lián),表示數(shù)據(jù)間的關(guān)系,是一個主流的關(guān)系型數(shù)據(jù)庫系統(tǒng)。
(3) Web應(yīng)用服務(wù)器。
Tomcat:Web應(yīng)用服務(wù)器,用來部署Web應(yīng)用,對外提供HTTP訪問服務(wù)。
2.1.2前端技術(shù)
(1)程序?qū)崿F(xiàn)語言。
VUE:-款用于構(gòu)建用戶界面的JavaScript框架。它基于標準Html,CSS和JavaScript構(gòu)建,并提供了一套聲明式、組件化的編程模型,幫助開發(fā)者高效地開發(fā)用戶界面。
(2)后臺頁面UI框架。
ELEMENTUI:ELEMENTUI是一套UI框架,封裝了后臺管理頁面常用組件,與Vue完美契合,可以快速構(gòu)建功能型頁面。
2.2設(shè)計模式引入
2.2.1單例模式
定義:確保某一個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例。
使用:通過使用Spring框架中的單例模式,將交給Spring IOC容器管理的Bean定義為單例對象,并通過依賴注入DI的方式,提供訪問點。
2.2.2工廠模式
定義:定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類是實例化延遲到其子類。
使用:定義用于生成促銷處理器的促銷處理器工廠類,用于實例化具體的促銷處理器對象。
2.2.3策略模式
定義:定義一組算法,將每個算法都封裝起來,并使他們之間可以互換。
使用:將不同的促銷處理器的邏輯封裝成不同的算法對象,使得不同的促銷處理器計算邏輯相互沒有影響,通過結(jié)合靜態(tài)工廠的方式,將這些促銷處理器算法對象進行統(tǒng)一管理,并使用Java多態(tài)特性,通過不同的關(guān)鍵字KEY,使得不同的促銷處理器對象可以相互替換使用。
2.2.4責任鏈模式
定義:使多個對象都有機會處理請求,從而避免請求的發(fā)送者和接受者之間的耦合關(guān)系,將這些對象連成一條鏈,并沿著這條鏈傳遞更改請求,直到有對象處理它。
使用:促銷活動的業(yè)務(wù)場景存在一次消費行為命中多個促銷活動的情況,并且促銷活動可相互疊加,類比為一個請求,需要被多個促銷處理器對象處理,并且按照一定規(guī)則順序處理;創(chuàng)建一條執(zhí)行鏈,將命中的促銷處理器掛載到鏈上,請求沿著執(zhí)行鏈傳遞計算。
2.2.5中介者模式
定義:用一個中介對象來封裝一系列的對象交互,中介者使得各對象不需要顯式的相互作用,從而使其耦合松散,而且可以獨立改變它們之間的交互。
使用:定義一個促銷處理單元對象,在促銷執(zhí)行鏈執(zhí)行的過程中,單元對象將過程中使用到的相關(guān)元數(shù)據(jù)進行封裝和處理。
2.2.6模板模式
定義:定義一個操作中算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變一個算法的結(jié)構(gòu)即可重新定義該算法的某些特定步驟。
使用:定義一個促銷執(zhí)行器抽象類,用于規(guī)范促銷執(zhí)行器的算法結(jié)構(gòu),并且在其中實現(xiàn)一些公共的算法邏輯,同時一些結(jié)構(gòu)性的方法交給子類去重載實現(xiàn),保證不會改變促銷執(zhí)行器計算的邏輯步驟。
2.3數(shù)據(jù)庫設(shè)計
數(shù)據(jù)庫設(shè)計如圖2所示。
2.4核心業(yè)務(wù)邏輯設(shè)計
2.4.1創(chuàng)建促銷活動
創(chuàng)建促銷活動如圖3所示。
2.4.2消費行為命中促銷
消費行為命中促銷如圖4所示。
2.5核心代碼實現(xiàn)邏輯
2.5.1促銷處理器上層接口
作用:用來定義算法結(jié)構(gòu),規(guī)范實現(xiàn)類的算法結(jié)構(gòu)邏輯。
接口:IPromotionHandler
方法:void embark(Promotionlnfo promotionlnfo);∥裝載促銷信息
Uhandler f PromotionHandlerChain promotionHandlerChain,U unit);∥沿鏈執(zhí)行
IPromotionHandler clone();∥克隆促銷處理器
2.5.2促銷處理器靜態(tài)工廠
作用:用來存取促銷處理器實現(xiàn)類的實例化對象的靜態(tài)集合。
工廠類:PromotionHandlerFactory
方法:public static void register(args){}∥注冊促銷處理器實例化對象到靜態(tài)工廠
public static IPromotionHandler get(args){}∥獲取促銷處理器實例化對象
2.5.3促銷處理器責任鏈
作用:用來定義促銷處理器執(zhí)行的鏈路,促銷處理器沿著此鏈路執(zhí)行。
責任鏈類:PromotionHandlerChain
2.5.4促銷處理器抽象類
作用:用來定義促銷處理器的算法結(jié)構(gòu),并將一些邏輯延遲到子類實現(xiàn)。
抽象類:AbstractPromotionHandler implements IPromotionHandler
方法:protected abstract Class getRuleClazz();∥促銷定義規(guī)則class獲取
protected abstract Class getActionClazz();∥促銷定義動作class獲取
protected abstract PromotionModeEnumembarkPromotionMode();∥當前促銷模式
protected abstract BigDecimal calclnfo(args){}∥促銷計算
public PromotionCalcUnit handler(args){}∥促銷執(zhí)行
2.5.5促銷處理器實現(xiàn)類
作用:“單品促銷.特價優(yōu)惠”的具體實現(xiàn)。
實現(xiàn)類:SpecialSalePromotionHandler extendsAbstractPromotionHandler
方法:protected ClassgetRuleClazz(){return Rule.class;}
protected Class getActionClazz() {returnAction.class:}
protected PromotionModeEnumembarkPromotionMode(){return SPECIAL_SALE;}
protected abstract BigDecimal calclnfo(args){}∥具體促銷計算邏輯
3構(gòu)建Web應(yīng)用
3.1后端服務(wù)
3.1.1網(wǎng)絡(luò)資源環(huán)境
(1)申請域名。
基于一級域名www.xxx. com,申請后端二級域名promotion-api.xxx.com,并將此二級域名和內(nèi)網(wǎng)lP映射到NGINX反向代理服務(wù)器。
(2)SSL安全證書。
基于二級域名promotion. xxx.com,申請SSL安全證書,支持HTTPS安全協(xié)議訪問,并將此證書配置到NGINX反向代理服務(wù)器中的此域名下。
3.1.2應(yīng)用服務(wù)環(huán)境
部署促銷活動服務(wù)。促銷系統(tǒng)的核心服務(wù)就是將代碼基于Jenkins構(gòu)建成可執(zhí)行JAR包,通過Java-jar的命令,運行此JAR包,在Tomcat應(yīng)用服務(wù)器中,對外提供支持HTTPS協(xié)議訪問的服務(wù)。
3.2前端應(yīng)用
3.2.1網(wǎng)絡(luò)資源環(huán)境
(1)申請域名。
基于一級域名www. xxx.com,申請前端二級域名promotion.xxx.com,并將此二級域名和公網(wǎng)lP地址映射到DNS服務(wù)器中。
(2)配置指向。
在NGINX反向代理服務(wù)器中,將二級域名promotion.xxx.com配置指向一個靜態(tài)文件目錄,以請求訪問該目錄下的靜態(tài)資源。
3.2.2靜態(tài)資源環(huán)境
靜態(tài)資源上傳?;贜PM打包前端代碼,生成加密后的靜態(tài)資源,并將此靜態(tài)資源上傳到服務(wù)器的靜態(tài)資源目錄下,對外提供訪問服務(wù)。
3.2.3前端頁面展示
促銷配置頁面如圖5所示。
4結(jié)束語
在互聯(lián)網(wǎng)的浪潮下,電商業(yè)務(wù)成為互聯(lián)網(wǎng)行業(yè)中最前沿的業(yè)務(wù),在面向C端用戶的場景中,如何提升銷售業(yè)績,如何更好地為用戶服務(wù),成為最重要的課題。促銷活動系統(tǒng)在其中扮演著不可或缺的角色,本文構(gòu)建的輕量級促銷活動系統(tǒng),具有支持分布式環(huán)境、高可用、高并發(fā)、可拓展等特性,同時在新促銷方式的二次開發(fā)上,也具有較好的復(fù)用性和可擴展性,基本滿足主流電商業(yè)務(wù)中的促銷場景。
作者簡介:
齊云浩(1993—),本科,研究方向:互聯(lián)網(wǎng)電子商務(wù)、微服務(wù)架構(gòu)、分布式服務(wù)、人機交互系統(tǒng)、基于設(shè)計模式構(gòu)建輕量級促銷活動系統(tǒng)。