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

📄 cms560.sqc

📁 一整套完整的银行卡系统源代码
💻 SQC
字号:
/******************************************************************** **   源码文件名称 : cms560.SQC **   所属子系统   : CMS  **   当前文件版本 : 4.0.0.0 **   作者         : guoyun **   版本创建日期 : 2004/10/25 **   功能描述     : 主卡对副卡交易限额的调整子交易 **   修改记录     : **   修改人       修改日期     修改日期*********************************************************************/#include "code.h"#include "attrdef.h"#include "sysdef.h"#include "pubcom.h"#include "cmscode.h"#include "errlog.h"#include "cmscardinfo.h"#include "cmslmtm.h"#include "cmstlimt.h"#include "cmscardkind.h"#include "cmschannel.h"#include "cmsacctm.h"EXEC SQL INCLUDE SQLCA;int cmsLmtUpdPro( PUBCOM *pstPubcom ){	/*定义局部变量*/	int		iRtn;									/* 函数返回值		*/    int     iNumx;                          		/* 数组计数器       */    int     iNumy;                          		/* 数组计数器       */	char	acCardNo[ CARDNO_LEN + 1 ];				/* 主卡卡号 		*/	char	acAcdCardNo[ CARDNO_LEN + 1 ];			/* 副卡卡号 		*/	char	acCcy[ CCY_LEN + 1 ];					/* 币种				*/	char	acTranDevType[ CHANNELID_LEN + 1 ];		/* 业务发生地类型 	*/	int		iPeriod=0;								/* 周期长度			*/	double	dCashLimitAmt=0.00;    			        /* 本周期取现限额	*/	double	dDepoLimitAmt=0.00;      			    /* 本周期存款限额	*/	double	dConLimitAmt=0.00;						/* 本周期消费限额	*/	double	dTranOutLimitAmt=0.00;       			/* 本周期转出限额	*/	int		iCashLimitTime=0;						/* 本周期取现次数	*/	int		iDepoLimitTime=0;						/* 本周期存款次数	*/	int		iConLimitTime=0;						/* 本周期消费次数	*/	int		iTranOutLimitTime=0;					/* 本周期转出次数	*/	int		iCount=0;								/* 累计次数			*/	double	dAmt=0.00;					            /* 交易限额 		*/    char    acCardStat[ BIT21_LEN ][BIT11_LEN];		/* 卡状态检查标志   */    char    acCheckFlag[ BIT8_LEN + 1 ];            /* 检查卡片种类标志 */	char	acOpFlag[ FLAG_LEN + 1 ];				/* 操作方式			*/	char	acBuf[ CONDITION_LEN + 1 ];				/* 临时存储区		*/	char	acPasswd[ PASSWD_LEN + 1 ];			/* 密码				*/	struct	cmscardinfo			stCmsCardInfo;		/* 卡片信息表		*/	struct	cmscardinfo			stCmsFCardInfo;		/* 卡片信息表		*/	struct	cmslmtm				stCmsLmtM;			/*  主卡对附卡交易限额调整登记簿		*/	struct	cmstlimt 			stCmsTLimt;			/* 卡片交易限额表	*/    struct  cmscardkind     	stCmsCardKind;      /* 卡片种类表       */    struct  cmschannel       	stCmsChannel;       /* 交易渠道表       */	struct	cmsacctm			stCmsAcctM;			/* 卡账户对照表		*/	strcpy( g_acTrcMsg, "子交易: 主卡对副卡交易限额的调整子交易开始.." );	TRCLOG4	/* 初始化 */	memset( &stCmsCardInfo,		0x00,	sizeof( struct cmscardinfo ) );	memset( &stCmsFCardInfo,	0x00,	sizeof( struct cmscardinfo ) );	memset( &stCmsLmtM,			0x00,	sizeof( struct cmslmtm ) );	memset( &stCmsTLimt,		0x00,	sizeof( struct cmstlimt ) );    memset( &stCmsCardKind,     0x00,   sizeof( struct cmscardkind ) );    memset( &stCmsChannel,      0x00,   sizeof( struct cmschannel ) );	memset( &stCmsAcctM,		0x00,	sizeof( struct cmsacctm ) );	memset( acCardNo,			0x00,	sizeof( acCardNo ) );	memset( acAcdCardNo,		0x00,	sizeof( acAcdCardNo ) );	memset( acCcy,				0x00,	sizeof( acCcy ) );	memset( acTranDevType,		0x00,	sizeof( acTranDevType ) );	memset( acCardStat,			0x00,	sizeof( acCardStat ) );    memset( acCheckFlag,        0x00,   sizeof( acCheckFlag ) );    memset( acOpFlag,        	0x00,   sizeof( acOpFlag ) );	memset( acPasswd,			0x00,	sizeof( acPasswd ) );	/* 取数据字典值 */	getstring("CardNo",acAcdCardNo);	getstring("CardNo1",acCardNo);	getstring("Ccy1",acCcy);	getstring("TranDevType",acTranDevType);	getstring("MFlag",acOpFlag);	getdouble("Amt1",&dCashLimitAmt); 	getdouble("Amt2",&dDepoLimitAmt);    	getdouble("Amt3",&dConLimitAmt);		getdouble("Amt4",&dTranOutLimitAmt);	getdouble("Amt5",&dAmt);		getint("Times1",&iCashLimitTime);			getint("Times2",&iDepoLimitTime);		getint("Times3",&iConLimitTime);	getint("Times4",&iTranOutLimitTime);	getint("Period",&iPeriod);	getstring( "Passwd",	acPasswd				);	    sprintf( g_acTrcMsg,"CardNo[%s]CardNo1[%s]Ccy1[%s]TranDevType[%s]Amt1[%lf]Amt2[%lf]Amt3[%lf]Amt4[%lf]Amt5[%lf]",acAcdCardNo,acCardNo,acCcy,acTranDevType,dCashLimitAmt,dDepoLimitAmt,dConLimitAmt,dTranOutLimitAmt,dAmt);    TRCLOG3    sprintf( g_acTrcMsg,"Times1[%d]Times2[%d]Times3[%d]Times4[%d]Period[%d]MFlag[%s],channelid[%s]",iCashLimitTime,iDepoLimitTime,iConLimitTime,iTranOutLimitTime,iPeriod,acOpFlag,pstPubcom->acChannelId);    TRCLOG3/* gy test */	strcpy(pstPubcom->acChannelId,"12");/* gy test */	/* 获取主卡卡片信息 */	strcpy( stCmsCardInfo.cardno, acCardNo);	iRtn = pubReadCmscardinfo( &stCmsCardInfo );	if ( SQLCODE != 0 && SQLCODE != SQLNOTFOUND )	{		ERRLOG		return FAILED;	}	else if (SQLCODE == SQLNOTFOUND )	{        strcpy( g_acRspCode, "CMS113" );		sprintf( g_acRspMsg, "主卡号[%s]不存在", acCardNo );        ERRLOG        return FAILED;	}    /* 卡检查状态数组中第一维中的第一个字符全置为'1',则检查卡片状态是否正常 */    for ( iNumx = 0; iNumx < BIT21_LEN; iNumx ++ )        for ( iNumy = 0; iNumy < BIT11_LEN; iNumy ++ )        {            if ( iNumy == 0 )                acCardStat[iNumx][iNumy] = CHECK_YES;            else                acCardStat[iNumx][iNumy] = CHECK_NO;        }    acCardStat[BIT15_LEN][BIT2_LEN] = CHECK_YES;    /* 检查主卡卡状态是否正常 */    iRtn = cmsApiChkCardStatIsNormal( &stCmsCardInfo, acCardStat );    if ( iRtn )    {        ERRLOG        return FAILED;    }	/* 检查卡密码 */	sprintf( g_acTrcMsg, "Pwd[%s]Up[%s]", stCmsCardInfo.passwd, acPasswd );	TRCLOG2	iRtn = cmsApiChkCardPwd( &stCmsCardInfo, acPasswd, pstPubcom->acChannelId );	if ( iRtn )	{		ERRLOG		return FAILED;	}	/* 获取附卡卡片信息 */	strcpy( stCmsFCardInfo.cardno, acAcdCardNo);	iRtn = pubReadCmscardinfo( &stCmsFCardInfo );	if ( SQLCODE != 0 && SQLCODE != SQLNOTFOUND )	{		ERRLOG		return FAILED;	}	else if (SQLCODE == SQLNOTFOUND )	{        strcpy( g_acRspCode, "CMS113" );		sprintf( g_acRspMsg, "附卡号[%s]不存在", acAcdCardNo );        ERRLOG        return FAILED;	}    /* 检查附卡卡状态是否正常 */    iRtn = cmsApiChkCardStatIsNormal( &stCmsFCardInfo, acCardStat );    if ( iRtn )    {        ERRLOG        return FAILED;    }    /* 获取卡片种类表 */    iRtn = cmsApiGetCmsCardKind( stCmsCardInfo.cardkind, &stCmsCardKind );    if ( iRtn )    {        ERRLOG        return FAILED;    }    /* 检查卡片种类(全部属性)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, LOGOTHER, pstPubcom->acChannelId, PERSONALCARD, REGNAMECARD, CZEROS, "" );    if ( iRtn )    {        ERRLOG        return FAILED;    }    /*检查是否为附卡*/    if( cmsApiChkCardNoIsAcce( &stCmsFCardInfo ) )    {        ERRLOG        return FAILED;    }    /*检查主附卡关系 */    if( cmsApiChkMainAndAcceCardRelation( stCmsCardInfo.cardno, &stCmsFCardInfo ) )    {        ERRLOG        return FAILED;    }	/* 修改附卡卡片的交易限额 */	stCmsFCardInfo.acdlmt = dAmt;	stCmsFCardInfo.acduseamt = 0.00;    strcpy( stCmsFCardInfo.chgdate, pstPubcom->acTranDate );    iRtn = pubModiCmscardinfo( &stCmsFCardInfo );    if ( iRtn )    {        ERRLOG        return FAILED;    }	if (acOpFlag[0] == UPDATEMODE)					/* 修改模式 */	{		strcpy( stCmsTLimt.cardno,	acAcdCardNo );		strcpy( stCmsTLimt.ccy,	acCcy );		stCmsTLimt.period = iPeriod;		/* 修改附卡卡片的卡片交易限额 */		if (strcmp(acTranDevType, ALLCHANNEL))		{			strcpy( stCmsTLimt.trandevtype,	acTranDevType );			if ( pubReadCmstlimt( &stCmsTLimt ) )			{				ERRLOG				return FAILED;			}			stCmsTLimt.cashlimitamt = dCashLimitAmt;			stCmsTLimt.depolimitamt = dDepoLimitAmt;			stCmsTLimt.conlimitamt = dConLimitAmt;			stCmsTLimt.tranoutlimitamt = dTranOutLimitAmt;			stCmsTLimt.cashlimittime = iCashLimitTime;			stCmsTLimt.depolimittime = iDepoLimitTime;			stCmsTLimt.conlimittime = iConLimitTime;			stCmsTLimt.tranoutlimittime = iTranOutLimitTime;    		iRtn = pubModiCmstlimt( &stCmsTLimt );    		if ( iRtn )    		{        		ERRLOG        		return FAILED;    		}		}		else if (!strcmp(acTranDevType, ALLCHANNEL))		{    		/* 获取卡片交易限额表记录 */    		pubStoVCmstlimt( &stCmsTLimt );		    EXEC SQL DECLARE tlimt_l_cur CURSOR FOR              SELECT * FROM CMSTLIMT               WHERE cardno = :cmstlimt_cardno			     AND ccy    = :cmstlimt_ccy				 AND period = :cmstlimt_period               	 FOR UPDATE;    		/* 定义游标错误 */    		if ( SQLCODE )    		{        		strcpy( g_acRspCode, "CMS110" );        		pubCrtRspInfo( "cmstlimt", SQLCODE );        		ERRLOG        		return FAILED;    		}	SQLOPENCUR(tlimt_l_cur,"tlimt_l_cur")    		/* 打开游标错误 */    		if ( SQLCODE )    		{        		strcpy( g_acRspCode, "CMS111" );        		pubCrtRspInfo( "cmstlimt", SQLCODE );        		ERRLOG        		return FAILED;    		}			while ( 1 )			{    			pubInitCmstlimt();    			EXEC SQL    FETCH tlimt_l_cur INTO R_CMSTLIMT;    			/* 取游标错误 */    			if ( SQLCODE && SQLCODE != SQLNOTFOUND )    			{        			strcpy( g_acRspCode, "CMS112" );        			pubCrtRspInfo( "cmstlimt", SQLCODE );        			ERRLOG	SQLCLOSECUR(tlimt_l_cur,"tlimt_l_cur")        			return FAILED;    			}    			/* 记录不存在 */    			else if ( SQLCODE == SQLNOTFOUND )    			{	SQLCLOSECUR(tlimt_l_cur,"tlimt_l_cur")					break;    			}    			pubVtoSCmstlimt( &stCmsTLimt );				stCmsTLimt.cashlimitamt = dCashLimitAmt;				stCmsTLimt.depolimitamt = dDepoLimitAmt;				stCmsTLimt.conlimitamt = dConLimitAmt;				stCmsTLimt.tranoutlimitamt = dTranOutLimitAmt;				stCmsTLimt.cashlimittime = iCashLimitTime;				stCmsTLimt.depolimittime = iDepoLimitTime;				stCmsTLimt.conlimittime = iConLimitTime;				stCmsTLimt.tranoutlimittime = iTranOutLimitTime;    			pubStoVCmstlimt( &stCmsTLimt );			    EXEC SQL    UPDATE CMSTLIMT                			SET     ( U_CMSTLIMT ) = ( W_CMSTLIMT )                			WHERE   CURRENT OF tlimt_l_cur;    			if ( SQLCODE )    			{        			strcpy( g_acRspCode, "CMS114" );        			/* 数据库更新错误 */        			pubCrtRspInfo( "cmstlimt",SQLCODE );        			ERRLOG	SQLCLOSECUR(tlimt_l_cur,"tlimt_l_cur")        			return FAILED;    			}			}		}	}	if (acOpFlag[0] == ADDMODE)					/* 增加模式 */	{		strcpy( stCmsTLimt.cardno,	acAcdCardNo );		strcpy( stCmsTLimt.ccy,	acCcy );		stCmsTLimt.period = iPeriod;		stCmsTLimt.cashlimitamt = dCashLimitAmt;		stCmsTLimt.depolimitamt = dDepoLimitAmt;		stCmsTLimt.conlimitamt = dConLimitAmt;		stCmsTLimt.tranoutlimitamt = dTranOutLimitAmt;		stCmsTLimt.cashlimittime = iCashLimitTime;		stCmsTLimt.depolimittime = iDepoLimitTime;		stCmsTLimt.conlimittime = iConLimitTime;		stCmsTLimt.tranoutlimittime = iTranOutLimitTime;		/* 增加附卡卡片的卡片交易限额 */		if (strcmp(acTranDevType, ALLCHANNEL))		{			strcpy( stCmsTLimt.trandevtype,	acTranDevType );    		iRtn = pubInstCmstlimt( &stCmsTLimt );    		if ( iRtn )    		{        		ERRLOG        		return FAILED;    		}		}		else if (!strcmp(acTranDevType, ALLCHANNEL))		{    		/* 获取交易渠道表记录 */    		pubStoVCmschannel( &stCmsChannel );		    EXEC SQL DECLARE channel_l_cur CURSOR FOR              SELECT * FROM CMSCHANNEL;    		/* 定义游标错误 */    		if ( SQLCODE )    		{        		strcpy( g_acRspCode, "CMS110" );        		pubCrtRspInfo( "cmschannel", SQLCODE );        		ERRLOG        		return FAILED;    		}	SQLOPENCUR(channel_l_cur,"channel_l_cur")    		/* 打开游标错误 */    		if ( SQLCODE )    		{        		strcpy( g_acRspCode, "CMS111" );        		pubCrtRspInfo( "cmschannel", SQLCODE );        		ERRLOG        		return FAILED;    		}			while ( 1 )			{    			pubInitCmschannel();    			EXEC SQL    FETCH channel_l_cur INTO R_CMSCHANNEL;    			/* 取游标错误 */    			if ( SQLCODE && SQLCODE != SQLNOTFOUND )    			{        			strcpy( g_acRspCode, "CMS112" );        			pubCrtRspInfo( "cmschannel", SQLCODE );        			ERRLOG	SQLCLOSECUR(channel_l_cur,"channel_l_cur")        			return FAILED;    			}    			/* 记录不存在 */    			else if ( SQLCODE == SQLNOTFOUND )    			{	SQLCLOSECUR(channel_l_cur,"channel_l_cur")					break;    			}    			pubVtoSCmschannel( &stCmsChannel );				strcpy( stCmsTLimt.trandevtype,	stCmsChannel.trandevtype );    			iRtn = pubInstCmstlimt( &stCmsTLimt );    			if ( iRtn )    			{	SQLCLOSECUR(channel_l_cur,"channel_l_cur")        			ERRLOG        			return FAILED;    			}				iCount ++;			}			if (iCount == 0)			{		        strcpy( g_acRspCode, "CMS113" );        		pubCrtRspInfo( "cmschannel", SQLCODE );        		ERRLOG        		return FAILED;			}		}	}	/*登记主卡对副卡交易限额调整登记簿*/	strcpy( stCmsLmtM.cardno,	acCardNo );	strcpy( stCmsLmtM.trandate,	pstPubcom->acTranDate );	stCmsLmtM.serseqno = pstPubcom->lSerSeqNo;	sprintf( stCmsLmtM.vouchno,	"%08s%08ld",pstPubcom->acTranDate8,pstPubcom->lSerSeqNo );	strcpy( stCmsLmtM.acdcardno,	acAcdCardNo );	strcpy( stCmsLmtM.issuebrc,	stCmsFCardInfo.issuebrc );	strcpy( stCmsLmtM.teller,	stCmsFCardInfo.teller );	strcpy( stCmsLmtM.cardkind,	stCmsFCardInfo.cardkind );	strcpy( stCmsLmtM.lmtbrc,	pstPubcom->acBrc );	strcpy( stCmsLmtM.lmtteller,	pstPubcom->acTeller );	strcpy( stCmsLmtM.lmtauthteller,	pstPubcom->acAteller );	strcpy( stCmsLmtM.trandevtype,	acTranDevType );	strcpy( stCmsLmtM.ccy,	acCcy );	stCmsLmtM.period = iPeriod;	stCmsLmtM.cashlimitamt = dCashLimitAmt;	stCmsLmtM.depolimitamt = dDepoLimitAmt;	stCmsLmtM.conlimitamt = dConLimitAmt;	stCmsLmtM.tranoutlimitamt = dTranOutLimitAmt;	stCmsLmtM.cashlimittime = iCashLimitTime;	stCmsLmtM.depolimittime = iDepoLimitTime;	stCmsLmtM.conlimittime = iConLimitTime;	stCmsLmtM.tranoutlimittime = iTranOutLimitTime;	stCmsLmtM.lmtamt = dAmt;    iRtn = pubInstCmslmtm( &stCmsLmtM );    if ( iRtn )    {        ERRLOG        return FAILED;    }	/* 记子交易流水 */	iRtn = cmsApiInsTranLog( pstPubcom, &stCmsCardInfo, &stCmsAcctM, "调整", "主卡对副卡交易限额的调整" );	if ( iRtn )	{		ERRLOG		return FAILED;	}	/* 子交易出口 */ 		strcpy( g_acTrcMsg, "子交易: 主卡对副卡交易限额的调整子交易结束.." );	TRCLOG4	strcpy( g_acRspCode,  RSP_OK );	return SUCCESS;}

⌨️ 快捷键说明

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