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

📄 cms543.sqc

📁 一整套完整的银行卡系统源代码
💻 SQC
字号:
/******************************************************************** **   源码文件名称 : cms543.SQC **   所属子系统   : CMS  **   当前文件版本 : 4.0.0.0 **   作者         : Feng **   版本创建日期 : 2006/01/11 **   功能描述     : 单张选号预制卡申请子交易 **   修改记录     : **   修改人       修改日期     修改日期*********************************************************************/#include "code.h"#include "attrdef.h"#include "sysdef.h"#include "pubcom.h"#include "cmscode.h"#include "cmscardinfo.h"#include "cmscardkind.h"#include "cmsacctm.h"#include "cmspcdreg.h"#include "cmschoosereg.h"#include "pubbranchinfo.h"#include "cmsseqm.h"#include "cmsvouseqno.h"#include "cmsruledef.h"EXEC SQL INCLUDE SQLCA;int cmsSingleMakeCardReq( PUBCOM *pstPubcom ){	/*定义局部变量*/	char	acCardKind[CARDKIND_LEN+1] ;	/*卡种*/	char	acTranDate[DATE_LEN+1] 		;	/*交易日期*/	char	acWishDate[DATE_LEN+1] 		;	/*希望制卡日期*/    char    acCheckFlag[ BIT8_LEN + 1 ];	/* 检查卡片种类标志 */	char	acCardSeq[ VOUNO_LEN + 1 ];	/* 卡顺序号 */	char	acCardNo[ CARDNO_LEN + 1 ];	/* 卡号 */	char	acCustomId[ CUSTNO_LEN + 1 ];	/* 客户号 */	char	acCustomName[ CUSTNAME_LEN + 1 ];	/* 客户姓名 */	char	acVouNo[ VOUNO_LEN + 1 ];	/* 卡凭证号 */	char	acMethod[ PARAMVALUE_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数值			*/	long	lCardSeq;					/* 卡顺序号 */	int		iRtn;	long    lNum=0, lMinNum=0, lMaxNum=0;	struct	cmspcdreg  		stPcdReg;		/* 预制卡申请登记簿 */	struct	cmscardkind		stCardKind;		/* 卡片种类表 */	struct	cmsacctm   		stCmsAcctM;		/* 卡帐户对照表 */	struct	cmscardinfo		stCmsCardInfo;	/* 卡片信息表 */	struct	cmschoosereg	stCmsChReg;		/* 卡选号登记簿 */	struct	pubbranchinfo	stBrcInfo;	    /* 机构关系表		*/	struct	cmsruledef		stCmsRuleDef;	/* 卡号规则定义表	*/	strcpy( g_acTrcMsg, "子交易: 单张选号预制卡申请开始.." );	TRCLOG4	strcpy( g_acRspCode, RSP_OK );	memset( &stPcdReg,		0x00, sizeof ( struct cmspcdreg   ) );     memset( acCheckFlag,	0x00, sizeof( acCheckFlag ) );    memset( acCardKind,		0x00, sizeof( acCardKind ) );    memset( acTranDate,		0x00, sizeof( acTranDate ) );    memset( acWishDate,		0x00, sizeof( acWishDate ) );    memset( acVouNo,		0x00, sizeof( acVouNo ) );    memset( acCardSeq,		0x00, sizeof( acCardSeq ) );    memset( acCardNo,		0x00, sizeof( acCardNo ) );    memset( acCustomId,		0x00, sizeof( acCustomId ) );    memset( acCustomName,	0x00, sizeof( acCustomName ) );	memset( &stCardKind, 	0x00, sizeof ( struct cmscardkind ) ); 	memset( &stCmsAcctM, 	0x00, sizeof ( struct cmsacctm    ) ); 	memset( &stCmsCardInfo, 0x00, sizeof ( struct cmscardinfo ) ); 	memset( &stCmsChReg,	0x00, sizeof ( struct cmschoosereg ) ); 	memset( &stBrcInfo,		0x00,	sizeof( struct pubbranchinfo ) );	memset( acMethod,		0x00,	sizeof( acMethod ) );	/* 取数据字典值 */	getstring("CardKind",		stCardKind.cardkind );	/*卡种  */	getstring("WishDate",		acWishDate );			/*希望制卡日期*/	getstring("CardSeq",		acCardSeq );			/* 卡顺序号 */	getstring("VouNo", 			acVouNo );				/* 凭证号码 */	getstring("CustomId",		acCustomId );			/* 客户号码 */	getstring("CustomName",		acCustomName );			/* 客户姓名 */		/* 获取卡片种类表 */ 	if( pubReadCmscardkind( &stCardKind ) ) 	{		ERRLOG		goto Exit;	}	sprintf( g_acTrcMsg, "Begin pubReadCmsruledef " );	TRCLOG3	/* 获取卡号生成规则定义表 */	strcpy( stCmsRuleDef.ruleseqno, stCardKind.ruleseqno );	if ( pubReadCmsruledef( &stCmsRuleDef ) )	{		ERRLOG		goto Exit;	}	sprintf( g_acTrcMsg, "Begin nGetMkCardParam " );	TRCLOG3	/* 调用生成卡号所需要数据的内部函数 */	iRtn = nGetMkCardParam( pstPubcom, &stCmsRuleDef, &stCardKind,	\					acField1, acField2, acField3, acField4,		\					acField5, acField6, acField7, acField8 );	if ( iRtn )	{		ERRLOG		goto Exit;	}    /* 检查卡片种类(全部属性)API是否为启用标志、检查卡种交易类型 */ 	/* 检查业务发生地、是否是记名卡 */    acCheckFlag[ BIT1_LEN ] = CHECK_YES;        /* 检查启用标志         */    acCheckFlag[ BIT2_LEN ] = CHECK_NO;         /* 检查卡种交易类型     */    acCheckFlag[ BIT3_LEN ] = CHECK_NO;         /* 检查业务发生地       */    acCheckFlag[ BIT4_LEN ] = CHECK_NO;        	/* 检查发卡对象 单/个 	*/    acCheckFlag[ BIT5_LEN ] = CHECK_NO;         /* 检查记名标志       	*/    acCheckFlag[ BIT6_LEN ] = CHECK_NO;         /* 不检查挂失标志       */    iRtn = cmsApiChkCardKind( &stCardKind, acCheckFlag, LOGOTHER, pstPubcom->acChannelId, CZEROS, UNREGNAMECARD, CZEROS, "" );    if ( iRtn )    {        ERRLOG        return FAILED;    }		/* 判断希望制卡日期是否大于业务日期*/	strcpy( acTranDate, acWishDate );	cmsDelDelimiter( acTranDate,	'-' );	if( atol( acTranDate ) < atol( pstPubcom->acTranDate8 ) )	{		sprintf(g_acRspCode,"999999");		sprintf(g_acRspMsg,"希望制卡日期小于业务日期");		ERRLOG		goto Exit;	}		/* 获取机构信息 */	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;		}	}	/* 检查卡顺序号是否已经选号使用 */	lCardSeq = atol( acCardSeq );	sprintf( g_acTrcMsg, "seq=[%ld][%s]", lCardSeq, acCardSeq );	TRCLOG3	iRtn = cmsApiCheckCardSeqNo( &stCardKind, stBrcInfo.areacode, &lCardSeq );	if ( iRtn )	{		ERRLOG		goto Exit;	}	/* 检查卡顺序号是否已经批量使用 */	pubInitCmsseqm();	strcpy( cmsseqm_cardkind, stCardKind.cardkind );	strcpy( cmsseqm_cardbin,  stCardKind.cardbin );	strcpy( cmsseqm_cardidkind, stCardKind.cardidkind );	strcpy( cmsseqm_areacode, stBrcInfo.areacode );	EXEC SQL	SELECT	*				INTO	R_CMSSEQM				FROM	cmsseqm				WHERE	cardkind = :cmsseqm_cardkind				AND		cardbin = :cmsseqm_cardbin				AND		cardidkind = :cmsseqm_cardidkind				AND		areacode = :cmsseqm_areacode;	if ( SQLCODE == SQLNOTFOUND )	{		strcpy( g_acRspCode, "999996" );		sprintf( g_acRspMsg, "卡顺序号未配置该卡种信息" );		ERRLOG		goto Exit;	}	else if ( SQLCODE )	{		strcpy( g_acRspCode, "999996" );		pubCrtRspInfo( "cmsseqm",SQLCODE );		ERRLOG		goto Exit;	}	if ( lCardSeq <= atol( cmsseqm_cardseqno ) )	{		strcpy( g_acRspCode, "CMS220" );		pubCrtRspInfo( stCardKind.cardkind, stBrcInfo.areacode, lCardSeq );		ERRLOG		goto Exit;	}	/* 处理卡凭证号码 */	strpack( acVouNo );	if ( strlen( acVouNo ) ) /* 检查凭证号码是否已经使用 */	{		sprintf( acVouNo, "%0*s", MAX_VOUSEQNOLEN, acVouNo );		iRtn = cmsApiCheckVouNo( stCardKind.voukind, stCardKind.cardbin,								acVouNo );		if ( iRtn )		{			ERRLOG			goto Exit;		}		/* 检查卡凭证号是否已经批量使用 */		pubInitCmscardinfo();		strcpy( cmscardinfo_voukind,		stCardKind.voukind );		strcpy( cmscardinfo_precharcode,	stCardKind.cardbin );		strcpy( cmscardinfo_vouno,			acVouNo );		EXEC SQL	SELECT	*					INTO	R_CMSCARDINFO					FROM	cmscardinfo					WHERE	voukind = :cmscardinfo_voukind					AND		precharcode = :cmscardinfo_precharcode					AND		vouno = :cmscardinfo_vouno;		if ( SQLCODE && SQLCODE != SQLNOTFOUND )		{			strcpy( g_acRspCode, "999996" );			pubCrtRspInfo( "cmsvouseqno",SQLCODE );			ERRLOG			goto Exit;		}		else if ( !SQLCODE )		{			strcpy( g_acRspCode, "CMS221" );			pubCrtRspInfo( stCardKind.voukind, stCardKind.cardbin, acVouNo );			ERRLOG			goto Exit;		}	}	else /* 自动生成凭证号码 */	{		lNum = 1;		iRtn = cmsApiGetCardVouNo( stCardKind.voukind, stCardKind.cardbin, &lNum, &lMinNum, &lMaxNum );		if ( iRtn )		{			ERRLOG			goto Exit; 		}		sprintf( acVouNo, "%.*ld",MAX_VOUSEQNOLEN,lMinNum);	}	/* 调用生成卡号API */	iRtn = cmsApiGenCardNo( &stCardKind, &stCmsRuleDef,		\				&lCardSeq, acField1, acField2, acField3,			\				acField4, acField5, acField6, acField7, acField8,	\				acCardNo );	/* 生成卡号错误 */	if ( iRtn )	{		ERRLOG		goto Exit;	}	/* 写选号登记簿 */	strcpy( stCmsChReg.trandate, pstPubcom->acTranDate ); /* 申请日期 */	stCmsChReg.serseqno = pstPubcom->lSerSeqNo;         /* 流水号 */	strcpy( stCmsChReg.brc, pstPubcom->acBrc );         /* 申请机构 */	strcpy( stCmsChReg.teller, pstPubcom->acTeller );  /* 申请柜员 */	strcpy( stCmsChReg.cardkind, stCardKind.cardkind ); /* 卡片种类 */	strcpy( stCmsChReg.vouno,	acVouNo );				/* 凭证号码 */	stCmsChReg.cardseqno = lCardSeq;					/* 卡顺序号 */	strcpy( stCmsChReg.areacode, stBrcInfo.areacode );	/* 地区代码 */	strcpy( stCmsChReg.voukind,	 stCardKind.voukind );	/* 凭证种类 */	strcpy( stCmsChReg.precharcode, stCardKind.cardbin ); /* 冠字号码 */	strcpy( stCmsChReg.cardno, acCardNo );				/* 卡号 */	strcpy( stCmsChReg.customid, acCustomId );			/* 客户号 */	strcpy( stCmsChReg.customname, acCustomName );		/* 客户姓名 */	stCmsChReg.validf[ BIT1_LEN ] = FLAG_NORMAL;		/* 有效标志 */	iRtn = pubInstCmschoosereg( &stCmsChReg ) ;	if ( iRtn )	{		ERRLOG		goto Exit;	}	/*写预制卡登记簿    */	stPcdReg.serseqno = pstPubcom->lSerSeqNo;			/* 流水号	*/	sprintf( stPcdReg.vouchno,"%s%08ld",pstPubcom->acTranDate8,stPcdReg.serseqno);	strcpy( stPcdReg.aplydate,	pstPubcom->acTranDate );/* 申请日期	*/	strcpy( stPcdReg.wishdate,	acWishDate );			/* 制卡日期	*/	strcpy( stPcdReg.aplybrc,	pstPubcom->acBrc );		/* 申请机构	*/	strcpy( stPcdReg.aplyteller,pstPubcom->acTeller );	/* 申请柜员	*/	strcpy( stPcdReg.authteller,pstPubcom->acAteller );	/* 授权柜员	*/	strcpy( stPcdReg.cardkind,	stCardKind.cardkind );	/* 卡片种类 */	strcpy( stPcdReg.voukind,	stCardKind.voukind );	/* 凭证种类 */	strcpy( stPcdReg.svouno,	acVouNo );				/* 凭证号码 */	strcpy( stPcdReg.evouno,	acVouNo );				/* 凭证号码 */	strcpy( stPcdReg.scardno,	acCardNo );				/* 卡号 */	strcpy( stPcdReg.ecardno,	acCardNo );				/* 卡号 */	strcpy( stPcdReg.custno, acCustomId );			/* 客户号 */	strcpy( stPcdReg.custname, acCustomName );		/* 客户姓名 */	stPcdReg.aplyflg[BIT1_LEN]=SINCHOOSEPLY;			/* 申请标志	*/	stPcdReg.applflg[BIT1_LEN]=APPLYREG;				/* 状态标志	*/	stPcdReg.processflg[BIT1_LEN]=MKFILE_UNDONE;		/* 处理标志	*/	stPcdReg.aplynum = 1;								/* 申请数量 */	if( pubInstCmspcdreg( &stPcdReg ) )	{		ERRLOG		goto Exit;	}	/*写子交易流水*/	iRtn = cmsApiInsTranLog( pstPubcom, &stCmsCardInfo, &stCmsAcctM, "申请", "单张选号预制卡申请" );	if( iRtn )	{		ERRLOG		goto Exit;	}	/* 子交易出口 */ 	setstring("CardNo",		acCardNo );			/* 卡号 */	setstring("VouNo",		acVouNo );			/* 凭证号码 */		strcpy( g_acTrcMsg, "子交易: 预制卡申请结束.." );	TRCLOG4	pubCrtRspInfo();Exit:	if( !strcmp( g_acRspCode, RSP_OK ) )		return SUCCESS;	else 		return FAILED ;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -