基于BRMS的“旅游一卡通”計費系統(tǒng)的設計
文章出處:http://5052h112.com 作者:張燕玲 潘正運 王莉 人氣: 發(fā)表時間:2012年01月23日
隨著科技不斷進步和信息化時代的到來,旅游行業(yè)的管理也在不斷地進行信息化的革命。單個獨立的應用系統(tǒng)已經(jīng)不能滿足旅游系統(tǒng)綜合管理的需求,而對“旅游一卡通”系統(tǒng)的開發(fā)將有效地整合卡應用系統(tǒng)的信息資源,使游客在河南旅游時可以通過簡單的一張卡實現(xiàn)所有消費。但是由于“旅游一卡通”系統(tǒng)涉及到吃、住、行、游、購、娛6大要素,旅游行業(yè)間的競爭也越來越激烈,各個運營商要不斷地推出新的服務,有針對性地向用戶提供各種新的計費規(guī)則,及時回應競爭對手的策略變換。所有這些需求使得“旅游一卡通”系統(tǒng)的業(yè)務規(guī)則復雜多變,能否對其實行有效的管理就極大地依賴于“旅游一卡通”計費系統(tǒng)的有效支持。
在許多傳統(tǒng)的計費系統(tǒng)中,由于業(yè)務規(guī)則以程序代碼的方式“固化”在系統(tǒng)中,缺乏真正的靈活性,使運營商要推出新的服務或推出新的優(yōu)惠計劃時,必須通過IT人員編寫代碼的方式來修改規(guī)則,然后經(jīng)過繁復測試才能部署實施。這導致業(yè)務策略的變動周期非常的漫長。同時,由于業(yè)務規(guī)則是面向技術人員的程序代碼,使業(yè)務策略無法被業(yè)務人員真正的掌握和管理。而本文提出的一種基于業(yè)務規(guī)則管理系統(tǒng)的計費系統(tǒng)可以使業(yè)務規(guī)則與程序代碼分離,使得對業(yè)務規(guī)則能夠進行有效地管理和靈活的運用。
1 業(yè)務規(guī)則管理系統(tǒng)
1.1 業(yè)務規(guī)則管理系統(tǒng)概述
業(yè)務規(guī)則管理技術是伴隨著面向?qū)ο蠹夹g、軟件構件技術、人工智能、數(shù)據(jù)庫、XML(數(shù)據(jù)庫的表示)等相關技術的發(fā)展而出現(xiàn)的,具有規(guī)則管理、規(guī)則部署、規(guī)則分析、規(guī)則定制和設計功能。業(yè)務規(guī)則管理系統(tǒng)是一組工具集,包括:
(1)規(guī)則引擎(Rules Engine):規(guī)則引擎是執(zhí)行業(yè)務規(guī)則的軟件組件,它嵌入在程序中,是業(yè)務規(guī)則管理系統(tǒng)的核心元素。規(guī)則引擎的類型有:簡單型,數(shù)據(jù)中心型和面向事務型。
(2)規(guī)則庫(Rules Repository):規(guī)則庫用于存儲規(guī)則和規(guī)則元數(shù)據(jù)(Meta Data)以及與規(guī)則有關的屬性。它提供一組工具用于存儲、分類、查詢、版本控制、權限控制、測試、提交等,規(guī)則的狀態(tài)和有效性可以跟蹤。
(3)規(guī)則語言框架(Rules Language Framework):規(guī)則語言一般分為兩類:“面向程序技術”的規(guī)則語言,使用者是技術人員;“面向業(yè)務”的規(guī)則語言,使用者是業(yè)務人員。規(guī)則語言框架是為定制“面向業(yè)務”的規(guī)則語言提供支持。
(4)規(guī)則集成開發(fā)環(huán)境(Rules IDE):一般規(guī)則集成開發(fā)環(huán)境只有規(guī)則編輯器,而高級的規(guī)則集成開發(fā)環(huán)境可以實現(xiàn)對規(guī)則和規(guī)則庫的管理:如規(guī)則的創(chuàng)建、分類、檢索、修改、版本控制、權限管理。
BRMS的模塊結構如圖1所示。
1.2 BRMS的基本原理
BRMS的基本原理是用一個或多個規(guī)則引擎替換“固化”在計費程序不同位置的業(yè)務規(guī)則(邏輯)的程序代碼。被替換的業(yè)務規(guī)則(邏輯)存儲在程序之外的規(guī)則庫中;規(guī)則庫中的規(guī)則可以通過圖形化規(guī)則管理工具實現(xiàn)定制、修改和部署,如圖2所示。
1.3 基于BRMS的系統(tǒng)開發(fā)
基于BRMS的系統(tǒng)開發(fā)可以劃分為3個階段:
(1)設計階段:這個階段與傳統(tǒng)的系統(tǒng)開發(fā)不同點在于,除了技術架構(包括規(guī)則引擎的位置安排)和基礎數(shù)據(jù)結構的設計之外,最主要是完成業(yè)務對象模型(BOM)的設計,為業(yè)務規(guī)則的開發(fā)提供必要的“詞匯”;定義規(guī)則的組織結構;設計業(yè)務規(guī)則的模板。
(2)開發(fā)階段:這個階段包括業(yè)務規(guī)則開發(fā)和系統(tǒng)程序的開發(fā)。
(3)部署階段:這個階段主要是業(yè)務規(guī)則服務的部署。業(yè)務規(guī)則服務(Rule Service)分布在系統(tǒng)的不同位置上,每個提供規(guī)則服務的模塊都嵌入了規(guī)則引擎,不同的規(guī)則服務可能使用不同的規(guī)則集。在這階段中,部署人員需要通過系統(tǒng)提供的方法或規(guī)則管理工具把不同的規(guī)則集部署到系統(tǒng)的對應位置上,使規(guī)則引擎可以訪問到它們需要的規(guī)則集。
2“旅游一卡通”計費系統(tǒng)的設計
“旅游一卡通”計費系統(tǒng)是利用BRMS技術對系統(tǒng)進行設計的,這樣可以使業(yè)務規(guī)則在系統(tǒng)外被定制,運營商無須開發(fā)人員介入,就可以讓他們的業(yè)務人員創(chuàng)建和修改規(guī)則。
在旅游計費系統(tǒng)中,業(yè)務規(guī)則時刻扮演著非常重要的角色。它能很好地把繁雜的計費規(guī)則,如優(yōu)惠、折扣規(guī)則等提取到系統(tǒng)之外進行管理,同時配合高性能的規(guī)則引擎和友好的規(guī)則用戶界面,使得業(yè)務人員能夠迅速地根據(jù)市場的變化而改變它們的促銷策略。
2.1 系統(tǒng)總體結構
本系統(tǒng)在ILOG JRules上進行總體設計,選用J2EE為系統(tǒng)開發(fā)部署平臺,如圖3所示。JRules是由ILOG公司開發(fā)的一套業(yè)務規(guī)則管理系統(tǒng)的通用軟件,它可以為系統(tǒng)的開發(fā)提供圖形化的界面,具有完備的功能;J2EE平臺為設計、開發(fā)和部署業(yè)務規(guī)則應用程序提供了一種基于組件的方法。整個系統(tǒng)分為前臺Web客戶端顯示模塊和后臺處理模塊兩個部分。Web客戶端有兩種界面:
(1)針對業(yè)務定制人員的Web Rule Builder編譯器。業(yè)務人員通過在規(guī)則編輯器中編寫規(guī)則,然后將編輯的內(nèi)容提交到后臺計費規(guī)則管理模塊中,由計費規(guī)則管理模塊對計費規(guī)則庫進行更新;另一方面,計費規(guī)則管理模塊可以通過遠程調(diào)用接口調(diào)用規(guī)則服務組件,將更新的規(guī)則直接作用于應用程序,以便于前臺規(guī)則使用人員使用新的規(guī)則對客戶進行計費處理。
(2)面向規(guī)則使用人員的Web App Portal。規(guī)則使用人員通過應用程序接口于計費規(guī)則會話Bean進行交互,同時激活規(guī)則服務組件對規(guī)則庫進行操作,取出符合需求的計費規(guī)則返回給應用程序接口,前臺計費業(yè)務人員根據(jù)相應的計費規(guī)則從客戶的“旅游一卡通”IC卡中扣除相應的金額。
圖3 BRMS旅游計費系統(tǒng)的總體結構
2.2 系統(tǒng)業(yè)務對象模型BOM(Business Object Model)的建立
業(yè)務規(guī)則模型的設計是基于規(guī)則系統(tǒng)的非常關鍵的步驟,它直接關系到整個系統(tǒng)是否能夠真正靈活地運轉起來。業(yè)務模型是由一組類(Class)構成,每個類包含屬性(Property)和一些方法(Method)。類的屬性、類與類的關系將會出現(xiàn)在業(yè)務規(guī)則的條件部分(Condition),類中的屬性值與導入到引擎中的許多規(guī)則的條件進行匹配,如果某些對象(或?qū)ο笾g的關系)滿足某個規(guī)則的條件的定義,那么引擎將觸發(fā)規(guī)則的執(zhí)行部分。
2.2.1 業(yè)務對象的分析
“旅游一卡通”系統(tǒng)是一個復雜的消費系統(tǒng),它不僅涉及消費者,而且整個旅游行業(yè)的所有企業(yè),包括酒店、餐飲、旅行社、景區(qū)景點等都是組成這個系統(tǒng)的關鍵要素。建立完善的旅游計費系統(tǒng)就必須抽象出這些獨立業(yè)務對象的共性,建立統(tǒng)一的、具有共同特征的業(yè)務對象實體。在本系統(tǒng)的設計中,抽象出了以下業(yè)務對象:
(1)客戶(Customer)對象:這里的Customer對象是特指利用“旅游一卡通”進行消費的游客,是消費的主體。Consume對象在消費過程中可以享受相應的免費資源、折扣和優(yōu)惠措施。在系統(tǒng)中該對象具有一定的類型屬性,根據(jù)不同的企業(yè)所定義的屬性值是不同的。
(2)企業(yè)(Enterprise)對象:Enterprise對象是指組成“旅游一卡通”系統(tǒng)的旅游部門,包括酒店、旅行社、景區(qū)景 點等。
(3)消費項目(Consume)對象:由于各個行業(yè)部門不同所以其中包含的消費項目也是大相徑庭的,所以將消費項目(Consume)單獨抽象為一個業(yè)務對象,使之與Enterprise對象相關聯(lián)。
(4)折扣方案(Discount)對象:折扣是計費系統(tǒng)中比較復雜的一項業(yè)務規(guī)則,它主要的特點就是經(jīng)常變動。對于不同的客戶采取的折扣也是不同的。并且單位采取折扣的時間是有限制的,所以該對象具有時效性和有效性。
(5)優(yōu)惠方案(Privilege)對象:優(yōu)惠是計費系統(tǒng)的另一個重要組成部分,它同樣具有時效性和有效性。
2.2.2 業(yè)務對象模型的建立
各個業(yè)務對象之間存在著復雜的關聯(lián)??蛻暨@個業(yè)務對象是整個系統(tǒng)的消費主體,其消費行為通過“旅游一卡通”直接與所有系統(tǒng)中的企業(yè)對象實體相聯(lián)系??蛻粼谙到y(tǒng)中消費時可能和多個企業(yè)對象相聯(lián)系,所以抽象其業(yè)務對象屬性CustomerEnterprise[]與消費企業(yè)對象進行關聯(lián)。
企業(yè)這個業(yè)務對象實體是整個計費系統(tǒng)得關鍵所在。因為系統(tǒng)中的企業(yè)是完全獨立的個體,在實施計費策略時是大不相同的,而且對于單個CustomerEnterprise對象內(nèi)部不同消費項目的計費策略也不完全相同。每個CustomerEnterprise包括若干消費項目Consume,通過屬性Consume[]與消費項目實體相關聯(lián);企業(yè)可能對所有的消費項目,也可能針對某消費項目實施折扣、優(yōu)惠等方案,所以不單單是企業(yè)而且消費項目都與折扣、優(yōu)惠和免費對象實體相關。它們通過屬性FreeItem[]與免費資源對象的關聯(lián),通過DiscountPlan[]對象屬性與折扣方案對象關聯(lián),通過PrivilegePlan[]與優(yōu)惠方案對象關聯(lián)。
根據(jù)以上分析抽象系統(tǒng)的業(yè)務對象模型如圖4所示(略)。
2.3 規(guī)則引擎的嵌入和使用
業(yè)務規(guī)則引擎的嵌入和使用步驟??梢园凑障旅娴幕静襟E實現(xiàn)規(guī)則引擎的嵌入和使用(采用ILOG JRules的API):
(1)創(chuàng)建一個規(guī)則引擎對象(這是ILOG JRules)提供的對象。
// Create an ILOG rule engine
IlrContext myEngine = new IlrContext();
(2)從規(guī)則庫中取得與計費相關的規(guī)則包,并加載到規(guī)則引擎中。(注意:這里折扣規(guī)則包存儲在名字是“Discount-rules”的文件中,優(yōu)惠規(guī)則包存儲在“Privilege-rules”如果規(guī)則包保存在數(shù)據(jù) 庫中,需要使用其它的API)
//get the IlrRuleset associated with myContext
IlrRuleset myRuleset=myContext.getRuleset();
//Add rules to myRuleset
myRuleset.parseFileName(“Consume-rules”);
myRuleset.parseFileName(“Discount-rules”);
myRuleset.parseFileName(“Privilege-rules”);
myRuleset.parseFileName(“FreeItem-rules”);
(3)使用引擎的API,向規(guī)則引擎導入客戶對象(Customer),企業(yè)對象(Enterprise),該客戶的消費方案(Plan),該客戶的優(yōu)惠方案(Privilege),折扣方案(Discount)和該客戶相關的有效免費資源(FreeItem)。引擎將對導入的所有對象的屬性值與當前加載的規(guī)則包中的優(yōu)惠規(guī)則進行匹配比對,把匹配的規(guī)則放在一個規(guī)則執(zhí)行隊列中。
myEngine.insert(Customer);//提交客戶信息
myEnterprise.insert(Enterprise);//提交企業(yè)信息
for (int ii=0;ii<…; ii++
{ //提交與企業(yè)相關的消費項目信息
myEngine.insert(Consume[ii]);
}
for (int ii=0;ii<…; ii++
{ //提交該客戶相關的免費資源信息
myEngine.insert(freeItem[ii]);
}
for (int ii=0; ii<……; ii++) {//提交該客戶相關優(yōu)惠方案信息
myEngine.insert(Privilege [ii]);
}
for (int ii=0; ii<……; ii++) {//提交該客戶相關折扣方案信息
myEngine.insert(Discount[ii]);
}
(4)使用引擎的API,通知引擎執(zhí)行規(guī)則執(zhí)行隊列中的規(guī)則實例,即觸發(fā)規(guī)則執(zhí)行部分的方法。在引擎逐個執(zhí)行規(guī)則的過程中,會出現(xiàn)這樣一些可能操作:一些對象的屬性值將會被修改(如免費資源的可用量會減少);有些新的對象被創(chuàng)建,如新的免費資源被生成等。引擎會在每個規(guī)則被執(zhí)行之后會自動作這樣的檢驗:當前狀態(tài)下,“規(guī)則執(zhí)行隊列”中等待執(zhí)行的規(guī)則是否還滿足條件,剔除不滿足條件的等待執(zhí)行的規(guī)則;同時檢查規(guī)則包中原來沒有在“執(zhí)行隊列”的規(guī)則是否符合當前狀態(tài)的規(guī)則,如果有則把它們加入到“執(zhí)行序表(Agenda)”中。引擎最終會清空“執(zhí)行隊列”。
// execute the rules on the agenda
myEngine.fireAllRules();
使用引擎的API把引擎中的對象取出并導出(如回存數(shù)據(jù)庫等)
// retrieve updates objects from engine
myEngine.getObjects();
// output code…
…
// empty engines for next time use
myEngine.removeObjects(); //從引擎中撤除所有對象,為下一//個優(yōu)惠處理作準備。
3 結束語
本文對BRMS系統(tǒng)在“旅游一卡通”計費系統(tǒng)中的應用與開發(fā)進行了研究。本系統(tǒng)的設計大大簡化了對“旅游一卡通”計費系統(tǒng)業(yè)務規(guī)則的開發(fā)與管理,該系統(tǒng)是目前比較符合實際的較為理想的“旅游一卡通”計費系統(tǒng)。它的應用必將極大地提高旅游市場計費業(yè)務規(guī)則的管理效率,具有廣闊的市場前景。