程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 使用CKRule實現促銷管理系統

使用CKRule實現促銷管理系統

編輯:C#入門知識

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);

 

源代碼下載

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved