楊智勇,文澤江
(1.重慶工程職業技術學院 重慶 400037;2.重慶大學自動化學院 重慶 400044;3.中國通信服務集團重慶分公司 重慶 400033)
當前國內的電信運營商——中國移動、中國電信、中國聯通形成了三足鼎立之勢。中國電信要想在競爭中取得優勢地位,發展客戶是首要工作,渠道的經營和管理變得越來越重要。在電信銷售渠道建設中,代理商已經成為公司發展業務的主要渠道和提升企業核心競爭力的關鍵因素。當前,電信公司主要采用代理商客戶關系管理系統和網上營業廳進行代理商的經營管理,但該系統與電信公司的其余系統之間難以集成,信息資源分割,各自為政,形成大量的信息孤島。為了解決以上問題,電信公司急需開發一款具有較高可用性、安全性和可維護性的電信代理商綜合管理系統,以高效、快捷地為用戶提供服務,同時減輕電信營業廳的業務壓力和降低電信公司自身的運營成本。
針對電信公司的需求,在對國內外各種電信代理商管理系統進行充分調研和分析的基礎上,筆者采用OSGI和Ext JS技術研究并實現了基于Web的電信代理商綜合管理系統,在系統的實際運行中達到了提高系統的可用性、安全性和可維護性,實現與第三方系統的高內聚、低耦合和系統間的分布式協同應用的效果。
Ext JS是一種用于開發富客戶端Web應用程序的JavaScript技術,是基于Ajax組件的框架技術,是一個優秀的javascriptUI組件庫。Ext JS將常見的UI(界面)操作代碼封裝成組件,并將組件按一定結構打包成組件庫,供程序調用,以提高開發效率,使用Ext JS很容易就能創建出優雅的頁面布局,快速綁定數據到相應組件并更新視圖,為解決一些具有一對多、多對多關系的多個數據表聯動查詢更新顯示、分頁顯示、樹狀結構顯示等復雜的UI操作問題提供了快捷的途徑[1]。在電信代理商系統中采用Ext JS技術可以提高客戶端用戶的體驗和減輕服務端表示層的負荷,達到提高客戶機和服務器動態交互功能的目的。
OSGI(open service gateway initiative)是開放服務網關組織制定的一個基于Java語言的業務規范服務平臺。該服務平臺由兩部分組成,即OSGI框架和一個OSGI標準服務的集合。該技術為開發者提供了一個面向服務的、基于構件的環境,并且提供了一套標準的方法來管理軟件的生命周期[2]。
OSGI規范的核心組件是OSGI框架。這個框架為應用程序組件(bundle)提供了一個標準環境。bundle是OSGI應用中具體實現應用的基本單位,一個bundle就是一個jar文件,其中包含所需的類文件和資源文件,并包含一個描述文件。每個bundle都可以被獨立打包、部署。OSGI應用以一組服務為單位,包含多個bundle。OSGI框架提供了一套機制來安裝、開啟、關閉、更新和卸載bundle[3]。如圖1所示[2],在OSGI中,服務提供者和服務需求者都實現為bundle。在OSGI模型中,任何一個Java類都可以通過一個bundle以服務的形式發布。
OSGI服務平臺架構主要由framework、bundle和service組成。其中,framework架構在 JVM(Java virtual machine)上運行,bundle(服務包)是運行在framework上的應用程序,而service是bundle所提供(export)或所需(import)的服務。從遠端下載的bundle會在OSGI framework上自動安裝、執行,并向OSGI服務平臺注冊bundle所提供共享或所需要的服務 (service)[4]。在電信代理商系統中采用OSGI的熱插拔技術可以實現模塊之間的高內聚、低耦合,從根本上保證了電信代理商管理系統在運行期有足夠的靈活性和擴展性。
本文設計的電信代理商管理系統的主要功能在于能夠對分銷業務代理商、合作營業廳、代繳費代理商、代維代理商等各類代理商提供業務受理、收費、考核、評價、酬金結算、酬金支付、預警、業務發展計劃管理、營銷資源配置等功能的支持與管理,解決管理及系統支撐工作落后于代銷網絡的快速發展,實現電信業務代理商的統一數據(定義、存取、統計、查詢)管理、統一銷售模板處理流程、統一考核模板處理流程、統一投訴處理管理、統一信息交流平臺的問題,并同時實現豐富的統計報表功能。通過使用Ext JS技術提高用戶的訪問速度和減輕服務器的負載。整個系統的功能結構如圖2所示。

系統各組成部分如下。
(1)代理商業務受理模塊
該模塊主要為代理商業務人員提供商品包的售賣、產品變更、商品包變更等業務的受理。首先,由代理商管理人員登錄,顯示出所有代理商的基本信息,可以根據條件來查詢代理商,選擇該代理商的業務管理后,進入代理商的業務功能。在選擇該代理商的業務功能時,還要對代理商下的所有用戶進行身份驗證、分配業務功能和對用戶提出的業務申請進行審批。代理商業務人員登錄后,可以在授權范圍內開展代理業務,包括業務選擇、業務數據輸入、業務提交、號碼選擇及銷售、設備銷售及促銷品贈送、業務收費、發票打印等。
(2)代理商資料管理
代理商資料管理主要提供代理商檔案信息、合同信息以及競爭對手信息的管理。對代理商的檔案信息進行維護,包括增刪改,所有操作需記錄日志,當新增代理商檔案信息時,以頁面流的方式引導用戶建立。競爭對手管理主要實現競爭對手基本信息的錄入、修改和查詢功能,包括對競爭對手渠道檔案信息及競爭對手營銷人員資料信息的管理功能。
(3)代理商發展管理
代理商發展管理主要包括代理商資質申請、資質審核、代理業務范疇劃分、代理銷售品劃分、代理商退出和審核等功能。
(4)代理商資源管理
代理商資源主要有終端、UIM白卡、UIM成品卡、充值卡、發票、促銷物品等。資源管理主要包括入庫、出庫、維護、報廢、查詢、預警等。
(5)代理商費用管理
代理商費用管理主要包括代理商保證金、押金的扣除、退還和收取,成本計劃的制定和審核、支付等功能。

(6)流程管理
流程管理是指電信代理商管理中完成一次管理過程需要的全部操作節點的集合。流程支持串行、并行、分支和串并行混合4種類型,流程中一個節點最多對應一個環節,流程節點可以根據條件跳過。流程節點不支持多任務,也就是流程調度中,一個流程節點同時最多只能產生一個任務,任務處理完成后調度進入下一環節。
(7)傭金管理
傭金管理模塊包括傭金結算參數設置、傭金結算規則配置和傭金結算,通過維護傭金結算系統控制、功能點控制等參數(如特殊功能按鈕的虛實設置、業務閥值設置)和維護與結算業務有關的參數(如結算單元定義、返還比例設置、結算相關指標設定、優先級等元素類編碼)來生成代理商客戶的結算規則,再根據信息客戶綁定的結算產品、信息客戶發展用戶綁定的結算產品,結合代理商發展的業務信息及代理商發展用戶的消費信息,結算出信息代理商應得的傭金。
電信代理商管理統采用三層體系結構進行設計,即表現層、業務層、數據層,如圖3所示。
(1)表現層
傳統Web應用程序的表現層一般只負責頁面顯示,一個頁面對應一個事件,每個事件都需要提交并返回全部頁面,這樣不但用戶交互界面不友好,而且網絡流量和服務器壓力都很大,影響系統性能。本文采用Ext JS框架,把Web程序做得像桌面應用程序一樣,采用DWR框架與服務器之間按需取數據實現與用戶的實時交互。
(2)業務層
業務層集中了系統的業務邏輯處理功能,可以說是該應用軟件系統中的核心部分。整個系統的健壯性、靈活性、可重用性、可升級性和可維護性,在很大程序上取決于業務層的設計。因此,業務層的設計嚴格遵循高內聚、低耦合,本系統使用OSGI熱插拔技術實現系統的高內聚、低耦合,用DWR接收ExtJS提交的請求,根據參數選擇相應的處理方法,再調用數據持久層的方法訪問數據庫,最后把處理的結果返回給Ext JS的回調函數。
(3)數據層
數據層的功能是訪問數據庫,完成數據的存儲以及對數據庫的基本操作。系統數據層從電信業務數據量巨大、安全性和兼容性等方面考慮,使用Informix數據庫作為支撐平臺。在數據庫設計上,根據電信業務的特點,包括了兩類數據,分別是代理商系統自有的數據和其他系統提供的數據。
基于電信提供的業務及用戶的特殊性,要求系統具有較高的安全性、可用性和可維護性。因此,在可維護性方面,系統采用了OSGI容器,該容器的最大優點是能夠使模塊實現松耦合,能夠將系統的各個模塊生成相對獨立的包,在系統升級和維護時,不需要將整個系統都打包,然后再發布,只需要發布修改后的單獨的包就可以了,也就是說,由于需求的變動,可能需要修改某個模塊,而不會影響整個系統的使用。

在安全性方面,使用OSGI容器,即使其中某個模塊發生故障,也不會使整個系統癱瘓。由于該系統要同很多的第三方系統進行交互,就需要用到很多接口,在設計時,根據OSGI的優點,將每個第三方系統的接口封成一個單獨的塊(包),這樣當某個塊發生故障時,只需要將該塊修改后重新發布,而不會影響其他塊的運行,這樣保證了系統的安全性。
在可用性方面,分別考慮了前臺用戶和后臺用戶的特殊性。對于前臺用戶,是所有中國電信的代理商,使用的面比較廣,就不能做成MIS的形式,要做成門戶網站的風格,并且要支持多種瀏覽器,使用Jquery框架結合DWR框架的方式同業務層進行動態交互,使用Jquery使JSP頁面不再有JavaSrcipt代碼,并且支持多種瀏覽器,改變了傳統方式針對不同的瀏覽器寫不同的JavaScript代碼。采用DWR框架解決了客戶端與服務器的通信速度問題,滿足了系統對異步請求的高要求。
后臺管理方面,其主要操作對象為中國電信的工作人員,因此不宜做成門戶網站的風格,要做成MIS風格,因此采用了Ext JS框架。在表現層,采用的是ExtJS結合DWR框架的形式。在系統的業務層,采用了Spring框架,Spring框架的作用是作為事務管理,并將數據層和表現層聯系起來,實現數據的交互。本系統的數據層,采用的是Hibernate框架,該框架只有強大的事務支持和事務管理能力,深受目前B/S系統架構者的歡迎。在和其他系統的通信方面,本系統采用SOAP,通過WebService實現數據快速、安全的交互。
鑒于篇幅,本文只針對代理商費用管理模塊的實現進行介紹。客戶在申請成為代理商時需先預存一部分的保證金和押金,根據受理業務的金額扣去相應的押金,并在押金不足時進行報警。電信管理人可以使用余額查詢功能和系統報警功能,隨時了解代理商的押金和保證金的余額情況,管理人員通過進入后臺管理系統,點擊“代理商費用管理”目錄即可進入代理商余額查詢,如圖4所示。
在圖4中可以實現對代理商的保證金和押金進行及時查詢,當管理員選擇了保證金或押金后,點擊查詢按鈕,此時Ext JS將從頁面獲取信息,實現費用管理模塊功能的部分Ext JS關鍵代碼,具體如下。
//費用管理模塊Ext JS部分代碼。
var dwr={
getAgentsOfCurrWorker:authDwr.getAgentsOfCurrWorker,
queryAgentEnsureFeeDwr:deductFeeDwr.
queryAgentEnsureFeeDwr
};
……
//在Ext JS獲取到頁面信息后,通過調用 DWR,其代碼如下。
public List
queryAgentEnsureFeeDwr(Long agentId,int type)

{
return agentFeeChangeService.doQueryAgentEnsureFee(agentId,type);
}
//在DWR方法中調用業務邏輯層的Service,此Service的代碼如下。
public List
{
Map
Map
List
String agentName="";
filter.put("agentId",agentId);
List
try
{
td=tisyAgentDossierDao.find(filter);
}
catch(Exception e)
{
log.debug("查詢代理商名字失敗----------->+"+e.getMessage());
}
……
通過Service調用數據層,數據層是由Spring控制,Hibernate來實現。數據層根據獲取的參數,進行匹配查詢,將查詢結果返回到頁面。
該系統投入運行已經有兩年,從目前的運行情況看,在安全方面,因第三方接口的變化,導致多次對系統進行改造。本系統采用OSGI技術將各個模塊獨立,在某個模塊需要變動時,只需要停止該模塊,重新發布就可以了,對其他的模塊沒有任何影響,這點得到了客戶的高度贊揚。由于采用了Ext JS和Jquery框架,使得本系統在兼容性上取得了巨大的成功,實現了對當前主流瀏覽器的支持,同時也提高了客戶端和服務器端的動態交互性和減輕了服務器端表示層的負荷。
從該系統投入運行的效果來看,不但解決了傳統代理系統的可用性、安全性、可維護性等問題,還實現了分級管理,提高了電信代理商的營業額,通過表1可以看出系統從2008年投入使用后,代理商的營業額逐年提升,占到了該省電信業務收入的40%,同時該系統的投入為規范代理商管理和為電信公司開發市場提供了手段和工具。

表1 某省近3年的代理商營業額
1 劉增才,李曉霞,袁小龍.基于SSH+Ext JS架構的化學數據知識框架管理.計算機與應用化學,2008,25(9),1149
2 馮志宇,黃林鵬.基于OSGI的兩層服務模型.計算機應用研究,2009,26(7),2591
3 陳麗欣.基于OSGi平臺家庭網關的遠程監控服務系統.計算機工程與設計,2009,30(13):3248~3249
4 姜華,苗克堅.基于OSGi服務網關的溫度報警系統的設計.計算機工程與設計,2009,30(18),4177