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

📄 cmsmang.sqc

📁 一整套完整的银行卡系统源代码
💻 SQC
📖 第 1 页 / 共 4 页
字号:
/******************************************************* **   源码文件名称 : cmsmang.SQC **   所属子系统   : 卡管理 **   功能描述     : 对卡帐户的关联和解除关联,卡挂失和解挂,销户等 **   				 进行处理 **   当前文件版本 : 4.0.0.0 **   作        者 : Feng  **   版本创建日期 : 2004/09/15 **   修改记录     : **   修改人       修改日期     修改位置 **   Feng         2006/01/07   905行 **   Feng         2006/01/07   910行 **   Feng         2006/01/07   945行*******************************************************/#include "sysdefine.h"#include "code.h"#include "attrdef.h"#include "pubcom.h"#include "cmscode.h"#include "cmsacctm.h"#include "cmscardinfo.h"#include "cmscardkind.h"#include "cmstbsreginf.h"#include "ciscustomerinfo.h"#include "glssubtranslog.h"#define		ZEROSTR					"0"                     /* 分录流水缺省标志 */#define		CASHSTR					"1"                     /* 分录流水缺省标志 */#define		DEBITSTR				"D"                     /* 分录流水缺省标志 */EXEC SQL	INCLUDE SQLCA;/******************************************************* **	  函数名称:cmsApiCardAssociateAcct **   功能描述:卡关联帐户 **   输入参数: **             pstPubCom       ----    公共PUBCOM **   			pcCardNo		----	卡号 **   			pcAcctNo		----	客户账号 **   			pcSubAcct		----	款项代码 **   			pcCcy			----	币种 **   			pcPrdCod		----	产品代码 **   			pcCustNo		----	客户号 **   			cAcctOwner		----	帐户属主 **   									'0':属于附卡 **   									'1':属于主卡 **   			cCardBookFlag	----	卡折标志 **   									'0':帐户无折 **   									'1':帐户有折(卡折共享) **   			pcSubSys		----	子系统编号 **   输出参数: **   			pcAcctSeqNo		----	账号序号 **   返回结果:int **   			0				----	成功 **   			-1				----	失败*******************************************************/int	cmsApiCardAssociateAcct( pstPubCom, pcCardNo, pcAcctNo, pcSubAcct, pcCcy, \	pcPrdCod, pcCustNo, cAcctOwner, cCardBookFlag, pcSubSys, pcAcctSeqNo )struct  pubcom      *   pstPubCom;      		/* 公共PUBCOM */char      			*	pcCardNo;				/* 卡号				*/char      			*	pcAcctNo;				/* 客户账号			*/char      			*	pcSubAcct;				/* 款项代码			*/char      			*	pcCcy;					/* 币种				*/char      			*	pcPrdCod;				/* 产品代码			*/char      			*	pcCustNo;				/* 客户号			*/char     	 			cAcctOwner;				/* 帐户属主			*/char      				cCardBookFlag;			/* 卡折标志			*/char      			*	pcSubSys;				/* 子系统编号		*/char      			*	pcAcctSeqNo;			/* 帐户序号			*/{	/* 定义 局部变量 */	struct	cmsacctm	stCmsAcctM;				/* 卡帐户对照表结构 */	struct	cmscardinfo			stCmsCardInfo;	/* 卡片信息表		*/	char	acCardStat[ BIT21_LEN ][BIT11_LEN];	/* 卡状态检查标志	*/	int					iRtn;					/* 函数返回值		*/	int		iNumx;								/* 数组计数器		*/	int		iNumy;								/* 数组计数器		*/	sprintf( g_acTrcMsg, "cmsApiCardAssociateAcct begin " );	TRCLOG2	/* 初始化卡帐户对照表结构 */	memset( &stCmsAcctM, 0x00, sizeof( struct cmsacctm ) );	memset( &stCmsCardInfo,		0x00,	sizeof( struct cmscardinfo ) );	/* 卡检查状态数组除首位外全置为不检查 */	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;		}	sprintf( g_acTrcMsg, "CardNo=[%s]", pcCardNo );	TRCLOG1	sprintf( g_acTrcMsg, "pcAcctNo=[%s]", pcAcctNo );	TRCLOG1	sprintf( g_acTrcMsg, "pcSubAcct=[%s]", pcSubAcct );	TRCLOG1	sprintf( g_acTrcMsg, "pcCcy=[%s]", pcCcy );	TRCLOG1	sprintf( g_acTrcMsg, "pcPrdCod=[%s]", pcPrdCod );	TRCLOG1	sprintf( g_acTrcMsg, "pcCustNo=[%s]", pcCustNo );	TRCLOG1	sprintf( g_acTrcMsg, "cAcctOwner=[%c]", cAcctOwner );	TRCLOG1	sprintf( g_acTrcMsg, "cCardBookFlag=[%c]", cCardBookFlag );	TRCLOG1	sprintf( g_acTrcMsg, "pcSubSys=[%s]", pcSubSys );	TRCLOG1	strcpy( stCmsCardInfo.cardno,		pcCardNo	);		/* 获取卡片信息表 */	strcpy( stCmsCardInfo.cardno, pcCardNo );	iRtn = pubReadCmscardinfo( &stCmsCardInfo );	if ( iRtn )	{		if ( SQLCODE == SQLNOTFOUND )		{			strcpy(g_acRspCode,"CMS302");			pubCrtRspInfo( pcCardNo );		}		ERRLOG		return FAILED;	}	/* 检查卡状态是否正常 */	iRtn = cmsApiChkCardStatIsNormal( &stCmsCardInfo, acCardStat );	if ( iRtn )	{		ERRLOG		return FAILED;	}	strcpy( g_acTrcMsg, "检查卡状态是否正finish" );	TRCLOG1	/* 有折卡不能开立新的账户 *	if ( stCmsCardInfo.hasbankbook[ BIT1_LEN ] == BANKBOOK )	{		strcpy( g_acRspCode, "CMS1D2" );		* 有折卡不能开立其它账户 *		pubCrtRspInfo( );		ERRLOG		return FAILED;	}	*/	/* 检查卡内同币种同一产品代码的账户是否超限 */	iRtn = cmsApiChkCardAcctNumExceed( pcCardNo, stCmsCardInfo.cardkind, pcCcy, pcPrdCod );	if ( iRtn )	{		ERRLOG		return FAILED;	}	/* 生成卡内帐户序号 */	iRtn = cmsApiGetSeqNoInCard( pcCardNo, stCmsAcctM.acctseqno );	/* 生成卡内帐户序号错 */	if ( iRtn )	{		ERRLOG		return FAILED;	}	/* 按产品代码获取业务种类 */	iRtn = cmsApiGetBussKindByPrdCod( pcPrdCod, stCmsAcctM.busskind );	/* 获取业务种类错 */	if ( iRtn )	{		if ( SQLCODE == SQLNOTFOUND )			sprintf( g_acRspMsg, "该产品[%s]不允许在卡内开户", pcPrdCod );		ERRLOG		return FAILED;	}	/* 为卡帐户对照表结构赋值 */	strcpy( stCmsAcctM.cardno, 		pcCardNo 		);	strcpy( stCmsAcctM.acctno, 		pcAcctNo 		);	strcpy( stCmsAcctM.prdcod, 		pcPrdCod 		);	strcpy( stCmsAcctM.ccy, 		pcCcy 			);	strcpy( stCmsAcctM.subacct, 	pcSubAcct 		);	strcpy( stCmsAcctM.custno, 		pcCustNo		);	strcpy( stCmsAcctM.subsys, 		pcSubSys		);	stCmsAcctM.accowner[ 0 ] = cAcctOwner;			strcpy( stCmsAcctM.issuedate, 	pstPubCom->acTranDate	);	strcpy( stCmsAcctM.issuebrc, 	pstPubCom->acBrc 	);	strcpy( stCmsAcctM.issueteller,	pstPubCom->acTeller 	);	stCmsAcctM.cardbookflag[ 0 ] = cCardBookFlag;			/* 正常		*/	stCmsAcctM.status[ 0 ] = NORMAL_STS;	/* 插入卡帐户对照表 */	iRtn = pubInstCmsacctm( &stCmsAcctM );	/* 数据库插入错 */	if ( iRtn )	{		ERRLOG		return FAILED;	}	/* 为输出参数附值 */	strcpy( pcAcctSeqNo, stCmsAcctM.acctseqno );	sprintf( g_acTrcMsg, "cmsApiCardAssociateAcct end " );	TRCLOG2	return SUCCESS;}/******************************************************* **	  函数名称:cmsApiCardDisassociateAcct **   功能描述:卡解除关联帐户 **   输入参数: **             pstPubCom       ----    公共PUBCOM **   			pcCardNo		----	卡号 **   			pcAcctSeqNo		----	账号序号 **   			cTranFlag		----	解除方式 **   									'1':销户 **   									'2':移出 **   									'3':已换卡 **				cCloseType		----	销卡标志 **										'0':只销户 **										'1':同时销卡 **   输出参数: **   			pcAcctNo		----	客户账号 **   			pcSubAcct		----	款项代码 **   			pcCcy			----	币种 **   			pcPrdCod		----	产品代码 **   返回结果:int **   			0				----	成功 **   			-1				----	失败*******************************************************/int	cmsApiCardDisassociateAcct( pstPubCom, pcCardNo, pcAcctSeqNo, 	\	cTranFlag, cCloseType, pcAcctNo, pcSubAcct, pcCcy, pcPrdCod )struct  pubcom      *   pstPubCom;      		/* 公共PUBCOM */char      			*	pcCardNo;				/* 卡号				*/char      			*	pcAcctSeqNo;			/* 帐户序号			*/char      				cTranFlag;				/* 解除方式			*/char      				cCloseType;				/* 销卡标志			*/char      			*	pcAcctNo;				/* 客户账号			*/char      			*	pcSubAcct;				/* 款项代码			*/char      			*	pcCcy;					/* 币种				*/char      			*	pcPrdCod;				/* 产品代码			*/{	/* 定义 局部变量 */	struct	cmsacctm	stCmsAcctM;				/* 卡帐户对照表结构 */	int					iRtn;					/* 函数返回值		*/	sprintf( g_acTrcMsg, "cmsApiCardDisassociateAcct begin " );	TRCLOG2	/* 初始化卡帐户对照表结构 */	memset( &stCmsAcctM, 0x00, sizeof( struct cmsacctm ) );	sprintf( g_acTrcMsg, "CardNo=[%s]", pcCardNo );	TRCLOG1	sprintf( g_acTrcMsg, "AcctSeqNo=[%s]", pcAcctSeqNo );	TRCLOG1	sprintf( g_acTrcMsg, "pcAcctNo=[%s]", pcAcctNo );	TRCLOG1	sprintf( g_acTrcMsg, "pcSubAcct=[%s]", pcSubAcct );	TRCLOG1	sprintf( g_acTrcMsg, "pcCcy=[%s]", pcCcy );	TRCLOG1	sprintf( g_acTrcMsg, "pcPrdCod=[%s]", pcPrdCod );	TRCLOG1	sprintf( g_acTrcMsg, "cTranFlag=[%c]", cTranFlag );	TRCLOG1	sprintf( g_acTrcMsg, "cCloseType=[%c]", cCloseType );	TRCLOG1	/* 如果是主帐户 */	if ( !strcmp( pcAcctSeqNo, MAINACCTSEQNO ) )	{		if ( cCloseType == '0' ) /* 只销户 */		{			strcpy( g_acRspCode, "CMS1C9" );			pubCrtRspInfo( );			ERRLOG			return FAILED;		}		/* 不能存在其他账户 */		/* 检查是否存在主账户以外的账户 */		iRtn = cmsApiChkCardNoHasOtherAcct( pcCardNo );		if ( iRtn )		{			ERRLOG			return FAILED;		}	}	/* 将维一索引数据赋给结构 */	strcpy( stCmsAcctM.cardno,		pcCardNo );	strcpy( stCmsAcctM.acctseqno,	pcAcctSeqNo );	/* 从卡帐户对照表获取纪录并锁住纪录 */	pubStoVCmsacctm( &stCmsAcctM );	EXEC SQL	DECLARE AcctM_l_cur CURSOR FOR 				SELECT * FROM CMSACCTM				WHERE cardno = :cmsacctm_cardno				AND acctseqno = :cmsacctm_acctseqno;				/*				FOR UPDATE;				*/	/* 定义游标出错     if ( SQLCODE )	{		strcpy( g_acRspCode, "CMS110" );		pubCrtRspInfo( "cmsacctm", SQLCODE );		ERRLOG		return FAILED;	} */	SQLOPENCUR(AcctM_l_cur,"AcctM_l_cur")	/* 打开游表出错 */	if ( SQLCODE )	{		strcpy( g_acRspCode, "CMS111" );		pubCrtRspInfo( "cmsacctm", SQLCODE );		ERRLOG		return FAILED;	}	pubInitCmsacctm();	EXEC SQL	FETCH AcctM_l_cur INTO R_CMSACCTM ;	/* 取游表出错 */	if ( SQLCODE && SQLCODE != SQLNOTFOUND )	{		strcpy( g_acRspCode, "CMS112" );		pubCrtRspInfo( "cmsacctm", SQLCODE );		ERRLOG	SQLCLOSECUR(AcctM_l_cur,"AcctM_l_cur")		return FAILED;	}	/* 记录不存在 */	else if ( SQLCODE == SQLNOTFOUND )	{		strcpy( g_acRspCode, "CMS113" );		pubCrtRspInfo( "cmsacctm", SQLCODE );		ERRLOG	SQLCLOSECUR(AcctM_l_cur,"AcctM_l_cur")		return FAILED;	}	pubVtoSCmsacctm( &stCmsAcctM );	SQLCLOSECUR(AcctM_l_cur,"AcctM_l_cur")	/* 检查帐户状态是否正常 */	/* 帐户已经不属于卡, 帐户序号已无效 */	if ( stCmsAcctM.status[ BIT1_LEN ] != NORMAL_STS )	{		strcpy( g_acRspCode, "CMS197" );		pubCrtRspInfo( pcCardNo, pcAcctSeqNo );		ERRLOG		return FAILED;	}	/* 帐户销户时,检查卡折标志是否有折 被过云更改,在这不检查帐户是否有折单 20041103	if ( cTranFlag == CANCEL_STS )	{		账户是否未捆绑折单 		iRtn = cmsApiChkAcctNotResideCard( &stCmsAcctM );		if ( iRtn )		{			ERRLOG			return FAILED;		}	}	*/	/* 为修改卡帐户对照表准备数据 */	strcpy( stCmsAcctM.closedate,	pstPubCom->acTranDate	);	strcpy( stCmsAcctM.closebrc,	pstPubCom->acBrc	);	strcpy( stCmsAcctM.closeteller,	pstPubCom->acTeller	);	stCmsAcctM.status[ BIT1_LEN ] = cTranFlag;	iRtn = pubModiCmsacctm( &stCmsAcctM );	if ( iRtn )	{		ERRLOG		return FAILED;	}	/*	pubStoVCmsacctm( &stCmsAcctM );	* 修改卡帐户对照表记录 *	EXEC SQL	UPDATE CMSACCTM				SET	closedate = :cmsacctm_closedate,					closebrc = :cmsacctm_closebrc,					closeteller = :cmsacctm_closeteller,					status = :cmsacctm_status				WHERE CURRENT OF AcctM_l_cur;	* 修改出错 *	if ( SQLCODE )	{		strcpy( g_acRspCode, "CMS114" );		pubCrtRspInfo( "cmsacctm", SQLCODE );		ERRLOG	SQLCLOSECUR(AcctM_l_cur,"AcctM_l_cur")		return FAILED;	}	SQLCLOSECUR(AcctM_l_cur,"AcctM_l_cur")	*/	/* 为输出参数附值 */	strcpy( pcAcctNo,	stCmsAcctM.acctno );	strcpy( pcSubAcct,	stCmsAcctM.subacct );	strcpy( pcCcy,		stCmsAcctM.ccy );	strcpy( pcPrdCod,	stCmsAcctM.prdcod );	sprintf( g_acTrcMsg, "cmsApiCardDisassociateAcct end " );	TRCLOG2	return SUCCESS;}/******************************************************* **	  函数名称:cmsApiCardReportLoss **   功能描述:卡挂失,如果是检查查询密码,则只能进行口挂和密码口挂, **   			检查查询密码时,如果卡存在电话银行签约,则检查电话银行 **				签约用户登记表中密码,否则检查卡片信息中查询密码。 **   输入参数: **   			pcCardNo		----	卡号 **   			pcPasswd		----	密码 **   			iPlace			----	检查密码标志 **   									0:卡密码 **   									1:查询密码

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -