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 + -
显示快捷键?