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

📄 waterproc.cpp

📁 用C++基于SQL SERVER使用存储过程
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -