📄 testcheck.c
字号:
/* 日对帐:Check 输入参数: BANK_CODE 请求对帐的银行代码,即给银行代收的工号 END_FLAG 发送的对帐数据是否结束的标志 0-没有结束;1-结束 CHECK_DATE 请求对帐的日期(yyyymmdd) ROW_COUNT 对帐的记录数 CHECK_DATA 按一定格式的对帐数据(全是字符串的方式转送) 测试格式如下:KHBH(10)SERIAL(10)AMOUNT(20)OPE_DATE(8yyyymmdd) 将数据分解成如下格式 BANK_CODE char(10) not null, KHBH char(10) not null, PAY_SERIAL_NBR int not null, PAY_AMOUNT numeric(14,4) not null, PAY_DATE char(8) not null 插入到GJL_BANK_SERIAL中,当END_FLAG = 1的执行up_c_gjl_test_check()进行对帐*/#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 42 char szMsg[255]; void *ppVar[5]; long nVarLen[5]; char szTemp[100] = ""; char szSql[512]; BOOL bRet; int nStatus = 0; unsigned char pParam[] = TYPE_CHAR TYPE_CHAR; int nCheckCount = 0; int i =0; char szKHBH[11] = ""; int nPaySerialNbr = 0; double dPayAmount = 0; char szOperDate[9] = ""; CMiddleWare mwMidWare; char szBankCode[11] = ""; char szEndFlag[2] = ""; char szCheckDate[9] = ""; char szCheckData[CHECK_REC_COUNT * CHECK_REC_SIZE + 1]; MW_Init(&mwMidWare,transb); MW_Allocate(&mwMidWare,1024); /*取输入的对帐数据*/ memset(szBankCode,32,sizeof(szBankCode)); MW_GetValue(&mwMidWare,BANK_CODE,"BANK_CODE",szBankCode,sizeof(szBankCode)); szBankCode[strlen(szBankCode)] = 32; szBankCode[10] = '\0'; 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",&nCheckCount); MW_GetValue(&mwMidWare,CHECK_DATA,"CHECK_DATA",szCheckData,sizeof(szCheckData)); sprintf(szMsg,"OK1 RowCount = %d,CheckDate = %s,EndFlag = %s,BankCode = %s,DataSize = %d",nCheckCount,szCheckDate,szEndFlag,szBankCode,strlen(szCheckData)); MW_Trace(szMsg);// MW_Trace(szCheckData); if (strlen(szCheckData) < nCheckCount * CHECK_REC_SIZE) { gf_Return(&mwMidWare,-2,"数据传送失败!"); return; } if(!DB_BlkCopyInPrepare(&theDatabase, "GJL_SERIAL_BANK", 5)) { gf_Return(&mwMidWare,-1,"批量入库Prepare失败!"); return; } ppVar[0] = szBankCode; ppVar[1] = szKHBH; ppVar[2] = &nPaySerialNbr; ppVar[3] = &dPayAmount; ppVar[4] = szOperDate; nVarLen[0] = 10; nVarLen[1] = 10; nVarLen[2] = 10; nVarLen[3] = CS_UNUSED; nVarLen[4] = 8; MW_Trace("OK2"); for (i=0;i < nCheckCount;i++) { //取一行数据; memcpy(szKHBH,szCheckData + i * CHECK_REC_SIZE,10); szKHBH[10] = '\0'; memcpy(szTemp,szCheckData + i * CHECK_REC_SIZE + 10,10); szTemp[10] = '\0'; nPaySerialNbr = atoi(szTemp); memcpy(szTemp,szCheckData + i * CHECK_REC_SIZE + 20,14); szTemp[14] = '\0'; dPayAmount = atof(szTemp); memcpy(szOperDate,szCheckData + i * CHECK_REC_SIZE + 34,8); szOperDate[8] = '\0'; //将流水插入表中// sprintf(szMsg,"%10s %10d %20.4f %s",szKHBH,nPaySerialNbr,dPayAmount,szOperDate); DB_BlkCopyInExecute(&theDatabase, ppVar, nVarLen); } MW_Trace("OK3"); DB_BlkCopyInDone(&theDatabase); MW_Trace("OK4"); //调用存储过程进行核对,可以考虑按日对帐的方式,每次对帐都是一天的所有流水全部核对, //这样可以核对在电力有而在银行没有的流水。 if (szEndFlag[0] == '1') { bRet = DB_ExecuteStoredProcedure(&theDatabase, "up_c_gjl_test_check", &nStatus, pParam, szCheckDate,szBankCode); if(!bRet || nStatus) //失败 { gf_Return(&mwMidWare,-1,"执行up_c_gjl_test_check失败"); return; } } MW_Trace("OK5"); //提交,返回 gf_Return(&mwMidWare,0,""); return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -