杨智勇,文泽江
(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