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

📄 cmsgen.sqc

📁 一整套完整的银行卡系统源代码
💻 SQC
📖 第 1 页 / 共 2 页
字号:
/******************************************************* **   源码文件名称 : cmsgen.SQC **   所属子系统   : 卡管理 **   功能描述     : 对卡顺序号、帐户序号和公共参数表的处理 **   当前文件版本 : 4.0.0.0 **   作        者 : Feng  **   版本创建日期 : 2004/09/15 **   修改记录     : **   修改人       修改日期     修改位置 **   Feng	    2006-01-07   cmsApiProCmsSeqM入口参数修改 **   Feng      2006-01-09   增加函数cmsApiGenCardPinparm*******************************************************/#include "sysdefine.h"#include "code.h"#include "attrdef.h"#include "pubcom.h"#include "cmscode.h"#include "cmsseqm.h"#include "cmsseqno.h"#include "cmscardkind.h"#include <stdio.h>#include <stdlib.h>#include <math.h>EXEC SQL	INCLUDE SQLCA;/******************************************************* **	  函数名称:cmsApiProCmsSeqM **   功能描述:按卡BIN号、卡片识别和申请数量 **   			处理卡号顺序号文件,数据库中存放的是已经使用的顺序号 **   输入参数: **   			pstCmsCardKind	----	卡片种类表 **   			pcAreaCode		----	地区代码 **   			plAplyNum		----	申请数量 **   输出参数: **   			plMinNo			----	可用最小序号 **   			plMaxNo			----	可用最大序号 **   返回结果:int **   			0				----	成功 **   			-1				----	失败*******************************************************/int	cmsApiProCmsSeqM( pstCmsCardKind, pcAreaCode, \						plAplyNum, plMinNo, plMaxNo )struct	cmscardkind		*	pstCmsCardKind;		/* 卡片种类表	*/char					*	pcAreaCode;			/* 地区代码	new		*/long					*	plAplyNum;			/* 申请数量			*/long					*	plMinNo;			/* 可用最小序号		*/long					*	plMaxNo;			/* 可用最大序号		*/{	/* 定义 局部变量 */	struct	cmsseqm		stCmsSeqM;				/* 卡号顺序号表结构 */	int					iRtn;					/* 函数返回值		*/	double				dSeqNo;					/* 临时顺序号		*/	double				dMaxSeqNo;				/* 最大顺序号		*/	double				dMinSeqNo;				/* 最小顺序号		*/												/* double类型防溢出	*/	sprintf( g_acTrcMsg, "cmsApiProCmsSeqM begin " );	TRCLOG2	/* 初始化卡号顺序号文件结构 */	memset( &stCmsSeqM, 0x00, sizeof( struct cmsseqm ) );	/* 将输入参数赋值给结构 */	strcpy ( stCmsSeqM.cardkind,	pstCmsCardKind->cardkind	);	strcpy ( stCmsSeqM.cardbin,		pstCmsCardKind->cardbin		);	strcpy ( stCmsSeqM.cardidkind,	pstCmsCardKind->cardidkind	);	strcpy ( stCmsSeqM.areacode,	pcAreaCode	);	if ( !strlen( pcAreaCode ) )		strcpy( stCmsSeqM.areacode,	" " );	/* 从卡号顺序号表获取记录并锁住记录 */	pubStoVCmsseqm( &stCmsSeqM );	EXEC SQL	DECLARE SeqM_l_cur CURSOR FOR 				SELECT * FROM CMSSEQM				WHERE cardkind =:cmsseqm_cardkind 				AND	cardbin = :cmsseqm_cardbin				AND cardidkind = :cmsseqm_cardidkind				AND areacode = :cmsseqm_areacode				FOR UPDATE;	/* 定义游标错误     if ( SQLCODE )	{		strcpy( g_acRspCode, "CMS110" );		pubCrtRspInfo( "cmsseqm", SQLCODE );		ERRLOG		return FAILED;	}	*/	SQLOPENCUR(SeqM_l_cur,"SeqM_l_cur")	/* 打开游标错误 */	if ( SQLCODE )	{		strcpy( g_acRspCode, "CMS111" );		pubCrtRspInfo( "cmsseqm", SQLCODE );		ERRLOG		return FAILED;	}	pubInitCmsseqm();	EXEC SQL	FETCH SeqM_l_cur INTO R_CMSSEQM ;	/* 取游标错误 */	if ( SQLCODE && SQLCODE != SQLNOTFOUND )	{		strcpy( g_acRspCode, "CMS112" );		pubCrtRspInfo( "cmsseqm", SQLCODE );		ERRLOG		SQLCLOSECUR(SeqM_l_cur,"SeqM_l_cur")		return FAILED;	}	/* 记录不存在 */	else if ( SQLCODE == SQLNOTFOUND )	{		strcpy( g_acRspCode, "CMS113" );		sprintf( g_acRspMsg, "卡顺序号文件不存在[%s|%s]",				pstCmsCardKind->cardbin, pstCmsCardKind->cardidkind );		ERRLOG		SQLCLOSECUR(SeqM_l_cur,"SeqM_l_cur")		return FAILED;	}	pubVtoSCmsseqm( &stCmsSeqM );	/* 序号全部使用 */	if ( pstCmsCardKind->seqflag[ BIT1_LEN ] == SEQ_ALLUSE )	{		/* 检查顺序号+plAplyNum后是否超过最大值 */		dSeqNo = atof( stCmsSeqM.cardseqno );		dSeqNo += (double )(*plAplyNum);		dMaxSeqNo = atof( MAX_CARDSEQNO );		/* 超过最大卡顺序号 */		if ( dSeqNo > dMaxSeqNo )		{			strcpy( g_acRspCode, "CMS104" );			pubCrtRspInfo( dSeqNo, dMaxSeqNo );			ERRLOG			SQLCLOSECUR(SeqM_l_cur,"SeqM_l_cur")			return FAILED;		}	}	else /* 序号部分使用 */	{		/* 检查顺序号+plAplyNum后是否超过规定范围 */		dSeqNo = atof( stCmsSeqM.cardseqno );		dMaxSeqNo = atof( pstCmsCardKind->endseq );		dMinSeqNo = atof( pstCmsCardKind->beginseq );		if ( dSeqNo < dMinSeqNo )		{			strcpy( g_acRspCode, "CMS218" );			pubCrtRspInfo( );			ERRLOG			SQLCLOSECUR(SeqM_l_cur,"SeqM_l_cur")			return FAILED;		}		dSeqNo += (double )(*plAplyNum);		dMaxSeqNo = atof( pstCmsCardKind->endseq );		/* 超过最大卡顺序号 */		if ( dSeqNo > dMaxSeqNo )		{			strcpy( g_acRspCode, "CMS219" );			pubCrtRspInfo( );			ERRLOG			SQLCLOSECUR(SeqM_l_cur,"SeqM_l_cur")			return FAILED;		}	}	/* 累加卡号顺序号文件中卡顺序号 */	dSeqNo =  atof( stCmsSeqM.cardseqno );	*plMinNo = ( long ) dSeqNo + 1;	*plMaxNo = ( long ) dSeqNo + *plAplyNum;	sprintf( cmsseqm_cardseqno, "%0*ld", CARDSEQNO_LEN, *plMaxNo );	/* 修改卡号顺序号文件记录 */	EXEC SQL	UPDATE cmsseqm				SET  cardseqno = :cmsseqm_cardseqno				WHERE CURRENT OF SeqM_l_cur;	/* 修改出错 */	if ( SQLCODE )	{		strcpy( g_acRspCode, "CMS114" );		pubCrtRspInfo( "cmsseqm", SQLCODE );		ERRLOG		SQLCLOSECUR(SeqM_l_cur,"SeqM_l_cur")		return FAILED;	}	SQLCLOSECUR(SeqM_l_cur,"SeqM_l_cur")	sprintf( g_acTrcMsg, "cmsApiProCmsSeqM end " );	TRCLOG2	return SUCCESS;}/******************************************************* **	  函数名称:cmsApiGenCardNewSeqNo **   功能描述:获取卡内新的账户序号,卡内开立账户时使用,  **   			数据库中存放的是已经使用的顺序号 **   输入参数: **   			pcCardNo		----	卡号 **   输出参数: **   			pcAcctSeqNo		----	帐户序号 **   返回结果:int **   			0				----	成功 **   			-1				----	失败*******************************************************/int	cmsApiGenCardNewSeqNo( pcCardNo, pcAcctSeqNo )char					*	pcCardNo;			/* 卡号				*/char					*	pcAcctSeqNo;		/* 帐户序号			*/{	/* 定义 局部变量 */	struct	cmsseqno	stCmsSeqNo;				/* 卡内帐户序号结构 */	int					iRtn;					/* 函数返回值		*/	long				lSeqNo;					/* 临时顺序号		*/	sprintf( g_acTrcMsg, "cmsApiGenCardNewSeqNo begin " );	TRCLOG2	/* 初始化卡号顺序号文件结构 */	memset( &stCmsSeqNo, 0x00, sizeof( struct cmsseqno ) );	/* 将输入参数赋值给结构 */	strcpy ( stCmsSeqNo.cardno,		pcCardNo		);	/* 从卡内帐户序号表获取记录并锁住记录 */	pubStoVCmsseqno( &stCmsSeqNo );	EXEC SQL	DECLARE SeqNo_l_cur CURSOR FOR 				SELECT * FROM CMSSEQNO				WHERE cardno = :cmsseqno_cardno;	SQLOPENCUR(SeqNo_l_cur,"SeqNo_l_cur")	/* 打开游标错误 */	if ( SQLCODE )	{		strcpy( g_acRspCode, "CMS111" );		pubCrtRspInfo( "cmsseqno", SQLCODE );		ERRLOG		return FAILED;	}	pubInitCmsseqno();	EXEC SQL	FETCH SeqNo_l_cur INTO R_CMSSEQNO ;	/* 取游标错误 */	if ( SQLCODE && SQLCODE != SQLNOTFOUND )	{		strcpy( g_acRspCode, "CMS112" );		pubCrtRspInfo( "cmsseqno", SQLCODE );		ERRLOG	SQLCLOSECUR(SeqNo_l_cur,"SeqNo_l_cur")		return FAILED;	}	/* 记录不存在 */	else if ( SQLCODE == SQLNOTFOUND )	{		strcpy( g_acRspCode, "CMS113" );		sprintf( g_acRspMsg, "卡账户序号不存在[%s]", pcCardNo ); 		ERRLOG	SQLCLOSECUR(SeqNo_l_cur,"SeqNo_l_cur")		return FAILED;	}	SQLCLOSECUR(SeqNo_l_cur,"SeqNo_l_cur")	pubVtoSCmsseqno( &stCmsSeqNo );	/* 累加卡内帐户序号文件中帐户序号 */	lSeqNo =  atol( stCmsSeqNo.seqno );	lSeqNo ++;	/* 判断帐户序号是否超过最大序号9999 */	/* 帐户序号超出限制 */	if ( lSeqNo > MAXACCTSEQNO )	{		strcpy( g_acRspCode, "CMS106" );		pubCrtRspInfo( lSeqNo );		ERRLOG		return FAILED;	}	sprintf( cmsseqno_seqno, "%0*ld", ACCTSEQNO_LEN, lSeqNo );	strcpy( stCmsSeqNo.seqno, cmsseqno_seqno );	/* 修改卡号顺序号文件记录 */	iRtn = pubModiCmsseqno( &stCmsSeqNo);	if ( iRtn )	{		ERRLOG		return FAILED;	}	/* 为输出参数赋值 */	strcpy( pcAcctSeqNo,	cmsseqno_seqno );	sprintf( g_acTrcMsg, "cmsApiGenCardNewSeqNo end " );	TRCLOG2	return SUCCESS;}/******************************************************* **	  函数名称:cmsApiGetPwdUnlostDays **   功能描述:获取密码挂失重置允许天数 **   输入参数: **   输出参数: **   			piDays			----	允许天数 **   返回结果:int **   			0				----	成功 **   			-1				----	失败*******************************************************/int	cmsApiGetPwdUnlostDays( piDays )int						*	piDays;				/* 允许天数			*/{	int		iRtn;								/* 函数返回值		*/	int		iDays;	sprintf( g_acTrcMsg, "cmsApiGetPwdUnlostDays begin " );	TRCLOG2	/* 调用API获取公共参数表参数值 */	iRtn = pubGetBaseInfo( "DPSPASSDAY", &iDays );	if ( iRtn )	{		ERRLOG		return FAILED;	}	/* 转换参数值 */	*piDays = iDays;	sprintf( g_acTrcMsg, "cmsApiGetPwdUnlostDays end " );	TRCLOG2	return SUCCESS;}/******************************************************* **	  函数名称:cmsApiGetCanAuthDays **   功能描述:获取预授权自动解除天数 **   输入参数: **   输出参数:

⌨️ 快捷键说明

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