📄 cmsmkcd.sqc
字号:
/******************************************************* ** 源码文件名称 : cmsmkcd.SQC ** 所属子系统 : 卡管理 ** 功能描述 : 制卡 ** 当前文件版本 : 4.0.0.0 ** 作 者 : Feng ** 版本创建日期 : 2004/09/15 ** 修改记录 : ** 修改人 修改日期 修改位置*******************************************************/#include "sysdefine.h"#include "code.h"#include "attrdef.h"#include "pubcom.h"#include "cmscode.h"#include "cmspcdreg.h"#include "cmscardkind.h"#include "cmsruledef.h"EXEC SQL INCLUDE SQLCA;/******************************************************* ** 函数名称:cmsApiProCmsPcdReg ** 中文名称:撤销预制卡申请 ** 功能描述:按申请日期、申请主机流水号和机构编码处理 ** 预制卡申请登记簿,需要检查登记不记录标志、 ** 状态以及机构是否一致 ** 输入参数: ** pcAplyDate ---- 申请日期 ** plSerSeqNo ---- 申请流水号 ** pcBranchCode ---- 机构代码 ** 输出参数: ** pcTellerCode ---- 申请柜员 ** pcCardKind ---- 卡片种类 ** plAplyNum ---- 申请数量 ** 返回结果:int ** 0 ---- 成功 ** -1 ---- 失败*******************************************************/int cmsApiProCmsPcdReg( pcAplyDate, plSerSeqNo, pcBranchCode, \ pcTellerCode, pcCardKind, plAplyNum )char * pcAplyDate; /* 申请日期 */long * plSerSeqNo; /* 申请流水号 */char * pcBranchCode; /* 机构代码 */char * pcTellerCode; /* 申请柜员 */char * pcCardKind; /* 卡片种类 */long * plAplyNum; /* 申请数量 */{ /* 定义 局部变量 */ struct cmspcdreg stCmsPcdReg; /* 预制卡申请表结构 */ int iRtn; /* 函数返回值 */ sprintf( g_acTrcMsg, "cmsApiProCmsPcdReg begin " ); TRCLOG2 /* 初始化预制卡申请结构 */ memset( &stCmsPcdReg, 0x00, sizeof( struct cmspcdreg ) ); /* 将输入参数赋值给结构 */ strcpy ( stCmsPcdReg.aplydate, pcAplyDate ); stCmsPcdReg.serseqno = *plSerSeqNo; /* 从预制卡申请表获取记录并锁住记录 */ pubStoVCmspcdreg( &stCmsPcdReg ); EXEC SQL DECLARE Pcd_l_cur CURSOR FOR SELECT * FROM CMSPCDREG WHERE aplydate = :cmspcdreg_aplydate AND serseqno = :cmspcdreg_serseqno FOR UPDATE; /* 定义游标错误 if ( SQLCODE ) { strcpy( g_acRspCode, "CMS110" ); pubCrtRspInfo( "cmspcdreg", SQLCODE ); ERRLOG return FAILED; } */ SQLOPENCUR(Pcd_l_cur,"Pcd_l_cur") /* 打开游标错误 */ if ( SQLCODE ) { strcpy( g_acRspCode, "CMS111" ); pubCrtRspInfo( "cmspcdreg", SQLCODE ); ERRLOG return FAILED; } pubInitCmspcdreg(); EXEC SQL FETCH Pcd_l_cur INTO R_CMSPCDREG ; /* 取游标错误 */ if ( SQLCODE && SQLCODE != SQLNOTFOUND ) { strcpy( g_acRspCode, "CMS112" ); pubCrtRspInfo( "cmspcdreg", SQLCODE ); ERRLOG SQLCLOSECUR(Pcd_l_cur,"Pcd_l_cur") return FAILED; } /* 记录不存在 */ else if ( SQLCODE == SQLNOTFOUND ) { strcpy( g_acRspCode, "CMS113" ); sprintf( g_acRspMsg, "预制卡申请登记簿不存在|日期[%s]流水号[%ld]", pcAplyDate, *plSerSeqNo ); ERRLOG SQLCLOSECUR(Pcd_l_cur,"Pcd_l_cur") return FAILED; } pubVtoSCmspcdreg( &stCmsPcdReg ); /* 检查申请机构是否一致 */ /* 申请机构不一致 */ if ( strcmp( stCmsPcdReg.aplybrc, pcBranchCode ) ) { strcpy( g_acRspCode, "CMS101" ); pubCrtRspInfo( stCmsPcdReg.aplybrc, pcBranchCode ); ERRLOG SQLCLOSECUR(Pcd_l_cur,"Pcd_l_cur") return FAILED; } /* 检查该申请记录是否已经生成打卡文件 */ /* 此申请已制卡 */ if ( stCmsPcdReg.processflg[ BIT1_LEN ] != MKFILE_UNDONE ) { strcpy( g_acRspCode, "CMS102" ); pubCrtRspInfo( ); ERRLOG SQLCLOSECUR(Pcd_l_cur,"Pcd_l_cur") return FAILED; } /* 检查该申请记录是否正常 */ iRtn = cmsApiChkCmsPcdregStausIsNormal( &stCmsPcdReg ); /* 此申请已登记撤销 */ if ( iRtn ) { ERRLOG SQLCLOSECUR(Pcd_l_cur,"Pcd_l_cur") return FAILED; } /* 修改登记簿状态为申请撤销 */ cmspcdreg_applflg[ BIT1_LEN ] = CANCEL_APPLYREG; /* 修改预制卡申请记录 */ EXEC SQL UPDATE CMSPCDREG SET applflg = :cmspcdreg_applflg WHERE CURRENT OF Pcd_l_cur; /* 修改出错 */ if ( SQLCODE ) { strcpy( g_acRspCode, "CMS114" ); pubCrtRspInfo( "cmspcdreg", SQLCODE ); ERRLOG SQLCLOSECUR(Pcd_l_cur,"Pcd_l_cur") return FAILED; } SQLCLOSECUR(Pcd_l_cur,"Pcd_l_cur") /* 为输出参数赋值 */ strcpy ( pcTellerCode, stCmsPcdReg.aplyteller ); strcpy ( pcCardKind, stCmsPcdReg.cardkind ); *plAplyNum = stCmsPcdReg.aplynum; sprintf( g_acTrcMsg, "cmsApiProCmsPcdReg end " ); TRCLOG2 return SUCCESS;}/******************************************************* ** 函数名称:cmsApiGenCardNo ** 中文名称:生成卡号 ** 功能描述:按卡片种类表、卡号顺序号和卡号规则定义表生成卡号 ** 输入参数: ** pstCmsCardKind ---- 卡片种类表 ** pstCmsRuleDef ---- 卡号规则定义表 ** plSeqNo ---- 卡顺序号 ** pcField1 ---- 域1数值 ** pcField2 ---- 域2数值 ** pcField3 ---- 域3数值 ** pcField4 ---- 域4数值 ** pcField5 ---- 域5数值 ** pcField6 ---- 域6数值 ** pcField7 ---- 域7数值 ** pcField8 ---- 域8数值 ** 输出参数: ** pcCardNo ---- 卡号 ** 返回结果:int ** 0 ---- 成功 ** -1 ---- 失败*******************************************************/int cmsApiGenCardNo( pstCmsCardKind, pstCmsRuleDef, plSeqNo, \ pcField1, pcField2, pcField3, pcField4, pcField5, \ pcField6, pcField7, pcField8, pcCardNo )struct cmscardkind * pstCmsCardKind; /* 卡片种类表 */struct cmsruledef * pstCmsRuleDef; /* 卡号规则定义表*/long * plSeqNo; /* 卡顺序号 */char * pcField1; /* 域1数值 */char * pcField2; /* 域2数值 */char * pcField3; /* 域3数值 */char * pcField4; /* 域4数值 */char * pcField5; /* 域5数值 */char * pcField6; /* 域6数值 */char * pcField7; /* 域7数值 */char * pcField8; /* 域8数值 */char * pcCardNo; /* 卡号 */{ char acTmpCardNo[ CARDNO_LEN+1 ]; /* 临时卡号 */ char acTmpStr[ CARDNO_LEN+1 ]; /* 临时变量 */ int iRtn; /* 函数返回值 */ int iNum; /* 累计数 */ int iCardNoLen; /* 卡号长度 */ sprintf( g_acTrcMsg, "cmsApiGenCardNo begin " ); TRCLOG2 /* 将卡BIN号赋值给卡号 */ memset ( acTmpCardNo, 0x00, sizeof( acTmpCardNo ) ); strncpy( acTmpCardNo, pstCmsCardKind->cardbin, pstCmsRuleDef->binlen ); iCardNoLen = pstCmsRuleDef->binlen; /* 赋值卡片顺序号前的数据 */ iNum = 0; /* 控制顺序号前的字段个数 */ if ( iNum < pstCmsRuleDef->fldnum1 ) { memset ( acTmpStr, 0x00, sizeof( acTmpStr ) ); strncpy( acTmpStr, pcField1, pstCmsRuleDef->fldlen1 ); strcat ( acTmpCardNo, acTmpStr ); iCardNoLen += pstCmsRuleDef->fldlen1; iNum ++; } if ( iNum < pstCmsRuleDef->fldnum1 ) { memset ( acTmpStr, 0x00, sizeof( acTmpStr ) ); strncpy( acTmpStr, pcField2, pstCmsRuleDef->fldlen2 ); strcat ( acTmpCardNo, acTmpStr ); iCardNoLen += pstCmsRuleDef->fldlen2; iNum ++; } if ( iNum < pstCmsRuleDef->fldnum1 ) { memset ( acTmpStr, 0x00, sizeof( acTmpStr ) ); strncpy( acTmpStr, pcField3, pstCmsRuleDef->fldlen3 ); strcat ( acTmpCardNo, acTmpStr ); iCardNoLen += pstCmsRuleDef->fldlen3; iNum ++; } if ( iNum < pstCmsRuleDef->fldnum1 ) { memset ( acTmpStr, 0x00, sizeof( acTmpStr ) ); strncpy( acTmpStr, pcField4, pstCmsRuleDef->fldlen4 ); strcat ( acTmpCardNo, acTmpStr ); iCardNoLen += pstCmsRuleDef->fldlen4; iNum ++; } if ( iNum < pstCmsRuleDef->fldnum1 ) { memset ( acTmpStr, 0x00, sizeof( acTmpStr ) ); strncpy( acTmpStr, pcField5, pstCmsRuleDef->fldlen5 ); strcat ( acTmpCardNo, acTmpStr ); iCardNoLen += pstCmsRuleDef->fldlen5; } /* 赋值卡片顺序号 */ memset ( acTmpStr, 0x00, sizeof( acTmpStr ) ); sprintf( acTmpStr, "%0*ld", pstCmsRuleDef->seqnolen, *plSeqNo ); strcat ( acTmpCardNo, acTmpStr ); iCardNoLen += pstCmsRuleDef->seqnolen; /* 赋值卡片顺序号后的数据 */ iNum = 0; /* 控制顺序号后的字段个数 */ if ( iNum < pstCmsRuleDef->fldnum2 ) { memset ( acTmpStr, 0x00, sizeof( acTmpStr ) ); strncpy( acTmpStr, pcField6, pstCmsRuleDef->fldlen6 ); strcat ( acTmpCardNo, acTmpStr ); iCardNoLen += pstCmsRuleDef->fldlen6; iNum ++; } if ( iNum < pstCmsRuleDef->fldnum2 ) { memset ( acTmpStr, 0x00, sizeof( acTmpStr ) ); strncpy( acTmpStr, pcField7, pstCmsRuleDef->fldlen7 ); strcat ( acTmpCardNo, acTmpStr ); iCardNoLen += pstCmsRuleDef->fldlen7; iNum ++; } if ( iNum < pstCmsRuleDef->fldnum2 ) { memset ( acTmpStr, 0x00, sizeof( acTmpStr ) ); strncpy( acTmpStr, pcField8, pstCmsRuleDef->fldlen8 ); strcat ( acTmpCardNo, acTmpStr ); iCardNoLen += pstCmsRuleDef->fldlen8; } /* 检查卡号长度 */ /* 卡号生成规则错误 */ if ( ( iCardNoLen + pstCmsRuleDef->vrybitlen ) != pstCmsRuleDef->cardnolen ) { strcpy ( g_acRspCode, "CMS105" ); pubCrtRspInfo( ); ERRLOG return FAILED; } /* 生成卡号校验位,调用公共函数 */ if ( atoi( pstCmsRuleDef->vrybitmeth ) == 1 ) { /* 标准算法 */ iRtn = cmsGenCardVerifyBit( acTmpCardNo ); /* 生成校验位错 */ if ( iRtn ) { ERRLOG return FAILED; } } /* 对出口参数赋置 */ strcpy( pcCardNo, acTmpCardNo ); sprintf( g_acTrcMsg, "cmsApiGenCardNo end " ); TRCLOG2 return SUCCESS;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -