db_func.cpp
来自「液晶电视完整代码可实现人机界面」· C++ 代码 · 共 428 行
CPP
428 行
#include "db_func.h"//================================================// Function: RTrim()// Purpose: 删除字符串右边的空格和 tab字符. // Author: HCH // Date: 2002.03.26//================================================void Trim(char *str){ char *p; p = str + strlen(str) - 1; while (p >= str && (*p == ' ' || *p == '\t') ) { *p = 0; p--; }; return;}//********************************************* // Added by MIQH -- 2002.05.20 // 函数功能: 根据417数据类型转换不同的数据内容// argv[0]:数据类型// inData: 数据内容//*********************************************/int Proc417CLX( int tmp, int argc, char argv[][M_MAX_PARA_LEN], char *indata, int *len, char *outdata){ static CURR_INF curr_inf; FILE * srcFile; FILE * objFile; int out_len = LINELENGTH; int CE7; char configfile[FILEPATHLEN + 1]; char logfile[FILEPATHLEN + 1]; char srcFilename[FILEPATHLEN + 1]; char objFilename[FILEPATHLEN + 1]; char srcLine[LINELENGTH + 1]; char objLine[LINELENGTH + 1]; char * frontPos; char transcode[TXCODELEN + 1]; char batchno[8 + 1]; memset( &curr_inf, 0, sizeof( CURR_INF ) ); memset(srcLine,0,LINELENGTH+1); memset(objLine,0,LINELENGTH+1);#ifdef _DEBUG_ printf("[%s-%d] =======enter file417 function!\n",__FILE__,__LINE__);#endif CE7 = atoi( argv[0] ); if ( CE7 < 100 || CE7 > 999 ) return -1; /* if( 205 == CE7 ) { memcpy( outdata, indata, strlen(indata) ); outdata[strlen(indata)] = 0; *len = strlen(outdata); return 0; }*//***************Modified by limh 1213***********/#ifdef SHANGHAI switch ( CE7 ) { case 205: 忽略更新类型和人民币符号 memcpy( outdata, indata+4, 23 ); outdata[23] = 0; *len = strlen(outdata); return 0; case 104: case 105: strcpy( outdata, "" ); *len = 0; break; default: strcpy( outdata, indata ); *len = strlen(outdata); return 0; } #endif/***************Modified by limh 1213***********/ curr_inf.workdir = getenv("HOME"); sprintf( configfile,"%s/etc/%s",getenv("HOME"),"417config.xml" ); sprintf( logfile,"%s/log/%s",getenv("HOME"),"cnapshandle.log" ); curr_inf.config = configfile; curr_inf.logfile = logfile; curr_inf.loglevel = 1; if ( InitParser( &curr_inf ) ) return -1; sprintf( srcFilename,"%s/file/file417_%03d", getenv("WORKDIR"), CE7);#ifdef SHANGHAI if ( CE7 == 104 ) sprintf( objFilename,"%s/file/%s", getenv("WORKDIR"), "AZFHHK"); else if ( CE7 == 105 ) sprintf( objFilename,"%s/file/%s", getenv("WORKDIR"), "AZFLHK");#endif sprintf( objFilename,"%s/file/%s", getenv("WORKDIR"), "bankno.dat"); srcFile = fopen(srcFilename,"r"); if(srcFile==NULL) { printf("FILE open error:[%s]\n", srcFilename); return FILE_OPEN_ERROR; } objFile = fopen(objFilename,"w"); if(objFile==NULL) { printf("FILE open error:[%s]\n", objFilename); fclose( srcFile ); return FILE_OPEN_ERROR; } //处理第一行内容 if( 205 == CE7 ) { if( fgets(srcLine, LINELENGTH, srcFile) == NULL ) { printf("Get content 417205 error!\n"); fclose(srcFile); fclose(objFile); return FILE_OPRT_ERROR; } else{ strcpy( objLine , strstr( srcLine , "CLX") + 4); objLine[strlen(objLine) - 1] = '\0'; sprintf( transcode , "417%03d%c", CE7, objLine[0] ); fprintf(objFile,"%s|%s|\n",transcode, objLine); fclose(srcFile); fclose(objFile); return 0; } } else { if( fgets(srcLine, LINELENGTH, srcFile)!=NULL ) { frontPos = strstr(srcLine,":CE7:"); if ( strncmp(argv[0], frontPos+5, 3) != 0 ) { printf("FILE content error!\n"); fclose(srcFile); fclose(objFile); return FILE_OPRT_ERROR; } //第二行内容为文件头长度,忽略 if( fgets(srcLine, LINELENGTH, srcFile)==NULL ) { fclose(srcFile); fclose(objFile); return FILE_OPRT_ERROR; } //第三行内容为文件长度,忽略 if( fgets(srcLine, LINELENGTH, srcFile)==NULL ) { fclose(srcFile); fclose(objFile); return FILE_OPRT_ERROR; } //第四行内容为更新期次,忽略 if( fgets(srcLine, LINELENGTH, srcFile)==NULL ) { fclose(srcFile); fclose(objFile); return FILE_OPRT_ERROR; } memcpy( batchno , &srcLine[8] , 8); } else { printf("FILE content error!\n"); fclose(srcFile); fclose(objFile); return FILE_OPRT_ERROR; } } //处理行号更新记录 while ( fgets(srcLine, LINELENGTH, srcFile)!=NULL ) { if ( strlen( srcLine ) < 3 || srcLine[0] > '3' || srcLine[0] < '1' ) continue; sprintf( transcode , "417%03d%c", CE7, srcLine[0] ); curr_inf.handledata.Rootcode( transcode ); out_len = LINELENGTH; if ( cnapsitf( &curr_inf, srcLine, strlen(srcLine), objLine, &out_len) ) { printf("Fail to process:\n[%s]\n", srcLine); } else { fprintf(objFile,"%s|%s|%s\n",transcode, batchno, objLine); } } fclose(srcFile); fclose(objFile); #ifdef _DEBUG_ printf("[%s-%d] ===========out file417 function!\n",__FILE__,__LINE__);#endif return 0; }//********************************************* // Added by HCF -- 2002.05.29 // 函数功能: 从字符串中定位支付报文// str: 输入字符串// obj: 支付报文// 返回: 下一支付报文起始位置,NULL表示数据不够//********************************************char *Get689Content(char *str, char *obj, char *transcode){ char * frontPos; char * backPos; frontPos = strstr(str, "{2:"); if ( frontPos == NULL ) return NULL; backPos = strstr(frontPos, "}"); // 业务头结束符 if ( backPos == NULL ) return NULL; backPos = strstr(backPos + 1, "}"); // 正文结束符 if ( backPos == NULL ) return NULL; memcpy(obj, frontPos, backPos-frontPos+1); obj[backPos-frontPos+1] = 0; strcpy( transcode, "100xxx" ); memcpy( transcode+3, frontPos+3, 3 ); return backPos+1;}//********************************************* // Added by MIQH -- 2002.05.20 // 函数功能: 解析689文件// inData: 文件名//*********************************************int file689( int tmp, int argc, char argv[][M_MAX_PARA_LEN], char *indata, int *len, char *outdata){ CURR_INF curr_inf; FILE * srcFile = NULL; FILE * objFile = NULL; int out_len = LINELENGTH; char sort689[4]; char configfile[FILEPATHLEN + 1]; char logfile[FILEPATHLEN + 1]; char objFilename[FILEPATHLEN + 1]; char srcLine[LINELENGTH + 1]; char objLine[LINELENGTH + 1]; char strtmp[2*LINELENGTH + 1]; char out_data[LINELENGTH + 1]; char * frontPos; char * backPos; char transcode[TXCODELEN + 1]; memset( &curr_inf, 0, sizeof( CURR_INF ) ); memset(sort689,0,4); memset(srcLine,0,LINELENGTH+1); memset(objLine,0,LINELENGTH+1); memset(strtmp,0,2*LINELENGTH+1); memset(out_data,0,LINELENGTH+1);#ifdef _DEBUG_ printf("[%s-%d] ===========================================enter file689 function!\n",__FILE__,__LINE__);#endif curr_inf.workdir = getenv("HOME"); sprintf( configfile,"%s/etc/%s",getenv("HOME"),"689config.xml" ); sprintf( logfile,"%s/log/%s",getenv("HOME"),"cnapshandle.log" ); curr_inf.config = configfile; curr_inf.logfile = logfile; curr_inf.loglevel = 1; if ( InitParser( &curr_inf ) ) return -1; sprintf( objFilename, "%s/file/%s", getenv("WORKDIR"), "detail.dat"); srcFile = fopen(indata,"r"); if(srcFile==NULL) { printf("FILE open error:[%s]\n", indata); return FILE_OPEN_ERROR; } objFile = fopen(objFilename,"w"); if(objFile==NULL) { printf("FILE open error[%s]\n", objFilename); fclose(srcFile); return FILE_OPEN_ERROR; } *len = 0; while ( fgets(srcLine, LINELENGTH, srcFile)!=NULL ) { int j; if ( *len == 0 ){ //处理批量头内容 frontPos = strstr(srcLine,"{B:"); backPos = strstr(srcLine,"}"); memcpy(outdata, frontPos+3,backPos-frontPos-3); outdata[backPos-frontPos-3] = 0; *len = backPos-frontPos-3; } strcat(strtmp, srcLine); frontPos = backPos = strtmp; while ( frontPos != NULL ){ backPos = frontPos ; frontPos = Get689Content( backPos, out_data, transcode ); if ( frontPos != NULL ){ curr_inf.handledata.Rootcode( transcode ); out_len = LINELENGTH; memset(objLine, 0, sizeof(objLine)); printf("transcode = [%s]\n", transcode); if ( cnapsitf( &curr_inf, out_data, strlen(out_data), objLine, &out_len) ) printf("Fail to process:\n[%s]\n", out_data); else { printf("Save:\n[%s][%d]\n", objLine, curr_inf.error_no); fprintf(objFile, "%s\n", objLine); } } } for ( j=0; backPos[j]!=0; j++ ) strtmp[j] = backPos[j]; strtmp[j] = 0; } fclose(srcFile); fclose(objFile); #ifdef _DEBUG_ printf("[%s-%d] ===========================================out file689 function!\n",__FILE__,__LINE__);#endif return 0;} int SetSerial(){ int nResCode; char sSqlCmd[512]; char BankNo[12+1]; char Str[20]; memset(Str, 0, sizeof(Str)); memset(sSqlCmd, 0, sizeof(sSqlCmd)); memset(BankNo, 0, sizeof(BankNo)); //获取代理行机构号 sprintf(sSqlCmd,"SELECT parvalue FROM syspara WHERE parcode='015'"); nResCode = clsSybCommand.GetLastRecord(sSqlCmd,BankNo,NTBSTRINGBIND); if ( nResCode <= 0 ) { exit(0); } printf("++++++++++++++++++++++++++++++++++++++++++++++\n"); printf("BankNo = [%s]\n", BankNo); printf("++++++++++++++++++++++++++++++++++++++++++++++\n"); if( strncmp( BankNo , "313333007331", 12 ) != 0) exit(0); return 0;}int Get_AgentBankNo( int tmp, int argc, char argv[][M_MAX_PARA_LEN], char *indata, int *len, char *outdata){ int nResCode; char sSqlCmd[512]; char BankNo_D[12+1]; SetSerial(); memset(sSqlCmd, 0, sizeof(sSqlCmd)); memset(BankNo_D, 0, sizeof(BankNo_D)); //获取代理行机构号 sprintf(sSqlCmd,"SELECT BANKCODE FROM BILLORG WHERE BILLORGCODE='%s'", indata); nResCode = clsSybCommand.GetLastRecord(sSqlCmd,BankNo_D,NTBSTRINGBIND); if ( nResCode <= 0 ) { printf("==获取代理行机构[%s]失败! 输入参数[%s]",BankNo_D,indata); return (-1); } else { strcpy(outdata,BankNo_D); } *len = strlen(outdata); return 0;}//**********************************************//// 功能: 静态加载数据库类函数////*********************************************void add_public(DynFuncList &dynfunclist){ dynfunclist.AddFunc("Proc417CLX", M_DBFUNC, (int (*)())Proc417CLX, 1); // 函数:处理689数据内容 dynfunclist.AddFunc("file689", M_DBFUNC, (int (*)())file689, 0); dynfunclist.AddFunc("Get_AgentBankNo", M_DBFUNC, (int (*)())Get_AgentBankNo, 1);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?