卡信息查询
时间:2011-06-15 来源:hlzhangf
- 参数检查
- 查询u_UVC_SERVICE表,得到u_UVC_Service.StringField3,若u_UVC_Service.StringField3[9]=”1”表示支持租户则执行3,否则跳至5。
- 数据鉴权,得到Operator,Operlevel,Mmlid 或Operator,Operlevel,Mmlid ,TenantID,TimeZoneID,StartTime,EndTime,DLSTDifference(如果u_UVC_Service.StringField3[9]=“1”)字段。
- 判断是否输入TENANTID,如果输入了TENANTID,则重新去查u_uvc_tenantinfo表和U_UVC_DSTCfg表。(这里是调用SupportTenant函数)(查询语句参见上面数据鉴权中查询此两表的语句。)
SupportTenant函数执行流程:
l 查询u_uvc_tenantinfo表(格式:SELECT
TimeZoneID,Precision FROM u_uvc_TenantInfo WHERE TenantID=TENANTID)
l 查询U_UVC_DSTCfg表(格式:SELECT
StartTime,EndTime,DLSTDifference FROM u_uvc_dstcfg WHERE TenantID=TENANTID)
- 查询批次表信息:这里是调用GetBatchQryModeAndSeqlen:获得usQuerymode(批次表查表方式0:号段,1:批次号),usSeqLen(割接卡序列号长度,支持多种长度,长度之间’|’,例如12|13),usCheckOperatorFlag(激活支持发行操作0:否,1:是);
GetBatchQryModeAndSeqlen执行流程:
l 查询u_uvc_vmpcfg表(格式:SELECT
Servicefuncflag2(系统功能特性2),
MigSeqLength((割接卡序列号长度)FROM
u_uvc_vmpcfg)
usSeqLen=
MigSeqLength, usQuerymode=Servicefuncflag2.substring(5,6);
usCheckOperatorFlag= Servicefuncflag2.substring(19,20);
-
查询u_UVC_SERVICE表:(格式:SELECT QueryTableMode , ServiceFlag ,SeqPrefixLen
FROM u_uvc_service),以得到:sQueryTableMode=
QueryTableMode(查表方式),sServiceFlag= ServiceFlag(业务标志),sSeqPrefixLen=
SeqPrefixLen(局点卡序列号前缀长度),sOfficeFlag = sService.Flagsubstring(11,12)( 局点信息0:不区分 1:LTC 2:FSMTC 3:CellC 4:ICE 3G 5:OT 6:BSNL 7: Syriatel
8: Telkom 9 :COTAS a:Globle b:Celcom
c:LTT d:肯尼亚Safaricom e:CMHK f:老挝Tigog:telfort) - 判断输入参数,如果输入的为SEQUENCE,则转到第8步执行,如果输入的为CARDPINNUMBER,则转到第9步执行。
- 判断SEQUENCE长度,如果长度为MigSeqLength (第5步得到) 解析出来的长度中间的一个,并且u_uvc_service. QueryTableMode=’7’,则表示此卡是割接卡;
l 是割接卡:获取获取VCID和TABLEID,这里调用函数GetSeq2tableAccountNumber;
GetSeq2tableAccountNumber函数执行流程:
- 判断是不是globle局点,若不是,则查询u_uvc_vmpcfg表以得到Servicefuncflag2(系统功能特性2),(这里的Servicefuncflag2在之前已经查过了)
- sHorTOfSeq= sServicefuncflag2.substring(17,18)(割接VMP分表方式,0:卡序列号前2位1:卡序列号后2位);
- 若是globe局点,则取卡序列号后10位的前两位为u_UVC_Seq2Table表的TableID;
- 查询u_UVC_Seq2TableXX(XX为TableID)
若不是globe局点,查询格式为:SELECT VCID, TableID(表序号)
from u_UVC_Seq2TableXX WHERE Sequence(充值卡序列号)=SEQUENCE;
若是globe局点,查询格式为:SELECT VCID, TableID,Batch,(批次号),
AccountNumber(卡号(密文)),
from u_UVC_Seq2TableXX WHERE Sequence=SEQUENCE;
然后若是globe局点则解密,
l 不是割接卡:查询u_uvc_batchinfo表(充值卡批次信息表),以获得status(批次状态),vcid(入库VC编号),FragmentNo(分片号), batch(充值卡批次号),查询格式:
SELECT
status , vcid, FragmentNo, batch from u_uvc_batchinfo where 查询条件,查询条件根据批次表查表方式usQuerymode(第5步获得)(这里调用函数CellCBatchFinder得到批次以及是否支持租户查询条件不同。
CellCBatchFinder函数处理过程:
取出输入的SEQUENCE第一位,如果第一位为6,当长度大于等于11时,查询语句为:SELECT status , vcid, FragmentNo, batch from
from u_uvc_batchinfo where Batch=SEQUENCE.substring(0,10) and tenantid=TENANTID
(如果u_UVC_Service.StringField3[9]=“1”,就增加tenantid=TENANTID),否则查询条件为:Batch=””;
如果SEQUENCE第一位不为6,当长度大于等于8时,查询语句为:SELECT status , vcid, FragmentNo, batch from
u_uvc_batchinfo where Batch=SEQUENCE.substring(0,7) and
tenantid=TENANTID
(如果u_UVC_Service.StringField3[9]=“1”,就增加tenantid=TENANTID)
,否则查询条
件为:Batch=””;
l 判断批次是否存在及是否入库,然后确定是否带分片号,调用GetFragNoFlag,以得到usFragNoFlag,
函数GetFragNoFlag处理流程:
- 查询u_uvc_vmpcfg表(格式:SELECT
Servicefuncflag2(系统功能特性2),
FROM u_uvc_vmpcfg),取Stemp=Servicefuncflag2.substring(10,11);
l 确定充值卡表信息,调用函数WhichTable
WhichTable处理流程:
- QueryTableMode=0,查询u_uvc_supplyment,不分片
- QueryTableMode=1,查询u_uvc_supplyment,
分片 - QueryTableMode=2,若没有分片号查询u_uvc_supplyment2,
有则查询u_uvc_supplyment,
分片 - QueryTableMode=3,查询u_uvc_supplyXX分表
- QueryTableMode=7,查询u_uvc_supplyXX动态表
- 当QueryTableMode(查表方式)为4或5或6时查询u_uvc_batchtotable表
- QueryTableMode=4,查询u_uvc_batchtotable表记录数>0,
查询u_uvc_supplyXX分表,否则查询u_uvc_supplyment,不分片; - QueryTableMode=5,查询u_uvc_batchtotable表记录数>0,
查询u_uvc_supplyXX分表,否则查询u_uvc_supplyment,分片; - QueryTableMode=6,查询u_uvc_batchtotable表记录数>0,
查询u_uvc_supplyXX分表,否则若没有分片号查询u_uvc_supplyment2,
有则查询u_uvc_supplyment,
分片;
l 判断是否是查询u_uvc_supplyXX分表(这里判断条件是"3"
== sTabName,和上面一步有很多重复的,可不可以设成"3"
== sQueryTableMode),若是就再次查询u_uvc_batchtotable表获得TableID,若不是判断是不是查询u_uvc_supplyXX动态表,若是则继续查询u_UVC_Prefix2Table表获得TableID。
- 输入的为CARDPINNUMBER
l 获取充值卡对应VC号,这里调用GetUVCList函数
GetUVCList处理流程:
- 首先查询u_UVC_PrefixCode表得到prefixcode