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

📄 cmscheck.sqc

📁 一整套完整的银行卡系统源代码
💻 SQC
📖 第 1 页 / 共 5 页
字号:
/******************************************************* **   源码文件名称 : cmscheck.SQC **   所属子系统   : 卡管理 **   功能描述     : 对卡检查的处理 **   当前文件版本 : 4.0.0.0 **   作        者 : Feng  **   版本创建日期 : 2004/09/15 **   修改记录     : **   修改人       修改日期     修改位置 **	  Feng			2006-01-09  修改cmsCardVerify的调用,使用函数指针 **	  Feng			2006-02-25  调用cmsApiChkCardKindTranLimitAmt  **								增加入口参数pcTranType,pcMid,pcMctmcc **	  Feng			2006-02-25  cmsApiChkCardNormal增加入口参数pcMctmcc *******************************************************/#include "sysdefine.h"#include "code.h"#include "attrdef.h"#include "pubcom.h"#include "cmscode.h"#include "cmsfunc.h"#include "errlog.h"#include "revglob.h"#include "cmsacctm.h"#include "cmscardinfo.h"#include "cmscardkind.h"#include "cmscardinitparam.h"#include "cmsttotal.h"#include "cmsktlimt.h"#include "cmstlimt.h"#include "cmspcdreg.h"#include "cmscuststopm.h"#include "cmscardkindlmt.h"#include "cmsckmidref.h"EXEC SQL	INCLUDE SQLCA;EXEC SQL	BEGIN	DECLARE SECTION;	long		lNum;							/* 帐户数目			*/	char		acCardNo[ CARDNO_LEN + 1 ];		/* 卡号				*/	char		acMASeqNo[ ACCTSEQNO_LEN + 1 ];	/* 主帐户序号		*/	char		acStatus[ FLAG_LEN + 1 ];		/* 帐户状态			*/EXEC SQL	END		DECLARE SECTION;/******************************************************* **	  函数名称:cmsApiChkAcctNoIsCard **   中文名称:根据客户账号判断是否为卡 **   功能描述:根据客户账号判断是否为卡 **   输入参数: **   			pcAcctNo		----	客户帐户 **   输出参数: **   			pcFlag			----	卡标志 **   									'0':非卡帐户 **   									'1':主卡卡号 **   									'2':有折卡卡内帐户 **   									'3':无折卡卡内帐户 **   									'4':附卡卡号 **   返回结果:int **   			0				----	成功 **   			-1				----	失败*******************************************************/int	cmsApiChkAcctNoIsCard( pcAcctNo, pcFlag )char					*	pcAcctNo;			/* 客户帐号			*/char					*	pcFlag;				/* 卡标志			*/{	/* 定义 局部变量 */	struct	cmscardinfo	stCmsCardInfo;			/* 卡片信息表结构	*/	int					iRtn;					/* 函数返回值		*/	sprintf( g_acTrcMsg, "cmsApiChkAcctNoIsCard begin " );	TRCLOG2	/* 初始化卡片信息表结构 */	memset( &stCmsCardInfo, 0x00, sizeof( struct cmscardinfo ) );	/* 将输入参数赋值给结构 */	strcpy ( stCmsCardInfo.acctno,		pcAcctNo		);	stCmsCardInfo.crdsts[ BIT1_LEN ] = CARDOKSTS;	sprintf( g_acTrcMsg, "cardno[%s]", stCmsCardInfo.acctno );	TRCLOG1	/* 从卡片信息表获取记录 */	pubStoVCmscardinfo( &stCmsCardInfo );	EXEC SQL	SELECT	* INTO R_CMSCARDINFO				FROM	cmscardinfo				WHERE	cardno = :cmscardinfo_acctno				AND		crdsts in ( '1', '3', '4' );	/* 数据库出错 */	if ( SQLCODE && SQLCODE != SQLNOTFOUND )	{		strcpy( g_acRspCode, "999996" );		pubCrtRspInfo( "cmscardinfo", SQLCODE );		ERRLOG		return FAILED;	}	/* 表中存在记录 */	else if ( !SQLCODE )	{		/* 帐号为卡号 */		if ( cmscardinfo_cardflg[ BIT1_LEN ] == MAIN_CARD )		/* 主卡  */			*pcFlag = FLAG_CARD;		else		/* 附卡  */			*pcFlag = FLAG_ACCECARD;	sprintf( g_acTrcMsg, "pcFlag[%s]", pcFlag );	TRCLOG1	}	/* 表中没有记录,表示帐号不是卡号 */	else 	{		/* 将输入参数赋值给结构 */		memset( &stCmsCardInfo, 0x00, sizeof( struct cmscardinfo ) );		strcpy ( stCmsCardInfo.acctno,		pcAcctNo		);		stCmsCardInfo.crdsts[ BIT1_LEN ] = CARDOKSTS;	/* 状态为正常 */		stCmsCardInfo.cardflg[ BIT1_LEN ] = MAIN_CARD;	/* 主卡  */			pubStoVCmscardinfo( &stCmsCardInfo );		EXEC SQL	SELECT	* INTO R_CMSCARDINFO				FROM	cmscardinfo				WHERE	acctno = :cmscardinfo_acctno				AND		cardflg = :cmscardinfo_cardflg				AND		crdsts in ( '1','3','4' );		/* 数据库出错 */		if ( SQLCODE && SQLCODE != SQLNOTFOUND )		{			strcpy( g_acRspCode, "999996" );			pubCrtRspInfo( "cmscardinfo", SQLCODE );			ERRLOG			return FAILED;		}		/* 表中没有记录,表示帐号不是卡内帐号 */		else if ( SQLCODE == SQLNOTFOUND )		{			/* 帐号为非卡帐户 */			*pcFlag = FLAG_NONE;	sprintf( g_acTrcMsg, "pcFlag[%s]", pcFlag );	TRCLOG1		}		/* 表中存在记录 */		else		{			if ( cmscardinfo_hasbankbook[ BIT1_LEN ] == BANKBOOK )			{				/* 帐号为有折卡卡内帐户 */				*pcFlag = FLAG_ACCTINBOOKCARD;	sprintf( g_acTrcMsg, "pcFlag[%s]", pcFlag );	TRCLOG1			}			else			{				/* 帐号为无折卡卡内帐户 */				*pcFlag = FLAG_ACCTINNOBOOKCARD;	sprintf( g_acTrcMsg, "pcFlag[%s]", pcFlag );	TRCLOG1			}		}	}		sprintf( g_acTrcMsg, "pcFlag[%s]", pcFlag );	TRCLOG1	sprintf( g_acTrcMsg, "cmsApiChkAcctNoIsCard end " );	TRCLOG2	return SUCCESS;}/******************************************************* **	  函数名称:cmsApiChkCardKind **   中文名称:检查卡片种类(全部属性) **   功能描述:根据卡片种类得到卡片种类信息,检查卡片种类信息中属性 **   输入参数: **   			pstCmsCardKind	----	卡片种类表 **   			pcCheckFlag		----	检查标志 **   									0:不检查 1:检查 **   									第一位:启用标志 **   									第二位:卡种交易类型和业务发生地 **                                     第三位:不使用 **   									第四位:发卡对象 **   									第五位:记名卡标志 **   									第六位:挂失标志 **   									第七位:商户 **   							"1111111"表示都检查,不检查的位置'0' **   			pcCdTranType	----	卡种交易类型 **   									"001":本行借记卡开主帐户 **   									"002":本行借记卡正常销户 **   									"003":本行借记卡存款 **   									"004":本行借记卡取款 **   									"005":本行借记卡转本行借记卡 **   									"006":本行借记卡消费 **   									"007":本行借记卡退货 **   									"008":圈存 **   									"009":圈提 **   									"010":本行借记卡贷款发放 **   									"011":本行借记卡贷款还款 **   									"012":中间业务 **   									"013":本行借记卡预授权 **   									"014":本行借记卡预授权完成 **   									"015":本行借记卡修改密码 **   									"016":本行借记卡查询 **   									"017":撤消 **   									"018":冲正 **   									"019":撤消冲正 **   									"020":本行借记卡存款确认 **   									"021":本行借记卡挂失 **   									"022":本行贷记卡预借现金 **   									"023":本行借记卡转银联卡 **   									"024":银联卡转本行借记卡 **   									"025":本行借记卡开多帐户 **   									"026":本行借记卡保号换卡 **   									"027":本行借记卡申请副卡 **   									"028":本行借记卡挂失销户 **   									"029":本行借记卡转本行贷记卡 **   									"030":本行贷记卡转本行借记卡 **   									"031":本行贷记卡转本行贷记卡 **   									"032":银联卡转银联卡 **   									"033":本行借记卡自助缴费 **   									"034":本行贷记卡存款 **   									"035":本行贷记卡消费 **   									"036":银联卡存款 **   									"037":银联卡取款 **   									"038":本行贷记卡预授权 **   									"039":本行贷记卡预授权完成 **   									"040":本行贷记卡修改密码 **   									"041":本行贷记卡查询 **   									"042":本行贷记卡存款确认 **   									"043":本行贷记卡挂失 **   									"097":转出(中间业务代收业务赋此项) **   									"098":转入(中间业务代付业务赋此项) **   									"099":其他(中间业务和外围做其他业务时赋此项) **   			pcBussPlace		----	业务发生地 **   									"01":银联中心atm **   									"02":银联中心cdm **   									"03":银联中心pos **   									"04":银联中心crs存取款一体机 **   									"05":银联中心自助查询终端 **   									"06":银联中心柜台 **   									"07":银联中心网上银行 **   									"08":银联中心手机银行 **   									"09":银联中心电话银行 **   									"10":银联中心圈存圈提设备 **   									"11":银联中心移动pos **   									"12":本行柜台 **   									"13":本行atm **   									"14":本行pos **   									"15":本行cdm **   									"16":本行电话银行 **   									"17":本行网上银行 **   									"18":本行手机银行 **   									"19":本行自助查询终端 **   									"20":本行呼叫中心 **   									"21":本行crs存取款一体机 **   									"22":银联商务pos **   									"23":建行atm **   									"24":建行pos设备 **   									"25":华夏银行atm **   									"26":港澳通atm **   									"27":港澳通pos **   									"28":支付系统 **   									"29":本行柜面通 **   									"30":国际结算 **   									"31":银联数据(贷记卡) **   									"97":中间业务前台 **   									"98":中间业务第三方 **   									"99":其他 **   			cCardObject		----	发卡对象 **   									8:个人卡 **   									6:单位卡 **   			cMarkFlg		----	记名卡标志 **   									'0':非记名卡 **   									'1':记名卡 **   			cLostMark		----	挂失标志 **   									'0':挂失 **   									'1':不挂失 **             pcMid			----	商户编码 **   输出参数:无 **   返回结果:int **   			0				----	成功 **   			-1				----	失败*******************************************************/int	cmsApiChkCardKind( pstCmsCardKind, pcCheckFlag, pcCdTranType, \			pcBussPlace, cCardObject, cMarkFlg, cLostMark, pcMid  )struct	cmscardkind		*	pstCmsCardKind;		/* 卡片种类表		*/char					*	pcCheckFlag;		/* 检查标志			*/char					*	pcCdTranType;		/* 卡种交易类型		*/char 					*	pcBussPlace;		/* 业务发生地		*/char						cCardObject;		/* 发卡对象			*/char						cMarkFlg;			/* 记名卡标志		*/char						cLostMark;			/* 挂失标志			*/char					*	pcMid;				/* 商户代码			*/{	/* 定义 局部变量 */	int					iRtn;					/* 函数返回值		*/	int					iNum;					/* 循环变量			*/	int					iBitNum;				/* 数组下标变量		*/	sprintf( g_acTrcMsg, "cmsApiChkCardKind begin " );	TRCLOG2	sprintf( g_acTrcMsg, "CardKind[%s]", pstCmsCardKind->cardkind );	TRCLOG2	sprintf( g_acTrcMsg, "CheckFlag[%s]", pcCheckFlag );	TRCLOG2	sprintf( g_acTrcMsg, "TranType[%s]", pcCdTranType );	TRCLOG2	sprintf( g_acTrcMsg, "BussPlace[%s]", pcBussPlace );	TRCLOG2	sprintf( g_acTrcMsg, "Object[%c]", cCardObject );	TRCLOG2	sprintf( g_acTrcMsg, "Mark[%c]", cMarkFlg );	TRCLOG2	sprintf( g_acTrcMsg, "Lost[%c]", cLostMark );	TRCLOG2	sprintf( g_acTrcMsg, "Mid[%s]", pcMid );	TRCLOG2	/* 循环处理检查标志 */	for ( iNum = 0; iNum < strlen( pcCheckFlag ); iNum ++ )	{		/* 如果检查标志为不检查 */		if ( pcCheckFlag[ iNum ] == CHECK_NO )			continue;		/* 逐项进行每一种检查 */		switch ( iNum )		{			case BIT1_LEN:				/* 检查启用标志 */				/* 卡片种类未启用 */				if ( pstCmsCardKind->enableflg[ BIT1_LEN ] == UNABLE_USE )				{					strcpy( g_acRspCode, "CMS125" );					pubCrtRspInfo( pstCmsCardKind->cardkind );					ERRLOG					return FAILED;				}				break;			case BIT2_LEN:				/* 检查卡种交易类型和业务发生地 */				pubInitCmscardkindlmt();				strcpy( cmscardkindlmt_cardkind, pstCmsCardKind->cardkind );				strcpy( cmscardkindlmt_cdtrantype, pcCdTranType );				strcpy( cmscardkindlmt_bussplace, pcBussPlace );				EXEC SQL	SELECT * FROM cmscardkindlmt							WHERE	cardkind = :cmscardkindlmt_cardkind							AND		cdtrantype = :cmscardkindlmt_cdtrantype							AND		bussplace = :cmscardkindlmt_bussplace;				if ( SQLCODE != SQLNOTFOUND && SQLCODE )				{					strcpy( g_acRspCode, "999996" );					/* 数据库读错误 */					pubCrtRspInfo( "cmscardkindlmt",SQLCODE );					ERRLOG					return FAILED;				}				else if ( !SQLCODE )				{					/* 卡种交易类型不可做 */					strcpy( g_acRspCode, "CMS126" );					pubCrtRspInfo( pstCmsCardKind->cardkind, pcCdTranType );					ERRLOG					return FAILED;				}				break;			case BIT3_LEN:				break;			case BIT4_LEN:				/* 检查发卡对象 */				/* 发卡对象不对 */				if ( pstCmsCardKind->cardobject[ BIT1_LEN ] != cCardObject )				{					strcpy( g_acRspCode, "CMS128" );					pubCrtRspInfo( pstCmsCardKind->cardkind, cCardObject );					ERRLOG					return FAILED;				}				break;			case BIT5_LEN:				/* 检查记名卡/非记名卡标志 */				/* 记名卡/非记名卡标志不对 */				if ( pstCmsCardKind->markflg[ BIT1_LEN ] != ALLREGCARD)				{					if ( pstCmsCardKind->markflg[ BIT1_LEN ] != cMarkFlg )					{						strcpy( g_acRspCode, "CMS129" );						pubCrtRspInfo( pstCmsCardKind->cardkind, cMarkFlg );						ERRLOG						return FAILED;					}				}				break;			case BIT6_LEN:				/* 检查挂失标志 */				/* 挂失标志不对 */				if ( pstCmsCardKind->lostmark[ BIT1_LEN ] != cLostMark )				{					strcpy( g_acRspCode, "CMS130" );					pubCrtRspInfo( pstCmsCardKind->cardkind, cLostMark );					ERRLOG					return FAILED;				}				break;			case BIT7_LEN:				/* 检查卡种是否可以在商户消费 */				pubInitCmsckmidref();				strcpy( cmsckmidref_cardkind,pstCmsCardKind->cardkind);				EXEC SQL	SELECT	mid 							INTO	:cmsckmidref_mid							FROM	cmsckmidref							WHERE	cardkind = :cmsckmidref_cardkind;				if ( SQLCODE == SQLNOTFOUND )				{					break;				}				else if ( SQLCODE && SQLCODE != SQLMORE )				{					strcpy ( g_acRspCode, "999996" );					/* 读数据库出错 */					pubCrtRspInfo( "cmsckmidref", SQLCODE );					ERRLOG					return FAILED;				}				else				{					strpack( pcMid );					iRtn = cmsApiChCardKindShop( pstCmsCardKind->cardkind, pcMid );					if ( iRtn )					{						ERRLOG						return FAILED;					}					else					{						break;					}				}				break;

⌨️ 快捷键说明

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