基于组件的银行中间业务平台设计与实现
2018-07-05罗琴华中国邮政集团公司江西省分公司数据中心江西南昌33005江西工业职业技术学院机电工程分院江西南昌33009
罗琴华 马 栎(中国邮政集团公司江西省分公司数据中心 江西 南昌 33005)(江西工业职业技术学院机电工程分院 江西 南昌 33009)
0 引 言
各家银行开办了代理委托方收费的中间业务,通过自建中间业务平台来代理委托方收付费。由于委托方众多,中间业务具有业务种类繁多、处理方式各异、接口复杂多变、交易流程各不相同等特点。大多银行采用结构化开发方法开发中间业务平台软件,不利于软件重用,存在开发周期长、进度和成本难以控制等问题[5]。
1 研究目的
本文以江西省邮储银行中间业务平台建设为背景开展研究。平台要实现电信、移动、联通等通信运营商代收费,水电煤等公共事业费,以及有线电视费、汽车票、税款等各类代收费,业务种类近二十种,委托方涉及三十多家。若采用结构化开发方法,完成一家委托方业务的开发及上线至少需要1个半月,那么三十多家委托方业务全部完成则需要两年多时间。
如何最大化的兼容各类中间业务,无需软件开发或少量开发即可新增一项中间业务,这是迫切需要解决的问题。本文提出基于组件的软件开发方法[5]来建设邮储银行中间业务平台。将中间业务交易处理流程各环节拆分成一个个组件,通过接口、组件配置实现不同业务的个性定义。然后平台采用流程驱动引擎从流程配置中依次读取业务交易流程的各个环节,从而完成一个完整交易处理。
2 中间业务平台软件设计方法
中间业务的多样性造就了各业务处理流程和处理内容的多变性[8]。针对各业务处理流程的多变性进行分析,可将业务处理流程拆分为一个个执行环节,分别对应各个组件。针对各业务处理内容的多变性进行分析,抽象出共性与个性化特性,将共性封装入组件,个性通过接口、组件配置实现个性化处理。各个组件之间的数据传输则采用接口、数据总线等方式传输,从而支持通过流程配置实现对业务组件的即插即用。
2.1 中间业务分析
中间业务根据处理方式可分为信息管理类、现金代收类、卡折代收类、批量代发类、批量代扣类、联机代收类、脱机代收类等。根据委托方可分为电信、移动、联通、电力、水业、煤气、汽运等代收费,根据接入渠道可分为网点、网上银行、便民服务站等渠道缴费。通过对各类业务分析,可从以下五个视角描述中间业务:
• 交易发起方:分网点终端发起、网银等各类渠道发起、委托方发起、中间业务后台发起等。
• 交易时与委托方的连接:实时、非实时。
• 客户办理方式:现金、账户折/卡。
• 数据来源:终端输入、来自委托方传入、自有数据。
• 交易处理方式:单笔、批量。
通过这五个视角的排列组合,至少排列出31种可能的交易,如终端发起实时单笔现金交易、委托方发起实时单笔账户交易等,基本可涵盖中间业务的各类交易。因此将五个视角涵盖的内容转化为标识代码,采用业务标识+交易代码来唯一标识各项中间业务交易。业务标识代表委托方,由区域代码+委托方代码组成,区域代码6位,如全省统一业务的区域代码设为‘999999’,南昌地区业务的区域代码设为‘360100’等;委托方代码4位,如电信设为‘X001’,联通设为‘X002’等。因此‘360100X001’就代表代收南昌电信话费业务。交易代码由10位组成,通过交易代码每一位含义的定义,涵盖所有交易种类。命名规则如下:
1) 第1、2位固定为TR。
2) 第3位表示交易发起方,‘1’:终端或前置发起;‘2’:委托方发起;‘3’:中间业务后台发起;‘4’:储蓄主机发起。
3) 第4位为渠道接入方式,‘0’:无接入方式;‘1’:终端;‘2’:电话银行;‘3’:ATM;‘4’:POS;‘5’:自助终端。
4) 第5位为代收付区分,‘1’:代收;‘2’:代付;‘3’:代理;‘4’:代售;‘5’:国债。
5) 第6、7位为交易种类,‘0x’:查询类;‘1x’:缴费类;‘2x’:兑付类;‘3x’:打印信息类;‘4x’:操作员管理类;‘5x’:空白凭证管理类;‘6x’:加办/撤消类;‘8x’:管理通知类;‘9x’:特殊处理类。其中x为顺序号,为0~Z的数字或字母。
6) 第8位表示取消区分,‘0’:正常;‘1’:取消;‘2’:更正;‘3’:冲正;‘4’:恢复;‘5’:重发;‘6’:调整成功;‘7’:调整失败。
7) 第9位表示资金种类,‘0’:无资金种类;‘1’:现金;‘2’:支票;‘3’:存折;‘4’:卡。
8) 第10位:扩展。
根据交易代码定义,可定义出各类交易,如网点的查询交易为‘TR11100000’,缴费交易为‘TR11110010’。将业务标识+交易代码作为接口参数传入组件,从而可在组件中封装入对不同业务、不同种类交易的各自处理,实现组件复用。
2.2 流程拆分
分析各类交易的处理流程,对流程进行拆分。如网点终端发起的查询交易(涵盖代收通信资费、代收水电费等各类中间业务的查询交易),可将一笔交易拆分成终端数据输入、数据检查、发往委托方报文、接收委托方报文、数据更新、终端输出等各个执行环节。而网点终端发起的缴费交易则比查询交易要多一个单据打印的环节,以实现发票打印功能。从委托方发起的中间业务交易(如电信发起的扣缴话费),则可拆分成接收委托方报文、数据检查、发往储蓄主机扣款、数据更新、发往委托方报文等执行环节。
各类交易皆按上述方法拆分,可看到大部分交易都存在一些相同的执行环节。通过提取共性,将各类交易的相同执行环节对应封装成一个组件,使得每个执行环节对应一个组件,从而通过对组件的拼装即可组织出各类交易。
2.3 组件设计
组件是能完成特定功能并且相对独立的代码模块[8],具有明确的功能定义和访问接口。如终端数据输入组件:负责处理各类业务的数据输入,并将数据存储入数据总线等;数据检查组件:检查各类业务输入数据的合法性、有效性等,根据不同种类交易进行相关数据准备。组件访问接口如下:通过业务标识+交易代码参数唯一标识一项交易,从而在组件中可针对不同的交易做出对应的处理。
typedef int (*comfunc_ft)(
//组件访问接口
char *szBusinessID,
//业务标识
char *szTransID,
//交易代码
char *szEnterpriseID,
//企业码
char *szSequenceNum
//Com序列号
);
组件设计需要充分考虑组件独立性,采用面向对象的思想,做到数据和操作的紧密结合。为了减少业务数据在组件之间的传递,提高效率,同时也为了组件流程的可配置化,平台采用数据总线的方式实现业务数据在各组件之间共享[8]。即组件1从数据总线中读取数据,做完相应的数据处理后再写回数据总线,紧接着组件2也是从数据总线中读取、处理后写回。下面以数据检查组件为例来阐述组件的设计方法。
• 组件名称:TermInCheck。
• 组件描述:终端输入电文检查。
• 接口参数:pBusinessID、pTransID、iSequenceNum。
• 使用范围:应用于终端发起的单笔交易。
• 使用总线数据:
此组件使用了交易局号(tb_tr_midsite)、交易日期(tb_tr_midsys)、网点IP地址、操作员ID、原交易流水号(取消/更正交易)、原交易日期(取消/更正/冲正交易),结算局号。
• 功能概述:
1) 用GetStructData 函数从数据总线上读网点机构tb_tr_midsite数据,检查网点运行状态,终端运行标志,营业时间,如设定了IP地址绑定检查IP地址。
2) 交易代码pTransID第6位为‘1’or‘2’or‘6’(即缴费类、兑付类、加办/撤销类交易)时,获取账务交易日志ZJRZ总线数据,否则(即查询类等交易),获取非账务交易日志ZJNRZ总线数据。
3) 若业务标识pBusinessID不为全零(即涉及委托方业务),进行委托方信息检查:检查委托方运行状态是否开启,交易日期是否在范围内等。
4) 交易代码pTransID第6位为‘1’or‘2’(即缴费类、兑付类交易)时,ZJRZ总线的实缴金额FM0001应大于等于应缴金额FM0019。
5) 当交易代码pTransID第8位为‘1’or‘2’or‘3’(即取消/冲正/更正类交易),则进行原交易信息检查,检查原交易应存在且业务标识、代办号码、交易金额等重要信息应正确。
从上述组件功能概述可以看出,组件通过传入的业务标识、交易代码等参数,针对各类交易做出对应的处理,实现组件通用。
2.4 组件配置
不同委托方的相同交易,比如都是查询交易,虽然交易流程相同,但与不同的委托方交互的数据内容及传输格式都各不相同,终端输入的内容、单据打印的内容等也各不相同。这就要求将终端输入/输出组件、单据打印组件、与委托方交互的请求报文、响应报文等组件开发成支持可配置化,支持对数据内容、与委托方报文格式等业务规则的配置,通过组件配置实现不同委托方业务的数据定义。
以终端输入组件为例,支持输入项、数据格式、数据源等配置。图1是代收联通话费交易的终端输入组件的配置内容,输入项有服务类型、用户号码、用户姓名、往月欠费、预缴费等。这些数据项的长度、显示形式、存储在总线中哪个数据源,都通过配置确定,这些配置信息按业务存储在数据库中。终端输入组件程序设计为根据业务标识从数据库中读取该业务的终端输入配置,根据配置信息将终端输入的数据内容按格式写入数据源定义的数据总线DATABUS中。
图1 代收联通话费缴费交易的终端输入组件配置
3 实例分析与实现
下面展示中间业务平台的具体软件实现,以代收联通话费交易为例。
江西联通业务标识:360000X002,缴费交易代码:TR11110010。图2是代收联通话费交易的流程配置。由终端输入电文、总线数据更新、输入电文检查、委托方请求电文、委托方响应电文、终端凭证打印、存储总线数据、组织返回终端电文等组件构成,组织出一笔完整交易。将该交易流程中各个组件按顺序存储在数据库中,对终端输入电文、组织委托方请求电文、解析委托方响应电文、组织返回终端电文等组件按联通缴费交易的数据内容进行配置,并将配置信息存入数据库。运行时流程引擎从数据库中依次读出组件,在调用终端输入电文等组件时再由组件从数据库读出组件配置,实现整个业务处理。
图2 代收联通话费交易流程配置
程序实现如下:
(1) 组件定义:
/*定义组件接口*/
typedef int (*comfunc_ft)(
char *szBusinessID,
//业务标识
char *szTransID,
//交易代码
char *szEnterpriseID,
//企业码
char *szSequenceNum
//Com序列号
);
/*指针数组变量初始化*/
#define LEN 1024
static CommFunc_t g_tComFuncArr[LEN]={
{3001,ThirdInParse},
{3002,ThirdOutOrgenize},
……
};
#endif
/*在头文件中对组件声明*/
//{3001 解析委托方响应电文组件
int ThirdInParse(char * pBusinessID, char * pTransID, char * pEnterpriseID, char * pSequenceNum);
……
(2) 主程序实现:
/*流程控制函数*/
TERMDBSS(TPSVCINFO * rqst)
{
/*1.根据发起交易的终端画面号读取业务标识、交易代码、企业码*/
if (GetTransId(
szTermPageId,
//IN终端画面号
szBusinessId,
//OUT业务标识
szTransId,
//OUT交易代码
szEnterpriseId
//OUT企业码
) != 0)
goto err_return;
/*2.按业务标识、交易代码从数据库中读取流程配置,顺序读出各个组件*/
if (GetComsInvokeQue(
szBusinessId,
//IN业务标识
szTransId,
//IN交易代码
szEnterpriseId,
//IN企业码
&tFlowFuns
//OUT组件数组
) != 0)
goto err_return;
/*3.按顺序执行终端输入电文解析、总线数据更新等各组件,完成一笔交易*/
for(i=0; i if(NULL == (ftComFuncHandle= GetComFuncHandle(tFlowFuns.m_tFunArr[i].m_iFunSerials))) //根据组件编号取得组件名 goto err_return; /*4.调用组件函数进行业务处理*/ if( (*ftComFuncHandle)( szBusinessId, //业务标识 szTransId, //交易代码 szEnterpriseId, //企业码 tFlowFuns.m_tFunArr[i].m_szRuleSeq //Com序列号 ) != 0 ) goto err_return; } …… tpreturn(TPSUCCESS, 0, rqst->data,rqst->len, 0); } 在添加新组件时,根据业务需求和组件设计原则开发组件[8]。随着各类功能的组件越来越丰富,可复用的组件就越多,后期的软件开发工作也就越来越少,从而将中间业务软件开发工作转变为从组件库中挑选合适的组件进行组装的过程[8],实现新业务的快速上线。 本中间业务平台自上线以来,通过配置化,仅7个多月即快速实现代收电信、移动、联通话费、水电费、税费、烟草款、代理保险、小额支付等三十多项业务开发上线,强有力支撑了业务发展。 参 考 文 献 [1] Herzum P,Sims O.基于组件的企业级开发[M].韩柯,译.北京:机械工业出版社,2005:2- 6. [2] 何艺.重庆支付信息综合服务系统集中代收付子系统的设计与实现[D].重庆:重庆大学,2015. [3] 蔡则祥,王艳君.商业银行中间业务[M].中国金融出版社,2011:112- 113. [4] 孙超.基于GAPS的代收付系统的设计与实现[D].浙江:浙江工商大学,2015. [5] 黄平.基于组件的软件开发方法在金融中间业务系统中的应用[J].浙江理工大学学报,2007,24(4):453- 456. [6] 曹俊,林捷.银行联机交易系统中通讯前置系统的二次开发[J].上海应用技术学院学报,2013,13(2):139- 142. [7] 赵文晋.银行中间业务缴费通平台的设计和开发[EB/OL].(2011-07-22).[2016-11-25].http://www.docin.com/p-235047130.html. [8] 马栎.基于HP-UNIX 11i操作系统的中间业务系统设计与实现[D].南昌:南昌大学,2007.4 结 语