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

📄 cms503.sqc

📁 一整套完整的银行卡系统源代码
💻 SQC
📖 第 1 页 / 共 3 页
字号:
/******************************************************************** **   源码文件名称 : 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 + -