📄 cmsvouno.sqc
字号:
/******************************************************* ** 源码文件名称 : cmsvouno.SQC ** 所属子系统 : 卡管理 ** 功能描述 : 获取cmsvouseqno凭证号序号 ** 当前文件版本 : 4.0.0.0 ** 作 者 : UCCB ALex ** 版本创建日期 : 2004/09/16 ** 修改记录 : ** 修改人 修改日期 修改位置 ** Feng 2006-01-05 增加cmsApiCheckCardVouNo ** Feng 2006-01-05 增加cmsApiCheckVouNo ** Feng 2006-01-05 增加cmsApiCheckCardSeqNo ** Feng 2006-01-07 cmsApiGetCardVouNo增加参数*******************************************************/#include "sysdefine.h"#include "code.h"#include "attrdef.h"#include "pubcom.h"#include "cmscode.h"#include "cmsvouseqno.h"#include "cmschoosereg.h"#include "cmscardkind.h"EXEC SQL INCLUDE sqlca;/******************************************************* ** 函数名称:cmsApiGetCardVouNo ** 功能描述: 获取卡的新凭证号序号 ** 输入参数: ** pcVouKind ---- 卡凭证类别 ** pcPreCharCode ---- 冠字号码 ** plApplyNum ---- 申请数量 ** 输出参数: ** plMinVouNo ---- 可用最小号 ** plMaxVouNo ---- 可用最大号 ** 涉及库表: cmsvouseqno 卡凭证序号表 ** 返回结果:int 0 成功 -1 失败 ** 作 者 : UCCB ALex ** 版本创建日期 : 2004/09/15 ** 修改记录 : ** 修改人 修改日期 修改位置 ** Feng 2006-01-05 全部*******************************************************/int cmsApiGetCardVouNo( pcVouKind,pcPreCharCode, plApplyNum,plMinVouNum,plMaxVouNum )char *pcVouKind; /*卡凭证种类*/char *pcPreCharCode; /*卡凭证冠字号码*/long *plApplyNum; /* 申请数量 */long *plMinVouNum; /* 可用最小号 */long *plMaxVouNum; /* 可用最大号 */{ /*定义 局部变量*/ struct cmsvouseqno stCmsVouSeqNo; /*卡凭证序号表*/ long lSeqNo; /*临时凭证序号*/ sprintf( g_acTrcMsg, "cmsApiGetCardVouNo begin " ); TRCLOG2 /*初始化结构*/ memset( &stCmsVouSeqNo, 0x00, sizeof( struct cmsvouseqno ) ); /*将输入参数赋值给结构*/ strcpy(stCmsVouSeqNo.voukind, pcVouKind); strcpy(stCmsVouSeqNo.precharcode, pcPreCharCode); /*取卡凭证序号表中记录*/ lSeqNo=0; pubStoVCmsvouseqno( &stCmsVouSeqNo ); EXEC SQL DECLARE Vouseqno_1_cur CURSOR FOR SELECT * FROM CMSVOUSEQNO WHERE voukind=:cmsvouseqno_voukind AND precharcode=:cmsvouseqno_precharcode FOR UPDATE ; /* if( SQLCODE ) { sprintf( g_acRspCode, "CMS110"); pubCrtRspInfo( "cmsvouseqno", SQLCODE ); ERRLOG goto Exit; return FAILED; } */ SQLOPENCUR(Vouseqno_1_cur,"Vouseqno_1_cur") if( SQLCODE ) { sprintf( g_acRspCode, "CMS111"); pubCrtRspInfo( "cmsvouseqno", SQLCODE ); ERRLOG goto Exit; } pubInitCmsvouseqno(); EXEC SQL FETCH Vouseqno_1_cur INTO R_CMSVOUSEQNO ; if( SQLCODE && SQLCODE != SQLNOTFOUND ) { sprintf( g_acRspCode, "CMS112"); pubCrtRspInfo( "cmsvouseqno", SQLCODE ); ERRLOG SQLCLOSECUR(Vouseqno_1_cur,"Vouseqno_1_cur") goto Exit; } else if ( SQLCODE==SQLNOTFOUND ) { /*给出口参数赋值*/ *plMinVouNum = lSeqNo+1; *plMaxVouNum = lSeqNo+*plApplyNum; /*给结构宿组赋值*/ sprintf( cmsvouseqno_vouseqno,"%0*ld",MAX_VOUSEQNOLEN,*plMaxVouNum); strcpy(cmsvouseqno_voukind, pcVouKind); strcpy(cmsvouseqno_precharcode, pcPreCharCode); /*卡凭证序号 表增加记录*/ EXEC SQL INSERT INTO cmsvouseqno VALUES ( R_CMSVOUSEQNO ); if( SQLCODE ) { sprintf( g_acRspCode, "999998"); pubCrtRspInfo( "cmsvouseqno", SQLCODE ); ERRLOG SQLCLOSECUR(Vouseqno_1_cur,"Vouseqno_1_cur") goto Exit; } } else { pubVtoSCmsvouseqno( &stCmsVouSeqNo ); /*检查卡凭证序号是否超限*/ lSeqNo=atol( stCmsVouSeqNo.vouseqno ); if( (lSeqNo+*plApplyNum)>MAX_VOUSEQNO ) { sprintf( g_acTrcMsg,"申请卡凭证序号超限[lSeqNo+(*plApplyNum)][(%ld+%ld)>%ld]",lSeqNo,*plApplyNum,MAX_VOUSEQNO); TRCLOG1 sprintf( g_acRspCode, "CMS207"); pubCrtRspInfo( MAX_VOUSEQNO ); ERRLOG SQLCLOSECUR(Vouseqno_1_cur,"Vouseqno_1_cur") goto Exit; } /*给出口参数赋值*/ *plMinVouNum = lSeqNo+1; *plMaxVouNum = lSeqNo+*plApplyNum; /*修改凭证序号*/ sprintf( cmsvouseqno_vouseqno,"%0*ld",MAX_VOUSEQNOLEN,*plMaxVouNum); EXEC SQL UPDATE cmsvouseqno SET vouseqno=:cmsvouseqno_vouseqno WHERE CURRENT of Vouseqno_1_cur; if( SQLCODE ) { sprintf(g_acTrcMsg,"修改cmsvouseqno错! voukind[%s]",pcVouKind); TRCLOG1 sprintf(g_acRspCode,"999997"); pubCrtRspInfo( "cmsvouseqno", SQLCODE ); ERRLOG SQLCLOSECUR(Vouseqno_1_cur,"Vouseqno_1_cur") goto Exit; } } Exit: SQLCLOSECUR(Vouseqno_1_cur,"Vouseqno_1_cur") sprintf( g_acTrcMsg, "cmsApiGetCardVouNo end " ); TRCLOG2 if( !strcmp( g_acRspCode, RSP_OK ) ) return SUCCESS; else return FAILED ;}/******************************************************* ** 函数名称:cmsApiCheckCardVouNo ** 功能描述: 检查卡凭证号是否已使用,并返回新的未用凭证号 ** 输入参数: ** pcVouKind ---- 卡凭证类别 ** pcPreCharCode ---- 冠字号码 ** pcVouNo ---- 卡凭证号码 ** 输出参数: ** pcVouNo ---- 卡凭证号码 ** 说 明: 如果凭证号码已经被使用,重新获取凭证号码,未使用作为输出参数返回,否则如果凭证号码未使用,则直接作为输出参数返回。 ** 涉及库表: cmsvouseqno 卡凭证序号表 ** cmschoosereg 卡选号登记簿 ** 返回结果:int 0 成功 -1 失败 ** 作 者 : Feng ** 版本创建日期 : 2006/01/05 ** 修改记录 : ** 修改人 修改日期 修改位置*******************************************************/int cmsApiCheckCardVouNo( pcVouKind,pcPreCharCode, pcVouNo )char *pcVouKind; /*卡凭证种类*/char *pcPreCharCode; /*卡凭证冠字号码*/char *pcVouNo; /*卡凭证号码*/{ /*定义 局部变量*/ struct cmschoosereg stCmsChooseReg; /*卡选号登记簿*/ char acVouKind[ VOUKIND_LEN + 1 ]; /* 凭证类别 */ char acVouNo[ VOUNO_LEN + 1 ]; /* 凭证号码 */ char acPreCharCode[ PRECHARCODE_LEN + 1 ]; /* 冠字号码 */ long lSeqNo; /*临时凭证序号*/ long lNum=0, lMinNum=0, lMaxNum=0; int iRtn=0; sprintf( g_acTrcMsg, "cmsApiCheckCardVouNo begin " ); TRCLOG2 /*初始化结构*/ memset( acVouKind, 0x00, sizeof( acVouKind ) ); memset( acVouNo, 0x00, sizeof( acVouNo ) ); memset( acPreCharCode, 0x00, sizeof( acPreCharCode ) ); strcpy( acVouKind, pcVouKind ); strcpy( acVouNo, pcVouNo ); strcpy( acPreCharCode, pcPreCharCode ); while ( 1 ) { /*将输入参数赋值给结构*/ memset( &stCmsChooseReg, 0x00, sizeof( struct cmschoosereg ) ); strcpy(stCmsChooseReg.voukind, acVouKind); strcpy(stCmsChooseReg.precharcode, acPreCharCode); strcpy(stCmsChooseReg.vouno, acVouNo); pubStoVCmschoosereg( &stCmsChooseReg ); EXEC SQL SELECT * FROM cmschoosereg WHERE voukind = :cmschoosereg_voukind AND precharcode = :cmschoosereg_precharcode AND vouno = :cmschoosereg_vouno AND validf = '0'; if ( SQLCODE == SQLNOTFOUND ) /* 记录不存在 凭证可以使用 */ { strcpy( pcVouNo, acVouNo ); break; } else if ( SQLCODE ) { strcpy( g_acRspCode, "999996" ); pubCrtRspInfo( "cmschoosereg", SQLCODE ); ERRLOG goto Exit; } lNum = 1; iRtn = cmsApiGetCardVouNo( acVouKind, acPreCharCode, &lNum, &lMinNum, &lMaxNum ); if ( iRtn ) { ERRLOG goto Exit; } sprintf( acVouNo, "%.*ld",MAX_VOUSEQNOLEN,lMinNum); }Exit: sprintf( g_acTrcMsg, "cmsApiCheckCardVouNo end " ); TRCLOG2 if( !strcmp( g_acRspCode, RSP_OK ) ) return SUCCESS; else return FAILED ;}/******************************************************* ** 函数名称:cmsApiCheckVouNo ** 功能描述: 检查卡凭证号是否已使用 ** 输入参数: ** pcVouKind ---- 卡凭证类别 ** pcPreCharCode ---- 冠字号码 ** pcVouNo ---- 卡凭证号码 ** 输出参数: ** 说 明: 如果凭证号码已经被使用,返回-1,否则为0 ** 涉及库表: ** cmschoosereg 卡选号登记簿 ** 返回结果:int 0 成功 -1 失败 ** 作 者 : Feng ** 版本创建日期 : 2006/01/05 ** 修改记录 : ** 修改人 修改日期 修改位置*******************************************************/int cmsApiCheckVouNo( pcVouKind,pcPreCharCode, pcVouNo )char *pcVouKind; /*卡凭证种类*/char *pcPreCharCode; /*卡凭证冠字号码*/char *pcVouNo; /*卡凭证号码*/{ /*定义 局部变量*/ struct cmschoosereg stCmsChooseReg; /*卡选号登记簿*/ char acVouKind[ VOUKIND_LEN + 1 ]; /* 凭证类别 */ char acVouNo[ VOUNO_LEN + 1 ]; /* 凭证号码 */ char acPreCharCode[ PRECHARCODE_LEN + 1 ]; /* 冠字号码 */ sprintf( g_acTrcMsg, "cmsApiCheckVouNo begin " ); TRCLOG2 /*初始化结构*/ memset( acVouKind, 0x00, sizeof( acVouKind ) ); memset( acVouNo, 0x00, sizeof( acVouNo ) ); memset( acPreCharCode, 0x00, sizeof( acPreCharCode ) ); strcpy( acVouKind, pcVouKind ); strcpy( acVouNo, pcVouNo ); strcpy( acPreCharCode, pcPreCharCode ); /*将输入参数赋值给结构*/ memset( &stCmsChooseReg, 0x00, sizeof( struct cmschoosereg ) ); strcpy(stCmsChooseReg.voukind, acVouKind); strcpy(stCmsChooseReg.precharcode, acPreCharCode); strcpy(stCmsChooseReg.vouno, acVouNo); pubStoVCmschoosereg( &stCmsChooseReg ); EXEC SQL SELECT * FROM cmschoosereg WHERE voukind = :cmschoosereg_voukind AND precharcode = :cmschoosereg_precharcode AND vouno = :cmschoosereg_vouno AND validf = '0'; if ( SQLCODE == SQLNOTFOUND ) /* 记录不存在 凭证可以使用 */ ; else if ( SQLCODE ) { strcpy( g_acRspCode, "999996" ); pubCrtRspInfo( "cmschoosereg", SQLCODE ); ERRLOG goto Exit; } else { strcpy( g_acRspCode, "CMS221" ); pubCrtRspInfo( pcVouKind, pcPreCharCode, pcVouNo ); ERRLOG goto Exit; }Exit: sprintf( g_acTrcMsg, "cmsApiCheckVouNo end " ); TRCLOG2 if( !strcmp( g_acRspCode, RSP_OK ) ) return SUCCESS; else if ( !strcmp( g_acRspCode, "CMS221" ) ) return TRUE; else return FAILED ;}/******************************************************* ** 函数名称:cmsApiCheckCardSeqNo ** 功能描述: 检查卡顺序号是否已使用 ** 输入参数: ** pstCmsCardKind ---- 卡片种类表 ** pcAreaCode ---- 地区代码 ** plCardSeqNo ---- 卡顺序号码 ** 输出参数: ** 说 明: 如果凭证号码已经被使用,返回-1,否则为0 ** 涉及库表: ** cmschoosereg 卡选号登记簿 ** 返回结果:int 0 成功 -1 失败 ** 作 者 : Feng ** 版本创建日期 : 2006/01/05 ** 修改记录 : ** 修改人 修改日期 修改位置*******************************************************/int cmsApiCheckCardSeqNo( pstCmsCardKind,pcAreaCode, plCardSeqNo )struct cmscardkind *pstCmsCardKind; /*卡片种类表*/char *pcAreaCode; /*地区代码*/long *plCardSeqNo; /*卡顺序号码*/{ /*定义 局部变量*/ struct cmschoosereg stCmsChooseReg; /*卡选号登记簿*/ int iRtn=0; sprintf( g_acTrcMsg, "cmsApiCheckCardSeqNo begin " ); TRCLOG2 /*初始化结构*/ memset( &stCmsChooseReg, 0x00, sizeof( struct cmschoosereg ) ); /*将输入参数赋值给结构*/ strcpy(stCmsChooseReg.cardkind, pstCmsCardKind->cardkind); strcpy(stCmsChooseReg.areacode, pcAreaCode); stCmsChooseReg.cardseqno = *plCardSeqNo ; pubStoVCmschoosereg( &stCmsChooseReg ); EXEC SQL SELECT * FROM cmschoosereg WHERE cardkind = :cmschoosereg_cardkind AND areacode = :cmschoosereg_areacode AND cardseqno = :cmschoosereg_cardseqno AND validf = '0'; if ( SQLCODE == SQLNOTFOUND ) /* 记录不存在 顺序号可以使用 */ ; else if ( SQLCODE ) { strcpy( g_acRspCode, "999996" ); pubCrtRspInfo( "cmschoosereg", SQLCODE ); ERRLOG goto Exit; } else { strcpy( g_acRspCode, "CMS220" ); pubCrtRspInfo( pstCmsCardKind->cardkind, pcAreaCode, *plCardSeqNo ); ERRLOG goto Exit; }Exit: sprintf( g_acTrcMsg, "cmsApiCheckCardSeqNo end " ); TRCLOG2 if( !strcmp( g_acRspCode, RSP_OK ) ) return SUCCESS; else if ( !strcmp( g_acRspCode, "CMS220" ) ) return TRUE; else return FAILED ;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -