⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmaster.pc

📁 计费主程序C++开发的
💻 PC
📖 第 1 页 / 共 3 页
字号:
	//没有测试
	if((m_strTextName.Find("err")!=-1)||(m_strTextName.Find("ERR")!=-1))
	{
		m_nReturnValue=DeleteRecord();
		if(m_nReturnValue!=0) {
			m_filemanage->CloseFile();
			return(m_nReturnValue);
		}
	}	
	else if(strcasecmp(m_pGetOneNode->strCheckRepeatRecord,"ON")==0)
	{
		time(&tt);
		printf("\ttime1%s\n",ctime(&tt));
		m_nReturnValue=CheckFileDeal();
		if(m_nReturnValue!=0) {
			m_filemanage->CloseFile();
			m_Check->CheckFile(m_strTextName);
			return(m_nReturnValue);
		}
		time(&tt);
		printf("\ttime6%s\n",ctime(&tt));
	}
	else  {
		m_nReturnValue=FileDeal();
		if(m_nReturnValue<0) {
			m_filemanage->CloseFile();
			return(m_nReturnValue);
		}
	}
	return(0);
}

/************************************************************
	函数:CheckFileDeal
	功能:对文件中记录添加ISDN号,文件详单记录去重,添加日志
		  记录,写文本
	参数:无
	返回值:成功 大于或等于0 失败小于0
************************************************************/
int CMaster::CheckFileDeal()
{
	CProcessFile m_ProcFile; 		//定义文本处理的对象
	
	CStringEx strImsiAndIsdn;
	CStringEx strTmpString;

	int     nHeadID;				 //是否具有头记录的标志
	int     nTailID;				 //是否具有尾记录的标志
	int     nLineNumber;			 //详单记录号,用于去重
	int		nInsert;				 //是否插入数据库的标识
	int     nMultNumber;			 //每次处理最大行数记录的倍数
	
	m_nLine=nHeadID=nTailID=m_nRecordNumber=nLineNumber=nMultNumber=0;
	m_lRecordLength=atol(m_pGetOneNode->strRecordLength);
	m_lFileSize=m_filemanage->GetFileSize();

	// 判断文件在日志库表是否已经存在
	m_nErrFileID=0;
	m_nReturnValue=m_Oracle->FileLogRecord(m_pGetOneNode->strLogTable,
		m_strTextName);
	if(m_nReturnValue==1)	{
		m_filemanage->CloseFile();
		pBakDir=m_pGetOneNode->dir_link;
		// 文本挪移
		while(pBakDir->dlink!=NULL) {
			// nMove等于0,表示文件通过cp方式到另外一个目录
			m_nMove=1;
			if(pBakDir->dlink->dlink==NULL) {
				m_nMove=1;
			}
			m_strTmpString.Format("%s/%s",m_pGetOneNode->strTxtDir,
				m_strTextName.GetBuffer());
			m_strDestDir.Format("%s",pBakDir->strBackUpDir);
			m_nReturnValue=m_filemanage->BackUpFile(m_strTmpString,
				m_strDestDir,m_nMove);
			if(m_nReturnValue<0) {
				return(m_nReturnValue);
			}
			pBakDir=pBakDir->dlink;
		}

		// 表示文件通过mv方式到另外一个目录
		m_strTmpString.Format("%s",m_pGetOneNode->strErrorDir);
		m_strDestDir.Format("%s",pBakDir->strBackUpDir);
		m_nReturnValue=m_Check->BackUpFile(m_strDestDir,m_strTmpString,
			m_strTextName);					
		if(m_nReturnValue<0) {
			return(m_nReturnValue);
		}
		else { 
			// 挪文件成功,更新记录的状态标志
			m_nReturnValue=m_Oracle->UpdateLog(m_pGetOneNode->strLogTable,
				m_strTextName,m_nErrFileID);
			if(m_nReturnValue<0) {
				return(m_nReturnValue);
			}
		}
		return(0);
	}
	else if(m_nReturnValue==2)	{
		m_filemanage->CloseFile();
		return(0);
	}
	else if(m_nReturnValue<0) {
		return(m_nReturnValue);
	}
	else {
		time(&tt);
		printf("\ttime2%s\n",ctime(&tt));
		m_nReturnValue=m_Check->CheckFile(m_strTextName);
		if(m_nReturnValue<0) {
			return(m_nReturnValue);
		}
		pTailRecord=m_pGetOneNode->tail_link;
		while(1) {
			// 从文件中获取一行记录
			m_nReturnValue=m_filemanage->FetchOneRow(m_strTmpOneRow);
			if(m_nReturnValue==0) {
				time(&tt);
				printf("\ttime3%s\n",ctime(&tt));
				/**/
				// 记录去重,入库
				if(nLineNumber!=0) {
					m_strTableName.Format("%s",m_pGetOneNode->strRecordTable);
					m_Check->Initialize(m_strTableName,m_strTextName,nHeadID);
					nInsert=1;
					m_strTmpOneRow.Empty();
					time(&tt);
					printf("\ttime4%s\n",ctime(&tt));
					m_nReturnValue=m_Check->StoreRecord(m_strTmpOneRow,
						nInsert,nLineNumber,nMultNumber);
					if(m_nReturnValue!=0) {
						return(m_nReturnValue);
					}
					time(&tt);
					printf("\ttime5%s\n",ctime(&tt));		
					nLineNumber=0;
				}
				m_strTableName.Format("%s",m_pGetOneNode->strLogTable);
				m_strRecordFormat.Format("%s",pTailRecord->strTailRecord);
				// 添加一行日志记录
				m_ProcFile.Initialize(m_strTmpOneRow,m_strTableName,
					m_strRecordFormat,m_strTextName);
				m_nTailNumber=nTailID;
				m_nCommit=1;								
				m_nReturnValue=m_ProcFile.AddRecord(m_lFileSize,
					m_strYear_Mon,m_nCommit,m_nRecordNumber,
					m_nLine,m_nTailNumber);
				if(m_nReturnValue<0) {
					return(m_nReturnValue);
				}
				/**/
				m_filemanage->CloseFile();
				pBakDir=m_pGetOneNode->dir_link;
				// 文本挪移
				while(pBakDir->dlink!=NULL) {
					// nMove等于0,表示文件通过cp方式到另外一个目录
					m_nMove=0;
					if(pBakDir->dlink->dlink==NULL) {
						m_nMove=1;
					}
					m_strTmpString.Format("%s/%s",m_pGetOneNode->strTxtDir,
						m_strTextName.GetBuffer());
					m_strDestDir.Format("%s",pBakDir->strBackUpDir);
					m_nReturnValue=m_filemanage->BackUpFile(m_strTmpString,
						m_strDestDir,m_nMove);
					if(m_nReturnValue<0) {
						return(m_nReturnValue);
					}
					pBakDir=pBakDir->dlink;
				}

				// 表示文件通过mv方式到另外一个目录
				m_strTmpString.Format("%s",m_pGetOneNode->strErrorDir);
				m_strDestDir.Format("%s",pBakDir->strBackUpDir);
				m_nReturnValue=m_Check->BackUpFile(m_strDestDir,
					m_strTmpString,m_strTextName);					
				if(m_nReturnValue<0) {
					return(m_nReturnValue);
				}
				else { 
					// 挪文件成功,更新记录的状态标志
					m_nReturnValue=m_Oracle->UpdateLog(m_pGetOneNode->strLogTable,
						m_strTextName,m_nErrFileID);
					if(m_nReturnValue<0) {
						return(m_nReturnValue);
					}
				}
				break;							
			}
			else if(m_nReturnValue<0)	{
				return(m_nReturnValue);
			}
			else {
				m_strOneRow=m_strTmpOneRow+m_strChangedTailID;
				// 根据头记录的条数,区分记录是否为头记录
				m_nLine++;
				m_strRecordID.Format("%s",m_pGetOneNode->strHeadRecordType);
				nHeadID=atoi(m_strRecordID.GetBuffer());
				if((nHeadID-m_nLine)>=0) {
					continue;					
				}
				else	{
					// 区分记录是否为尾记录
					m_strRecordID.Format("%s",m_pGetOneNode->strTailRecordType);
					m_ProcFile.Initialize(m_strOneRow,m_strTableName,
						m_strRecordID,m_strTextName);
					m_nReturnValue=m_ProcFile.RecordType();
					if(m_nReturnValue==0)	{
						time(&tt);
						printf("\ttime5%s\n",ctime(&tt));
						// 记录去重,入库
						if(nLineNumber!=0) {
							m_strTableName.Format("%s",m_pGetOneNode->strRecordTable);
							m_Check->Initialize(m_strTableName,m_strTextName,nHeadID);
							nInsert=1;
							m_strTmpOneRow.Empty();
							m_nReturnValue=m_Check->StoreRecord(m_strTmpOneRow,
								nInsert,nLineNumber,nMultNumber);
							if(m_nReturnValue!=0) {
								return(m_nReturnValue);
							}
							nLineNumber=0;
						}
						nTailID++;
						m_strTableName.Format("%s",m_pGetOneNode->strLogTable);
						m_strRecordFormat.Format("%s",pTailRecord->strTailRecord);
						// 添加一行日志记录
						m_nCommit=0;
						m_ProcFile.Initialize(m_strOneRow,m_strTableName,
							m_strRecordFormat,m_strTextName);
						m_nTailNumber=nTailID;
						if(pTailRecord->rlink==NULL) {
							m_nCommit=1;								
							m_nReturnValue=m_ProcFile.AddRecord(m_lFileSize,
								m_strYear_Mon,m_nCommit,m_nRecordNumber,
								m_nLine,m_nTailNumber);
							if(m_nReturnValue<0) {
								return(m_nReturnValue);
							}
						}
						else {
							m_nReturnValue=m_ProcFile.AddRecord(m_lFileSize,
								m_strYear_Mon,m_nCommit,m_nRecordNumber,
								m_nLine,m_nTailNumber);
							if(m_nReturnValue<0) {
								return(m_nReturnValue);
							}
							pTailRecord=pTailRecord->rlink;
						}
					}
					else {						
						m_nRecordNumber++;
						nLineNumber++;
						if(strcasecmp(m_pGetOneNode->strIMSItoISDN,"ON")==0) {
							strImsiAndIsdn.Format("%s",m_pGetOneNode->strIMSI_ISDN);
							m_nReturnValue=m_Check->ImsiTOIsdn(m_strOneRow,
								strImsiAndIsdn,strTmpString);
							if(m_nReturnValue!=0) {
								return(m_nReturnValue);
							}
							m_strOneRow=strTmpString;
						}
						m_strRecordFormat.Format("%s",m_pGetOneNode->strRecordBody);
						m_nReturnValue=m_Check->SplitRecord(m_strOneRow,
							m_strRecordFormat,nLineNumber);
						if(m_nReturnValue<0) {
							return(m_nReturnValue);
						}
						if(nLineNumber == RECORDLINE) {
							m_strTableName.Format("%s",m_pGetOneNode->strRecordTable);
							m_Check->Initialize(m_strTableName,
								m_strTextName,nHeadID);
							nInsert=1;
							m_nReturnValue=m_Check->StoreRecord(m_strOneRow,
								nInsert,nLineNumber,nMultNumber);
							if(m_nReturnValue!=0) {
								return(m_nReturnValue);
							}								
							nMultNumber++;
							nLineNumber=0;
							continue;
						}
						nInsert=0;
						m_Check->StoreRecord(m_strOneRow,nInsert,
							nLineNumber,nMultNumber);							
					}
				}
			}
		}						
		return(0);
	}	
}

/************************************************************
	函数:FileDeal
	功能:处理无须去重的文本
	参数:无
	返回值:成功 大于或等于0 失败小于0
************************************************************/

int CMaster::FileDeal()
{
	CProcessFile m_ProcFile; 		//定义文本处理的对象
	
	int     nHeadID;				//是否具有头记录的标志
	int     nTailID;				//是否具有尾记录的标志
	
	m_nLine=nHeadID=nTailID=m_nRecordNumber=m_nErrFileID=0;
	m_lRecordLength=atol(m_pGetOneNode->strRecordLength);
	m_lFileSize=m_filemanage->GetFileSize();

	/************************************
	if(m_lRecordLength!=0) {
		m_nLine=m_lFileSize/m_lRecordLength;
	}
	**************************************/		
	// 判断文件在日志库表是否已经存在
	m_nReturnValue=m_Oracle->FileLogRecord(m_pGetOneNode->strLogTable,
		m_strTextName);
	if(m_nReturnValue==1) {
		m_filemanage->CloseFile();
		// 备份文本
		pBakDir=m_pGetOneNode->dir_link;
		while(pBakDir->dlink!=NULL) {
			// nMove等于0,表示文件通过cp方式到另外一个目录
			m_nMove=0;
			m_strTmpString.Format("%s/%s",m_pGetOneNode->strTxtDir,
				m_strTextName.GetBuffer());
			m_strDestDir.Format("%s",pBakDir->strBackUpDir);
			m_nReturnValue=m_filemanage->BackUpFile(m_strTmpString,
				m_strDestDir,m_nMove);
			if(m_nReturnValue<0)
			{
				return(m_nReturnValue);
			}
			pBakDir=pBakDir->dlink;
		}
		// nMove等于1,表示文件通过mv方式到另外一个目录
		m_nMove=1;
		m_strTmpString.Format("%s/%s",m_pGetOneNode->strTxtDir,
			m_strTextName.GetBuffer());
		m_strDestDir.Format("%s",pBakDir->strBackUpDir);
		pBakDir=pBakDir->dlink;
		m_nReturnValue=m_filemanage->BackUpFile(m_strTmpString,
			m_strDestDir,m_nMove);
		if(m_nReturnValue<0) {
			return(m_nReturnValue);
		}
		else { 
			// 挪文件成功,更新记录的状态标志
			m_nReturnValue=m_Oracle->UpdateLog(m_pGetOneNode->strLogTable,
				m_strTextName,m_nErrFileID);
			if(m_nReturnValue<0) {
				return(m_nReturnValue);
			}
		}
		return(0);
	}
	else if(m_nReturnValue==2)	{
		m_filemanage->CloseFile();
		return(0);
	}
	else if(m_nReturnValue<0) {
		m_filemanage->CloseFile();
		return(m_nReturnValue);
	}
	else {
		pTailRecord=m_pGetOneNode->tail_link;
		while(1) {
			// 从文件中获取一行记录
			m_nReturnValue=m_filemanage->FetchOneRow(m_strOneRow);
			if(m_nReturnValue==0)	{
				if(nTailID == 0) {
					m_strOneRow.Empty();
					m_strTableName.Format("%s",m_pGetOneNode->strLogTable);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -