📄 cmsgen.sqc
字号:
/******************************************************* ** 源码文件名称 : cmsgen.SQC ** 所属子系统 : 卡管理 ** 功能描述 : 对卡顺序号、帐户序号和公共参数表的处理 ** 当前文件版本 : 4.0.0.0 ** 作 者 : Feng ** 版本创建日期 : 2004/09/15 ** 修改记录 : ** 修改人 修改日期 修改位置 ** Feng 2006-01-07 cmsApiProCmsSeqM入口参数修改 ** Feng 2006-01-09 增加函数cmsApiGenCardPinparm*******************************************************/#include "sysdefine.h"#include "code.h"#include "attrdef.h"#include "pubcom.h"#include "cmscode.h"#include "cmsseqm.h"#include "cmsseqno.h"#include "cmscardkind.h"#include <stdio.h>#include <stdlib.h>#include <math.h>EXEC SQL INCLUDE SQLCA;/******************************************************* ** 函数名称:cmsApiProCmsSeqM ** 功能描述:按卡BIN号、卡片识别和申请数量 ** 处理卡号顺序号文件,数据库中存放的是已经使用的顺序号 ** 输入参数: ** pstCmsCardKind ---- 卡片种类表 ** pcAreaCode ---- 地区代码 ** plAplyNum ---- 申请数量 ** 输出参数: ** plMinNo ---- 可用最小序号 ** plMaxNo ---- 可用最大序号 ** 返回结果:int ** 0 ---- 成功 ** -1 ---- 失败*******************************************************/int cmsApiProCmsSeqM( pstCmsCardKind, pcAreaCode, \ plAplyNum, plMinNo, plMaxNo )struct cmscardkind * pstCmsCardKind; /* 卡片种类表 */char * pcAreaCode; /* 地区代码 new */long * plAplyNum; /* 申请数量 */long * plMinNo; /* 可用最小序号 */long * plMaxNo; /* 可用最大序号 */{ /* 定义 局部变量 */ struct cmsseqm stCmsSeqM; /* 卡号顺序号表结构 */ int iRtn; /* 函数返回值 */ double dSeqNo; /* 临时顺序号 */ double dMaxSeqNo; /* 最大顺序号 */ double dMinSeqNo; /* 最小顺序号 */ /* double类型防溢出 */ sprintf( g_acTrcMsg, "cmsApiProCmsSeqM begin " ); TRCLOG2 /* 初始化卡号顺序号文件结构 */ memset( &stCmsSeqM, 0x00, sizeof( struct cmsseqm ) ); /* 将输入参数赋值给结构 */ strcpy ( stCmsSeqM.cardkind, pstCmsCardKind->cardkind ); strcpy ( stCmsSeqM.cardbin, pstCmsCardKind->cardbin ); strcpy ( stCmsSeqM.cardidkind, pstCmsCardKind->cardidkind ); strcpy ( stCmsSeqM.areacode, pcAreaCode ); if ( !strlen( pcAreaCode ) ) strcpy( stCmsSeqM.areacode, " " ); /* 从卡号顺序号表获取记录并锁住记录 */ pubStoVCmsseqm( &stCmsSeqM ); EXEC SQL DECLARE SeqM_l_cur CURSOR FOR SELECT * FROM CMSSEQM WHERE cardkind =:cmsseqm_cardkind AND cardbin = :cmsseqm_cardbin AND cardidkind = :cmsseqm_cardidkind AND areacode = :cmsseqm_areacode FOR UPDATE; /* 定义游标错误 if ( SQLCODE ) { strcpy( g_acRspCode, "CMS110" ); pubCrtRspInfo( "cmsseqm", SQLCODE ); ERRLOG return FAILED; } */ SQLOPENCUR(SeqM_l_cur,"SeqM_l_cur") /* 打开游标错误 */ if ( SQLCODE ) { strcpy( g_acRspCode, "CMS111" ); pubCrtRspInfo( "cmsseqm", SQLCODE ); ERRLOG return FAILED; } pubInitCmsseqm(); EXEC SQL FETCH SeqM_l_cur INTO R_CMSSEQM ; /* 取游标错误 */ if ( SQLCODE && SQLCODE != SQLNOTFOUND ) { strcpy( g_acRspCode, "CMS112" ); pubCrtRspInfo( "cmsseqm", SQLCODE ); ERRLOG SQLCLOSECUR(SeqM_l_cur,"SeqM_l_cur") return FAILED; } /* 记录不存在 */ else if ( SQLCODE == SQLNOTFOUND ) { strcpy( g_acRspCode, "CMS113" ); sprintf( g_acRspMsg, "卡顺序号文件不存在[%s|%s]", pstCmsCardKind->cardbin, pstCmsCardKind->cardidkind ); ERRLOG SQLCLOSECUR(SeqM_l_cur,"SeqM_l_cur") return FAILED; } pubVtoSCmsseqm( &stCmsSeqM ); /* 序号全部使用 */ if ( pstCmsCardKind->seqflag[ BIT1_LEN ] == SEQ_ALLUSE ) { /* 检查顺序号+plAplyNum后是否超过最大值 */ dSeqNo = atof( stCmsSeqM.cardseqno ); dSeqNo += (double )(*plAplyNum); dMaxSeqNo = atof( MAX_CARDSEQNO ); /* 超过最大卡顺序号 */ if ( dSeqNo > dMaxSeqNo ) { strcpy( g_acRspCode, "CMS104" ); pubCrtRspInfo( dSeqNo, dMaxSeqNo ); ERRLOG SQLCLOSECUR(SeqM_l_cur,"SeqM_l_cur") return FAILED; } } else /* 序号部分使用 */ { /* 检查顺序号+plAplyNum后是否超过规定范围 */ dSeqNo = atof( stCmsSeqM.cardseqno ); dMaxSeqNo = atof( pstCmsCardKind->endseq ); dMinSeqNo = atof( pstCmsCardKind->beginseq ); if ( dSeqNo < dMinSeqNo ) { strcpy( g_acRspCode, "CMS218" ); pubCrtRspInfo( ); ERRLOG SQLCLOSECUR(SeqM_l_cur,"SeqM_l_cur") return FAILED; } dSeqNo += (double )(*plAplyNum); dMaxSeqNo = atof( pstCmsCardKind->endseq ); /* 超过最大卡顺序号 */ if ( dSeqNo > dMaxSeqNo ) { strcpy( g_acRspCode, "CMS219" ); pubCrtRspInfo( ); ERRLOG SQLCLOSECUR(SeqM_l_cur,"SeqM_l_cur") return FAILED; } } /* 累加卡号顺序号文件中卡顺序号 */ dSeqNo = atof( stCmsSeqM.cardseqno ); *plMinNo = ( long ) dSeqNo + 1; *plMaxNo = ( long ) dSeqNo + *plAplyNum; sprintf( cmsseqm_cardseqno, "%0*ld", CARDSEQNO_LEN, *plMaxNo ); /* 修改卡号顺序号文件记录 */ EXEC SQL UPDATE cmsseqm SET cardseqno = :cmsseqm_cardseqno WHERE CURRENT OF SeqM_l_cur; /* 修改出错 */ if ( SQLCODE ) { strcpy( g_acRspCode, "CMS114" ); pubCrtRspInfo( "cmsseqm", SQLCODE ); ERRLOG SQLCLOSECUR(SeqM_l_cur,"SeqM_l_cur") return FAILED; } SQLCLOSECUR(SeqM_l_cur,"SeqM_l_cur") sprintf( g_acTrcMsg, "cmsApiProCmsSeqM end " ); TRCLOG2 return SUCCESS;}/******************************************************* ** 函数名称:cmsApiGenCardNewSeqNo ** 功能描述:获取卡内新的账户序号,卡内开立账户时使用, ** 数据库中存放的是已经使用的顺序号 ** 输入参数: ** pcCardNo ---- 卡号 ** 输出参数: ** pcAcctSeqNo ---- 帐户序号 ** 返回结果:int ** 0 ---- 成功 ** -1 ---- 失败*******************************************************/int cmsApiGenCardNewSeqNo( pcCardNo, pcAcctSeqNo )char * pcCardNo; /* 卡号 */char * pcAcctSeqNo; /* 帐户序号 */{ /* 定义 局部变量 */ struct cmsseqno stCmsSeqNo; /* 卡内帐户序号结构 */ int iRtn; /* 函数返回值 */ long lSeqNo; /* 临时顺序号 */ sprintf( g_acTrcMsg, "cmsApiGenCardNewSeqNo begin " ); TRCLOG2 /* 初始化卡号顺序号文件结构 */ memset( &stCmsSeqNo, 0x00, sizeof( struct cmsseqno ) ); /* 将输入参数赋值给结构 */ strcpy ( stCmsSeqNo.cardno, pcCardNo ); /* 从卡内帐户序号表获取记录并锁住记录 */ pubStoVCmsseqno( &stCmsSeqNo ); EXEC SQL DECLARE SeqNo_l_cur CURSOR FOR SELECT * FROM CMSSEQNO WHERE cardno = :cmsseqno_cardno; SQLOPENCUR(SeqNo_l_cur,"SeqNo_l_cur") /* 打开游标错误 */ if ( SQLCODE ) { strcpy( g_acRspCode, "CMS111" ); pubCrtRspInfo( "cmsseqno", SQLCODE ); ERRLOG return FAILED; } pubInitCmsseqno(); EXEC SQL FETCH SeqNo_l_cur INTO R_CMSSEQNO ; /* 取游标错误 */ if ( SQLCODE && SQLCODE != SQLNOTFOUND ) { strcpy( g_acRspCode, "CMS112" ); pubCrtRspInfo( "cmsseqno", SQLCODE ); ERRLOG SQLCLOSECUR(SeqNo_l_cur,"SeqNo_l_cur") return FAILED; } /* 记录不存在 */ else if ( SQLCODE == SQLNOTFOUND ) { strcpy( g_acRspCode, "CMS113" ); sprintf( g_acRspMsg, "卡账户序号不存在[%s]", pcCardNo ); ERRLOG SQLCLOSECUR(SeqNo_l_cur,"SeqNo_l_cur") return FAILED; } SQLCLOSECUR(SeqNo_l_cur,"SeqNo_l_cur") pubVtoSCmsseqno( &stCmsSeqNo ); /* 累加卡内帐户序号文件中帐户序号 */ lSeqNo = atol( stCmsSeqNo.seqno ); lSeqNo ++; /* 判断帐户序号是否超过最大序号9999 */ /* 帐户序号超出限制 */ if ( lSeqNo > MAXACCTSEQNO ) { strcpy( g_acRspCode, "CMS106" ); pubCrtRspInfo( lSeqNo ); ERRLOG return FAILED; } sprintf( cmsseqno_seqno, "%0*ld", ACCTSEQNO_LEN, lSeqNo ); strcpy( stCmsSeqNo.seqno, cmsseqno_seqno ); /* 修改卡号顺序号文件记录 */ iRtn = pubModiCmsseqno( &stCmsSeqNo); if ( iRtn ) { ERRLOG return FAILED; } /* 为输出参数赋值 */ strcpy( pcAcctSeqNo, cmsseqno_seqno ); sprintf( g_acTrcMsg, "cmsApiGenCardNewSeqNo end " ); TRCLOG2 return SUCCESS;}/******************************************************* ** 函数名称:cmsApiGetPwdUnlostDays ** 功能描述:获取密码挂失重置允许天数 ** 输入参数: ** 输出参数: ** piDays ---- 允许天数 ** 返回结果:int ** 0 ---- 成功 ** -1 ---- 失败*******************************************************/int cmsApiGetPwdUnlostDays( piDays )int * piDays; /* 允许天数 */{ int iRtn; /* 函数返回值 */ int iDays; sprintf( g_acTrcMsg, "cmsApiGetPwdUnlostDays begin " ); TRCLOG2 /* 调用API获取公共参数表参数值 */ iRtn = pubGetBaseInfo( "DPSPASSDAY", &iDays ); if ( iRtn ) { ERRLOG return FAILED; } /* 转换参数值 */ *piDays = iDays; sprintf( g_acTrcMsg, "cmsApiGetPwdUnlostDays end " ); TRCLOG2 return SUCCESS;}/******************************************************* ** 函数名称:cmsApiGetCanAuthDays ** 功能描述:获取预授权自动解除天数 ** 输入参数: ** 输出参数:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -