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

📄 cmaster.pc

📁 计费主程序C++开发的
💻 PC
📖 第 1 页 / 共 3 页
字号:
					//日志记录的添加尾记录
					m_strRecordFormat.Format("%s",m_pGetOneNode->tail_link->strTailRecord);
					m_nCommit=1;
					m_nLine=m_nTailNumber=0;
					m_ProcFile.Initialize(m_strOneRow,m_strTableName,
						m_strRecordFormat,m_strTextName);
					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;
					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);
				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);
					}
				}
				break;
			}
			else if(m_nReturnValue<0)	{
				return(m_nReturnValue);
			}
			else	{
				// 根据头记录的条数,区分记录是否为头记录
				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)	{
						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++;
						// 记录为体记录
						m_strTableName=m_pGetOneNode->strRecordTable;
						m_strRecordFormat.Format("%s",m_pGetOneNode->strRecordBody);
						m_nCommit=0;
						if(m_strTableName.IsEmpty())	{
							continue;
						}
						else
						m_ProcFile.Initialize(m_strOneRow,m_strTableName,
							m_strRecordFormat,m_strTextName);
						m_nTailNumber=0;
						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);
						}
					}
				}
			}
		}						
		return(0);
	}
}

/************************************************************
	函数:ProgramRun
	功能:程序运行的主体,初始化文本操作路径,从文本路径中
		  取一个文本名,从文本名中获取日期,根据日期来得到
		  业	务年月,从而进入文本操作的主体
	参数:strLockFile 加锁文件名
	返回值:	成功 大于或等于0 失败小于0
*************************************************************/

int CMaster::ProgramRun(CStringEx strLockFile)
{
	CStringEx  strMon_Day; 			//文件的名称和文件名中日期
	CStringEx  strYear,strMon;		//业务年 和业务月
	CStringEx  strCreateTableName;	//创建的库表名称
	int 	   nLockFileID;			//是否读锁标志
	
	m_nSeasonDate=m_Oracle->m_nStartDate;
	while(1){
		//把链表的头指针付给一个节点指针
		m_pGetOneNode = m_pTxtNodeList;
		/**********************************
		//为了防止写配置文件时,可能出错
		************************************/
		if(m_pTxtNodeList->dir_link==NULL) {
		    strMessageBuffer.Format("%s","the backup dir is null");
		    cReport.AcceptMessage(CINI_NODECODE1,0,strMessageBuffer);
			return(CINI_NODECODE1);
		}
		if(m_pTxtNodeList->tail_link==NULL) {
		    strMessageBuffer.Format("%s","the tail record format is null");
		    cReport.AcceptMessage(CINI_NODECODE2,0,strMessageBuffer);	
			return(CINI_NODECODE2);
		}

		//判断节点指针是否为空,若为空,跳出循环
		while(m_pGetOneNode!=NULL)
		{
			/**********************************
			//为了防止写配置文件时,可能出错
			***********************************/
			if(m_pGetOneNode->dir_link==NULL) {
			    strMessageBuffer.Format("%s","the backup dir is null");
			    cReport.AcceptMessage(CINI_NODECODE1,0,strMessageBuffer);
				return(CINI_NODECODE1);
			}
			if(m_pGetOneNode->tail_link==NULL) {
			    strMessageBuffer.Format("%s","the tail record format is null");
			    cReport.AcceptMessage(CINI_NODECODE2,0,strMessageBuffer);	
				return(CINI_NODECODE2);
			}
			//文件处理的初始化,给出文件路径和文件的匹配格式
			m_nReturnValue=m_filemanage->Initialize(m_pGetOneNode->strTxtNamePatt,
				m_pGetOneNode->strTxtDir,strLockFile.GetBuffer());
			if(m_nReturnValue<0) {
				return(m_nReturnValue);
			}
			
			//以非锁方式获取一个匹配后的文件名,并判断返回的值
			nLockFileID=0;
			if(!strLockFile.IsEmpty()) {
				nLockFileID=1;
			}
			
			m_nReturnValue=m_filemanage->GetFile(m_strTextName,nLockFileID);
			if(m_nReturnValue<0)
			{
			    strMessageBuffer.Format("%s",
			    	"Get the filename from the source directory failure");
			    cReport.AcceptMessage(m_nReturnValue,0,strMessageBuffer);
				return(m_nReturnValue);
			}			
			else if(m_nReturnValue==0)	{
				// 该类型的文本处理完,移到下一个节点
				m_pGetOneNode=m_pGetOneNode->plink;
				continue;
			}
			else {
				//从文件名获取日期		
				m_nReturnValue=m_filemanage->GetFileNameTime(m_strTextName,
					m_pGetOneNode->strTxtNameTime,strMon_Day);
				if(m_nReturnValue!=0) {
					return(m_nReturnValue);
				}
				printf("\tstrTxtName=%s\n",m_strTextName.GetBuffer());
				
				// 获取业务年,判断业务年分区表的情况,创建业务年分区表
				m_filemanage->CurrentDate(strYear,strMon);
				strMon_Day=strYear+strMon_Day;
				m_filemanage->GetTableYYMM(strMon_Day,strMon,m_strYear_Mon,
					m_nSeasonDate);
				m_nReturnValue=m_filemanage->RecordTailChange(
					m_pGetOneNode->strRecordTailID,m_strChangedTailID);
				if(m_nReturnValue<0) {
					return(m_nReturnValue);
				}
				
				//文本处理的主体
				m_nReturnValue=ProgramMajor();
				if(m_nReturnValue<0) {
					return(m_nReturnValue);
				}
				
				if(m_nReturnValue==1) {	
					// 格式不正确的文本
					strMessageBuffer.Format("%s%s",
						"the format of the file'record is error",
						m_strTextName.GetBuffer());
					cReport.AcceptMessage(CMASTER_FILEFORMAT,0,strMessageBuffer);
					m_udp->SendMessage(cReport.strMessage,
						strlen(cReport.strMessage),m_nWriteID);
				}
				m_pGetOneNode=m_pGetOneNode->plink;
			}	
		}
		// 检测程序运行的状态位
		m_nReturnValue=m_Oracle->IsExit();
		if(m_nReturnValue>0) { m_nReturnValue=-1; break; }
		else if(m_nReturnValue<0) { return(m_nReturnValue); }
		else {
			// 检测配置文件是否更新的状态位
			m_nReturnValue=m_Oracle->UpdateParameter();
			if(m_nReturnValue>0) { break; }
			else if(m_nReturnValue<0) { return(m_nReturnValue); }
			else continue;
		}
	}
	if(m_nReturnValue<0) { 
		// 释放节点内存
		m_ini->FreeNodeList(m_pTxtNodeList);
		if(m_nReturnValue==-1) {
			return(0); 
		}
		else return(m_nReturnValue);
	}
	else  { 
		m_ini->FreeNodeList(m_pTxtNodeList);
		return(1); 
	}
}

/****************************************************************
	函数:ProgramDataBase
	功能:程序的数据库操作,判断所需的库表是否存在;没有,
		  利用基表创建该表,检测程序运行的标志位,若不为0,
		  则至为0;没有记录,添加一条记录,配置文件更新记录添加
	参数:无
	返回值:成功 为0 ;失败小于0
****************************************************************/

int CMaster::ProgramDataBase()
{
	// 联数据库操作
	CStringEx strSourceTable,strDestTable;
	CStringEx strRangeCloumn;
	
	m_nReturnValue=m_Oracle->ConnectOracle();
	if(m_nReturnValue<0) 
	{ 
		return(m_nReturnValue);
	}

	/***************************************
	//生成库表的一种方法,在程序中已经确定了
	//结构表和将生成的实表
	m_nReturnValue=m_Oracle->CreateTable();
	if(m_nReturnValue<0) 
	{ 
		return(m_nReturnValue);
	}	
	****************************************/
	
	while(m_pTableNodeList!=NULL) {
		strSourceTable = m_pTableNodeList->strStructTableName;
		strDestTable = m_pTableNodeList->strCreateTableName;
		strRangeCloumn = m_pTableNodeList->strRangeCloumn;
		m_nReturnValue=m_Oracle->CreateTable(strSourceTable,
			strDestTable,strRangeCloumn);
		if(m_nReturnValue<0)
		{
			return(m_nReturnValue);
		}	
		m_pTableNodeList=m_pTableNodeList->nLink;
	}
	m_ini->FreeNodeList(m_pTableNodeList);

	// 程序运行状态判断
	m_nReturnValue=m_Oracle->IsPermit();
	if(m_nReturnValue<0) 
	{ 
		return(m_nReturnValue);
	}

	//添加一条有关配置文件是否更新的记录
	m_nReturnValue=m_Oracle->AddParameter();
	if(m_nReturnValue<0)
	{
		return(m_nReturnValue);
	}
	
	/**********************************
	文本操作路径的选取
	m_nReturnValue=m_ora.SelectPath("JFYCL");
	if(m_nReturnValue<0) 
	{ 
		return(m_nReturnValue);
	}
	**********************************/

	return(0);
}	

/**********************************************************************
	函数:ProgramInit
	功能:从配置文件中获取信息,然后生成节点,对节点进行排序,生成链表
	参数:nWriteID	监控信息是否写文件的标识
	返回值:成功 为0 ;失败小于0
***********************************************************************/
int CMaster::ProgramInit(int nWriteID)
{
	int 		 nSectionCount;     //定义片段的个数变量和成员返回值变量
	STxtPara     *pOneNode,*pHead,*pTemp;  //定义结构指针变量	
	
	pHead=NULL;
	m_nWriteID=nWriteID;
	nSectionCount=1;
		
	m_pTableNodeList = m_ini->CreateNodeList();
	if(m_pTableNodeList == NULL) {
		m_udp->SendMessage(cReport.strMessage,
			strlen(cReport.strMessage),nWriteID);
		return(CINI_CREATENODELIST1);
	}

	while(1)
	{
		//生成一个节点指针
		if((pOneNode=m_ini->CreateNode(nSectionCount))==NULL)
		{
			m_udp->SendMessage(cReport.strMessage,
				strlen(cReport.strMessage),nWriteID);
			break;
		}		
		//对节点进行排序,生成链表
		pTemp=m_ini->SortNodeList(pHead,pOneNode);
		pHead=pTemp;
		nSectionCount++;
	}
	
	m_pTxtNodeList=pHead;
		
	//输出节点信息
	//m_ini->PrintNodeList(m_pTableNodeList);
	//m_ini->PrintNodeList(pHead);
	return(0);
}

⌨️ 快捷键说明

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