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

📄 cmsinteg.sqc

📁 一整套完整的银行卡系统源代码
💻 SQC
字号:
/******************************************************* **   源码文件名称 : cmsintegral.SQC **   所属子系统   : 卡管理 **   功能描述     : 对卡积分的处理 **   当前文件版本 : 4.0.0.0 **   作        者 : Feng  **   版本创建日期 : 2006/02/24 **   修改记录     : **   修改人       修改日期     修改位置*******************************************************/#include "sysdefine.h"#include "code.h"#include "attrdef.h"#include "pubcom.h"#include "cmscode.h"#include "errlog.h"#include "revglob.h"#include "cmscardinfo.h"#include "cmsintegralcfg.h"#include "cmsintegrallmt.h"#include "cmsintegralmid.h"#include "cmsaccumresult.h"EXEC SQL	INCLUDE SQLCA;/******************************************************* **	  函数名称:cmsApiAccumTotal **   中文名称:按交易类型对卡的不同积分标准进行累计处理 **   功能描述:根据输入参数检查不同交易类型,交易渠道, **   			并进行统计 **   输入参数: **             pstPubcom		----	公共结构 **   			pcCardNo		----	卡号 **   			dAmt			----	交易金额 **   			pcCCY			----	币种 **             pcCdTranType	----	卡种交易类型 **										见数据库文档 **   			pcMid			----	商户代码 **   			pcMctmcc		----	商户类型 **   			pcIssueBrc		----	发卡机构 **   			pcCustomId		----	客户号 **   			cFlag			----	交易标志 **   									'0':正常交易 **   									'1':抹帐交易 **   输出参数: **   返回结果:int **   			0				----	成功 **   			-1				----	失败*******************************************************/int	cmsApiAccumTotal( pstPubcom, pcCardNo, dAmt, pcCCY, pcCdTranType, \						pcMid, pcMctmcc, pcIssueBrc, pcCustomId, cFlag )PUBCOM			*   pstPubcom;char			*   pcCardNo;		/* 卡号				*/double				dAmt;			/* 交易金额			*/char			*   pcCCY;			/* 币种				*/char			*   pcCdTranType;	/* 卡种交易类型		*/char			*	pcMid;			/* 商户代码 		*/char			*	pcMctmcc;		/* 商户类型 		*/char			*	pcIssueBrc;		/* 发卡机构			*/char			*	pcCustomId;		/* 客户号			*/char				cFlag;			/* 交易标志			*/{	int					iRtn;					/* 函数返回值		*/	struct cmsintegralcfg		stCmsAccCfg;	/* 积分配置表		*/	struct cmsintegrallmt		stCmsAccLmt;	/* 渠道交易配置表	*/	struct cmsintegralmid		stCmsAccMid;	/* 积分商户配置表	*/	struct cmsaccumresult		stCmsAccRst;	/* 积分结果表		*/	char				acYear[ 4 + 1 ];	char				acMonth[ 2 + 1 ];	char				acDay[ 2 + 1 ];	char				acBegMonth[ 2 + 1 ];	char				acBegDay[ 2 + 1 ];	char				acEndMonth[ 2 + 1 ];	char				acEndDay[ 2 + 1 ];	sprintf( g_acTrcMsg, "cmsApiChkCardKindTranLimitAmt begin " );	TRCLOG2	/* 初始化结构 */	memset( &stCmsAccLmt,	0x00,	sizeof( struct cmsintegrallmt ) );	memset( &stCmsAccMid,	0x00,	sizeof( struct cmsintegralmid ) );	memset( &stCmsAccRst,	0x00,	sizeof( struct cmsaccumresult ) );	memset( &acYear,		0x00,	sizeof( acYear ) );	memset( &acMonth,		0x00,	sizeof( acMonth ) );	memset( &acDay,			0x00,	sizeof( acDay ) );	memset( &acBegMonth,	0x00,	sizeof( acBegMonth ) );	memset( &acBegDay,		0x00,	sizeof( acBegDay ) );	memset( &acEndMonth,	0x00,	sizeof( acEndMonth ) );	memset( &acEndDay,		0x00,	sizeof( acEndDay ) );	strncpy( acYear,	pstPubcom->acTranDate8,		4 ); acYear[ 4 ] ='\0';	strncpy( acMonth,	pstPubcom->acTranDate8+4,	2 ); acMonth[ 2 ] ='\0';	strncpy( acDay,		pstPubcom->acTranDate8+6,	2 ); acDay[ 2 ] ='\0';	/* 将输入参数赋值给结构 */	strcpy ( stCmsAccLmt.cdtrantype,	pcCdTranType			);	strcpy ( stCmsAccLmt.bussplace,		pstPubcom->acChannelId	);	strcpy ( stCmsAccLmt.ccy,			pcCCY					);	/* 从积分计算的渠道交易配置表获取记录 */	pubStoVCmsintegrallmt( &stCmsAccLmt );	EXEC SQL	DECLARE lmt_cur CURSOR FOR				SELECT	*				FROM	cmsintegrallmt				WHERE	cdtrantype = :cmsintegrallmt_cdtrantype				AND		bussplace = :cmsintegrallmt_bussplace				AND		ccy = :cmsintegrallmt_ccy				ORDER BY accummode;	SQLOPENCUR( lmt_cur,"lmt_cur")	/* 打开游标错 */	if ( SQLCODE )	{		strcpy( g_acRspCode, "CMS111" );		pubCrtRspInfo( "cmsintegrallmt", SQLCODE );		ERRLOG		goto Exit;	}	while ( 1 )	{		/* 获取积分计算的渠道交易配置表的每一种标准 */		pubInitCmsintegrallmt();		EXEC SQL	FETCH lmt_cur INTO R_CMSINTEGRALLMT;		/* 取游标错误 */		if ( SQLCODE && SQLCODE != SQLNOTFOUND )		{			strcpy( g_acRspCode, "CMS112" );			pubCrtRspInfo( "cmsintegrallmt", SQLCODE );			ERRLOG			goto Exit;		}		else if ( SQLCODE == SQLNOTFOUND )			break;		pubVtoSCmsintegrallmt( &stCmsAccLmt );		/* 获取积分配置表 */		memset( &stCmsAccCfg,	0x00, sizeof( struct cmsintegralcfg ) );		strcpy( stCmsAccCfg.accummode,	stCmsAccLmt.accummode );		if ( pubReadCmsintegralcfg( &stCmsAccCfg ) )		{			ERRLOG			goto Exit;		}		/* 如果交易日期不在指定的日期内,进行下一条记录处理 */		if ( stCmsAccCfg.accumtype[ BIT1_LEN ] == ACCUMTYPE_DATE )		{			if ( strcmp(stCmsAccCfg.accumbegdate,pstPubcom->acTranDate ) > 0				|| strcmp( stCmsAccCfg.accumenddate,pstPubcom->acTranDate) < 0 )				continue;		}		if ( !strlen( pcMid )  && !strlen( pcMctmcc ) )		{			/* 获取积分计算的商户配置表 */			memset( &stCmsAccMid,	0x00, sizeof( struct cmsintegralmid ) );			strcpy( stCmsAccMid.accummode,	stCmsAccLmt.accummode );			if ( pubReadCmsintegralmid( &stCmsAccMid ) )			{				ERRLOG				goto Exit;			}				/* 如果商户代码和商户类型都不匹配,进行下一条记录处理  */			if ( !strcmp( stCmsAccMid.mid, COMMON_MID )					&& strcmp( stCmsAccMid.mctmcc, pcMctmcc )					|| strcmp( stCmsAccMid.mid, COMMON_MID )					&& strcmp( stCmsAccMid.mid, pcMid ) )				continue;		}		/* 获取积分结果表 */		memset( &stCmsAccRst,	0x00,	sizeof( struct cmsaccumresult ) );		strcpy( stCmsAccRst.cardno,		pcCardNo );		strcpy( stCmsAccRst.accummode,	stCmsAccLmt.accummode );		strcpy( stCmsAccRst.ccy,		pcCCY );		switch ( stCmsAccCfg.accumtype[ BIT1_LEN ] )		{			case ACCUMTYPE_YEAR:				strcpy( acBegMonth,	"01" );				strcpy( acBegDay,	"01" );				strcpy( acEndMonth,	"12" );				strcpy( acEndDay,	"31" );				sprintf( stCmsAccRst.accumbegdate,							"%s-%s-%s", acYear, acBegMonth, acBegDay );				sprintf( stCmsAccRst.accumbegdate,							"%s-%s-%s", acYear, acEndMonth, acEndDay );				break;			case ACCUMTYPE_SEASON:				if ( atoi( acMonth ) >= 1 && atoi( acMonth ) <= 3 )				{					strcpy( acBegMonth,	"01" );					strcpy( acBegDay,	"01" );					strcpy( acEndMonth,	"03" );					strcpy( acEndDay,	"31" );				}				else if ( atoi( acMonth ) >= 4 && atoi( acMonth ) <= 6 )				{					strcpy( acBegMonth,	"04" );					strcpy( acBegDay,	"01" );					strcpy( acEndMonth,	"06" );					strcpy( acEndDay,	"30" );				}				else if ( atoi( acMonth ) >= 7 && atoi( acMonth ) <= 9 )				{					strcpy( acBegMonth,	"07" );					strcpy( acBegDay,	"01" );					strcpy( acEndMonth,	"09" );					strcpy( acEndDay,	"30" );				}				else				{					strcpy( acBegMonth,	"10" );					strcpy( acBegDay,	"01" );					strcpy( acEndMonth,	"12" );					strcpy( acEndDay,	"31" );				}				sprintf( stCmsAccRst.accumbegdate,							"%s-%s-%s", acYear, acBegMonth, acBegDay );				sprintf( stCmsAccRst.accumbegdate,							"%s-%s-%s", acYear, acEndMonth, acEndDay );				break;			case ACCUMTYPE_MONTH:				strcpy( acBegMonth,	acMonth );				strcpy( acEndMonth,	acMonth );				strcpy( acBegDay,	"01");				switch ( atoi( acMonth ) )				{					case 1:					case 3:					case 5:					case 7:					case 8:					case 10:					case 12:						strcpy( acEndDay, "31" );						break;					case 4:					case 6:					case 9:					case 11:						strcpy( acEndDay, "30" );						break;					case 2:						if ( ( atoi( acYear ) % 100 == 0 || atoi( acYear ) % 4 )							&& atoi( acYear ) % 100 != 0 )							strcpy( acEndDay, "29" );						else							strcpy( acEndDay, "28" );						break;				}				sprintf( stCmsAccRst.accumbegdate,							"%s-%s-%s", acYear, acBegMonth, acBegDay );				sprintf( stCmsAccRst.accumbegdate,							"%s-%s-%s", acYear, acEndMonth, acEndDay );				break;			case ACCUMTYPE_DATE:				strcpy( stCmsAccRst.accumbegdate, stCmsAccCfg.accumbegdate );				strcpy( stCmsAccRst.accumenddate, stCmsAccCfg.accumenddate );				break;			default:				strcpy( g_acRspCode,	"PUB400" );				strcpy( g_acRspMsg,		"积分配置表错误" );				ERRLOG				goto Exit;		}		pubStoVCmsaccumresult( &stCmsAccRst );		/* 获取积分结果 */		EXEC SQL	SELECT	*					INTO	R_CMSACCUMRESULT					FROM	cmsaccumresult					WHERE	cardno = :cmsaccumresult_cardno					AND		accummode = :cmsaccumresult_accummode					AND		accumbegdate = :cmsaccumresult_accumbegdate					AND		accumenddate = :cmsaccumresult_accumenddate					AND		ccy = :cmsaccumresult_ccy;		if ( SQLCODE && SQLCODE != SQLNOTFOUND )		{			strcpy( g_acRspCode, "999996" );			pubCrtRspInfo( "cmsaccumresult", SQLCODE );			ERRLOG			goto Exit;		}		else if ( SQLCODE == SQLNOTFOUND )		{			if ( cFlag == FLAG_NORMAL )			{			/* 增加新的记录 */				stCmsAccRst.accumvalue=(long)( dAmt / stCmsAccLmt.hortoveramt );				stCmsAccRst.totaccumvalue=(long)( dAmt / stCmsAccLmt.hortoveramt );				stCmsAccRst.accumflag[ BIT1_LEN ] = '0';				strcpy( stCmsAccRst.issuebrc,	pcIssueBrc	);				strcpy( stCmsAccRst.custno,		pcCustomId	);				if ( pubInstCmsaccumresult( &stCmsAccRst ) )				{					ERRLOG					goto Exit;				}			}		}		else		{			/* 修改新的记录 */			if ( cFlag == FLAG_NORMAL )			{				stCmsAccRst.accumvalue+=(long)(dAmt / stCmsAccLmt.hortoveramt);				stCmsAccRst.totaccumvalue+=(long)(dAmt/stCmsAccLmt.hortoveramt);			}			else			{				stCmsAccRst.accumvalue-=(long)(dAmt / stCmsAccLmt.hortoveramt);				stCmsAccRst.totaccumvalue-=(long)(dAmt/stCmsAccLmt.hortoveramt);			}			if ( pubModiCmsaccumresult( &stCmsAccRst ) )			{				ERRLOG				goto Exit;			}		}	}Exit:		SQLCLOSECUR( lmt_cur,"lmt_cur")	strcpy( g_acTrcMsg, "积分累计api结束 cmsApiAccumTotal " );	TRCLOG4	if( !strcmp( g_acRspCode, RSP_OK ) )		return SUCCESS;	else		return FAILED ;}

⌨️ 快捷键说明

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