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

📄 cmslimit.sqc

📁 一整套完整的银行卡系统源代码
💻 SQC
📖 第 1 页 / 共 4 页
字号:
						if ( cFlag == FLAG_NORMAL )						{							stCmsTTotal.traninamt += dAmt;							stCmsTTotal.tranintimes ++;						}						/* 抹帐情况的处理 */						else						{							stCmsTTotal.traninamt -= dAmt;							if (stCmsTTotal.traninamt < -0.005)								stCmsTTotal.traninamt = 0.00;							stCmsTTotal.tranintimes -= 1;							if (stCmsTTotal.tranintimes < 0)								stCmsTTotal.tranintimes = 0;						}		sprintf( g_acTrcMsg, "[stCmsTTotal] withdrawamt[%lf] depositamt[%lf] conamt[%lf] tranoutamt[%lf] traninamt[%lf] withdrawtimes[%d] deposittimes[%d] contimes[%d] tranouttimes[%d] tranintimes[%d] startdate[%s] enddate[%s]",stCmsTTotal.withdrawamt, stCmsTTotal.depositamt, stCmsTTotal.conamt, stCmsTTotal.tranoutamt, stCmsTTotal.traninamt, stCmsTTotal.withdrawtimes, stCmsTTotal.deposittimes, stCmsTTotal.contimes, stCmsTTotal.tranouttimes, stCmsTTotal.tranintimes, stCmsTTotal.startdate, stCmsTTotal.enddate );		TRCLOG4						break;				}				pubStoVCmsttotal( &stCmsTTotal );				EXEC SQL UPDATE cmsttotal 						SET ( U_CMSTTOTAL ) = ( W_CMSTTOTAL ) 						WHERE CURRENT of tot1_l_cur;				/* 按游标修改错误 */			    if ( SQLCODE )				{					strcpy( g_acRspCode, "CMS114" );					pubCrtRspInfo( "cmsttotal", SQLCODE );					ERRLOG	SQLCLOSECUR(tot1_l_cur,"tot1_l_cur")	SQLCLOSECUR(KTlmt_l_cur,"KTlmt_l_cur")					return FAILED;				}			}	SQLCLOSECUR(tot1_l_cur,"tot1_l_cur")			/* 增加不存在以当前业务日期为起始日期的统计记录 */			/* 只有正常情况下进行 */			if ( iCurDateNum == 0 && cFlag == FLAG_NORMAL )			{				/* 计算当前业务日期的整形表示 */				/* 业务日期错 */				if( rdefmtdate( &lCurDate, "yyyy-mm-dd", pcTranDate ) )				{					strcpy( g_acRspCode, "CMS123" );					pubCrtRspInfo( pcTranDate );					ERRLOG	SQLCLOSECUR(KTlmt_l_cur,"KTlmt_l_cur")					return FAILED;				}				/* 准备增加新的统计数据 */				memset ( &stCmsTTotal,	0x00, sizeof( struct cmsttotal ) );				strcpy ( stCmsTTotal.cardno,		pcCardNo		);				strcpy ( stCmsTTotal.trandevtype,	caSameTranDevType	);				strcpy ( stCmsTTotal.ccy,			pcCCY			);				strcpy ( stCmsTTotal.startdate,		pcTranDate		);				stCmsTTotal.period = stCmsKTLimt.period;				/* 以当前业务日期作为周期的起始日期计算周期的结束日期, 并转换 */				lStartDate = lCurDate;				lEndDate = lStartDate + stCmsTTotal.period - 1;				/* 日期错 */				if( rfmtdate( lEndDate, "yyyy-mm-dd", stCmsTTotal.enddate ) )				{					strcpy( g_acRspCode, "CMS124" );					pubCrtRspInfo( lEndDate );					ERRLOG	SQLCLOSECUR(KTlmt_l_cur,"KTlmt_l_cur")					return FAILED;				}				/* 判断交易类型, 进行相应的累计 */				switch ( cMode )				{					/* 取款 */					case MODE_WITHDRAW:						/* 取款合计金额超过取款限额 */						if ( ( dCashLimitAmt - dAmt ) < -0.005 \								&& ( fabs( dCashLimitAmt - ZEROS ) > 0.005 ) )						{							strcpy( g_acRspCode, "CMS115" );							pubCrtRspInfo( dCashLimitAmt, dAmt );							ERRLOG	SQLCLOSECUR(KTlmt_l_cur,"KTlmt_l_cur")							return FAILED;						}						stCmsTTotal.withdrawamt = dAmt;						/* 取款次数超过限制 */						if ( iCashLimitTime - 1 < 0 && iCashLimitTime > ZEROS )						{							strcpy( g_acRspCode, "CMS119" );							pubCrtRspInfo( iCashLimitTime, 	1 );							ERRLOG	SQLCLOSECUR(KTlmt_l_cur,"KTlmt_l_cur")							return FAILED;						}						stCmsTTotal.withdrawtimes = 1;						break;					/* 存款 */					case MODE_DEPOSIT:						/* 存款合计金额超过存款限额 */						if ( ( dDepoLimitAmt - dAmt ) < -0.005 								&& ( fabs( dDepoLimitAmt - ZEROS ) > 0.005 ) )						{							strcpy( g_acRspCode, "CMS116" );							pubCrtRspInfo( dDepoLimitAmt, dAmt );							ERRLOG	SQLCLOSECUR(KTlmt_l_cur,"KTlmt_l_cur")							return FAILED;						}						stCmsTTotal.depositamt = dAmt;						/* 存款次数超过限制 */						if ( iDepoLimitTime - 1 < 0 && iDepoLimitTime > ZEROS )						{							strcpy( g_acRspCode, "CMS120" );							pubCrtRspInfo( iDepoLimitTime, 	1 );							ERRLOG	SQLCLOSECUR(KTlmt_l_cur,"KTlmt_l_cur")							return FAILED;						}						stCmsTTotal.deposittimes = 1;						break;					/* 消费 */					case MODE_CONSUME:						/* 消费合计金额超过消费限额 */						if ( ( dConLimitAmt - dAmt ) < -0.005 								&& ( fabs( dConLimitAmt - ZEROS ) > 0.005 ) )						{							strcpy( g_acRspCode, "CMS117" );							pubCrtRspInfo( dConLimitAmt, dAmt );							ERRLOG	SQLCLOSECUR(KTlmt_l_cur,"KTlmt_l_cur")							return FAILED;						}						stCmsTTotal.conamt = dAmt;						/* 消费次数超过限制 */						if ( iConLimitTime - 1 < 0 && iConLimitTime > ZEROS )						{							strcpy( g_acRspCode, "CMS121" );							pubCrtRspInfo( iConLimitTime,  1 );							ERRLOG	SQLCLOSECUR(KTlmt_l_cur,"KTlmt_l_cur")							return FAILED;						}						stCmsTTotal.contimes = 1;						break;					/* 转出 */					case MODE_TRANSFEROUT:						/* 转出合计金额超过转出限额 */						if ( ( dTranOutLimitAmt - dAmt ) < -0.005 							&& ( fabs( dTranOutLimitAmt - ZEROS ) > 0.005 ) )						{							strcpy( g_acRspCode, "CMS118" );							pubCrtRspInfo( dTranOutLimitAmt, dAmt );							ERRLOG	SQLCLOSECUR(KTlmt_l_cur,"KTlmt_l_cur")							return FAILED;						}						stCmsTTotal.tranoutamt = dAmt;						/* 转出次数超过限制 */						if ( iTranOutLimitTime -1 < 0 && iTranOutLimitTime > ZEROS )						{							strcpy( g_acRspCode, "CMS122" );							pubCrtRspInfo( iTranOutLimitTime, 1 );							ERRLOG	SQLCLOSECUR(KTlmt_l_cur,"KTlmt_l_cur")							return FAILED;						}						stCmsTTotal.tranouttimes = 1;						break;					/* 转入 */					case MODE_TRANSFERIN:						/* 正常情况的处理 */						if ( cFlag == FLAG_NORMAL )						{							stCmsTTotal.traninamt += dAmt;							stCmsTTotal.tranintimes ++;						}						/* 抹帐情况的处理 */						else						{							stCmsTTotal.traninamt -= dAmt;							if (stCmsTTotal.traninamt < -0.005)								stCmsTTotal.traninamt = 0.00;							stCmsTTotal.tranintimes -= 1;							if (stCmsTTotal.tranintimes < 0)								stCmsTTotal.tranintimes = 0;						}						break;				}				iRtn = pubInstCmsttotal( &stCmsTTotal );				/* 数据库插入错误 */				if ( iRtn )				{					ERRLOG	SQLCLOSECUR(KTlmt_l_cur,"KTlmt_l_cur")					return FAILED;				}			}		}	}	SQLCLOSECUR(KTlmt_l_cur,"KTlmt_l_cur")	/* 登记卡交易限额日志表 */	strcpy ( stCmsLimitReg.trandate,	pcTranDate		);	stCmsLimitReg.serseqno = lSerSeqNo;	strcpy ( stCmsLimitReg.cardkind,	pcCardKind		);	strcpy ( stCmsLimitReg.trandevtype,	pcTranDevType	);	/* feng modify in 2006-02-25 begin */	strcpy ( stCmsLimitReg.cdtrantype,	pcTranType	);	strcpy ( stCmsLimitReg.mid,			pcMid		);	strcpy ( stCmsLimitReg.mctmcc,		pcMctmcc	);	/* feng modify in 2006-02-25 end */	strcpy ( stCmsLimitReg.ccy,			pcCCY			);	strcpy ( stCmsLimitReg.cardno,		pcCardNo		);	stCmsLimitReg.amount = dAmt;	stCmsLimitReg.tranmode[ BIT1_LEN ] = cMode;	stCmsLimitReg.flag[ BIT1_LEN ] = NO;	if( cMode==MODE_WITHDRAW || cMode==MODE_CONSUME || cMode==MODE_TRANSFEROUT )	{		if ( cFlag == FLAG_NORMAL )			stCmsLimitReg.cdflg[ BIT1_LEN ] = CDFLAG_D ;		else			stCmsLimitReg.cdflg[ BIT1_LEN ] = CDFLAG_C;	}	else	{		if ( cFlag == FLAG_NORMAL )			stCmsLimitReg.cdflg[ BIT1_LEN ] = CDFLAG_C;		else			stCmsLimitReg.cdflg[ BIT1_LEN ] = CDFLAG_D ;	}	iRtn = pubInstCmslimitreg( &stCmsLimitReg );	if ( iRtn )	{		ERRLOG		return FAILED;	}	sprintf( g_acTrcMsg, "cmsApiChkCardKindTranLimitAmt end " );	TRCLOG2	strcpy( g_acRspCode, "000000" );	return SUCCESS;}/******************************************************* **	  函数名称:cmsApiCardTranLimitAmtReverse **   中文名称:检查卡片种类和卡片的交易限额并冲销统计 **   功能描述:根据输入参数检查不同交易类型,卡片种类交易限额, **   			并冲销统计 **   输入参数: **   			pstPubcom				公共结构 **				lSerSeqNo				被冲销交易流水号 **   			cCDFlag					交易类型 **   									'C':贷方 **   									'D':借方 **   			pcCardNo				卡号 **   			dAmt					交易金额 **   			pcCCY					币种 **   输出参数: **   返回结果:int **   			0				----	成功 **   			-1				----	失败*******************************************************/int	cmsApiCardTranLimitAmtReverse( pstPubcom, lSerSeqNo, cCDFlag, pcCardNo, dAmt, pcCCY )PUBCOM						*	pstPubcom;long							lSerSeqNo;		/* 被冲销交易流水号	*/char							cCDFlag;		/* 交易类型			*/char                        *   pcCardNo;		/* 卡号				*/double                      	dAmt;			/* 交易金额			*/char                        *   pcCCY;			/* 币种				*/{	struct	cmscardinfo	stCmsCardInfo;			/* 卡片信息表		*/	struct	cmsttotal	stCmsTTotal;			/* 卡交易统计表		*/	struct	cmsktlimt	stCmsKTLimt;			/* 卡片种类交易限额	*/	struct	cmstlimt	stCmsTLimt;				/* 卡片交易限额表	*/	struct	cmslimitreg	stCmsLimitReg;			/* 卡交易限额日志表	*/	int					iRtn;					/* 函数返回值		*/	/* 下面为临时变量 */	double				dCashLimitAmt;			/* 周期取现限额		*/	double				dDepoLimitAmt;			/* 周期存款限额		*/	double				dConLimitAmt;			/* 周期消费限额		*/	double				dTranOutLimitAmt;		/* 周期转出限额		*/	int					iCashLimitTime;			/* 周期取现次数		*/	int					iDepoLimitTime;			/* 周期存款次数		*/	int					iConLimitTime;			/* 周期消费次数		*/	int					iTranOutLimitTime;		/* 周期转出次数		*/	long				lStartDate;				/* 周期起始日期		*/	long				lEndDate;				/* 周期结束日期		*/	long				lCurDate;				/* 当前业务日期		*/	int					iCurDateNum;			/* 当前日期记录数	*/	char                caSameTranDevType[3];   /* 统一业务发生地类型 */	sprintf( g_acTrcMsg, "cmsApiChkCardKindTranLimitAmt begin " );	TRCLOG2	/* 初始化卡号顺序号文件结构 */	memset( &stCmsCardInfo,	0x00, sizeof( struct cmscardinfo ) );	memset( &stCmsTTotal,	0x00, sizeof( struct cmsttotal ) );	memset( &stCmsKTLimt,	0x00, sizeof( struct cmsktlimt ) );	memset( &stCmsTLimt,	0x00, sizeof( struct cmstlimt ) );	memset( &stCmsLimitReg,	0x00, sizeof( struct cmslimitreg ) );	memset( caSameTranDevType, 0, sizeof( caSameTranDevType ));	/* 将输入参数赋值给结构 */	strcpy ( stCmsLimitReg.trandate,	pstPubcom->acTranDate	);	strcpy ( stCmsLimitReg.cardno,		pcCardNo	);	strcpy ( stCmsLimitReg.ccy,			pcCCY		);	stCmsLimitReg.serseqno = lSerSeqNo;	stCmsLimitReg.amount = dAmt;	stCmsLimitReg.cdflg[ BIT1_LEN ] = cCDFlag;	stCmsLimitReg.flag[ BIT1_LEN ] = NO;	/* 获取卡交易限额日志表 */	pubStoVCmslimitreg( &stCmsLimitReg );	EXEC SQL	DECLARE reg_cur CURSOR FOR				SELECT	* FROM CMSLIMITREG 				WHERE	trandate=:cmslimitreg_trandate				AND		serseqno=:cmslimitreg_serseqno 				AND		cdflg=:cmslimitreg_cdflg				AND		cardno=:cmslimitreg_cardno				AND		ccy=:cmslimitreg_ccy				AND		amount>=:cmslimitreg_amount-0.005				AND		amount<=:cmslimitreg_amount+0.005				AND		flag=:cmslimitreg_flag				FOR UPDATE;	SQLOPENCUR(reg_cur,"reg_cur")	if ( SQLCODE )	{		sprintf(g_acRspCode,"CMS111");		pubCrtRspInfo("cmslimitreg",SQLCODE);		ERRLOG;		return FAILED;

⌨️ 快捷键说明

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