📄 cmaster.pc
字号:
//日志记录的添加尾记录
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 + -