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

📄 cms001.sqc

📁 一整套完整的银行卡系统源代码
💻 SQC
字号:
/******************************************************************** **   源码文件名称 : cms001.SQC **   所属子系统   : CMS  **   当前文件版本 : 4.0.0.0 **   作者         : Feng **   版本创建日期 : 2004/09/21 **   功能描述     : 主卡发卡检查子交易 **   修改记录     : **   修改人       修改日期     修改说明 **   Feng         2006-01-16   卡凭证信息的输出和选号发卡的检查*********************************************************************/#include "code.h"#include "attrdef.h"#include "sysdef.h"#include "pubcom.h"#include "cmscode.h"#include "cmscardinfo.h"#include "cmscardkind.h"#include "dmstellervoulib.h"#include "pubvouinfo.h"EXEC SQL INCLUDE SQLCA;int cmsOpenMainCardChkPro( PUBCOM *pstPubcom ){	/*定义局部变量*/	struct	cmscardinfo			stCmsCardInfo;		/* 卡片信息表		*/	struct	cmscardkind			stCmsCardKind;		/* 卡片种类表		*/	int		iRtn;							/* 函数返回值		*/	char	acOpenTranType[ FLAG_LEN+1 ];	/* 发卡类型	长度2	*/											/* 0:无折发卡		*/											/* 1:有折发卡		*/											/* 2:专用卡发卡		*/	char	acCardAttr[ FLAG_LEN+1 ];		/* 卡属性	长度2	*/	char	acCardObject[ FLAG_LEN+1 ];		/* 发卡对象	长度2	*/											/* 8:个人卡			*/											/* 6:单位卡			*/	char	acCardFlg[ FLAG_LEN+1 ];		/* 卡标志	长度2	*/											/* 8:主卡			*/											/* 6:附卡			*/	char	acFlag4[ FLAG_LEN+1 ];			/* 自带卡标志长度2	*/											/* 0:自带卡			*/											/* 1:本行发卡		*/	char	acCcy[ CCY_LEN + 1 ];			/* 对应账户币种		*/	char	acPrdCode[ PRDCODE_LEN + 1 ];	/* 对应账户产品代码	*/	char	acCheckFlag[ BIT8_LEN + 1 ];	/* 检查卡片种类标志	*/	char	acWthMode[ WTHCODE_LEN + 1 ];	/* 支取方式			*/	char	acCustomId[ CUSTNO_LEN + 1 ];	/* 客户号码			*/	char	acCustomId1[ CUSTNO_LEN + 1 ];	/* 客户号码			*/	char	acAcctNo[ ACCT_LEN + 1 ];		/* 转出客户账号		*/	char	acVouName[ VOUNAME_LEN + 1 ];	/* 凭证名称		*/	char	acMarkFlg[ FLAG_LEN + 1 ];		/* 记名卡/非记名卡标志	*/	strcpy( g_acRspCode,  RSP_OK );	strcpy( g_acTrcMsg, "子交易: 主卡发卡检查处理开始.." );	TRCLOG4	/* 初始化 */	memset( &stCmsCardInfo,		0x00,	sizeof( struct cmscardinfo ) );	memset( &stCmsCardKind,		0x00,	sizeof( struct cmscardkind ) );	memset( acCheckFlag,		0x00,	sizeof( acCheckFlag ) );	memset( acCardFlg,			0x00,	sizeof( acCardFlg ) );	memset( acCcy,				0x00,	sizeof( acCcy ) );	memset( acPrdCode,			0x00,	sizeof( acPrdCode ) );	memset( acCardObject,		0x00,	sizeof( acCardObject ) );	memset( acOpenTranType,		0x00,	sizeof( acOpenTranType ) );	memset( acWthMode,			0x00,	sizeof( acWthMode ) );	memset( acCustomId,			0x00,	sizeof( acCustomId ) );	memset( acCustomId1,		0x00,	sizeof( acCustomId1 ) );	memset( acAcctNo,			0x00,	sizeof( acAcctNo ) );	memset( acFlag4,			0x00,	sizeof( acFlag4 ) );	memset( acMarkFlg,			0x00,	sizeof( acMarkFlg ) );	/* 取数据字典值 */	getstring( "CardKind",		stCmsCardKind.cardkind	);	getstring( "CardNo",		stCmsCardInfo.cardno	);	sprintf( g_acTrcMsg,  "CardKind=[%s]", stCmsCardKind.cardkind );	TRCLOG3	sprintf( g_acTrcMsg,  "CardNo=[%s]", stCmsCardInfo.cardno );	TRCLOG3	acCardFlg[ BIT1_LEN ] = MAIN_CARD;		/* 获取卡片种类表 */ 	iRtn = pubReadCmscardkind( &stCmsCardKind );	if ( iRtn )	{		if ( SQLCODE == SQLNOTFOUND )			sprintf( g_acRspMsg, "卡片种类[%s]不存在", stCmsCardKind.cardkind );		ERRLOG		goto Exit;	}	strcpy( g_acTrcMsg, "pubReadCmscardkind finish" );	TRCLOG3	/* 获取卡片信息 */	iRtn = pubReadCmscardinfo( &stCmsCardInfo );	if ( iRtn )	{		if ( SQLCODE == SQLNOTFOUND )			sprintf( g_acRspMsg, "卡号[%s]不存在", stCmsCardInfo.cardno );		ERRLOG		goto Exit;	}	strcpy( g_acTrcMsg, "pubReadCmscardinfo finish" );	TRCLOG3	/* 检查卡片信息中卡片种类和输入的卡片种类是否一致 */	iRtn = cmsApiChkIsSameCardKind( stCmsCardKind.cardkind, \									stCmsCardInfo.cardkind );	if ( iRtn )	{		ERRLOG		goto Exit;	}	strcpy( g_acTrcMsg, "cmsApiChkIsSameCardKind finish" );	TRCLOG3	getstring( "CustomId",		acCustomId1	);	getstring( "OpenTranType",	acOpenTranType			);	getstring( "CardObject",	acCardObject			);	getstring( "CardAttr",		acCardAttr			);	getstring( "Ccy1",			acCcy					);	getstring( "PrdCode1",		acPrdCode				);	getstring( "DrwType",		acWthMode				);	getstring( "CustomId1",		acCustomId				);	getstring( "AcctNo1",		acAcctNo				);	getstring( "Flag4",			acFlag4					);	getstring( "CardFlg",		acCardFlg				);	getstring( "MarkFlg",		acMarkFlg				);	sprintf( g_acTrcMsg,  "CustomId=[%s]", acCustomId1 );	TRCLOG3	sprintf( g_acTrcMsg,  "OpenTranType=[%s]", acOpenTranType );	TRCLOG3	sprintf( g_acTrcMsg,  "CardObject=[%s]", acCardObject );	TRCLOG3	sprintf( g_acTrcMsg,  "Ccy1=[%s]", acCcy );	TRCLOG3	sprintf( g_acTrcMsg,  "PrdCode=[%s]", acPrdCode );	TRCLOG3	sprintf( g_acTrcMsg,  "WthMode1=[%s]", acWthMode );	TRCLOG3	sprintf( g_acTrcMsg,  "CustomId1=[%s]", acCustomId );	TRCLOG3	sprintf( g_acTrcMsg,  "AcctNo1=[%s]", acAcctNo );	TRCLOG3	sprintf( g_acTrcMsg,  "Flag4=[%s]", acFlag4 );	TRCLOG3	/* 检查卡片种类(全部属性)API 是否为单位/个人卡、启用标志、交易类型	*/	acCheckFlag[ BIT1_LEN ] = CHECK_YES;		/* 检查启用标志			*/	acCheckFlag[ BIT2_LEN ] = CHECK_YES;		/* 检查卡种交易类型		*/	acCheckFlag[ BIT3_LEN ] = CHECK_YES;		/* 检查业务发生地		*/	acCheckFlag[ BIT4_LEN ] = CHECK_NO;			/* 检查发卡对象 单/个	*/	acCheckFlag[ BIT5_LEN ] = CHECK_NO;			/* 检查记名标志			*/	acCheckFlag[ BIT6_LEN ] = CHECK_NO;			/* 检查挂失标志			*/	iRtn = cmsApiChkCardKind( &stCmsCardKind, acCheckFlag, LOGOPENACC, \	pstPubcom->acChannelId, acCardObject[ BIT1_LEN ], CZEROS, CZEROS, "" );	if ( iRtn )	{		ERRLOG		goto Exit;	}	strcpy( g_acTrcMsg, "cmsApiChkCardKind finish" );	TRCLOG3	/* 检查客户持卡数量是否超限并累计客户持卡数量 */	iRtn = 	cmsApiChkCustCardNumLimit( acCustomId1,	\						&stCmsCardKind,	acCardFlg[BIT1_LEN], FLAG_NORMAL );	if ( iRtn )	{		ERRLOG		goto Exit;	}	strcpy( g_acTrcMsg, "cmsApiChkCustCardNumLimit finish" );	TRCLOG3	/* 检查卡号是否为主卡 */    if ( stCmsCardKind.cardflg[ BIT1_LEN ] != ALL_CARD )    {        if ( stCmsCardKind.cardflg[ BIT1_LEN ] != acCardFlg[0] )        {            strcpy( g_acRspCode, "CMS1B4" );            pubCrtRspInfo( stCmsCardKind.cardkind );            ERRLOG			goto Exit;        }    }	/* 检查卡号是否为记名卡非记名卡 */    if ( stCmsCardKind.markflg[ BIT1_LEN ] != ALLREGCARD )    {        if ( stCmsCardKind.markflg[ BIT1_LEN ] != stCmsCardInfo.markflg[0] )        {            strcpy( g_acRspCode, "CMS1B4" );            pubCrtRspInfo( stCmsCardKind.cardkind );            ERRLOG			goto Exit;        }    }	/* 检查卡状态是否为待领卡状态 API*/	iRtn = cmsApiChkCardStatIsReadyOpen( &stCmsCardInfo );	if ( iRtn )	{		ERRLOG		goto Exit;	}	strcpy( g_acTrcMsg, "cmsApiChkCardStatIsReadyOpen finish" );	TRCLOG3	/* Feng Add in 2006-01-16 Begin */	/* 检查单张选号卡需要核对客户号码 */	if ( stCmsCardInfo.cardstat[ BIT16_LEN ] == BIT16_CHOOSE )	{		/* 检查是否为同一客户 */		if ( strcmp( acCustomId1, stCmsCardInfo.custno ) )		{			strcpy( g_acRspCode, "CMS1E7" );			sprintf( g_acRspMsg, "此卡为选号卡,不属于该客户" );			ERRLOG			goto Exit;		}	}	/* Feng Add in 2006-01-16 End */	/* 单位卡的检查 */	if ( acCardObject[ BIT1_LEN ] == UNITCARD )	{		/* 检查卡是否为单位卡 API*/		iRtn = cmsApiChkIsUnitCard( &stCmsCardInfo );		if ( iRtn )		{			ERRLOG			goto Exit;		}		strcpy( g_acTrcMsg, "cmsApiChkIsUnitCard finish" );		TRCLOG3		/* 检查是否为同一客户 */		if ( strcmp( acCustomId1, acCustomId ) )		{			strcpy( g_acRspCode, "CMS1E7" );			pubCrtRspInfo( );			ERRLOG			goto Exit;		}	}	/* 个人卡检查 */	else if ( acCardObject[ BIT1_LEN ] == PERSONALCARD )	{		/* 检查卡是否为个人卡 API*/		iRtn = cmsApiChkIsPersonCard( &stCmsCardInfo );		if ( iRtn )		{			ERRLOG			goto Exit;		}		strcpy( g_acTrcMsg, "cmsApiChkIsPersonCard finish" );		TRCLOG3		/* 有折开卡检查 */		if ( acOpenTranType[ BIT1_LEN ] == HASBOOK_OPEN )		{			/* 检查对应账户的产品代码和卡片种类中的是否一致			iRtn = cmsApiChkIsSamePrdCod( acPrdCode, stCmsCardKind.prdcod );			if ( iRtn )			{				ERRLOG				goto Exit;			}			strcpy( g_acTrcMsg, "cmsApiChkIsSamePrdCod finish" );			TRCLOG3			*/			/* 检查账户支取方式必须为凭密码 */			if ( acWthMode[ BIT1_LEN ] != YES )			{				strcpy( g_acRspCode, "CMS1B9" );				pubCrtRspInfo(  );				ERRLOG				goto Exit;			}			strcpy( g_acTrcMsg, "检查账户支取方式必须为凭密finish" );			TRCLOG3			/* 检查是否为同一客户 */			if ( strcmp( acCustomId1, acCustomId ) )			{				strcpy( g_acRspCode, "CMS1C0" );				pubCrtRspInfo( );				ERRLOG				goto Exit;			}			strcpy( g_acTrcMsg, "检查是否为同一客 finish" );			TRCLOG3		}	}	/* 检查币种是否为卡主帐户币种 API*/	iRtn = cmsApiChkIsSameCCY( &stCmsCardKind, acCcy );	if ( iRtn )	{		ERRLOG		goto Exit;	}	strcpy( g_acTrcMsg, "cmsApiChkIsSameCCY finish" );	TRCLOG3	/* 检查卡是否为专用卡 */	if (0) {	if ( acOpenTranType[ BIT1_LEN ] == SPECIAL_OPEN )	{		iRtn = cmsApiChkIsSpecialCard( &stCmsCardInfo );		if ( iRtn )		{			ERRLOG			goto Exit;		}		strcpy( g_acTrcMsg, "cmsApiChkIsSpecialCard finish" );		TRCLOG3		if ( stCmsCardInfo.cardattr[ BIT1_LEN ] == LAKECARD )		{			pubInitDmstellervoulib( );			strcpy( dmstellervoulib_brc, pstPubcom->acBrc );			strcpy( dmstellervoulib_voukind, stCmsCardInfo.voukind );			dmsCalNewVouno( stCmsCardInfo.vouno, 0, dmstellervoulib_vouno );			strcpy( dmstellervoulib_precharcode, "" );			EXEC SQL    SELECT *						INTO    R_DMSTELLERVOULIB						FROM    dmstellervoulib						WHERE   voukind = :dmstellervoulib_voukind						AND     precharcode = :dmstellervoulib_precharcode						AND     vouno = :dmstellervoulib_vouno;			if ( SQLCODE && SQLCODE != SQLNOTFOUND )			{				strcpy( g_acRspCode, "999996" );				/* 数据库读错误 */				pubCrtRspInfo( "dmstellervoulib",SQLCODE );				ERRLOG				goto Exit;			}			else if ( SQLCODE == SQLNOTFOUND )			{				if ( acFlag4[ BIT1_LEN ] == FLAG_BANK )				{					strcpy( g_acRspCode, "CMS1D9" );					/* 卡凭证不存在,不能选择本行发卡 */					pubCrtRspInfo( );					ERRLOG					goto Exit;				}			}			else			{				if ( acFlag4[ BIT1_LEN ] == FLAG_SELF )				{					strcpy( g_acRspCode, "CMS1E0" );					/* 卡凭证存在,不能自带卡 */					pubCrtRspInfo( );					ERRLOG					goto Exit;				}			}		}	}	}	/* 登记账号索引表 */	iRtn = pubRegAcctNoIdx( stCmsCardInfo.cardno, STR_CMS );	if ( iRtn )	{		ERRLOG		goto Exit;	}	/* 获取凭证名称 */	pubInitPubvouinfo();	strcpy( pubvouinfo_voukind, stCmsCardInfo.voukind );	EXEC SQL	SELECT	vouname 				INTO	:pubvouinfo_vouname				FROM	pubvouinfo				WHERE	voukind = :pubvouinfo_voukind;	if ( SQLCODE )	{		strcpy( g_acRspCode, "999996" );		/* 数据库读错误 */		pubCrtRspInfo( "pubvouinfo",SQLCODE );		ERRLOG		goto Exit;	}	strpack( pubvouinfo_vouname );	memset( acVouName, 0x00, sizeof( acVouName ) );	if ( acOpenTranType[ BIT1_LEN ] == SPECIAL_OPEN 		&& acFlag4[ BIT1_LEN ] == FLAG_SELF )	{		;	}	else	{		sprintf( acVouName, "  付:%s", pubvouinfo_vouname );	}	/* 子交易出口 */ 	/* Feng Modify in 2006-01-16 Begin */	setstring( "VouKind",	stCmsCardInfo.voukind );	/* 凭证种类		*/	setstring( "VouNo",		stCmsCardInfo.vouno );		/* 凭证号码		*/	setstring( "PreCharCode",	stCmsCardInfo.precharcode );/* 冠字号码		*/	/* Feng Modify in 2006-01-16 End */	setstring( "VouName",	acVouName  		);	setstring( "AcctNo1",	acAcctNo				);	Exit:	strcpy( g_acTrcMsg, "子交易: 主卡发卡检查结束.." );	TRCLOG4	if( !strcmp( g_acRspCode, RSP_OK ) )		return SUCCESS;	else		return FAILED ;}

⌨️ 快捷键说明

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