📄 rainproc.cpp
字号:
//时段降水量需累计且跨时段降水量达到时段拍报标准;
//或者
//时段降水量不累计且本时段降水量达到时段拍报标准
//则进行时段拍报
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 + -