📄 waterproc.cpp
字号:
// WaterProc.cpp: implementation of the WaterProc class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "afxdisp.h"
#include "FileAccess.h"
#include "WaterProc.h"
#ifdef _DEBUG
#undef THIS_FILE
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
extern "C" bool RunWaterProc(char *strStation5,char *strStation8)
{
WaterProc waterproc(strStation5,strStation8);
if(!waterproc.WaterTelProcess()){
return false;
}
return true;
}
WaterProc::WaterProc(CString strStation5,CString strStation8)
{
m_strStation=strStation5;
m_strLogicID=strStation8;
m_strTempTel="";
m_strTelText="";
m_strAddiTelText="";
m_bolStsChg=false;
m_bolStsFlg=false;
m_bolTelFlg=false;
m_bolAddiTelFlg=false;
m_intTelCnt=0;
}
WaterProc::~WaterProc()
{
}
//////////////////////////////////////////////////////////////////////
// 水位拍报处理
//////////////////////////////////////////////////////////////////////
bool WaterProc::WaterTelProcess()
{
int intTelCnt=0;
CTime curTime;
FileAccess errFile("c:\\WaterErrLog.txt");
errFile.m_strFileRecord.Format("%s :: %s|%s站水位拍报开始!\n",curTime.GetCurrentTime().Format("%Y-%m-%d %H:%M:%S"),m_strStation,m_strLogicID);
errFile.writerecord();
FileAccess logFile("c:\\WaterTelLog.txt");
logFile.m_strFileRecord.Format("%s :: %s|%s站启动水位拍报处理:\n",curTime.GetCurrentTime().Format("%Y-%m-%d %H:%M:%S"),m_strStation,m_strLogicID);
logFile.writerecord();
m_strTelText="AH "+m_strStation;//初始化报文,即以拍报站号开头
////////////////////////////////////////////////////////////////////////////////////
//建立数据库链接
////////////////////////////////////////////////////////////////////////////////////
_ConnectionPtr m_connection;
m_connection=DBCon.m_pCon;
try{
m_connection->BeginTrans();
}
catch(_com_error e){
errFile.m_strFileRecord.Format(" BeginTrans Error::%s",e.ErrorMessage());
errFile.writerecord();
return false;
}
////////////////////////////////////////////////////////////////////////////////////
//读取拍报参数
////////////////////////////////////////////////////////////////////////////////////
try{
Param.m_pCon=m_connection;
Param.m_strSource=DBCon.m_strSource;
Param.m_strSQL.Format("select * from TelParam where ParamID='WaterTel' and Station='%s'",m_strStation);
switch(Param.startbr()){
case 1:{//如果没有拍报参数记录则赋缺省值
Param.m_strParamID="WaterTel";
Param.m_intTelLevel=1;
Param.m_intTelInterval=24;
Param.m_intPreInterval=24;
Param.m_dblPeriodStandard=0;
Param.m_intTelLevel1=1;
Param.m_intTelInterval1=24;
Param.m_intPreInterval1=24;
Param.m_dblPeriodStandard1=999;
Param.m_intTelLevel2=1;
Param.m_intTelInterval2=24;
Param.m_intPreInterval2=24;
Param.m_dblPeriodStandard2=999;
Param.m_dblAddiStandard=999;
break;
}
case 0:break;
case -1:{
errFile.m_strFileRecord=" 拍报参数::"+Param.m_strErrMsg;
errFile.writerecord();
return false;
}
}
}
catch(_com_error e){
errFile.m_strFileRecord.Format(" 读取拍报参数错误::%s",e.ErrorMessage());
errFile.writerecord();
return false;
}
////////////////////////////////////////////////////////////////////////////////////
//读取上次拍报状态
////////////////////////////////////////////////////////////////////////////////////
try{
WaterSts.m_pCon=m_connection;
WaterSts.m_strSource=DBCon.m_strSource;
WaterSts.m_strSQL.Format("select * from WaterStatus where Station='%s'",m_strStation);
switch(WaterSts.startbr()){
case 0:{
m_bolStsFlg=true;
break;
}
case 1:{//如果没有拍报状态记录则赋缺省值
m_bolStsFlg=false;
WaterSts.m_strStation=m_strStation;
WaterSts.m_strPreWaterTime="1960-01-01 08:00:00";
WaterSts.m_dblPreWaterInfo=0;
WaterSts.m_dblPreFlowInfo=0;
WaterSts.m_strLastWaterTime="1960-01-01 08:00:00";
WaterSts.m_dblLastWaterInfo=0;
WaterSts.m_dblLastFlowInfo=0;
WaterSts.m_dblWaterDaySts=0;
WaterSts.m_dblFlowDaySts=0;
WaterSts.m_intWaterDayCnt=0;
WaterSts.m_dblWaterTenDaySts=0;
WaterSts.m_dblFlowTenDaySts=0;
WaterSts.m_intWaterTenDayCnt=0;
WaterSts.m_dblWaterMonthSts=0;
WaterSts.m_dblFlowMonthSts=0;
WaterSts.m_intWaterMonthCnt=0;
WaterSts.m_strLastAddiTime="1960-01-01 08:00:00";
WaterSts.m_dblLastAddiInfo=0;
break;
}
case -1:{
errFile.m_strFileRecord=" 拍报状态::"+WaterSts.m_strErrMsg;
errFile.writerecord();
return false;
}
}
}
catch(_com_error e){
errFile.m_strFileRecord.Format(" 读取拍报状态错误::%s",e.ErrorMessage());
errFile.writerecord();
return false;
}
////////////////////////////////////////////////////////////////////////////////////
//创建报文表的数据集
////////////////////////////////////////////////////////////////////////////////////
try{
TelDB.m_pCon=m_connection;
TelDB.m_strSource=DBCon.m_strSource;
TelDB.m_strSQL.Format("select * from tel_source");
if(TelDB.startbr()<0){
errFile.m_strFileRecord.Format(" 创建报文数据集::%s\n",TelDB.m_strErrMsg);
errFile.writerecord();
return false;
}
}
catch(_com_error e){
errFile.m_strFileRecord.Format(" 创建报文数据集错误::%s",e.ErrorMessage());
errFile.writerecord();
return false;
}
////////////////////////////////////////////////////////////////////////////////////
//扫描自上次拍报以来新产生的且未拍报的水位测量数据
////////////////////////////////////////////////////////////////////////////////////
try{
WaterDB.m_pCon=m_connection;
WaterDB.m_strSource=DBCon.m_strSource;
WaterDB.m_strSQL.Format("select * from W%s where datatime>'%s' order by datatime",m_strLogicID,WaterSts.m_strLastWaterTime);
if(WaterDB.startbr()<0){
errFile.m_strFileRecord.Format(" 浏览水位基础数据::%s\n",WaterDB.m_strErrMsg);
errFile.writerecord();
return false;
}
}
catch(_com_error e){
errFile.m_strFileRecord.Format(" 浏览水位基础数据错误::%s",e.ErrorMessage());
errFile.writerecord();
return false;
}
Water2Flow.m_pCon=m_connection;
while(!WaterDB.m_pRst->EndOfFile){
//观测间隔和拍报间隔先以基准观测间隔和基准拍报间隔为准
m_intCurPreInterval=Param.m_intPreInterval;
m_intCurTelInterval=Param.m_intTelInterval;
//如果水位超过即时拍报水位则置位即时拍报标志
if(WaterDB.m_dblInputVal>=Param.m_dblAddiStandard){
m_bolAddiTelFlg=true;
}
else{
m_bolAddiTelFlg=false;
//如果水位超过警戒水位则警戒观测间隔和警戒拍报间隔生效
if(WaterDB.m_dblInputVal>=Param.m_dblPeriodStandard1){
m_intCurPreInterval=Param.m_intPreInterval1;
m_intCurTelInterval=Param.m_intTelInterval1;
}
//如果水位超过设防水位则设防观测间隔和设防拍报间隔生效
if(WaterDB.m_dblInputVal>=Param.m_dblPeriodStandard2){
m_intCurPreInterval=Param.m_intPreInterval2;
m_intCurTelInterval=Param.m_intTelInterval2;
}
}
Cmc.m_strInputTime=WaterDB.m_strInputTime;
Cmc.TimeValProc();
//如果为即时拍报或者到指定观测时间则准备拍报报文
if(m_bolAddiTelFlg||((int)(Cmc.m_fltInterval*10000)%(m_intCurPreInterval*10000)==0)){
if(!PeriodTelPrepare()){
errFile.m_strFileRecord.Format(" 时段报文准备错误::准备时间间隔为%d\n",m_intCurPreInterval);
errFile.writerecord();
return false;//如果到了时段报文数据采集时间则准备报文
}
}
//如果为即时拍报或者到指定拍报时间则置位拍报标志
if(m_bolAddiTelFlg||((int)(Cmc.m_fltInterval*10000)%(m_intCurTelInterval*10000)==0)){
if(!PeriodTelSet()){
errFile.m_strFileRecord.Format(" 时段拍报错误::拍报时间间隔为%d\n",m_intCurTelInterval);
errFile.writerecord();
return false;//如果到了时段拍报时间则置位拍报标志
}
}
//如果为每日8时则准备日报
if(Cmc.m_fltTime==8){
if(!DayTelPrepare()){
errFile.m_strFileRecord.Format(" 日报文准备错误:: \n");
errFile.writerecord();
return false;
}
}
//每月1日8时、11日8时和21日8时准备旬报
if((Cmc.m_intDay==1||Cmc.m_intDay==11||Cmc.m_intDay==21)&&Cmc.m_fltTime==8){
if(!TenDayTelPrepare()){
errFile.m_strFileRecord.Format(" 旬报文准备错误::\n");
errFile.writerecord();
return false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -