📄 cmslimit.sqc
字号:
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 + -