首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

卡信息查询

作者:  时间: 2011-06-15



  1. 参数检查
  2. 查询u_UVC_SERVICE表,得到u_UVC_Service.StringField3,若u_UVC_Service.StringField3[9]=”1”表示支持租户则执行3,否则跳至5。
  3. 数据鉴权,得到Operator,Operlevel,Mmlid 或Operator,Operlevel,Mmlid ,TenantID,TimeZoneID,StartTime,EndTime,DLSTDifference(如果u_UVC_Service.StringField3[9]=“1”)字段。
  4. 判断是否输入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)



  1. 查询批次表信息:这里是调用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);




  1. 查询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:老挝Tigogtelfort)
  2. 判断输入参数,如果输入的为SEQUENCE,则转到第8步执行,如果输入的为CARDPINNUMBER,则转到第9步执行。
  3. 判断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。



  1. 输入的为CARDPINNUMBER


l  获取充值卡对应VC号,这里调用GetUVCList函数



GetUVCList处理流程:



  •        首先查询u_UVC_PrefixCode表得到prefixcode