📄 mcheck.c
字号:
/* 日对帐:Check 输入参数: 1 银行序号 2 参考确认销帐 2 截止对帐日期 8 截止的对帐的日期YYYYMMDD 3 结束标志 1 1=该数据包是最后一个,这时开始真实对帐,0=没有结束 4 记录数n 4 本次对帐的记录数,因对帐数据可能太多,故将对帐数据分批转送,用END_FLAG标志是否结束,每次最多2000条数据 5 对帐数据 76 * n 本次传送的数据包,格式如下:5的格式: 操作流水 CHAR(20) 销帐流水或返销流水 合计金额 CHAR(13) ##########.## 客户编号 CHAR(10) 用于简单校验 操作日期 CHAR(8) YYYYMMDD 电费笔数 CHAR(4) 打印标志 CHAR(1) 是否打印发票标志 1-打印;0-不打印 返销时的旧流水号 CHAR(20) --返销时的原销帐流水,缴费=空 输出参数: 1 返回状态(可以转换成int型) 8 0--成功;-1--失败*/#include "public.h"#ifdef __cplusplusextern "C"#endifvoid#ifdef MW_CICSmain(MW_SVCINFO * transb)#endif#ifdef MW_TUXEDOMCHECK(MW_SVCINFO * transb)#endif{/*一次转送的记录数*/#define CHECK_REC_COUNT 2000/*对帐的每条记录的字节数*/#define CHECK_REC_SIZE 76 /*定义输入参数*/ int iBankSerial = 0; char szCheckDate[9] = ""; int nRowCount = 0; char szEndFlag[2] = ""; char *szCheckData; /*定义数据库变量*/ char szKHBH[11] = ""; char szPaySerialNbr[21] = ""; double dPayAmount = 0; char szOperDate[9] = ""; int iItemCount = 0; char szPrintFlag[2] = ""; char szPaySerialOld[21] = ""; /*定义临时变量*/ char szMsg[255]; void *ppVar[10]; long nVarLen[10]; char szTemp[100] = ""; char szSql[512]; BOOL bRet; int nStatus = 0; unsigned char pParam[] = TYPE_INT TYPE_CHAR TYPE_INT; int i =0; int iReturn = 0; char *szInBuf; CMiddleWare mwMidWare; MW_Init(&mwMidWare,transb); szInBuf = MW_GetInBuf(&mwMidWare); if (szInBuf == NULL) { gf_Return(&mwMidWare,-1,"没有输入参数!"); return; }/* MW_Trace("OK1");*/ MW_AllocateString(&mwMidWare,1024); /*取输入的对帐数据:BANK_SERIAL(2)CHECK_DATE(8)END_FLAG(1)ROW_COUNT(4) 51 * n*/ strncpy(szTemp,szInBuf,2); szTemp[2] = '\0'; iBankSerial = atoi(szTemp); strncpy(szCheckDate,szInBuf + 2,8); szCheckDate[8] = '\0'; strncpy(szEndFlag,szInBuf + 10,1); szEndFlag[1] = '\0'; strncpy(szTemp,szInBuf + 11,4); szTemp[4] = '\0'; nRowCount = atoi(szTemp); szCheckData = (char *)(szInBuf + 15); szCheckData[nRowCount * CHECK_REC_SIZE] = '\0';/* MW_GetValue(&mwMidWare,BANK_CODE,"BANK_CODE",szBankCode,sizeof(szBankCode)); MW_GetValue(&mwMidWare,END_FLAG,"END_FLAG",szEndFlag,sizeof(szEndFlag)); MW_GetValue(&mwMidWare,CHECK_DATE,"CHECK_DATE",szCheckDate,sizeof(szCheckDate)); MW_GetValueInt(&mwMidWare,ROW_COUNT,"ROW_COUNT",&nRowCount); MW_GetValue(&mwMidWare,CHECK_DATA,"CHECK_DATA",szCheckData,sizeof(szCheckData));*/ if (strlen(szCheckData) < nRowCount * CHECK_REC_SIZE) { gf_Return(&mwMidWare,-2,"数据传送失败!"); return; }/* MW_Trace("OK2");*/ if(!DB_BlkCopyInPrepare(&theDatabase, "BANK_CHECK_SERIAL", 8)) { gf_Return(&mwMidWare,-1,"批量入库Prepare失败!"); return; }/* MW_Trace("OK2.1");*/ ppVar[0] = &iBankSerial; ppVar[1] = szPaySerialNbr; ppVar[2] = &dPayAmount; ppVar[3] = &iItemCount; ppVar[4] = szOperDate; ppVar[5] = szKHBH; ppVar[6] = szPrintFlag; ppVar[7] = szPaySerialOld; nVarLen[0] = 10; nVarLen[1] = 20; nVarLen[2] = CS_UNUSED; nVarLen[3] = 10; nVarLen[4] = 8; nVarLen[5] = 10; nVarLen[6] = 1; nVarLen[7] = 20;/* MW_Trace("OK2.5");*/ for (i=0;i < nRowCount;i++) { /*取一行数据;*/ memcpy(szPaySerialNbr,szCheckData + i * CHECK_REC_SIZE ,20); szPaySerialNbr[20] = '\0'; memcpy(szTemp,szCheckData + i * CHECK_REC_SIZE + 20,13); szTemp[13] = '\0'; dPayAmount = atof(szTemp); memcpy(szKHBH,szCheckData + i * CHECK_REC_SIZE + 33,10); szKHBH[10] = '\0'; memcpy(szOperDate,szCheckData + i * CHECK_REC_SIZE + 43,8); szOperDate[8] = '\0'; strncpy(szTemp,szCheckData + i * CHECK_REC_SIZE + 51,4); szTemp[4] = '\0'; iItemCount = atoi(szTemp); strncpy(szPrintFlag,szCheckData + i * CHECK_REC_SIZE + 55,1); szPrintFlag[1] = '\0'; strncpy(szPaySerialOld,szCheckData + i * CHECK_REC_SIZE + 56,20); szPaySerialOld[20] = '\0'; //将流水插入表中 DB_BlkCopyInExecute(&theDatabase, ppVar, nVarLen); }/* MW_Trace("OK3");*/ DB_BlkCopyInDone(&theDatabase);/* MW_Trace("OK4");*/ //调用存储过程进行核对,可以考虑按日对帐的方式,每次对帐都是一天的所有流水全部核对, //这样可以核对在电力有而在银行没有的流水。 if (szEndFlag[0] == '1') { ppVar[0] = &iReturn; bRet = DB_ExecuteStoredProcedureWithResult(&theDatabase, "Up_c_bank_check ", &nStatus, ppVar,1, pParam,iBankSerial,szCheckDate,0); if(!bRet || nStatus) //失败 { if (iReturn >=0) iReturn = -1; gf_Return(&mwMidWare,iReturn,"执行Up_c_bank_check失败"); return; } }/* MW_Trace("OK5");*//* //提交,返回*/ gf_Return(&mwMidWare,iReturn,""); return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -