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

📄 cardpwd.sqc

📁 一整套完整的银行卡系统源代码
💻 SQC
字号:
/******************************************************* **   源码文件名称 : cardpwd.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 "cmscardinfo.h"#include "cmscardkind.h"#include "cmslockm.h"EXEC SQL	INCLUDE SQLCA;/******************************************************* **	  函数名称:cmsApiProPwdError **   功能描述:卡密码错误的处理, 但是要在回滚事务后,平台控制 **   			根据卡号、业务发生地和响应码来修改卡片信息表的 **   			密码错误次数、密码错误总次数和卡状态,并且按照 **   			是否超出限制而登记锁卡登记簿 **   输入参数: **   			lSerSeqNo		----	主机流水号 **   			pcTranDate		----	交易日期 **   			pcCardNo		----	卡号 **   			pcHappenPlace	----	业务发生地 **   			pcTranCode		----	交易代码 **   输出参数: **   返回结果:int **   			0				----	成功 **   			-1				----	失败*******************************************************/int	cmsApiProPwdError( lSerSeqNo, pcTranDate, pcCardNo, pcHappenPlace, pcTranCode )long						lSerSeqNo;			/* 主机流水号		*/char					*	pcTranDate;			/* 交易日期			*/char					*	pcCardNo;			/* 卡号				*/char					*	pcHappenPlace;		/* 业务发生地		*/char					*	pcTranCode;			/* 交易代码			*/{	/* 定义 局部变量 */	struct	cmscardinfo	stCmsCardInfo;			/* 卡片信息表结构	*/	struct	cmslockm	stCmsLockM;				/* 锁卡登记簿结构	*/	struct	cmscardkind	stCmsCardKind;			/* 卡片种类表结构	*/	int					iRtn;					/* 函数返回值		*/	sprintf( g_acTrcMsg, "cmsApiProPwdError begin " );	TRCLOG2	/* 初始化结构 */	memset( &stCmsCardKind, 0x00, sizeof( struct cmscardkind	) );	memset( &stCmsCardInfo, 0x00, sizeof( struct cmscardinfo	) );	memset( &stCmsLockM,	0x00, sizeof( struct cmslockm		) );	/* 将输入参数赋值给结构 */	strcpy ( stCmsCardInfo.cardno,		pcCardNo		);	/* 从卡片信息表获取记录并锁住记录 */	pubStoVCmscardinfo( &stCmsCardInfo );	EXEC SQL	DECLARE Info_l_cur CURSOR FOR 				SELECT * FROM CMSCARDINFO				WHERE cardno = :cmscardinfo_cardno				FOR UPDATE;	/* 定义游标错误     if ( SQLCODE )	{		strcpy( g_acRspCode, "CMS110" );		pubCrtRspInfo( "cmscardinfo", SQLCODE );		ERRLOG		return FAILED;	}	*/	SQLOPENCUR(Info_l_cur,"Info_l_cur")	if ( SQLCODE )	{		/* 打开游标错误 */		strcpy( g_acRspCode, "CMS111" );		pubCrtRspInfo( "cmscardinfo", SQLCODE );		ERRLOG		return FAILED;	}	pubInitCmscardinfo();	EXEC SQL	FETCH Info_l_cur INTO R_CMSCARDINFO ;	if ( SQLCODE && SQLCODE != SQLNOTFOUND )	{		/* 取游标错误 */		strcpy( g_acRspCode, "CMS112" );		pubCrtRspInfo( "cmscardinfo", SQLCODE );		ERRLOG	SQLCLOSECUR(Info_l_cur,"Info_l_cur")		return FAILED;	}	else if ( SQLCODE == SQLNOTFOUND )	{		/* 记录不存在 */		strcpy( g_acRspCode, "CMS113" );		sprintf( g_acRspMsg, "卡号[%s]不存在", pcCardNo );		ERRLOG	SQLCLOSECUR(Info_l_cur,"Info_l_cur")		return FAILED;	}	pubVtoSCmscardinfo( &stCmsCardInfo );	sprintf( g_acTrcMsg, "Get CardInfo End " );	TRCLOG2	/* 按卡片种类获取卡片种类表 */	iRtn = cmsApiGetCmsCardKind( stCmsCardInfo.cardkind, &stCmsCardKind );	if ( iRtn )	{	SQLCLOSECUR(Info_l_cur,"Info_l_cur")		ERRLOG		return FAILED;	}	sprintf( g_acTrcMsg, "Get CardKind End " );	TRCLOG2	sprintf( g_acTrcMsg, "Happen[%s] ", pcHappenPlace );	TRCLOG2	/* 累计密码错误总次数 */	stCmsCardInfo.errnumtot ++;	/* 累计ATM密码错误次数 */	if ( !strcmp ( pcHappenPlace, CHANNALID_UNIONATM )	/* 银联ATM	*/			|| !strcmp ( pcHappenPlace, CHANNALID_ATM )	/* 本行ATM	*/				|| !strcmp ( pcHappenPlace, CHANNALID_CBATM )	/* 建行ATM	*/				|| !strcmp ( pcHappenPlace, CHANNALID_HKATM )	/* 港澳ATM	*/				|| !strcmp ( pcHappenPlace, CHANNALID_HXATM )	)/* 华夏ATM	*/		stCmsCardInfo.errnum ++;	/* 判断卡ATM密码错误次数是否超过卡片种类的规定					*/	/* 或者判断卡密码错误总次数是否超过卡片种类的规定,				*/	/* 如果超过,登记锁卡片信息表,修改卡状态为锁定					*/	if ( ( stCmsCardKind.atmerrnum != PWDERRNOTLIMIT				\			&& stCmsCardInfo.errnum >= stCmsCardKind.atmerrnum )	\		|| ( stCmsCardKind.totalerrnum != PWDERRNOTLIMIT			\			&& stCmsCardInfo.errnumtot >= stCmsCardKind.totalerrnum ) )	{	sprintf( g_acTrcMsg, "cardstat[%s]", stCmsCardInfo.cardstat );	TRCLOG2		if ( stCmsCardInfo.cardstat[ BIT9_LEN ] == BIT9_CARDOK )		{			/* 为锁卡登记簿赋值 */			strcpy ( stCmsLockM.cardno,		pcCardNo	);		/* 卡号			*/			strcpy ( stCmsLockM.lockdate,	pcTranDate	);		/* 锁卡日期		*/			stCmsLockM.serseqno = lSerSeqNo;					/* 流水号		*/			strcpy ( stCmsLockM.vouchno,	pcTranDate	);		/* 登记簿编号	*/			/* 去掉分隔符 */			cmsDelDelimiter( stCmsLockM.vouchno, DATE_SPT_MINUS );			sprintf( stCmsLockM.vouchno, "%s%0*ld", stCmsLockM.vouchno,	\											SERSEQNO_LEN, lSerSeqNo );			strcpy ( stCmsLockM.issuebrc,	stCmsCardInfo.issuebrc );/* 发卡机构*/			strcpy ( stCmsLockM.teller,		stCmsCardInfo.teller );	/* 发卡柜员	*/			strcpy ( stCmsLockM.cardkind,	stCmsCardInfo.cardkind );/* 卡片种类*/			strcpy ( stCmsLockM.reason,		pcTranCode	);		/* 锁卡原因		*/			stCmsLockM.lockstat[ 0 ] = LOCKSTAT;				/* 锁卡状态		*/				/* 登记锁卡登记簿 */			iRtn = pubInstCmslockm( &stCmsLockM );			if ( iRtn )			{				ERRLOG	SQLCLOSECUR(Info_l_cur,"Info_l_cur")				return FAILED;			}				/* 修改卡片信息表卡状态 */			stCmsCardInfo.cardstat[ BIT9_LEN ] = BIT9_CARDLOCK;		}	}	strcpy( stCmsCardInfo.chgdate, pcTranDate );	strcpy( stCmsCardInfo.lastdate, pcTranDate );	sprintf( g_acTrcMsg, "chgdate[%s]", stCmsCardInfo.chgdate );	TRCLOG2	sprintf( g_acTrcMsg, "cardstat[%s]", stCmsCardInfo.cardstat );	TRCLOG2	sprintf( g_acTrcMsg, "errnumtot[%d]", stCmsCardInfo.errnumtot );	TRCLOG2	sprintf( g_acTrcMsg, "errnum[%d]", stCmsCardInfo.errnum );	TRCLOG2	/* 修改卡片信息表记录 */	pubStoVCmscardinfo( &stCmsCardInfo );	EXEC SQL	UPDATE cmscardinfo				SET	cardstat = :cmscardinfo_cardstat,					errnum = :cmscardinfo_errnum,					errnumtot = :cmscardinfo_errnumtot,					chgdate = :cmscardinfo_chgdate,					lastdate = :cmscardinfo_lastdate				WHERE CURRENT OF Info_l_cur;	if ( SQLCODE )	{		/* 修改出错 */		strcpy( g_acRspCode, "CMS114" );		pubCrtRspInfo( "cmscardinfo", SQLCODE );		ERRLOG	SQLCLOSECUR(Info_l_cur,"Info_l_cur")		return FAILED;	}	sprintf( g_acTrcMsg, "SQCLODE[%d]", SQLCODE );	TRCLOG2	SQLCLOSECUR(Info_l_cur,"Info_l_cur")	sprintf( g_acTrcMsg, "cmsApiProPwdError end " );	TRCLOG2	return SUCCESS;}

⌨️ 快捷键说明

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