📄 cms001.sqc
字号:
/******************************************************************** ** 源码文件名称 : cms001.SQC ** 所属子系统 : CMS ** 当前文件版本 : 4.0.0.0 ** 作者 : Feng ** 版本创建日期 : 2004/09/21 ** 功能描述 : 主卡发卡检查子交易 ** 修改记录 : ** 修改人 修改日期 修改说明 ** Feng 2006-01-16 卡凭证信息的输出和选号发卡的检查*********************************************************************/#include "code.h"#include "attrdef.h"#include "sysdef.h"#include "pubcom.h"#include "cmscode.h"#include "cmscardinfo.h"#include "cmscardkind.h"#include "dmstellervoulib.h"#include "pubvouinfo.h"EXEC SQL INCLUDE SQLCA;int cmsOpenMainCardChkPro( PUBCOM *pstPubcom ){ /*定义局部变量*/ struct cmscardinfo stCmsCardInfo; /* 卡片信息表 */ struct cmscardkind stCmsCardKind; /* 卡片种类表 */ int iRtn; /* 函数返回值 */ char acOpenTranType[ FLAG_LEN+1 ]; /* 发卡类型 长度2 */ /* 0:无折发卡 */ /* 1:有折发卡 */ /* 2:专用卡发卡 */ char acCardAttr[ FLAG_LEN+1 ]; /* 卡属性 长度2 */ char acCardObject[ FLAG_LEN+1 ]; /* 发卡对象 长度2 */ /* 8:个人卡 */ /* 6:单位卡 */ char acCardFlg[ FLAG_LEN+1 ]; /* 卡标志 长度2 */ /* 8:主卡 */ /* 6:附卡 */ char acFlag4[ FLAG_LEN+1 ]; /* 自带卡标志长度2 */ /* 0:自带卡 */ /* 1:本行发卡 */ char acCcy[ CCY_LEN + 1 ]; /* 对应账户币种 */ char acPrdCode[ PRDCODE_LEN + 1 ]; /* 对应账户产品代码 */ char acCheckFlag[ BIT8_LEN + 1 ]; /* 检查卡片种类标志 */ char acWthMode[ WTHCODE_LEN + 1 ]; /* 支取方式 */ char acCustomId[ CUSTNO_LEN + 1 ]; /* 客户号码 */ char acCustomId1[ CUSTNO_LEN + 1 ]; /* 客户号码 */ char acAcctNo[ ACCT_LEN + 1 ]; /* 转出客户账号 */ char acVouName[ VOUNAME_LEN + 1 ]; /* 凭证名称 */ char acMarkFlg[ FLAG_LEN + 1 ]; /* 记名卡/非记名卡标志 */ strcpy( g_acRspCode, RSP_OK ); strcpy( g_acTrcMsg, "子交易: 主卡发卡检查处理开始.." ); TRCLOG4 /* 初始化 */ memset( &stCmsCardInfo, 0x00, sizeof( struct cmscardinfo ) ); memset( &stCmsCardKind, 0x00, sizeof( struct cmscardkind ) ); memset( acCheckFlag, 0x00, sizeof( acCheckFlag ) ); memset( acCardFlg, 0x00, sizeof( acCardFlg ) ); memset( acCcy, 0x00, sizeof( acCcy ) ); memset( acPrdCode, 0x00, sizeof( acPrdCode ) ); memset( acCardObject, 0x00, sizeof( acCardObject ) ); memset( acOpenTranType, 0x00, sizeof( acOpenTranType ) ); memset( acWthMode, 0x00, sizeof( acWthMode ) ); memset( acCustomId, 0x00, sizeof( acCustomId ) ); memset( acCustomId1, 0x00, sizeof( acCustomId1 ) ); memset( acAcctNo, 0x00, sizeof( acAcctNo ) ); memset( acFlag4, 0x00, sizeof( acFlag4 ) ); memset( acMarkFlg, 0x00, sizeof( acMarkFlg ) ); /* 取数据字典值 */ getstring( "CardKind", stCmsCardKind.cardkind ); getstring( "CardNo", stCmsCardInfo.cardno ); sprintf( g_acTrcMsg, "CardKind=[%s]", stCmsCardKind.cardkind ); TRCLOG3 sprintf( g_acTrcMsg, "CardNo=[%s]", stCmsCardInfo.cardno ); TRCLOG3 acCardFlg[ BIT1_LEN ] = MAIN_CARD; /* 获取卡片种类表 */ iRtn = pubReadCmscardkind( &stCmsCardKind ); if ( iRtn ) { if ( SQLCODE == SQLNOTFOUND ) sprintf( g_acRspMsg, "卡片种类[%s]不存在", stCmsCardKind.cardkind ); ERRLOG goto Exit; } strcpy( g_acTrcMsg, "pubReadCmscardkind finish" ); TRCLOG3 /* 获取卡片信息 */ iRtn = pubReadCmscardinfo( &stCmsCardInfo ); if ( iRtn ) { if ( SQLCODE == SQLNOTFOUND ) sprintf( g_acRspMsg, "卡号[%s]不存在", stCmsCardInfo.cardno ); ERRLOG goto Exit; } strcpy( g_acTrcMsg, "pubReadCmscardinfo finish" ); TRCLOG3 /* 检查卡片信息中卡片种类和输入的卡片种类是否一致 */ iRtn = cmsApiChkIsSameCardKind( stCmsCardKind.cardkind, \ stCmsCardInfo.cardkind ); if ( iRtn ) { ERRLOG goto Exit; } strcpy( g_acTrcMsg, "cmsApiChkIsSameCardKind finish" ); TRCLOG3 getstring( "CustomId", acCustomId1 ); getstring( "OpenTranType", acOpenTranType ); getstring( "CardObject", acCardObject ); getstring( "CardAttr", acCardAttr ); getstring( "Ccy1", acCcy ); getstring( "PrdCode1", acPrdCode ); getstring( "DrwType", acWthMode ); getstring( "CustomId1", acCustomId ); getstring( "AcctNo1", acAcctNo ); getstring( "Flag4", acFlag4 ); getstring( "CardFlg", acCardFlg ); getstring( "MarkFlg", acMarkFlg ); sprintf( g_acTrcMsg, "CustomId=[%s]", acCustomId1 ); TRCLOG3 sprintf( g_acTrcMsg, "OpenTranType=[%s]", acOpenTranType ); TRCLOG3 sprintf( g_acTrcMsg, "CardObject=[%s]", acCardObject ); TRCLOG3 sprintf( g_acTrcMsg, "Ccy1=[%s]", acCcy ); TRCLOG3 sprintf( g_acTrcMsg, "PrdCode=[%s]", acPrdCode ); TRCLOG3 sprintf( g_acTrcMsg, "WthMode1=[%s]", acWthMode ); TRCLOG3 sprintf( g_acTrcMsg, "CustomId1=[%s]", acCustomId ); TRCLOG3 sprintf( g_acTrcMsg, "AcctNo1=[%s]", acAcctNo ); TRCLOG3 sprintf( g_acTrcMsg, "Flag4=[%s]", acFlag4 ); TRCLOG3 /* 检查卡片种类(全部属性)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, LOGOPENACC, \ pstPubcom->acChannelId, acCardObject[ BIT1_LEN ], CZEROS, CZEROS, "" ); if ( iRtn ) { ERRLOG goto Exit; } strcpy( g_acTrcMsg, "cmsApiChkCardKind finish" ); TRCLOG3 /* 检查客户持卡数量是否超限并累计客户持卡数量 */ iRtn = cmsApiChkCustCardNumLimit( acCustomId1, \ &stCmsCardKind, acCardFlg[BIT1_LEN], FLAG_NORMAL ); if ( iRtn ) { ERRLOG goto Exit; } strcpy( g_acTrcMsg, "cmsApiChkCustCardNumLimit finish" ); TRCLOG3 /* 检查卡号是否为主卡 */ if ( stCmsCardKind.cardflg[ BIT1_LEN ] != ALL_CARD ) { if ( stCmsCardKind.cardflg[ BIT1_LEN ] != acCardFlg[0] ) { strcpy( g_acRspCode, "CMS1B4" ); pubCrtRspInfo( stCmsCardKind.cardkind ); ERRLOG goto Exit; } } /* 检查卡号是否为记名卡非记名卡 */ if ( stCmsCardKind.markflg[ BIT1_LEN ] != ALLREGCARD ) { if ( stCmsCardKind.markflg[ BIT1_LEN ] != stCmsCardInfo.markflg[0] ) { strcpy( g_acRspCode, "CMS1B4" ); pubCrtRspInfo( stCmsCardKind.cardkind ); ERRLOG goto Exit; } } /* 检查卡状态是否为待领卡状态 API*/ iRtn = cmsApiChkCardStatIsReadyOpen( &stCmsCardInfo ); if ( iRtn ) { ERRLOG goto Exit; } strcpy( g_acTrcMsg, "cmsApiChkCardStatIsReadyOpen finish" ); TRCLOG3 /* Feng Add in 2006-01-16 Begin */ /* 检查单张选号卡需要核对客户号码 */ if ( stCmsCardInfo.cardstat[ BIT16_LEN ] == BIT16_CHOOSE ) { /* 检查是否为同一客户 */ if ( strcmp( acCustomId1, stCmsCardInfo.custno ) ) { strcpy( g_acRspCode, "CMS1E7" ); sprintf( g_acRspMsg, "此卡为选号卡,不属于该客户" ); ERRLOG goto Exit; } } /* Feng Add in 2006-01-16 End */ /* 单位卡的检查 */ if ( acCardObject[ BIT1_LEN ] == UNITCARD ) { /* 检查卡是否为单位卡 API*/ iRtn = cmsApiChkIsUnitCard( &stCmsCardInfo ); if ( iRtn ) { ERRLOG goto Exit; } strcpy( g_acTrcMsg, "cmsApiChkIsUnitCard finish" ); TRCLOG3 /* 检查是否为同一客户 */ if ( strcmp( acCustomId1, acCustomId ) ) { strcpy( g_acRspCode, "CMS1E7" ); pubCrtRspInfo( ); ERRLOG goto Exit; } } /* 个人卡检查 */ else if ( acCardObject[ BIT1_LEN ] == PERSONALCARD ) { /* 检查卡是否为个人卡 API*/ iRtn = cmsApiChkIsPersonCard( &stCmsCardInfo ); if ( iRtn ) { ERRLOG goto Exit; } strcpy( g_acTrcMsg, "cmsApiChkIsPersonCard finish" ); TRCLOG3 /* 有折开卡检查 */ if ( acOpenTranType[ BIT1_LEN ] == HASBOOK_OPEN ) { /* 检查对应账户的产品代码和卡片种类中的是否一致 iRtn = cmsApiChkIsSamePrdCod( acPrdCode, stCmsCardKind.prdcod ); if ( iRtn ) { ERRLOG goto Exit; } strcpy( g_acTrcMsg, "cmsApiChkIsSamePrdCod finish" ); TRCLOG3 */ /* 检查账户支取方式必须为凭密码 */ if ( acWthMode[ BIT1_LEN ] != YES ) { strcpy( g_acRspCode, "CMS1B9" ); pubCrtRspInfo( ); ERRLOG goto Exit; } strcpy( g_acTrcMsg, "检查账户支取方式必须为凭密finish" ); TRCLOG3 /* 检查是否为同一客户 */ if ( strcmp( acCustomId1, acCustomId ) ) { strcpy( g_acRspCode, "CMS1C0" ); pubCrtRspInfo( ); ERRLOG goto Exit; } strcpy( g_acTrcMsg, "检查是否为同一客 finish" ); TRCLOG3 } } /* 检查币种是否为卡主帐户币种 API*/ iRtn = cmsApiChkIsSameCCY( &stCmsCardKind, acCcy ); if ( iRtn ) { ERRLOG goto Exit; } strcpy( g_acTrcMsg, "cmsApiChkIsSameCCY finish" ); TRCLOG3 /* 检查卡是否为专用卡 */ if (0) { if ( acOpenTranType[ BIT1_LEN ] == SPECIAL_OPEN ) { iRtn = cmsApiChkIsSpecialCard( &stCmsCardInfo ); if ( iRtn ) { ERRLOG goto Exit; } strcpy( g_acTrcMsg, "cmsApiChkIsSpecialCard finish" ); TRCLOG3 if ( stCmsCardInfo.cardattr[ BIT1_LEN ] == LAKECARD ) { pubInitDmstellervoulib( ); strcpy( dmstellervoulib_brc, pstPubcom->acBrc ); strcpy( dmstellervoulib_voukind, stCmsCardInfo.voukind ); dmsCalNewVouno( stCmsCardInfo.vouno, 0, dmstellervoulib_vouno ); strcpy( dmstellervoulib_precharcode, "" ); EXEC SQL SELECT * INTO R_DMSTELLERVOULIB FROM dmstellervoulib WHERE voukind = :dmstellervoulib_voukind AND precharcode = :dmstellervoulib_precharcode AND vouno = :dmstellervoulib_vouno; if ( SQLCODE && SQLCODE != SQLNOTFOUND ) { strcpy( g_acRspCode, "999996" ); /* 数据库读错误 */ pubCrtRspInfo( "dmstellervoulib",SQLCODE ); ERRLOG goto Exit; } else if ( SQLCODE == SQLNOTFOUND ) { if ( acFlag4[ BIT1_LEN ] == FLAG_BANK ) { strcpy( g_acRspCode, "CMS1D9" ); /* 卡凭证不存在,不能选择本行发卡 */ pubCrtRspInfo( ); ERRLOG goto Exit; } } else { if ( acFlag4[ BIT1_LEN ] == FLAG_SELF ) { strcpy( g_acRspCode, "CMS1E0" ); /* 卡凭证存在,不能自带卡 */ pubCrtRspInfo( ); ERRLOG goto Exit; } } } } } /* 登记账号索引表 */ iRtn = pubRegAcctNoIdx( stCmsCardInfo.cardno, STR_CMS ); if ( iRtn ) { ERRLOG goto Exit; } /* 获取凭证名称 */ pubInitPubvouinfo(); strcpy( pubvouinfo_voukind, stCmsCardInfo.voukind ); EXEC SQL SELECT vouname INTO :pubvouinfo_vouname FROM pubvouinfo WHERE voukind = :pubvouinfo_voukind; if ( SQLCODE ) { strcpy( g_acRspCode, "999996" ); /* 数据库读错误 */ pubCrtRspInfo( "pubvouinfo",SQLCODE ); ERRLOG goto Exit; } strpack( pubvouinfo_vouname ); memset( acVouName, 0x00, sizeof( acVouName ) ); if ( acOpenTranType[ BIT1_LEN ] == SPECIAL_OPEN && acFlag4[ BIT1_LEN ] == FLAG_SELF ) { ; } else { sprintf( acVouName, " 付:%s", pubvouinfo_vouname ); } /* 子交易出口 */ /* Feng Modify in 2006-01-16 Begin */ setstring( "VouKind", stCmsCardInfo.voukind ); /* 凭证种类 */ setstring( "VouNo", stCmsCardInfo.vouno ); /* 凭证号码 */ setstring( "PreCharCode", stCmsCardInfo.precharcode );/* 冠字号码 */ /* Feng Modify in 2006-01-16 End */ setstring( "VouName", acVouName ); setstring( "AcctNo1", acAcctNo ); Exit: strcpy( g_acTrcMsg, "子交易: 主卡发卡检查结束.." ); TRCLOG4 if( !strcmp( g_acRspCode, RSP_OK ) ) return SUCCESS; else return FAILED ;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -