⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmsmkcd.sqc

📁 一整套完整的银行卡系统源代码
💻 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 + -