📄 cms511.sqc
字号:
/******************************************************************** * 源码文件名称 : cms511.SQC ** 所属子系统 : CMS ** 当前文件版本 : 4.0.0.0 ** 作者 : Feng ** 版本创建日期 : 2004/09/21 ** 功能描述 : 有折卡换无折卡处理子交易 ** 修改记录 : ** 修改人 修改日期 修改日期*********************************************************************/#include "code.h"#include "attrdef.h"#include "sysdef.h"#include "pubcom.h"#include "cmscode.h"#include "cmscardinfo.h"#include "cmsacctm.h"#include "dpspassbook.h"EXEC SQL INCLUDE SQLCA;int cmsChgCardToNoBookPro( PUBCOM *pstPubcom ){ /*定义局部变量*/ struct cmscardinfo stCmsCardInfo; /* 卡片信息表 */ struct cmsacctm stCmsAcctM; /* 卡账户对照表 */ char acCardStat[ BIT21_LEN ][BIT11_LEN]; /* 卡状态检查标志 */ char acPasswd[ PASSWD_LEN+1 ]; /* 密码 */ char acPasswd1[ PASSWD_LEN+1 ]; /* 存折密码 */ char acAcctNo[ ACCT_LEN + 1 ]; /* 存折账号 */ char acSubAcct[ ACCTT_LEN + 1 ]; /* 款项代码 */ char acVouKind[ VOUKIND_LEN + 1 ]; /* 凭证种类 */ char acVouNo[ VOUNO_LEN + 1 ]; /* 凭证号码 */ char acDrwType[ WTHCODE_LEN + 1 ]; /* 支取方式 */ char acSealNo[ SEALNO_LEN + 1 ]; /* 印鉴卡号 */ char acIdType[ IDTYPE_LEN + 1 ]; /* 证件类型 */ char acIdNo[ IDNO_LEN + 1 ]; /* 证件号码 */ int iRtn; /* 函数返回值 */ int iNumx; /* 数组计数器 */ int iNumy; /* 数组计数器 */ /* 初始化 */ memset( &stCmsCardInfo, 0x00, sizeof( struct cmscardinfo ) ); memset( &stCmsAcctM, 0x00, sizeof( struct cmsacctm ) ); memset( acPasswd, 0x00, sizeof( acPasswd ) ); memset( acAcctNo, 0x00, sizeof( acAcctNo ) ); memset( acSubAcct, 0x00, sizeof( acSubAcct ) ); memset( acPasswd1, 0x00, sizeof( acPasswd1 ) ); memset( acDrwType, 0x00, sizeof( acDrwType ) ); memset( acSealNo, 0x00, sizeof( acSealNo ) ); memset( acVouNo, 0x00, sizeof( acVouNo ) ); memset( acVouKind, 0x00, sizeof( acVouKind ) ); memset( acIdNo, 0x00, sizeof( acIdNo ) ); memset( acIdType, 0x00, sizeof( acIdType ) ); strcpy( g_acTrcMsg, "子交易: 有折卡换无折卡处理开始.." ); TRCLOG4 /* 取数据字典值 */ getstring( "CardNo", stCmsCardInfo.cardno ); /* 卡检查状态数组全置未不检查 */ for ( iNumx = 0; iNumx < BIT21_LEN; iNumx ++ ) for ( iNumy = 0; iNumy < BIT11_LEN; iNumy ++ ) acCardStat[iNumx][iNumy] = CHECK_NO; /* 获取卡片信息表 */ iRtn = pubReadCmscardinfo( &stCmsCardInfo ); if ( iRtn ) { if ( SQLCODE == SQLNOTFOUND ) sprintf( g_acRspMsg, "卡号[%s]不存在", stCmsCardInfo.cardno ); ERRLOG return FAILED; } /* 从字典获取其他数据 */ getstring( "Passwd", acPasswd ); getstring( "AcctNo", acAcctNo ); getstring( "SubAcct", acSubAcct ); getstring( "Passwd1", acPasswd1 ); getstring( "IdNo", acIdNo ); getstring( "IdType", acIdType ); getstring( "SealNo", acSealNo ); getstring( "VouKind", acVouKind ); getstring( "VouNo", acVouNo ); getstring( "DrwType", acDrwType ); /* 检查卡状态是否正常 */ acCardStat[ BIT1_LEN ][ BIT1_LEN ] = CHECK_YES; acCardStat[ BIT2_LEN ][ BIT1_LEN ] = CHECK_YES; acCardStat[ BIT3_LEN ][ BIT1_LEN ] = CHECK_YES; acCardStat[ BIT5_LEN ][ BIT1_LEN ] = CHECK_YES; acCardStat[ BIT6_LEN ][ BIT1_LEN ] = CHECK_YES; acCardStat[ BIT8_LEN ][ BIT1_LEN ] = CHECK_YES; acCardStat[ BIT9_LEN ][ BIT1_LEN ] = CHECK_YES; acCardStat[ BIT13_LEN ][ BIT1_LEN ] = CHECK_YES; acCardStat[ BIT14_LEN ][ BIT1_LEN ] = CHECK_YES; iRtn = cmsApiChkCardStatIsNormal( &stCmsCardInfo, acCardStat ); if ( iRtn ) { ERRLOG return FAILED; } /* 检查卡密码 */ iRtn = cmsApiChkCardPwd( &stCmsCardInfo, acPasswd, pstPubcom->acChannelId ); if ( iRtn ) { ERRLOG return FAILED; } /* 检查卡是否为有折卡 */ iRtn = cmsApiChkCardHasBook( &stCmsCardInfo ); if ( iRtn ) { ERRLOG return FAILED; } /* 检查存折账户是否为卡主帐户 */ iRtn = cmsApiChkAcctIsCardMainAcct( &stCmsCardInfo, acAcctNo, acSubAcct ); if ( iRtn ) { ERRLOG return FAILED; } /* 为修改卡片信息表做赋值准备 */ strcpy( stCmsCardInfo.chgdate, pstPubcom->acTranDate ); stCmsCardInfo.hasbankbook[ BIT1_LEN ] = NOBANKBOOK; /* 修改卡片信息标记录 */ pubInitCmscardinfo(); pubStoVCmscardinfo( &stCmsCardInfo ); EXEC SQL UPDATE CMSCARDINFO SET chgdate = :cmscardinfo_chgdate, hasbankbook = :cmscardinfo_hasbankbook WHERE cardno = :cmscardinfo_cardno; if ( SQLCODE ) { strcpy( g_acRspCode, "CMS114" ); /* 数据库更新错误 */ pubCrtRspInfo( "cmscardinfo",SQLCODE ); ERRLOG return FAILED; } /* 获取卡账户对照表并锁住记录 */ strcpy( stCmsAcctM.cardno, stCmsCardInfo.cardno ); strcpy( stCmsAcctM.acctseqno, stCmsCardInfo.acctseqno ); iRtn = pubReadCmsacctm( &stCmsAcctM ); if ( iRtn ) { if ( SQLCODE == SQLNOTFOUND ) sprintf( g_acRspMsg, "卡号[%s]帐户序号[%s]不存在", stCmsCardInfo.cardno, stCmsCardInfo.acctseqno ); ERRLOG return FAILED; } /* 为修改卡账户对照表准备数据 */ stCmsAcctM.cardbookflag[ BIT1_LEN ] = ACCOPENFLG_CARD; /* 帐户无折 */ /* 修改卡账户对照表 */ pubInitCmsacctm(); pubStoVCmsacctm( &stCmsAcctM ); EXEC SQL UPDATE CMSACCTM SET cardbookflag = :cmsacctm_cardbookflag WHERE cardno = :cmsacctm_cardno AND acctseqno = :cmsacctm_acctseqno; if ( SQLCODE ) { strcpy( g_acRspCode, "CMS114" ); /* 数据库更新错误 */ pubCrtRspInfo( "cmsacctm",SQLCODE ); ERRLOG return FAILED; } EXEC SQL DECLARE book_cur CURSOR FOR SELECT * FROM dpspassbook WHERE acctno = :cmsacctm_acctno AND subacct = :cmsacctm_subacct AND prtflg = '1'; SQLOPENCUR(book_cur,"book_cur") if ( SQLCODE ) { strcpy( g_acRspCode, "CMS114" ); sprintf( g_acRspMsg, "获取未打折明细数据库错[%d]", SQLCODE ); ERRLOG return FAILED; } pubInitDpspassbook(); EXEC SQL FETCH book_cur INTO R_DPSPASSBOOK; if ( SQLCODE && SQLCODE != SQLNOTFOUND ) { strcpy( g_acRspCode, "CMS114" ); sprintf( g_acRspMsg, "获取未打折明细数据库错[%d]", SQLCODE ); ERRLOG SQLCLOSECUR(book_cur,"book_cur") return FAILED; } else if ( !SQLCODE ) { strcpy( g_acRspCode, "CMS114" ); sprintf( g_acRspMsg, "尚有未打折明细,请做补登折[%s]", cmsacctm_acctno ); ERRLOG SQLCLOSECUR(book_cur,"book_cur") return FAILED; } SQLCLOSECUR(book_cur,"book_cur") /* 调用存款api处理卡取消存折静态文件处理 */ iRtn = dpsCardCancleBooStaOper( acAcctNo, acVouKind, acVouNo, \ acDrwType, acSealNo, acIdType, acIdNo, acPasswd1 ); if ( iRtn ) { ERRLOG return FAILED; } /* 是否写子交易流水 */ iRtn = cmsApiInsTranLog( pstPubcom, &stCmsCardInfo, &stCmsAcctM, "换卡", "有折卡换无折卡" ); if ( iRtn ) { ERRLOG return FAILED; } /* 子交易出口 */ setstring( "AcctSeqNo", stCmsCardInfo.acctseqno ); /* 账户序号 */ strcpy( g_acTrcMsg, "子交易: 有折卡换无折卡处理结束.." ); TRCLOG4 strcpy( g_acRspCode, RSP_OK ); return SUCCESS;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -