📄 cmsinteg.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 + -