1, 常見的促銷模型
促銷管理系統在很多地方都有使用,大家去超市就經常體現到,感受到,不少中小型單位都其促銷活動,要搞促銷活動最好是有應用軟件支持,這樣就比較靈活管理也方便。而依靠手工處理的話效率會比較低下的。常見的促銷活動,其分類及舉例如下:
模型分類
序號
例子
捆綁促銷
1
購買TK001+TK002各1件,優惠10元。(TK001,TK002為產品編碼,不同的單位有不同的定義,下同。)
2
購買TK001+TK002各1件,贈送商品TK003一件。
3
購買TK001商品2件,TK002商品1件,贈送TK002商品2件。
4
購買TK001+TK002各一件,享受8折。
5
購買TK001+TK002數量各一件,享受優惠價10元。
單品促銷
1
購買TK001商品,促銷價10元。
2
購買TK001享受8折。
3
購買TK001,優惠5元。
4
購買TK001商品2個,贈送TK003商品1個。
組合促銷
1
購買TK001,TK002,TK003,TK004任一件95折,任兩件89折。
2
購買PK01牌商品任意一件95折,兩件92折。
3
購買PK01,PC02,PA03牌商品滿足3件,每件促銷價20元。
4
購買PK01,PC02,PA03牌商品任意1件,可10元購買TK014商品。
5
購買PK01,PC02,PA03牌商品任意1件,贈送TK004,TK005,TK006商品中任意一件。
6
購買PK01,PC02牌商品任意1件,可特價2元購買TK006,TK007中任意商品一件。
客單價促銷
1
購買TK001滿200元,贈送TK006一件,滿300元,贈送商品TK007,TK008,TK009各一件。
2
全場購物滿50元,可特價2元購買TK011。
3
購買TK001滿200元,優惠30元,滿400元優惠60元,滿600元優惠90元。
客單量促銷
1
購買PA01牌商品,除商品TK017外,任意2件贈送TK003一件。
2
購買PA01牌商品,除商品TK017外,可特價1元購買商品TK003。
2, 軟件模型抽象
根據上面的業務模型,可以抽象出品牌,商品名稱,商品編號,購買件數,實際單價,原單價,單項金額,優惠類型,折扣,備注。其中優惠類型可分為無、折扣、特價、促銷、優惠、贈送,這幾個類型的特點如下:
名稱
說明
無
無任何優惠。
折扣
使用打折來做優惠。
特價
固定一個很低的價格。
促銷
與特價類似,但價格不一定低,只是比原價略有減少。
優惠
直接在原價格上面減去一定的金額。
贈送
客戶不用錢。
由於有贈送或直接降低價格的活動,所以固定幾個特殊的商品很重要。
序號
商品編號
含義
1
L00001
0.01元
2
L00010
0.1元
3
L00100
1元
4
L01000
10元
3, CKRule上面建模
對象的定義相對簡單,是直接參考上面的定義的
自定義類就是銷售記錄信息,包含單價,數據,打折等內容。這些內容可以根據終端客戶的需要增加,如商品條形碼等信息。
而主表記錄就是客戶的基本信息。
要實現上面提到有多樣化規則,一般都需要客戶自己來設置,不要由軟件開發商來設置,否則會忙壞軟件開發者,而得不到一點收益。要讓客戶的計算機管理員可以設置,那設置的辦法就要相對簡單易懂。在邏輯比較界面中有購物車的商品判斷,如含品牌,含商品,含商品件數等等。對商品的操作都是使用商品編號的,這樣會比較方便電腦識別。
而結論&操作部分就精彩了,如優惠,打折,促銷,特價等操作都會出現。
這些邏輯判斷和操作都是前台用戶設置時所必備的內容。
4, 促銷系統實現方式
看了促銷系統的需求,從業務上覺得很正常,是很多商場,商家常常做的活動,也不太復雜。但僅僅從技術實現來看,那就直接覺得太恐怖了,不好處理,有些東西好像僅僅是自然語言來表達,在程序上不好跟進。
好像每一個促銷都要寫一個類來控制,這樣就會出現非常多的類才能搞定問題,如果某天客戶想增加一些新的規則,那原來的類就要修改或變化。從簡單的角度來看,的確要這樣做的,也可以使用一些更加復雜的設計模式來處理問題。
從更標准的角度來看的話,應該做更多業務抽象,架構抽象,對象抽象的工作,但如果開發者剛剛接解這個行業或公司資源不足,難以做更深入的抽象和分析呢?那這個促銷的項目基本上沒得做了,匆匆上馬的話,後面修改的工作量會非常大,最後工作越做越多,但是始終做不到收益。
CKRule從業務規則管理的角度來解決促銷問題,把經常變化的規則封裝入規則管理系統中,規則的變化不影響主程序代碼,技術人員和業務專家都可以按自身的需求不斷修改規則,並且都可以在程序運行時修改和部署規則。這大大方便了促銷系統的開發。
5, 軟件實現
銷售訂單的定義包含銷售主體和明細的商品信息,而商品信息要使用促銷規則再進行計算一次,從而判斷那些商品可以打折或有什麼優惠,如果可以優惠的商品就進行優惠。在實現的計算中,可以會遇到沖突的問題,即符合多個優惠條件的情況,當前軟件沒有判斷沖突,都會生效,實際的計算可能會選其中一兩條優惠。
促銷管理的業務規則可以在程序運行時配置,不影響其他代碼的編寫,而配置界面就是調用CKRule上面的配置內容。
初始化規則界面
_curPackage = new RuleFacade().GetPkgInst(RuleInstName);
foreach (var item in _curPackage.RuleLib.PoolRules.Keywords)
{
ListViewItem _lvi = new ListViewItem();
_lvi.Text = item.Name;
_lvi.Tag = item;
//_lvi.ImageKey = "PicProperty";
_lvi.Group = lvTips.Groups[0];
lvTips.Items.Add(_lvi);
}
foreach (var item in _curPackage.RuleLib.PoolRules.LgcOperaWords)
{
ListViewItem _lvi = new ListViewItem();
_lvi.Text = item.Name;
_lvi.Tag = item;
//_lvi.ImageKey = "PicMethod";
_lvi.Group = lvTips.Groups[1];
lvTips.Items.Add(_lvi);
}
foreach (var item in _curPackage.RuleLib.PoolRules.ConclusionWords)
{
ListViewItem _lvi = new ListViewItem();
_lvi.Text = item.Name;
_lvi.Tag = item;// new List<CallDef>() { item };
//_lvi.ImageKey = "PicMethod";
_lvi.Group = lvTips.Groups[2];
lvTips.Items.Add(_lvi);
}
保存規則之後,需要刷新規則引擎,使用如下方法進行刷新。
new RuleFacade().Refresh(RuleInstName);
在計算界面就使用如下命名進行規則計算
_cond = new RuleFacade().Exec(FrmRulePoolSet.RuleInstName, _cond);
源代碼下載