📄 cmscheck.sqc
字号:
/******************************************************* ** 源码文件名称 : cmscheck.SQC ** 所属子系统 : 卡管理 ** 功能描述 : 对卡检查的处理 ** 当前文件版本 : 4.0.0.0 ** 作 者 : Feng ** 版本创建日期 : 2004/09/15 ** 修改记录 : ** 修改人 修改日期 修改位置 ** Feng 2006-01-09 修改cmsCardVerify的调用,使用函数指针 ** Feng 2006-02-25 调用cmsApiChkCardKindTranLimitAmt ** 增加入口参数pcTranType,pcMid,pcMctmcc ** Feng 2006-02-25 cmsApiChkCardNormal增加入口参数pcMctmcc *******************************************************/#include "sysdefine.h"#include "code.h"#include "attrdef.h"#include "pubcom.h"#include "cmscode.h"#include "cmsfunc.h"#include "errlog.h"#include "revglob.h"#include "cmsacctm.h"#include "cmscardinfo.h"#include "cmscardkind.h"#include "cmscardinitparam.h"#include "cmsttotal.h"#include "cmsktlimt.h"#include "cmstlimt.h"#include "cmspcdreg.h"#include "cmscuststopm.h"#include "cmscardkindlmt.h"#include "cmsckmidref.h"EXEC SQL INCLUDE SQLCA;EXEC SQL BEGIN DECLARE SECTION; long lNum; /* 帐户数目 */ char acCardNo[ CARDNO_LEN + 1 ]; /* 卡号 */ char acMASeqNo[ ACCTSEQNO_LEN + 1 ]; /* 主帐户序号 */ char acStatus[ FLAG_LEN + 1 ]; /* 帐户状态 */EXEC SQL END DECLARE SECTION;/******************************************************* ** 函数名称:cmsApiChkAcctNoIsCard ** 中文名称:根据客户账号判断是否为卡 ** 功能描述:根据客户账号判断是否为卡 ** 输入参数: ** pcAcctNo ---- 客户帐户 ** 输出参数: ** pcFlag ---- 卡标志 ** '0':非卡帐户 ** '1':主卡卡号 ** '2':有折卡卡内帐户 ** '3':无折卡卡内帐户 ** '4':附卡卡号 ** 返回结果:int ** 0 ---- 成功 ** -1 ---- 失败*******************************************************/int cmsApiChkAcctNoIsCard( pcAcctNo, pcFlag )char * pcAcctNo; /* 客户帐号 */char * pcFlag; /* 卡标志 */{ /* 定义 局部变量 */ struct cmscardinfo stCmsCardInfo; /* 卡片信息表结构 */ int iRtn; /* 函数返回值 */ sprintf( g_acTrcMsg, "cmsApiChkAcctNoIsCard begin " ); TRCLOG2 /* 初始化卡片信息表结构 */ memset( &stCmsCardInfo, 0x00, sizeof( struct cmscardinfo ) ); /* 将输入参数赋值给结构 */ strcpy ( stCmsCardInfo.acctno, pcAcctNo ); stCmsCardInfo.crdsts[ BIT1_LEN ] = CARDOKSTS; sprintf( g_acTrcMsg, "cardno[%s]", stCmsCardInfo.acctno ); TRCLOG1 /* 从卡片信息表获取记录 */ pubStoVCmscardinfo( &stCmsCardInfo ); EXEC SQL SELECT * INTO R_CMSCARDINFO FROM cmscardinfo WHERE cardno = :cmscardinfo_acctno AND crdsts in ( '1', '3', '4' ); /* 数据库出错 */ if ( SQLCODE && SQLCODE != SQLNOTFOUND ) { strcpy( g_acRspCode, "999996" ); pubCrtRspInfo( "cmscardinfo", SQLCODE ); ERRLOG return FAILED; } /* 表中存在记录 */ else if ( !SQLCODE ) { /* 帐号为卡号 */ if ( cmscardinfo_cardflg[ BIT1_LEN ] == MAIN_CARD ) /* 主卡 */ *pcFlag = FLAG_CARD; else /* 附卡 */ *pcFlag = FLAG_ACCECARD; sprintf( g_acTrcMsg, "pcFlag[%s]", pcFlag ); TRCLOG1 } /* 表中没有记录,表示帐号不是卡号 */ else { /* 将输入参数赋值给结构 */ memset( &stCmsCardInfo, 0x00, sizeof( struct cmscardinfo ) ); strcpy ( stCmsCardInfo.acctno, pcAcctNo ); stCmsCardInfo.crdsts[ BIT1_LEN ] = CARDOKSTS; /* 状态为正常 */ stCmsCardInfo.cardflg[ BIT1_LEN ] = MAIN_CARD; /* 主卡 */ pubStoVCmscardinfo( &stCmsCardInfo ); EXEC SQL SELECT * INTO R_CMSCARDINFO FROM cmscardinfo WHERE acctno = :cmscardinfo_acctno AND cardflg = :cmscardinfo_cardflg AND crdsts in ( '1','3','4' ); /* 数据库出错 */ if ( SQLCODE && SQLCODE != SQLNOTFOUND ) { strcpy( g_acRspCode, "999996" ); pubCrtRspInfo( "cmscardinfo", SQLCODE ); ERRLOG return FAILED; } /* 表中没有记录,表示帐号不是卡内帐号 */ else if ( SQLCODE == SQLNOTFOUND ) { /* 帐号为非卡帐户 */ *pcFlag = FLAG_NONE; sprintf( g_acTrcMsg, "pcFlag[%s]", pcFlag ); TRCLOG1 } /* 表中存在记录 */ else { if ( cmscardinfo_hasbankbook[ BIT1_LEN ] == BANKBOOK ) { /* 帐号为有折卡卡内帐户 */ *pcFlag = FLAG_ACCTINBOOKCARD; sprintf( g_acTrcMsg, "pcFlag[%s]", pcFlag ); TRCLOG1 } else { /* 帐号为无折卡卡内帐户 */ *pcFlag = FLAG_ACCTINNOBOOKCARD; sprintf( g_acTrcMsg, "pcFlag[%s]", pcFlag ); TRCLOG1 } } } sprintf( g_acTrcMsg, "pcFlag[%s]", pcFlag ); TRCLOG1 sprintf( g_acTrcMsg, "cmsApiChkAcctNoIsCard end " ); TRCLOG2 return SUCCESS;}/******************************************************* ** 函数名称:cmsApiChkCardKind ** 中文名称:检查卡片种类(全部属性) ** 功能描述:根据卡片种类得到卡片种类信息,检查卡片种类信息中属性 ** 输入参数: ** pstCmsCardKind ---- 卡片种类表 ** pcCheckFlag ---- 检查标志 ** 0:不检查 1:检查 ** 第一位:启用标志 ** 第二位:卡种交易类型和业务发生地 ** 第三位:不使用 ** 第四位:发卡对象 ** 第五位:记名卡标志 ** 第六位:挂失标志 ** 第七位:商户 ** "1111111"表示都检查,不检查的位置'0' ** pcCdTranType ---- 卡种交易类型 ** "001":本行借记卡开主帐户 ** "002":本行借记卡正常销户 ** "003":本行借记卡存款 ** "004":本行借记卡取款 ** "005":本行借记卡转本行借记卡 ** "006":本行借记卡消费 ** "007":本行借记卡退货 ** "008":圈存 ** "009":圈提 ** "010":本行借记卡贷款发放 ** "011":本行借记卡贷款还款 ** "012":中间业务 ** "013":本行借记卡预授权 ** "014":本行借记卡预授权完成 ** "015":本行借记卡修改密码 ** "016":本行借记卡查询 ** "017":撤消 ** "018":冲正 ** "019":撤消冲正 ** "020":本行借记卡存款确认 ** "021":本行借记卡挂失 ** "022":本行贷记卡预借现金 ** "023":本行借记卡转银联卡 ** "024":银联卡转本行借记卡 ** "025":本行借记卡开多帐户 ** "026":本行借记卡保号换卡 ** "027":本行借记卡申请副卡 ** "028":本行借记卡挂失销户 ** "029":本行借记卡转本行贷记卡 ** "030":本行贷记卡转本行借记卡 ** "031":本行贷记卡转本行贷记卡 ** "032":银联卡转银联卡 ** "033":本行借记卡自助缴费 ** "034":本行贷记卡存款 ** "035":本行贷记卡消费 ** "036":银联卡存款 ** "037":银联卡取款 ** "038":本行贷记卡预授权 ** "039":本行贷记卡预授权完成 ** "040":本行贷记卡修改密码 ** "041":本行贷记卡查询 ** "042":本行贷记卡存款确认 ** "043":本行贷记卡挂失 ** "097":转出(中间业务代收业务赋此项) ** "098":转入(中间业务代付业务赋此项) ** "099":其他(中间业务和外围做其他业务时赋此项) ** pcBussPlace ---- 业务发生地 ** "01":银联中心atm ** "02":银联中心cdm ** "03":银联中心pos ** "04":银联中心crs存取款一体机 ** "05":银联中心自助查询终端 ** "06":银联中心柜台 ** "07":银联中心网上银行 ** "08":银联中心手机银行 ** "09":银联中心电话银行 ** "10":银联中心圈存圈提设备 ** "11":银联中心移动pos ** "12":本行柜台 ** "13":本行atm ** "14":本行pos ** "15":本行cdm ** "16":本行电话银行 ** "17":本行网上银行 ** "18":本行手机银行 ** "19":本行自助查询终端 ** "20":本行呼叫中心 ** "21":本行crs存取款一体机 ** "22":银联商务pos ** "23":建行atm ** "24":建行pos设备 ** "25":华夏银行atm ** "26":港澳通atm ** "27":港澳通pos ** "28":支付系统 ** "29":本行柜面通 ** "30":国际结算 ** "31":银联数据(贷记卡) ** "97":中间业务前台 ** "98":中间业务第三方 ** "99":其他 ** cCardObject ---- 发卡对象 ** 8:个人卡 ** 6:单位卡 ** cMarkFlg ---- 记名卡标志 ** '0':非记名卡 ** '1':记名卡 ** cLostMark ---- 挂失标志 ** '0':挂失 ** '1':不挂失 ** pcMid ---- 商户编码 ** 输出参数:无 ** 返回结果:int ** 0 ---- 成功 ** -1 ---- 失败*******************************************************/int cmsApiChkCardKind( pstCmsCardKind, pcCheckFlag, pcCdTranType, \ pcBussPlace, cCardObject, cMarkFlg, cLostMark, pcMid )struct cmscardkind * pstCmsCardKind; /* 卡片种类表 */char * pcCheckFlag; /* 检查标志 */char * pcCdTranType; /* 卡种交易类型 */char * pcBussPlace; /* 业务发生地 */char cCardObject; /* 发卡对象 */char cMarkFlg; /* 记名卡标志 */char cLostMark; /* 挂失标志 */char * pcMid; /* 商户代码 */{ /* 定义 局部变量 */ int iRtn; /* 函数返回值 */ int iNum; /* 循环变量 */ int iBitNum; /* 数组下标变量 */ sprintf( g_acTrcMsg, "cmsApiChkCardKind begin " ); TRCLOG2 sprintf( g_acTrcMsg, "CardKind[%s]", pstCmsCardKind->cardkind ); TRCLOG2 sprintf( g_acTrcMsg, "CheckFlag[%s]", pcCheckFlag ); TRCLOG2 sprintf( g_acTrcMsg, "TranType[%s]", pcCdTranType ); TRCLOG2 sprintf( g_acTrcMsg, "BussPlace[%s]", pcBussPlace ); TRCLOG2 sprintf( g_acTrcMsg, "Object[%c]", cCardObject ); TRCLOG2 sprintf( g_acTrcMsg, "Mark[%c]", cMarkFlg ); TRCLOG2 sprintf( g_acTrcMsg, "Lost[%c]", cLostMark ); TRCLOG2 sprintf( g_acTrcMsg, "Mid[%s]", pcMid ); TRCLOG2 /* 循环处理检查标志 */ for ( iNum = 0; iNum < strlen( pcCheckFlag ); iNum ++ ) { /* 如果检查标志为不检查 */ if ( pcCheckFlag[ iNum ] == CHECK_NO ) continue; /* 逐项进行每一种检查 */ switch ( iNum ) { case BIT1_LEN: /* 检查启用标志 */ /* 卡片种类未启用 */ if ( pstCmsCardKind->enableflg[ BIT1_LEN ] == UNABLE_USE ) { strcpy( g_acRspCode, "CMS125" ); pubCrtRspInfo( pstCmsCardKind->cardkind ); ERRLOG return FAILED; } break; case BIT2_LEN: /* 检查卡种交易类型和业务发生地 */ pubInitCmscardkindlmt(); strcpy( cmscardkindlmt_cardkind, pstCmsCardKind->cardkind ); strcpy( cmscardkindlmt_cdtrantype, pcCdTranType ); strcpy( cmscardkindlmt_bussplace, pcBussPlace ); EXEC SQL SELECT * FROM cmscardkindlmt WHERE cardkind = :cmscardkindlmt_cardkind AND cdtrantype = :cmscardkindlmt_cdtrantype AND bussplace = :cmscardkindlmt_bussplace; if ( SQLCODE != SQLNOTFOUND && SQLCODE ) { strcpy( g_acRspCode, "999996" ); /* 数据库读错误 */ pubCrtRspInfo( "cmscardkindlmt",SQLCODE ); ERRLOG return FAILED; } else if ( !SQLCODE ) { /* 卡种交易类型不可做 */ strcpy( g_acRspCode, "CMS126" ); pubCrtRspInfo( pstCmsCardKind->cardkind, pcCdTranType ); ERRLOG return FAILED; } break; case BIT3_LEN: break; case BIT4_LEN: /* 检查发卡对象 */ /* 发卡对象不对 */ if ( pstCmsCardKind->cardobject[ BIT1_LEN ] != cCardObject ) { strcpy( g_acRspCode, "CMS128" ); pubCrtRspInfo( pstCmsCardKind->cardkind, cCardObject ); ERRLOG return FAILED; } break; case BIT5_LEN: /* 检查记名卡/非记名卡标志 */ /* 记名卡/非记名卡标志不对 */ if ( pstCmsCardKind->markflg[ BIT1_LEN ] != ALLREGCARD) { if ( pstCmsCardKind->markflg[ BIT1_LEN ] != cMarkFlg ) { strcpy( g_acRspCode, "CMS129" ); pubCrtRspInfo( pstCmsCardKind->cardkind, cMarkFlg ); ERRLOG return FAILED; } } break; case BIT6_LEN: /* 检查挂失标志 */ /* 挂失标志不对 */ if ( pstCmsCardKind->lostmark[ BIT1_LEN ] != cLostMark ) { strcpy( g_acRspCode, "CMS130" ); pubCrtRspInfo( pstCmsCardKind->cardkind, cLostMark ); ERRLOG return FAILED; } break; case BIT7_LEN: /* 检查卡种是否可以在商户消费 */ pubInitCmsckmidref(); strcpy( cmsckmidref_cardkind,pstCmsCardKind->cardkind); EXEC SQL SELECT mid INTO :cmsckmidref_mid FROM cmsckmidref WHERE cardkind = :cmsckmidref_cardkind; if ( SQLCODE == SQLNOTFOUND ) { break; } else if ( SQLCODE && SQLCODE != SQLMORE ) { strcpy ( g_acRspCode, "999996" ); /* 读数据库出错 */ pubCrtRspInfo( "cmsckmidref", SQLCODE ); ERRLOG return FAILED; } else { strpack( pcMid ); iRtn = cmsApiChCardKindShop( pstCmsCardKind->cardkind, pcMid ); if ( iRtn ) { ERRLOG return FAILED; } else { break; } } break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -