📄 cms503.sqc
字号:
/******************************************************************** ** 源码文件名称 : cms503.SQC ** 所属子系统 : CMS ** 当前文件版本 : 4.0.0.0 ** 作者 : Feng ** 版本创建日期 : 2004/09/21 ** 功能描述 : 制卡处理子交易 ** 修改记录 : ** 修改人 修改日期 修改位置 ** Feng 2006-01-04 全部*********************************************************************/#include "sysdefine.h"#include "code.h"#include "attrdef.h"#include "sysdef.h"#include "pubcom.h"#include "cmscode.h"#include "cmscardinfo.h"#include "cmspcdreg.h"#include "cmsmkfile.h"#include "cmscardinitparam.h"#include "cmscardkind.h"#include "cmsruledef.h"#include "cmschoosereg.h"#include "pubbrclinkinfo.h"#include "pubbranchinfo.h"#include "cispersoninfo.h"#include "ciscustomerinfo.h"EXEC SQL INCLUDE SQLCA;int cmsMakeCardPro( PUBCOM *pstPubcom ){ /*定义局部变量*/ struct cmscardinfo stCmsCardInfo; /* 卡片信息表 */ struct cmscardkind stCmsCardKind; /* 卡片种类表 */ struct cmsmkfile stCmsMkFile; /* 卡片制卡文件 */ struct cmspcdreg stCmsPcdReg; /* 预制卡申请登记簿 */ struct cmsruledef stCmsRuleDef; /* 卡号规则定义表 */ struct cmscardinitparam stCmsCardInitParam; /* 卡片初始化参数表 */ struct cmschoosereg stCmsChooseReg; /* 选号登记簿 */ struct pubbrclinkinfo stPubBrcLinkInfo; /* 机构控制关系表 */ struct pubbranchinfo stPubBrcInfo; /* 机构关系表 */ struct pubbranchinfo stBrcInfo; /* 机构关系表 */ struct cispersoninfo stCisPersonInfo; /* 个人客户基本信息表 */ int iRtn; /* 函数返回值 */ long lMinNum; /* 卡可用最小序号 */ long lMaxNum; /* 卡可用最大序号 */ long lConMinNum; /* 卡可用最小序号 */ long lConMaxNum; /* 卡可用最大序号 */ long lCardSeqNo; /* 卡顺序号 */ long lMinVouNum; /* 卡最小凭证号 */ long lMaxVouNum; /* 卡最大凭证号 */ long lCardVouNo; /* 卡凭证号 */ long lNum; /* 计数器 */ long lConNum; /* 申请数目 */ long lUseNum; /* 序号已使用计数器 */ long lVouUseNum; /* 凭证序号已使用计数器 */ long lFactCardNum; /* 实际生成的卡号数 */ long lKeepCardNum; /* 保号换卡的卡号数 */ long lChosCardNum; /* 选号制卡的卡号数 */ char acBankTitle[ PARAMVALUE_LEN+1 ]; /* 银行标识 */ char acMethod[ PARAMVALUE_LEN+1 ]; /* 凭证号码方式 */ char acBrcCode[ BRC_LEN+1 ]; /* 制卡中心代码 */ char acField1[ BIT32_LEN ]; /* 域1数值 */ char acField2[ BIT32_LEN ]; /* 域2数值 */ char acField3[ BIT32_LEN ]; /* 域3数值 */ char acField4[ BIT32_LEN ]; /* 域4数值 */ char acField5[ BIT32_LEN ]; /* 域5数值 */ char acField6[ BIT32_LEN ]; /* 域6数值 */ char acField7[ BIT32_LEN ]; /* 域7数值 */ char acField8[ BIT32_LEN ]; /* 域8数值 */ char acFaceTranDate[ 10 + 1 ]; /* 卡面上打得日期 */ char acTrack2[ 200 ]; /* 二磁道 */ char acTrack3[ 200 ]; /* 三磁道 */ char caSexName[ 10 ]; char caCustomInfo[ 200 ]; strcpy( g_acTrcMsg, "子交易: 制卡处理开始.." ); TRCLOG4 /* 初始化 */ memset( &stCmsCardKind, 0x00, sizeof( struct cmscardkind ) ); memset( &stCmsPcdReg, 0x00, sizeof( struct cmspcdreg ) ); memset( &stCmsRuleDef, 0x00, sizeof( struct cmsruledef ) ); memset( &stCmsCardInitParam,0x00, sizeof( struct cmscardinitparam ) ); memset( &stPubBrcLinkInfo, 0x00, sizeof( struct pubbrclinkinfo ) ); memset( &stPubBrcInfo, 0x00, sizeof( struct pubbranchinfo ) ); memset( &stBrcInfo, 0x00, sizeof( struct pubbranchinfo ) ); memset( acBankTitle, 0x00, sizeof( acBankTitle ) ); memset( acMethod, 0x00, sizeof( acMethod ) ); memset( acField1, 0x00, sizeof( acField1 ) ); memset( acField2, 0x00, sizeof( acField2 ) ); memset( acField3, 0x00, sizeof( acField3 ) ); memset( acField4, 0x00, sizeof( acField4 ) ); memset( acField5, 0x00, sizeof( acField5 ) ); memset( acField6, 0x00, sizeof( acField6 ) ); memset( acField7, 0x00, sizeof( acField7 ) ); memset( acField8, 0x00, sizeof( acField8 ) ); /* 取数据字典值 */ getstring( "CardKind", stCmsCardKind.cardkind ); /* 获取卡片种类表 */ if( pubReadCmscardkind( &stCmsCardKind ) ) { ERRLOG goto Exit; } sprintf( g_acTrcMsg, "Begin pubReadCmscardinitparam " ); TRCLOG3 /* 获取卡片初始化参数 */ strcpy( stCmsCardInitParam.cardidkind, stCmsCardKind.cardidkind ); if ( pubReadCmscardinitparam( &stCmsCardInitParam ) ) { ERRLOG goto Exit; } sprintf( g_acTrcMsg, "Begin pubReadCmsruledef " ); TRCLOG3 /* 获取卡号生成规则定义表 */ strcpy( stCmsRuleDef.ruleseqno, stCmsCardKind.ruleseqno ); if ( pubReadCmsruledef( &stCmsRuleDef ) ) { ERRLOG goto Exit; } sprintf( g_acTrcMsg, "Begin cmsApiGetBankTitle " ); TRCLOG3 /* 获取银行标识 */ if ( cmsApiGetBankTitle( acBankTitle ) ) { ERRLOG goto Exit; } sprintf( g_acTrcMsg, "Begin cmsApiGetVouMethod " ); TRCLOG3 /* 获取卡部机构信息 */ memset( &stBrcInfo, 0x00, sizeof( struct pubbranchinfo ) ); strcpy( stBrcInfo.brccode, pstPubcom->acBrc ); iRtn = pubReadPubbranchinfo( &stBrcInfo ); if ( iRtn ) { ERRLOG goto Exit; } /* 获取凭证号码生成方式 */ if ( cmsApiGetVouMethod( acMethod ) ) { ERRLOG goto Exit; } if ( acMethod [ BIT1_LEN ] != METHOD_AREACARDSEQNO ) { strcpy( stBrcInfo.areacode, " " ); } else { if ( !strlen( stBrcInfo.areacode ) ) { strcpy( g_acRspCode, "CMS217" ); pubCrtRspInfo( stBrcInfo.brccode ); ERRLOG goto Exit; } } sprintf( g_acTrcMsg, "Begin nGetMkCardParam " ); TRCLOG3 /* 调用生成卡号所需要数据的内部函数 */ iRtn = nGetMkCardParam( pstPubcom, &stCmsRuleDef, &stCmsCardKind, \ acField1, acField2, acField3, acField4, \ acField5, acField6, acField7, acField8 ); if ( iRtn ) { ERRLOG goto Exit; } /*把实际生成卡的数量置为0*/ lFactCardNum=0; lKeepCardNum=0; lChosCardNum=0; /* 定义游标循环获取预制卡申请登记簿 */ strcpy( stCmsPcdReg.cardkind, stCmsCardKind.cardkind ); stCmsPcdReg.applflg[ BIT1_LEN ] = APPLYREG; stCmsPcdReg.processflg[ BIT1_LEN ] = MKFILE_UNDONE; strcpy( stCmsPcdReg.wishdate, pstPubcom->acTranDate ); pubStoVCmspcdreg( &stCmsPcdReg ); EXEC SQL DECLARE Reg_l_cur CURSOR FOR SELECT * FROM CMSPCDREG WHERE cardkind = :cmspcdreg_cardkind AND applflg = :cmspcdreg_applflg AND processflg = :cmspcdreg_processflg AND wishdate <= :cmspcdreg_wishdate FOR UPDATE; /* 定义游标错误 ORDER BY aplydate, serseqno if ( SQLCODE ) { strcpy( g_acRspCode, "CMS110" ); pubCrtRspInfo( "cmspcdreg", SQLCODE ); ERRLOG goto Exit; } */ SQLOPENCUR(Reg_l_cur,"Reg_l_cur") /* 打开游标错误 */ if ( SQLCODE ) { strcpy( g_acRspCode, "CMS111" ); pubCrtRspInfo( "cmspcdreg", SQLCODE ); ERRLOG goto Exit; } while ( TRUE ) { pubInitCmspcdreg(); EXEC SQL FETCH Reg_l_cur INTO R_CMSPCDREG ; /* 取游标错误 */ if ( SQLCODE && SQLCODE != SQLNOTFOUND ) { strcpy( g_acRspCode, "CMS112" ); pubCrtRspInfo( "cmspcdreg", SQLCODE ); goto Exit; } /* 记录不存在 */ else if ( SQLCODE == SQLNOTFOUND ) break; /* 记录存在 */ pubVtoSCmspcdreg( &stCmsPcdReg ); /* 获取机构信息 */ memset( acBrcCode, 0x00, sizeof( acBrcCode ) ); memset( &stPubBrcLinkInfo, 0x00, sizeof( struct pubbrclinkinfo ) ); memset( &stPubBrcInfo, 0x00, sizeof( struct pubbranchinfo ) ); strcpy( stPubBrcInfo.brccode, stCmsPcdReg.aplybrc ); iRtn = pubReadPubbranchinfo( &stPubBrcInfo ); if ( iRtn ) { ERRLOG goto Exit; } if ( !strcmp( stPubBrcInfo.brctype, BRCTYPE_CRDCENTER ) ) { strcpy( acBrcCode, stPubBrcInfo.brccode ); } else { /* 获取申请机构的制卡中心代码 */ strcpy( stPubBrcLinkInfo.brccode, stCmsPcdReg.aplybrc ); strcpy( g_acTrcMsg, stPubBrcLinkInfo.brccode ); TRCLOG3 strcpy( stPubBrcLinkInfo.linktype, LINKTYPE_SJZK ); strcpy( g_acTrcMsg, stPubBrcLinkInfo.linktype ); TRCLOG3 strcpy( stPubBrcLinkInfo.linksubtype, LINKSUBTYPE_ZK ); strcpy( g_acTrcMsg, stPubBrcLinkInfo.linksubtype ); TRCLOG3 iRtn = pubReadPubbrclinkinfo( &stPubBrcLinkInfo ); if ( iRtn ) { ERRLOG goto Exit; } strcpy( acBrcCode, stPubBrcLinkInfo.highbrc ); } sprintf( g_acTrcMsg, "[%s][%s]", acBrcCode, pstPubcom->acBrc ); TRCLOG3 if ( strcmp( acBrcCode, pstPubcom->acBrc ) ) { sprintf( g_acTrcMsg, "[%s][%s]", acBrcCode, pstPubcom->acBrc ); TRCLOG3 continue; } /* 保号换卡和单张选号不需要生成卡号 */ /* 不是非记名卡保号换卡申请和记名卡保号换卡申请 */ if ( stCmsPcdReg.aplyflg[ BIT1_LEN ] != HOLDCARDAPLY && stCmsPcdReg.aplyflg[ BIT1_LEN ] != NAMEHOLDCARDAPLY && stCmsPcdReg.aplyflg[ BIT1_LEN ] != SINCHOOSEPLY ) { /* 调用生成新的卡号顺序号API */ lMinNum = ZEROS; lMaxNum = ZEROS; iRtn = cmsApiProCmsSeqM( &stCmsCardKind, \ stBrcInfo.areacode, \ &stCmsPcdReg.aplynum, \ &lMinNum, \ &lMaxNum ); /* 生成新的卡号顺序号出错 */ if ( iRtn ) { ERRLOG goto Exit; } } if ( stCmsPcdReg.aplyflg[ BIT1_LEN ] != SINCHOOSEPLY ) { /* 按凭证类别获取卡凭证号 API */ lMinVouNum = ZEROS; lMaxVouNum = ZEROS; /* 凭证号码获取方式为大排序 */ if ( acMethod [ BIT1_LEN ] == METHOD_SINGLESEQ ) { iRtn = cmsApiGetCardVouNo( stCmsCardKind.voukind, \ stCmsCardKind.cardbin, \ &stCmsPcdReg.aplynum, \ &lMinVouNum, \ &lMaxVouNum ); /* 获取卡凭证号顺序号出错 */ if ( iRtn ) { ERRLOG goto Exit; } } else if ( acMethod [ BIT1_LEN ] == METHOD_AREACARDSEQNO ) { sprintf( g_acTrcMsg, "areacode[%s]seqlen[%d][%ld]", stBrcInfo.areacode, stCmsRuleDef.seqnolen, (long)pow( 10.0, (double)stCmsRuleDef.seqnolen ) ); TRCLOG4 lMinVouNum=lMinNum+(long)(atoi(stBrcInfo.areacode)*(long)pow(10.0, (double)stCmsRuleDef.seqnolen) ); lMaxVouNum=lMaxNum+(long)(atoi(stBrcInfo.areacode)*(long)pow(10.0, (double)stCmsRuleDef.seqnolen) ); sprintf( g_acTrcMsg, "lmin[%ld]lmax[%ld]", lMinVouNum, lMaxVouNum ); TRCLOG4 } else { lMinVouNum = lMinNum; lMaxVouNum = lMaxNum; } } /* 循环生成卡号,插入卡片信息表、卡片制卡文件 */ lNum = 0; lUseNum = 0 ; lVouUseNum = 0; while ( lNum < stCmsPcdReg.aplynum ) { /* 初始化结构 */ memset( &stCmsCardInfo, 0x00, sizeof( struct cmscardinfo ) ); memset( &stCmsMkFile, 0x00, sizeof( struct cmsmkfile )); /* 保号换卡,单张选号卡不需要生成卡号 */ /* 不是非记名卡保号换卡申请和记名卡保号换卡申请 */ if ( stCmsPcdReg.aplyflg[ BIT1_LEN ] != HOLDCARDAPLY \ && stCmsPcdReg.aplyflg[ BIT1_LEN ] != NAMEHOLDCARDAPLY \ && stCmsPcdReg.aplyflg[ BIT1_LEN ] != SINCHOOSEPLY ) { while( lUseNum + lNum < stCmsPcdReg.aplynum ) { /* 计算卡顺序号 */ lCardSeqNo = lMinNum + lUseNum + lNum; sprintf( g_acTrcMsg, "lUseNum[%d]lNum[%d]ap[%d]lMin[%d]Seq[%d]", lUseNum, lNum, stCmsPcdReg.aplynum, lMinNum, lCardSeqNo ); TRCLOG4 /* 检查卡顺序号是否已经被使用 */ iRtn = cmsApiCheckCardSeqNo( &stCmsCardKind, stBrcInfo.areacode , &lCardSeqNo ); if ( !iRtn ) break; else if ( iRtn != TRUE ) { ERRLOG goto Exit; } strcpy( g_acRspCode, RSP_OK ); memset( g_acRspMsg, 0x00, sizeof( g_acRspMsg ) ); lUseNum += 1 ; } while ( lUseNum + lNum >= stCmsPcdReg.aplynum ) { /* 调用生成新的卡号顺序号API */ lConMinNum = ZEROS; lConMaxNum = ZEROS; lConNum = 1; iRtn = cmsApiProCmsSeqM( &stCmsCardKind, \ stBrcInfo.areacode, \ &lConNum, \ &lConMinNum, \ &lConMaxNum ); /* 生成新的卡号顺序号出错 */ if ( iRtn ) { ERRLOG goto Exit; } /* 计算卡顺序号 */ lCardSeqNo = lConMinNum; /* 检查卡顺序号是否已经被使用 */ iRtn = cmsApiCheckCardSeqNo( &stCmsCardKind, stBrcInfo.areacode , &lCardSeqNo ); if ( !iRtn ) break; else if ( iRtn != TRUE ) { ERRLOG goto Exit; } strcpy( g_acRspCode, RSP_OK ); memset( g_acRspMsg, 0x00, sizeof( g_acRspMsg ) ); } /* 调用生成卡号API */ iRtn = cmsApiGenCardNo( &stCmsCardKind, &stCmsRuleDef, \ &lCardSeqNo, acField1, acField2, acField3, \ acField4, acField5, acField6, acField7, acField8, \ stCmsCardInfo.cardno ); /* 生成卡号错误 */ if ( iRtn ) { ERRLOG goto Exit; } if ( acMethod [ BIT1_LEN ] == METHOD_SINGLESEQ ) { while( lVouUseNum + lNum < stCmsPcdReg.aplynum ) { /* 计算卡凭证号 */ lCardVouNo = lMinVouNum + lVouUseNum + lNum ; sprintf( stCmsMkFile.vouno, "%0.*ld",MAX_VOUSEQNOLEN,lCardVouNo); /* 检查卡凭证号是否已经被使用 */ iRtn = cmsApiCheckVouNo( stCmsCardKind.voukind, stCmsCardKind.cardbin , stCmsMkFile.vouno ); if ( !iRtn ) break; else if ( iRtn != TRUE ) { ERRLOG goto Exit; } strcpy( g_acRspCode, RSP_OK ); memset( g_acRspMsg, 0x00, sizeof( g_acRspMsg ) ); lVouUseNum += 1 ; } while ( lVouUseNum + lNum >= stCmsPcdReg.aplynum ) { /* 调用生成新的卡凭证号API */ lConMinNum = ZEROS; lConMaxNum = ZEROS; lConNum = 1; iRtn = cmsApiGetCardVouNo( stCmsCardKind.voukind, \ stCmsCardKind.cardbin, &lConNum, \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -