⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cms036.sqc

📁 一整套完整的银行卡系统源代码
💻 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 + -