📄 cms543.sqc
字号:
/******************************************************************** ** 源码文件名称 : cms543.SQC ** 所属子系统 : CMS ** 当前文件版本 : 4.0.0.0 ** 作者 : Feng ** 版本创建日期 : 2006/01/11 ** 功能描述 : 单张选号预制卡申请子交易 ** 修改记录 : ** 修改人 修改日期 修改日期*********************************************************************/#include "code.h"#include "attrdef.h"#include "sysdef.h"#include "pubcom.h"#include "cmscode.h"#include "cmscardinfo.h"#include "cmscardkind.h"#include "cmsacctm.h"#include "cmspcdreg.h"#include "cmschoosereg.h"#include "pubbranchinfo.h"#include "cmsseqm.h"#include "cmsvouseqno.h"#include "cmsruledef.h"EXEC SQL INCLUDE SQLCA;int cmsSingleMakeCardReq( PUBCOM *pstPubcom ){ /*定义局部变量*/ char acCardKind[CARDKIND_LEN+1] ; /*卡种*/ char acTranDate[DATE_LEN+1] ; /*交易日期*/ char acWishDate[DATE_LEN+1] ; /*希望制卡日期*/ char acCheckFlag[ BIT8_LEN + 1 ]; /* 检查卡片种类标志 */ char acCardSeq[ VOUNO_LEN + 1 ]; /* 卡顺序号 */ char acCardNo[ CARDNO_LEN + 1 ]; /* 卡号 */ char acCustomId[ CUSTNO_LEN + 1 ]; /* 客户号 */ char acCustomName[ CUSTNAME_LEN + 1 ]; /* 客户姓名 */ char acVouNo[ VOUNO_LEN + 1 ]; /* 卡凭证号 */ char acMethod[ PARAMVALUE_LEN+1 ]; /* 凭证号码方式 */ char acField1[ BIT32_LEN ]; /* 域1数值 */ char acField2[ BIT32_LEN ]; /* 域2数值 */ char acField3[ BIT32_LEN ]; /* 域3数值 */ char acField4[ BIT32_LEN ]; /* 域4数值 */ char acField5[ BIT32_LEN ]; /* 域5数值 */ char acField6[ BIT32_LEN ]; /* 域6数值 */ char acField7[ BIT32_LEN ]; /* 域7数值 */ char acField8[ BIT32_LEN ]; /* 域8数值 */ long lCardSeq; /* 卡顺序号 */ int iRtn; long lNum=0, lMinNum=0, lMaxNum=0; struct cmspcdreg stPcdReg; /* 预制卡申请登记簿 */ struct cmscardkind stCardKind; /* 卡片种类表 */ struct cmsacctm stCmsAcctM; /* 卡帐户对照表 */ struct cmscardinfo stCmsCardInfo; /* 卡片信息表 */ struct cmschoosereg stCmsChReg; /* 卡选号登记簿 */ struct pubbranchinfo stBrcInfo; /* 机构关系表 */ struct cmsruledef stCmsRuleDef; /* 卡号规则定义表 */ strcpy( g_acTrcMsg, "子交易: 单张选号预制卡申请开始.." ); TRCLOG4 strcpy( g_acRspCode, RSP_OK ); memset( &stPcdReg, 0x00, sizeof ( struct cmspcdreg ) ); memset( acCheckFlag, 0x00, sizeof( acCheckFlag ) ); memset( acCardKind, 0x00, sizeof( acCardKind ) ); memset( acTranDate, 0x00, sizeof( acTranDate ) ); memset( acWishDate, 0x00, sizeof( acWishDate ) ); memset( acVouNo, 0x00, sizeof( acVouNo ) ); memset( acCardSeq, 0x00, sizeof( acCardSeq ) ); memset( acCardNo, 0x00, sizeof( acCardNo ) ); memset( acCustomId, 0x00, sizeof( acCustomId ) ); memset( acCustomName, 0x00, sizeof( acCustomName ) ); memset( &stCardKind, 0x00, sizeof ( struct cmscardkind ) ); memset( &stCmsAcctM, 0x00, sizeof ( struct cmsacctm ) ); memset( &stCmsCardInfo, 0x00, sizeof ( struct cmscardinfo ) ); memset( &stCmsChReg, 0x00, sizeof ( struct cmschoosereg ) ); memset( &stBrcInfo, 0x00, sizeof( struct pubbranchinfo ) ); memset( acMethod, 0x00, sizeof( acMethod ) ); /* 取数据字典值 */ getstring("CardKind", stCardKind.cardkind ); /*卡种 */ getstring("WishDate", acWishDate ); /*希望制卡日期*/ getstring("CardSeq", acCardSeq ); /* 卡顺序号 */ getstring("VouNo", acVouNo ); /* 凭证号码 */ getstring("CustomId", acCustomId ); /* 客户号码 */ getstring("CustomName", acCustomName ); /* 客户姓名 */ /* 获取卡片种类表 */ if( pubReadCmscardkind( &stCardKind ) ) { ERRLOG goto Exit; } sprintf( g_acTrcMsg, "Begin pubReadCmsruledef " ); TRCLOG3 /* 获取卡号生成规则定义表 */ strcpy( stCmsRuleDef.ruleseqno, stCardKind.ruleseqno ); if ( pubReadCmsruledef( &stCmsRuleDef ) ) { ERRLOG goto Exit; } sprintf( g_acTrcMsg, "Begin nGetMkCardParam " ); TRCLOG3 /* 调用生成卡号所需要数据的内部函数 */ iRtn = nGetMkCardParam( pstPubcom, &stCmsRuleDef, &stCardKind, \ acField1, acField2, acField3, acField4, \ acField5, acField6, acField7, acField8 ); if ( iRtn ) { ERRLOG goto Exit; } /* 检查卡片种类(全部属性)API是否为启用标志、检查卡种交易类型 */ /* 检查业务发生地、是否是记名卡 */ acCheckFlag[ BIT1_LEN ] = CHECK_YES; /* 检查启用标志 */ acCheckFlag[ BIT2_LEN ] = CHECK_NO; /* 检查卡种交易类型 */ acCheckFlag[ BIT3_LEN ] = CHECK_NO; /* 检查业务发生地 */ acCheckFlag[ BIT4_LEN ] = CHECK_NO; /* 检查发卡对象 单/个 */ acCheckFlag[ BIT5_LEN ] = CHECK_NO; /* 检查记名标志 */ acCheckFlag[ BIT6_LEN ] = CHECK_NO; /* 不检查挂失标志 */ iRtn = cmsApiChkCardKind( &stCardKind, acCheckFlag, LOGOTHER, pstPubcom->acChannelId, CZEROS, UNREGNAMECARD, CZEROS, "" ); if ( iRtn ) { ERRLOG return FAILED; } /* 判断希望制卡日期是否大于业务日期*/ strcpy( acTranDate, acWishDate ); cmsDelDelimiter( acTranDate, '-' ); if( atol( acTranDate ) < atol( pstPubcom->acTranDate8 ) ) { sprintf(g_acRspCode,"999999"); sprintf(g_acRspMsg,"希望制卡日期小于业务日期"); ERRLOG goto Exit; } /* 获取机构信息 */ memset( &stBrcInfo, 0x00, sizeof( struct pubbranchinfo ) ); strcpy( stBrcInfo.brccode, pstPubcom->acBrc ); iRtn = pubReadPubbranchinfo( &stBrcInfo ); if ( iRtn ) { ERRLOG goto Exit; } /* 获取凭证号码生成方式 */ if ( cmsApiGetVouMethod( acMethod ) ) { ERRLOG goto Exit; } if ( acMethod [ BIT1_LEN ] != METHOD_AREACARDSEQNO ) { strcpy( stBrcInfo.areacode, " " ); } else { if ( !strlen( stBrcInfo.areacode ) ) { strcpy( g_acRspCode, "CMS217" ); pubCrtRspInfo( stBrcInfo.brccode ); ERRLOG goto Exit; } } /* 检查卡顺序号是否已经选号使用 */ lCardSeq = atol( acCardSeq ); sprintf( g_acTrcMsg, "seq=[%ld][%s]", lCardSeq, acCardSeq ); TRCLOG3 iRtn = cmsApiCheckCardSeqNo( &stCardKind, stBrcInfo.areacode, &lCardSeq ); if ( iRtn ) { ERRLOG goto Exit; } /* 检查卡顺序号是否已经批量使用 */ pubInitCmsseqm(); strcpy( cmsseqm_cardkind, stCardKind.cardkind ); strcpy( cmsseqm_cardbin, stCardKind.cardbin ); strcpy( cmsseqm_cardidkind, stCardKind.cardidkind ); strcpy( cmsseqm_areacode, stBrcInfo.areacode ); EXEC SQL SELECT * INTO R_CMSSEQM FROM cmsseqm WHERE cardkind = :cmsseqm_cardkind AND cardbin = :cmsseqm_cardbin AND cardidkind = :cmsseqm_cardidkind AND areacode = :cmsseqm_areacode; if ( SQLCODE == SQLNOTFOUND ) { strcpy( g_acRspCode, "999996" ); sprintf( g_acRspMsg, "卡顺序号未配置该卡种信息" ); ERRLOG goto Exit; } else if ( SQLCODE ) { strcpy( g_acRspCode, "999996" ); pubCrtRspInfo( "cmsseqm",SQLCODE ); ERRLOG goto Exit; } if ( lCardSeq <= atol( cmsseqm_cardseqno ) ) { strcpy( g_acRspCode, "CMS220" ); pubCrtRspInfo( stCardKind.cardkind, stBrcInfo.areacode, lCardSeq ); ERRLOG goto Exit; } /* 处理卡凭证号码 */ strpack( acVouNo ); if ( strlen( acVouNo ) ) /* 检查凭证号码是否已经使用 */ { sprintf( acVouNo, "%0*s", MAX_VOUSEQNOLEN, acVouNo ); iRtn = cmsApiCheckVouNo( stCardKind.voukind, stCardKind.cardbin, acVouNo ); if ( iRtn ) { ERRLOG goto Exit; } /* 检查卡凭证号是否已经批量使用 */ pubInitCmscardinfo(); strcpy( cmscardinfo_voukind, stCardKind.voukind ); strcpy( cmscardinfo_precharcode, stCardKind.cardbin ); strcpy( cmscardinfo_vouno, acVouNo ); EXEC SQL SELECT * INTO R_CMSCARDINFO FROM cmscardinfo WHERE voukind = :cmscardinfo_voukind AND precharcode = :cmscardinfo_precharcode AND vouno = :cmscardinfo_vouno; if ( SQLCODE && SQLCODE != SQLNOTFOUND ) { strcpy( g_acRspCode, "999996" ); pubCrtRspInfo( "cmsvouseqno",SQLCODE ); ERRLOG goto Exit; } else if ( !SQLCODE ) { strcpy( g_acRspCode, "CMS221" ); pubCrtRspInfo( stCardKind.voukind, stCardKind.cardbin, acVouNo ); ERRLOG goto Exit; } } else /* 自动生成凭证号码 */ { lNum = 1; iRtn = cmsApiGetCardVouNo( stCardKind.voukind, stCardKind.cardbin, &lNum, &lMinNum, &lMaxNum ); if ( iRtn ) { ERRLOG goto Exit; } sprintf( acVouNo, "%.*ld",MAX_VOUSEQNOLEN,lMinNum); } /* 调用生成卡号API */ iRtn = cmsApiGenCardNo( &stCardKind, &stCmsRuleDef, \ &lCardSeq, acField1, acField2, acField3, \ acField4, acField5, acField6, acField7, acField8, \ acCardNo ); /* 生成卡号错误 */ if ( iRtn ) { ERRLOG goto Exit; } /* 写选号登记簿 */ strcpy( stCmsChReg.trandate, pstPubcom->acTranDate ); /* 申请日期 */ stCmsChReg.serseqno = pstPubcom->lSerSeqNo; /* 流水号 */ strcpy( stCmsChReg.brc, pstPubcom->acBrc ); /* 申请机构 */ strcpy( stCmsChReg.teller, pstPubcom->acTeller ); /* 申请柜员 */ strcpy( stCmsChReg.cardkind, stCardKind.cardkind ); /* 卡片种类 */ strcpy( stCmsChReg.vouno, acVouNo ); /* 凭证号码 */ stCmsChReg.cardseqno = lCardSeq; /* 卡顺序号 */ strcpy( stCmsChReg.areacode, stBrcInfo.areacode ); /* 地区代码 */ strcpy( stCmsChReg.voukind, stCardKind.voukind ); /* 凭证种类 */ strcpy( stCmsChReg.precharcode, stCardKind.cardbin ); /* 冠字号码 */ strcpy( stCmsChReg.cardno, acCardNo ); /* 卡号 */ strcpy( stCmsChReg.customid, acCustomId ); /* 客户号 */ strcpy( stCmsChReg.customname, acCustomName ); /* 客户姓名 */ stCmsChReg.validf[ BIT1_LEN ] = FLAG_NORMAL; /* 有效标志 */ iRtn = pubInstCmschoosereg( &stCmsChReg ) ; if ( iRtn ) { ERRLOG goto Exit; } /*写预制卡登记簿 */ stPcdReg.serseqno = pstPubcom->lSerSeqNo; /* 流水号 */ sprintf( stPcdReg.vouchno,"%s%08ld",pstPubcom->acTranDate8,stPcdReg.serseqno); strcpy( stPcdReg.aplydate, pstPubcom->acTranDate );/* 申请日期 */ strcpy( stPcdReg.wishdate, acWishDate ); /* 制卡日期 */ strcpy( stPcdReg.aplybrc, pstPubcom->acBrc ); /* 申请机构 */ strcpy( stPcdReg.aplyteller,pstPubcom->acTeller ); /* 申请柜员 */ strcpy( stPcdReg.authteller,pstPubcom->acAteller ); /* 授权柜员 */ strcpy( stPcdReg.cardkind, stCardKind.cardkind ); /* 卡片种类 */ strcpy( stPcdReg.voukind, stCardKind.voukind ); /* 凭证种类 */ strcpy( stPcdReg.svouno, acVouNo ); /* 凭证号码 */ strcpy( stPcdReg.evouno, acVouNo ); /* 凭证号码 */ strcpy( stPcdReg.scardno, acCardNo ); /* 卡号 */ strcpy( stPcdReg.ecardno, acCardNo ); /* 卡号 */ strcpy( stPcdReg.custno, acCustomId ); /* 客户号 */ strcpy( stPcdReg.custname, acCustomName ); /* 客户姓名 */ stPcdReg.aplyflg[BIT1_LEN]=SINCHOOSEPLY; /* 申请标志 */ stPcdReg.applflg[BIT1_LEN]=APPLYREG; /* 状态标志 */ stPcdReg.processflg[BIT1_LEN]=MKFILE_UNDONE; /* 处理标志 */ stPcdReg.aplynum = 1; /* 申请数量 */ if( pubInstCmspcdreg( &stPcdReg ) ) { ERRLOG goto Exit; } /*写子交易流水*/ iRtn = cmsApiInsTranLog( pstPubcom, &stCmsCardInfo, &stCmsAcctM, "申请", "单张选号预制卡申请" ); if( iRtn ) { ERRLOG goto Exit; } /* 子交易出口 */ setstring("CardNo", acCardNo ); /* 卡号 */ setstring("VouNo", acVouNo ); /* 凭证号码 */ strcpy( g_acTrcMsg, "子交易: 预制卡申请结束.." ); TRCLOG4 pubCrtRspInfo();Exit: if( !strcmp( g_acRspCode, RSP_OK ) ) return SUCCESS; else return FAILED ;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -