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

📄 rainproc.cpp

📁 用C++基于SQL SERVER使用存储过程
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			//时段降水量需累计且跨时段降水量达到时段拍报标准;
			//或者
			//时段降水量不累计且本时段降水量达到时段拍报标准
			//则进行时段拍报
			if((RainSts.m_dblRainPeriodSts>=Param.m_dblPeriodStandard&&Param.m_bolAccuFlag)||(RainSts.m_dblLastRainInfo>=Param.m_dblPeriodStandard&&!Param.m_bolAccuFlag)){
				m_bolTelFlg=true;//置位报文标志,意味着有报文需要拍报
				m_bolStsChg=true;
				RainSts.m_dblRainPeriodSts=0;//复位跨时段累计
				//RainSts.m_dblLastRainInfo=0;
			}

			bolDailyFlg=false;
			m_bolDayTelFlag=false;
			if(m_tmLastRainTime.tm_hour==8&&m_tmLastRainTime.tm_min==0&&m_tmLastRainTime.tm_sec==0){
				bolDailyFlg=true;
				if(RainSts.m_dblRainDaySts>0){//如果日累计雨量大于零才进行日拍报
					m_bolDayTelFlag=true;
					if(!DayTelPrepare())return false;//每日8时准备日报
				}
				m_intTelCnt=0;
			}

			if((m_tmLastRainTime.tm_mday==1||m_tmLastRainTime.tm_mday==11||m_tmLastRainTime.tm_mday==21)&&bolDailyFlg){
				if(!TenDayTelPrepare())return false;//每月1日8时、11日8时、21日8时准备旬报
			}
			if(m_tmLastRainTime.tm_mday==1&&bolDailyFlg){
				if(!MonthTelPrepare())return false;//每月1日8时准备月报
			}

			if(m_bolTelFlg){//如果有报文生成则更新上次拍报相关状态
				strLastRainTime=RainSts.m_strLastRainTime;
				dblRainDaySts=RainSts.m_dblRainDaySts;
				dblRainTenDaySts=RainSts.m_dblRainTenDaySts;
				dblRainMonthSts=RainSts.m_dblRainMonthSts;
			}

			RainSts.m_dblLastRainInfo=0;
			if(Cmc.TimeCompare(m_tmLastAddiTime,m_tmLastRainTime)==-1){
				m_tmLastAddiTime=m_tmLastRainTime;
				strLastAddiTime=RainSts.m_strLastRainTime;//先置最后暴雨加报时间为旧的最后拍报时间后一小时
				tmLastAddiTime=Cmc.StrToTime(strLastAddiTime);
				Cmc.TimeAddSpan(&m_tmLastAddiTime,0,0,0,1,0,0);
				RainSts.m_strLastAddiTime=Cmc.TimeToStr(m_tmLastAddiTime);
				InitAddiRain();
			}
			Cmc.TimeAddSpan(&m_tmLastRainTime,0,0,0,Param.m_intTelInterval,0,0);
			RainSts.m_strLastRainTime=Cmc.TimeToStr(m_tmLastRainTime);
		}
			
		if(m_bolTelFlg){//如果有报文生成则将其新增至报文数据库表中
			TelDB.m_strStation=m_strStation;
			TelDB.m_strTelText=m_strTelText+" NN";
			TelDB.m_bitDepartFlag=false;
			TelDB.m_intDataSource=1;
			if(TelDB.insertrec()==0){
				intTelCnt++;
				logFile.m_strFileRecord.Format("  生成报文:%s\n",TelDB.m_strTelText);
				logFile.writerecord();
			}
			else{
				errFile.m_strFileRecord.Format("    TelDB.insertrec::%s\n",TelDB.m_strErrMsg);
				errFile.writerecord();
				return false;
			}
			m_strTelText="P "+m_strStation;
			m_bolTelFlg=false;
			bolDailyFlg=false;
			m_strAddiTelText="";
			m_bolAddiTelFlg=false;
			m_intTelCnt=0;
		}
		else{
			if(m_bolAddiTelFlg){//如未进行时段拍报且有暴雨加报生成则将其新增至报文数据库表中
				TelDB.m_strStation=m_strStation;
				TelDB.m_strTelText=m_strAddiTelText+" NN";
				TelDB.m_bitDepartFlag=false;
				TelDB.m_intDataSource=1;
				if(TelDB.insertrec()==0){
					intTelCnt++;
					logFile.m_strFileRecord.Format("  生成报文:%s\n",TelDB.m_strTelText);
					logFile.writerecord();
				}
				else{
					errFile.m_strFileRecord.Format("    TelDB.insertrec addi::%s\n",TelDB.m_strErrMsg);
					errFile.writerecord();
					return false;
				}
				m_strAddiTelText="";
				m_bolAddiTelFlg=false;
			}
		}

	}

	RainSts.m_dblLastRainInfo=0;
	RainSts.m_dblRainPeriodSts=0;
	RainSts.m_dblRainDaySts=dblRainDaySts;
	RainSts.m_dblRainTenDaySts=dblRainTenDaySts;
	RainSts.m_dblRainMonthSts=dblRainMonthSts;
	RainSts.m_strLastRainTime=strLastRainTime;

	if(m_bolStsChg){//如果有报文生成则需更新此次拍报状态,以避免重复拍报现象的发生
		RainSts.m_strLastAddiTime=strLastAddiTime;
		if(m_bolStsFlg){
			if(RainSts.updaterec()<0){
				errFile.m_strFileRecord.Format("    RainSts.updaterec::%s\n",RainSts.m_strErrMsg);
				errFile.writerecord();
				return false;
			}
		}
		else{
			if(RainSts.insertrec()<0){
				errFile.m_strFileRecord.Format("    RainSts.insertrec::%s\n",RainSts.m_strErrMsg);
				errFile.writerecord();
				return false;
			}
			m_bolStsFlg=true;
		}
		m_bolStsChg=false;
	}
	else{
		RainSts.m_strLastAddiTime=strLastAddiTime;
		//如果有暴雨加报生成则需要更新暴雨加报的状态
		if(m_bolAddiChgFlg&&m_bolStsFlg){
			if(RainSts.addiupdaterec()<0){
				errFile.m_strFileRecord.Format("    RainSts.addiupdaterec::%s\n",RainSts.m_strErrMsg);
				errFile.writerecord();
				return false;
			}
		}
		if(m_bolAddiChgFlg&&!m_bolStsFlg){
			RainSts.m_strStation=m_strStation;
			if(RainSts.insertrec()<0){
				errFile.m_strFileRecord.Format("    RainSts.insertrec addi::%s\n",RainSts.m_strErrMsg);
				errFile.writerecord();
				return false;
			}
			m_bolStsFlg=true;
		}
		m_bolAddiChgFlg=false;
	}

	try{
		m_connection->CommitTrans();
		//m_connection->RollbackTrans();
		m_connection->Close();
	}
	catch(_com_error e){
		errFile.m_strFileRecord.Format("    CloseConnection Error::%s\n",e.ErrorMessage());
		errFile.writerecord();
		return false;
	}

	logFile.m_strFileRecord.Format("%s :: %s站降水量拍报处理结束,共生成 %d 条报文!\n\n",curTime.GetCurrentTime().Format("%Y-%m-%d %H:%M:%S"),m_strStation,intTelCnt);
	logFile.writerecord();
	logFile.m_stdFile.Close();

	errFile.m_strFileRecord.Format("%s :: RainTelProcess End!\n\n",curTime.GetCurrentTime().Format("%Y-%m-%d %H:%M:%S"));
	errFile.writerecord();
	
	errFile.m_stdFile.Close();
	return true;
}

//////////////////////////////////////////////////////////////////////
// 临时报文准备
//////////////////////////////////////////////////////////////////////
bool RainProc::TelPrepare()
{
	m_intTelCnt++;

	Cmc.m_strInputTime=RainSts.m_strLastRainTime;
	Cmc.TimeValProc();
	Cmc.m_dblInputVal=RainSts.m_dblLastRainInfo;
	Cmc.m_intInputDot=2;
	Cmc.m_intKeepDot=0;
	Cmc.RainValProc();
	if(m_dblHourRainSts>0){
		m_strTempTel.Format("%s P%d %s WS 7",Cmc.m_strOutputTime,Param.m_intTelInterval,Cmc.m_strOutputVal);
	}
	else{
		m_strTempTel.Format("%s P%d %s WS 8",Cmc.m_strOutputTime,Param.m_intTelInterval,Cmc.m_strOutputVal);
	}
	if(m_intTelCnt>1){
		m_strTelText=m_strTelText+" TT "+m_strTempTel;
	}
	else{
		m_strTelText=m_strTelText+" "+m_strTempTel;
	}

	TelDB.m_strOneTime=RainSts.m_strLastRainTime;

	return true;
}

//////////////////////////////////////////////////////////////////////
// 时段报文准备
//////////////////////////////////////////////////////////////////////
bool RainProc::PeriodTelPrepare()
{
	RainSts.m_dblRainPeriodSts=0;
	m_bolStsChg=true;
	m_bolTelFlg=true;

	return true;
}

//////////////////////////////////////////////////////////////////////
// 日报文准备
//////////////////////////////////////////////////////////////////////
bool RainProc::DayTelPrepare()
{
	CString		strWeather;
	if(m_dblHourRainSts>0)strWeather="7";
	else strWeather="8";

	Cmc.m_dblInputVal=RainSts.m_dblRainDaySts;
	Cmc.m_intInputDot=2;
	Cmc.m_intKeepDot=0;
	Cmc.RainValProc();
	Cmc.m_strInputTime=RainSts.m_strLastRainTime;
	Cmc.TimeValProc();
	m_strTempTel=Cmc.m_strOutputTime+" PD "+Cmc.m_strOutputVal+" WS "+strWeather;

	if(m_intTelCnt==0||(m_intTelCnt==1&&RainSts.m_dblRainDaySts==RainSts.m_dblLastRainInfo))m_strTelText="P "+m_strStation+" "+m_strTempTel;
	else m_strTelText=m_strTelText+" PD "+Cmc.m_strOutputVal+" WS "+strWeather;
	
	RainSts.m_dblRainDaySts=0;
	RainSts.m_dblRainPeriodSts=0;
	RainSts.m_dblLastRainInfo=0;

	m_bolStsChg=true;
	m_bolTelFlg=true;
	m_intTelCnt=0;

	return true;
}

//////////////////////////////////////////////////////////////////////
// 旬报文准备
//////////////////////////////////////////////////////////////////////
bool RainProc::TenDayTelPrepare()
{
	Cmc.m_dblInputVal=RainSts.m_dblRainTenDaySts;
	Cmc.m_intInputDot=2;
	Cmc.m_intKeepDot=0;
	Cmc.RainValProc();
	m_strTempTel="PX "+Cmc.m_strOutputVal;

	Cmc.m_strInputTime=RainSts.m_strLastRainTime;
	Cmc.TimeValProc();
	if(m_bolDayTelFlag){
		m_strTelText=m_strTelText+" "+m_strTempTel;
		m_bolDayTelFlag=false;
	}
	else{
		m_strTelText=m_strTelText+" "+Cmc.m_strOutputTime+" "+m_strTempTel;
	}

	RainSts.m_dblRainTenDaySts=0;
	m_bolStsChg=true;
	m_bolTelFlg=true;

	return true;
}

//////////////////////////////////////////////////////////////////////
// 月报文准备
//////////////////////////////////////////////////////////////////////
bool RainProc::MonthTelPrepare()
{
	Cmc.m_dblInputVal=RainSts.m_dblRainMonthSts;
	Cmc.m_intInputDot=2;
	Cmc.m_intKeepDot=0;
	Cmc.RainValProc();
	m_strTempTel="PM "+Cmc.m_strOutputVal;
	m_strTelText=m_strTelText+" "+m_strTempTel;

	RainSts.m_dblRainMonthSts=0;
	m_bolStsChg=true;
	m_bolTelFlg=true;

	return true;
}

//////////////////////////////////////////////////////////////////////
// 暴雨加报报文准备
//////////////////////////////////////////////////////////////////////
bool RainProc::AddiTelPrepare(struct tm tmAddiTime,double dblAddiInfo,int intAddiInterval)
{
	CString			strTelHead="87778";

	Cmc.m_dblInputVal=dblAddiInfo;
	Cmc.m_intInputDot=2;
	Cmc.m_intKeepDot=0;
	Cmc.RainValProc();
	
	RainSts.m_strLastAddiTime=Cmc.TimeToStr(tmAddiTime);
	Cmc.m_strInputTime=RainSts.m_strLastAddiTime;
	Cmc.TimeValProc();
	if(m_dblAddiRain[m_intAddiCnt]>0){
		m_strTempTel.Format("P %s %s PR %s WS 7",m_strStation,Cmc.m_strOutputTime,Cmc.m_strOutputVal);
	}
	else{
		m_strTempTel.Format("P %s %s PR %s WS 8",m_strStation,Cmc.m_strOutputTime,Cmc.m_strOutputVal);
	}
	m_strAddiTelText=m_strTempTel;

	m_bolAddiTelFlg=true;
	m_bolAddiChgFlg=true;

	TelDB.m_strOneTime=RainSts.m_strLastAddiTime;

	return true;
}

bool RainProc::SwapAddiRain()
{
	int				i=0;

	for(i=0;i<=Param.m_intAddiInterval;i++)m_dblAddiRain[i]=0;

	return true;
}

bool RainProc::InitAddiRain()
{
	int				i=0;
	for(i=0;i<9;i++)m_dblAddiRain[i]=0;
	m_intAddiCnt=1;
	return true;
}

⌨️ 快捷键说明

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