📄 cms036.sqc
字号:
/******************************************************************** ** 源码文件名称 : cms036.SQC ** 所属子系统 : CMS ** 当前文件版本 : 1.0.0.0 ** 作者 : guoyun ** 版本创建日期 : 2004/10/28 ** 功能描述 : 记名卡补换卡启用处理子交易 ** 修改记录 : ** 修改人 修改日期 修改日期*********************************************************************/#include "code.h"#include "attrdef.h"#include "sysdef.h"#include "pubcom.h"#include <stdio.h>#include <stdlib.h>#include <math.h>#include "cmscode.h"#include "cmspcdreg.h"#include "cmscardinfo.h"#include "cmscardkind.h"#include "cmschgm.h"#include "cmsacctm.h"EXEC SQL INCLUDE SQLCA;int cmsEnableNameCardPro( PUBCOM *pstPubcom ){ /*定义局部变量*/ int iRtn; /* 函数返回值 */ int iNumx; /* 数组计数器 */ int iNumy; /* 数组计数器 */ char acCardStat[ BIT21_LEN ][BIT11_LEN]; /* 卡状态检查标志 */ char acPasswd[ PASSWD_LEN + 1]; /* 密码 */ char acPasswd1[ PASSWD_LEN + 1]; /* 新密码 */ char acCheckFlag[ BIT8_LEN + 1 ]; /* 检查卡片种类标志 */ char acChgFlag[ FLAG_LEN + 1 ]; /* 换卡标志 */ char acBuf[ CONDITION_LEN + 1 ]; /* 临时存储区 */ struct cmspcdreg stCmsPcdReg; /* 预制卡申请登记表 */ struct cmscardinfo stCmsCardInfo; /* 卡片信息表 */ struct cmscardinfo stNewCardInfo; /* 卡片信息表 */ struct cmscardkind stCmsCardKind; /* 卡片种类表 */ struct cmschgm stCmsChgM; /* 换卡登记簿 */ struct cmsacctm stCmsAcctM; /* 卡账户对照表 */ strcpy( g_acTrcMsg, "子交易: 记名卡补换卡启用处理子交易开始.." ); TRCLOG4 memset( &stCmsPcdReg, 0x00, sizeof( struct cmspcdreg ) ); memset( &stCmsCardInfo, 0x00, sizeof( struct cmscardinfo ) ); memset( &stNewCardInfo, 0x00, sizeof( struct cmscardinfo ) ); memset( &stCmsCardKind, 0x00, sizeof( struct cmscardkind ) ); memset( &stCmsChgM, 0x00, sizeof( struct cmschgm ) ); memset( &stCmsAcctM, 0x00, sizeof( struct cmsacctm ) ); memset( acCheckFlag, 0x00, sizeof( acCheckFlag ) ); memset( acChgFlag, 0x00, sizeof( acChgFlag ) ); memset( acCardStat, 0x00, sizeof( acCardStat ) ); memset( acPasswd, 0x00, sizeof( acPasswd ) ); memset( acPasswd1, 0x00, sizeof( acPasswd1 ) ); /* 取数据字典值 */ getstring( "CardNo", stCmsCardInfo.cardno ); getstring( "CardNo1", stNewCardInfo.cardno ); getstring( "Passwd", acPasswd ); getstring( "Passwd1", acPasswd1 ); getstring( "AplyDate", stCmsPcdReg.aplydate ); getlong( "SerSeqNo1", &stCmsPcdReg.serseqno ); getstring( "ChgFlag", acChgFlag ); getstring( "IdType1", stCmsChgM.idtype ); getstring( "IdNo1", stCmsChgM.idcode ); getstring( "CustomName", stCmsChgM.custname ); /* 获取卡片信息 */ iRtn = pubReadCmscardinfo( &stCmsCardInfo ); if ( iRtn ) { if ( SQLCODE == SQLNOTFOUND ) sprintf( g_acRspMsg, "卡号[%s]不存在", stCmsCardInfo.cardno ); 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; } /* 同时检查卡片状态是否为正常换卡申请或挂失补卡申请,并且其他状态是否正常 */ if ( acChgFlag[ BIT1_LEN ] == BIT14_CARDCHGAPLY ) /* 正常换卡申请 */ acCardStat[BIT14_LEN][BIT3_LEN] = CHECK_YES; else if ( acChgFlag[ BIT1_LEN ] == BIT14_CARDLOSTCHGAPLY ) /*挂失补卡申请*/ acCardStat[BIT14_LEN][BIT4_LEN] = CHECK_YES; acCardStat[BIT15_LEN][BIT2_LEN] = CHECK_YES; /* 检查卡状态是否正常 */ iRtn = cmsApiChkCardStatIsNormal( &stCmsCardInfo, acCardStat ); if ( iRtn ) { ERRLOG return FAILED; } /* 检查卡密码 */ iRtn = cmsApiChkCardPwd( &stCmsCardInfo, acPasswd, pstPubcom->acChannelId ); 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_YES; /* 检查发卡对象 单/个 */ acCheckFlag[ BIT5_LEN ] = CHECK_YES; /* 检查记名标志 */ acCheckFlag[ BIT6_LEN ] = CHECK_NO; /* 不检查挂失标志 */ iRtn = cmsApiChkCardKind( &stCmsCardKind, acCheckFlag, LOGOTHER, \ pstPubcom->acChannelId, PERSONALCARD, REGNAMECARD, CZEROS, "" ); if ( iRtn ) { ERRLOG return FAILED; } /* 检查卡片是否为记名卡 */ iRtn = cmsApiChkIsNameCard( &stCmsCardInfo ); if ( iRtn ) { ERRLOG return FAILED; } /* 检查卡片是否为个人卡 */ iRtn = cmsApiChkIsPersonCard( &stCmsCardInfo ); if ( iRtn ) { ERRLOG return FAILED; } /* 获取预制卡登记簿 */ iRtn = pubReadCmspcdreg( &stCmsPcdReg ); if ( iRtn ) { ERRLOG return FAILED; } /* 检查预制卡申请登记表中,新卡号是否是要领的新卡 */ if ( strcmp(stCmsPcdReg.scardno, stNewCardInfo.cardno ) ) { strcpy( g_acRspCode, "CMS1B6" ); pubCrtRspInfo( stNewCardInfo.cardno ); ERRLOG return FAILED; } /* 修改旧卡号中的新卡号和挂失补卡标志 */ strcpy( stCmsCardInfo.newcardno, stNewCardInfo.cardno ); strcpy( stCmsCardInfo.chgdate, pstPubcom->acTranDate ); if ( acChgFlag[ BIT1_LEN ] == BIT14_CARDCHGAPLY ) /* 正常换卡申请 */ stCmsCardInfo.cardstat[BIT8_LEN] = BIT8_CARDBAD; else if ( acChgFlag[ BIT1_LEN ] == BIT14_CARDLOSTCHGAPLY ) /*挂失补卡申请*/ stCmsCardInfo.cardstat[BIT8_LEN] = BIT8_CARDLOST; iRtn = pubModiCmscardinfo( &stCmsCardInfo ); if ( iRtn ) { ERRLOG return FAILED; } /* 修改所有主卡卡号为旧卡号的卡片信息主卡卡号为新卡号 */ strcpy( stCmsCardInfo.oldcardno, stCmsCardInfo.cardno ); pubStoVCmscardinfo( &stCmsCardInfo ); EXEC SQL UPDATE CMSCARDINFO SET maincardno = :cmscardinfo_newcardno WHERE maincardno = :cmscardinfo_oldcardno AND cardno != :cmscardinfo_cardno; if ( SQLCODE && SQLCODE != SQLNOTFOUND ) { strcpy( g_acRspCode, "CMS114" ); /* 数据库更新错误 */ pubCrtRspInfo( "cmscardinfo",SQLCODE ); ERRLOG return FAILED; } /* 获取新卡片信息 */ iRtn = pubReadCmscardinfo( &stNewCardInfo ); if ( iRtn ) { ERRLOG return FAILED; } /* 检查新卡状态是否为待领卡状态 */ iRtn = cmsApiChkCardStatIsReadyOpen( &stNewCardInfo ); if ( iRtn ) { ERRLOG return FAILED; } /* 检查两个卡号是否为同一个卡片种类API */ iRtn = cmsApiChkIsSameCardKind( stCmsCardInfo.cardkind, \ stNewCardInfo.cardkind ); if ( iRtn ) { ERRLOG return FAILED; } /* 挂失补发更新卡片信息赋值 API*/ iRtn = cmsApiChgCardSetValue( &stCmsCardInfo, &stNewCardInfo ); if ( iRtn ) { ERRLOG return FAILED; } /* 对密码做处理 */ /* strcpy( stNewCardInfo.passwd, acPasswd1 ); */ sprintf( g_acTrcMsg, "passwd[%s]DB[%s]",acPasswd1,stNewCardInfo.passwd); TRCLOG3 if ( OverPINBLOCK( acPasswd1, stNewCardInfo.cardno, stNewCardInfo.passwd )) { ERRLOG return FAILED; } strcpy( stNewCardInfo.chgdate, pstPubcom->acTranDate ); /* 修改新卡号的卡片状态为正常 */ stNewCardInfo.crdsts[BIT1_LEN] = CARDOKSTS; strcpy( stNewCardInfo.oldcardno, stCmsCardInfo.cardno ); /* 修改新卡号卡片信息 */ iRtn = pubModiCmscardinfo( &stNewCardInfo ); if ( iRtn ) { ERRLOG return FAILED; } /* 换卡更新卡账户对照表 */ iRtn = cmsApiChgCardSetAcct( &stCmsCardInfo, &stNewCardInfo ); if ( iRtn ) { ERRLOG return FAILED; } /* 登记换卡登记簿 */ strcpy( stCmsChgM.oldcardno, stCmsCardInfo.cardno ); strcpy( stCmsChgM.newcardno, stNewCardInfo.cardno ); strcpy( stCmsChgM.chgdate, pstPubcom->acTranDate ); stCmsChgM.serseqno = pstPubcom->lSerSeqNo; sprintf( stCmsChgM.vouchno, "%s%0*ld", pstPubcom->acTranDate8, SERSEQNO_LEN, stCmsChgM.serseqno ); strcpy( stCmsChgM.issuebrc, stCmsCardInfo.issuebrc ); strcpy( stCmsChgM.chgbrc, pstPubcom->acBrc ); strcpy( stCmsChgM.chgteller, pstPubcom->acTeller ); if (stCmsPcdReg.aplyflg[BIT1_LEN]==NAMECHGCARDAPLY) stCmsChgM.chgflg[BIT1_LEN] = NORMALCHGCARD; else if (stCmsPcdReg.aplyflg[BIT1_LEN]==NAMELOSTCARDAPLY) stCmsChgM.chgflg[BIT1_LEN] = LOSTCHGCARD; stCmsChgM.status[ BIT1_LEN ] = NORMAL_STS; /* 插入换卡登记簿 */ iRtn = pubInstCmschgm( &stCmsChgM ); if ( iRtn ) { ERRLOG return FAILED; } /* 换卡增加卡号顺序号文件 */ iRtn = cmsApiChgCardCmsSeqNo( stCmsCardInfo.cardno, stNewCardInfo.cardno ); if ( iRtn ) { ERRLOG return FAILED; } /* 登记账号索引表 */ iRtn = pubRegAcctNoIdx( stNewCardInfo.cardno, STR_CMS ); if ( iRtn ) { ERRLOG return FAILED; } /*写子交易流水*/ iRtn = cmsApiInsTranLog( pstPubcom, &stNewCardInfo, &stCmsAcctM, "换卡", "记名卡补换卡启用" ); if ( iRtn ) { ERRLOG return FAILED; } /* 子交易出口 */ setstring( "VouchNo", stCmsChgM.vouchno ); /* 登记簿编号 */ setstring( "NewVouKind", stNewCardInfo.voukind ); /* 新凭证种类 */ setstring( "NewVouNo", stNewCardInfo.vouno ); /* 新凭证号码 */ strcpy( g_acTrcMsg, "子交易: 记名卡补换卡启用处理子交易结束.." ); TRCLOG4 strcpy( g_acRspCode, RSP_OK ); return SUCCESS;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -