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