[ref]同步711

This commit is contained in:
shi_jq 2025-03-13 15:21:23 +08:00
parent 15d70635cb
commit 0b91f20d68
398 changed files with 84091 additions and 0 deletions

View File

@ -0,0 +1,157 @@
#include "CSqlOpt.h"
#include "../../dbms/db_manager_api/db_manager_api_common.h"
#include "db_manager_api/db_opt_mysql.h"
#include "db_manager_api/db_opt_kingbase.h"
#include "db_manager_api/db_opt_opengauss.h"
#include "db_manager_api/db_manager_api.h"
using namespace iot_dbms;
CSqlOpt::CSqlOpt()
{
}
int CSqlOpt::installer()
{
mysql_opt();
kingbase_opt();
opengauss_opt();
return 0;
}
int CSqlOpt::mysql_opt()
{
db_opt_mysql pDbOpt;
QString sDatabaseName = EMS_DEFAULT_DATABASE;
if (pDbOpt.openDatabase("127.0.0.1",3306,"root","kbdct@0755","mysql"))
{
QString sError = "";
QString sSql = QString("update mysql.user set password=password('%1') where user='root'; and Host ='localhost';").arg(EMS_DEFAULT_PASSWD) ;
bool result = pDbOpt.executeSql( sSql, sError );
if(!result)
{
QString sSql = QString("UPDATE mysql.user SET authentication_string=PASSWORD('%1') WHERE User='root'; and Host ='localhost';").arg(EMS_DEFAULT_PASSWD) ;
result = pDbOpt.executeSql( sSql, sError );
if(!result)
{
return -1;
}
}
result = pDbOpt.executeSql( "flush privileges;", sError );
if(!result)
{
return -1;
}
}
if (!pDbOpt.openDatabase("127.0.0.1",3306,"root",EMS_DEFAULT_PASSWD,""))
{
return -1;
}
QString sSql;
sSql = "CREATE DATABASE " + sDatabaseName;
QString sError = "";
bool result = pDbOpt.executeSql( sSql, sError );
if(!result)
{
return -1;
}
db_manager_api api;
if(!api.updateDatabase(&pDbOpt, sDatabaseName,true))
{
return -1;
}
return 0;
}
int CSqlOpt::kingbase_opt()
{
db_opt_kingbase pDbOpt;
QString sDatabaseName = EMS_DEFAULT_DATABASE;
if (pDbOpt.openDatabase("127.0.0.1",54321,"system","kbdct@0755",""))
{
//金仓数据库的处理
QString sSql;
QString sError = "";
sSql = QString("ALTER USER system WITH PASSWORD '%1';").arg(EMS_DEFAULT_PASSWD) ;
bool result = pDbOpt.executeSql( sSql, sError );
if(!result)
{
return -1;
}
}
if (!pDbOpt.openDatabase("127.0.0.1",54321,"system",EMS_DEFAULT_PASSWD,""))
{
return -1;
}
QString sSql;
sSql = "CREATE DATABASE " + sDatabaseName;
QString sError = "";
bool result = pDbOpt.executeSql( sSql, sError );
if(!result)
{
return -1;
}
db_manager_api api;
if(!api.updateDatabase(&pDbOpt, sDatabaseName,true))
{
return -1;
}
return 0;
}
int CSqlOpt::opengauss_opt()
{
db_opt_opengauss pDbOpt;
QString sDatabaseName = EMS_DEFAULT_DATABASE;
if (pDbOpt.openDatabase("127.0.0.1",5432,"iscs","kbdct@0755",""))
{
//高斯数据库的处理
QString sSql;
QString sError = "";
sSql = QString("ALTER USER iscs identified by '%1' replace 'kbdct@0755';").arg(EMS_DEFAULT_PASSWD) ;
bool result = pDbOpt.executeSql( sSql, sError );
if(!result)
{
return -1;
}
}
if (!pDbOpt.openDatabase("127.0.0.1",5432,"iscs",EMS_DEFAULT_PASSWD,""))
{
return -1;
}
QString sSql;
sSql = "CREATE DATABASE " + sDatabaseName;
QString sError = "";
bool result = pDbOpt.executeSql( sSql, sError );
if(!result)
{
return -1;
}
db_manager_api api;
if(!api.updateDatabase(&pDbOpt, sDatabaseName,true))
{
return -1;
}
return 0;
}

View File

@ -0,0 +1,18 @@
#ifndef CSQLOPT_H
#define CSQLOPT_H
#include <QObject>
class CSqlOpt
{
public:
CSqlOpt();
public:
int installer();
private:
int mysql_opt();
int kingbase_opt();
int opengauss_opt();
};
#endif // CSQLOPT_H

View File

@ -0,0 +1,40 @@
QT -= gui
QT += sql xml network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
#CONFIG += c++11 console
TARGET = db_installer
TEMPLATE = app
# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# QMAKE_CXXFLAGS+=/execution-charset:utf-8
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
CSqlOpt.cpp \
main.cpp
HEADERS += \
CSqlOpt.h
LIBS += -lpub_utility_api -ldb_manager_api -ldb_base_api
#-------------------------------------------------------------------
COMMON_PRI=$$PWD/../../common.pri
exists($$COMMON_PRI) {
include($$COMMON_PRI)
}else {
error("FATAL error: can not find common.pri")
}

View File

@ -0,0 +1,13 @@
// RQEH6000mysql_update.cpp : 定义控制台应用程序的入口点。
//
#include <QCoreApplication>
#include "CSqlOpt.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
CSqlOpt opt;
return opt.installer();
}

View File

@ -0,0 +1,27 @@
#include "CActiveWindow.h"
#include "pub_logger_api/logger.h"
CActiveWindow * CActiveWindow::m_pInstance = NULL;
CActiveWindow *CActiveWindow::instance()
{
if(NULL == m_pInstance)
{
m_pInstance = new CActiveWindow();
}
return m_pInstance;
}
void CActiveWindow::setActiveWindow(int windowId)
{
LOGINFO("setActiveWindow():设置激活窗口为%d",windowId);
m_nActive = windowId;
}
int CActiveWindow::getActiveWindow()
{
return m_nActive;
}
CActiveWindow::CActiveWindow()
{
m_nActive = (int)E_ACTIVE_WINDOW_FES;
}

View File

@ -0,0 +1,47 @@
#ifndef CACTIVEWINDOW_H
#define CACTIVEWINDOW_H
#include <QObject>
enum E_ACTIVE_WINDOW_ID
{
E_ACTIVE_WINDOW_FES = 0,
E_ACTIVE_WINDOW_FES_AI_DATA = 1,
E_ACTIVE_WINDOW_FES_DI_DATA,
E_ACTIVE_WINDOW_FES_PI_DATA,
E_ACTIVE_WINDOW_FES_MI_DATA ,
E_ACTIVE_WINDOW_FES_AI_CTRL,
E_ACTIVE_WINDOW_FES_DI_CTRL,
E_ACTIVE_WINDOW_FES_PI_CTRL,
E_ACTIVE_WINDOW_FES_MI_CTRL,
E_ACTIVE_WINDOW_FES_EVENT_CTRL,
E_ACTIVE_WINDOW_FES_AO_CTRL,
E_ACTIVE_WINDOW_FES_DO_CTRL,
E_ACTIVE_WINDOW_FES_MO_CTRL,
E_ACTIVE_WINDOW_FES_CUSTOM_CTRL,
E_ACTIVE_WINDOW_FES_AI_FARWARD,
E_ACTIVE_WINDOW_FES_DI_FARWARD,
E_ACTIVE_WINDOW_FES_DDI_FARWARD,
E_ACTIVE_WINDOW_FES_PI_FARWARD,
E_ACTIVE_WINDOW_FES_MI_FARWARD,
E_ACTIVE_WINDOW_FES_SOE_EVENT,
E_ACTIVE_WINDOW_FES_CHAN_EVENT,
E_ACTIVE_WINDOW_FES_SOE_MEMORY,
E_ACTIVE_WINDOW_FES_CHAN_PARAM,
E_ACTIVE_WINDOW_FES_RTU_PARAM,
E_ACTIVE_WINDOW_FES_CHAN_DATA
};
class CActiveWindow
{
public:
static CActiveWindow *instance();
void setActiveWindow(int windowId);
int getActiveWindow();
CActiveWindow();
private:
int m_nActive;
static CActiveWindow * m_pInstance;
};
#endif // CACTIVEWINDOW_H

View File

@ -0,0 +1,585 @@
#include "CDataMng.h"
#include "db_api_ex/CDbApi.h"
#include "pub_logger_api/logger.h"
#include "Common.h"
CDataMng *CDataMng::m_pInstance = Q_NULLPTR;
CDataMng *CDataMng::instance()
{
if(m_pInstance == Q_NULLPTR)
{
m_pInstance = new CDataMng();
}
return m_pInstance;
}
CDataMng::~CDataMng()
{
if(m_pReadApi != Q_NULLPTR)
{
m_pReadApi->close();
delete m_pReadApi;
}
m_pReadApi = Q_NULLPTR;
m_pInstance = Q_NULLPTR;
}
ChanInfoMap CDataMng::getChanInfo()
{
if(!m_chanHaveLoad)
{
m_chanMap.clear();
QSqlQuery sqlQueue;
m_pReadApi->execute("SELECT TAG_NAME,CHAN_NO,DESCRIPTION,RES_PARA_INT4 FROM fes_channel_para ORDER BY CHAN_NO", sqlQueue);
if(sqlQueue.isActive())
{
while(sqlQueue.next())
{
//采用下标方式提高效率注意与SELECT语句顺序对应
QString tagName = sqlQueue.value(0).toString();
int chanNo = sqlQueue.value(1).toInt();
QString chanDesc = sqlQueue.value(2).toString();
int res_para_int4 = sqlQueue.value(3).toInt();
SFESCHANINFO &fesChan = m_chanMap[chanNo];
fesChan.nChanNo = chanNo;
fesChan.strTagName = tagName;
fesChan.strDesc = chanDesc;
fesChan.nLocalPort = res_para_int4;
}
m_chanHaveLoad = true;
}
}
return m_chanMap;
}
void CDataMng::loadAllDevInfo(const bool bForceLoad/*= false*/)
{
if(bForceLoad)
{
m_rtuDevMap.clear();
}
if(!m_rtuDevMap.empty())
{
return;
}
QSqlQuery sqlQueue;
m_pReadApi->execute("SELECT RTU_NO,TAG_NAME,DEV_NAME,DEV_DESC FROM fes_dev_info", sqlQueue);
if(sqlQueue.isActive())
{
while(sqlQueue.next())
{
//采用下标方式提高效率注意与SELECT语句顺序对应
int rtuNo = sqlQueue.value(0).toInt();
QString tagName = sqlQueue.value(1).toString();
QString devName = sqlQueue.value(2).toString();
QString devDesc = sqlQueue.value(3).toString();
SFESDEVINFO &devInfo = m_rtuDevMap[rtuNo][tagName];
devInfo.nRtuNo = rtuNo;
devInfo.strTagName = tagName;
devInfo.strDevName = devName;
devInfo.strDesc = devDesc;
}
}
}
RtuDevMap CDataMng::getDevInfo()
{
return m_rtuDevMap;
}
const RtuDevMap &CDataMng::getDevInfoRef()
{
return m_rtuDevMap;
}
void CDataMng::loadAiInfo(const int nRtuNo, const bool bForceLoad)
{
if(nRtuNo < 0)
{
return;
}
loadAllDevInfo();
if(bForceLoad)
{
m_rtuAiPointMap.clear();
}
if(m_rtuAiPointMap.count(nRtuNo))
{
return;
}
MaxAndMinPointNo mapDev2MaxMinPntNo; //记录设备的最大点号和最小点号
QSqlQuery sqlQueue;
QString strSQL = QString("SELECT DOT_NO,RTU_NO,TAG_NAME,DESCRIPTION,APP_TAG_NAME,RES_PARA_INT1,DEV_TAG FROM fes_analog WHERE RTU_NO=%1").arg(nRtuNo);
m_pReadApi->execute(strSQL, sqlQueue);
if(sqlQueue.isActive())
{
while(sqlQueue.next())
{
//采用下标方式提高效率注意与SELECT语句顺序对应
int pointNo = sqlQueue.value(0).toInt();
int rtuNo = sqlQueue.value(1).toInt();
QString tagName = sqlQueue.value(2).toString();
QString tagDesc = sqlQueue.value(3).toString();
QString appTagName = sqlQueue.value(4).toString();
int resPara = sqlQueue.value(5).toInt();
QString devTag =sqlQueue.value(6).toString();
SFESPOINTINFO &pointInfo = m_rtuAiPointMap[rtuNo][pointNo];
pointInfo.nDotNo = pointNo;
pointInfo.nRtuNo = rtuNo;
pointInfo.strTagName = tagName;
pointInfo.strDesc = tagDesc;
pointInfo.strAppTagName = appTagName;
pointInfo.nRespPara = resPara;
pointInfo.strDevTag = devTag;
pointInfo.strDevDesc = m_rtuDevMap.value(rtuNo).value(devTag).strDesc;
SFESDEVMAXANDMINPOINTNO & maxminNo = mapDev2MaxMinPntNo[devTag];
if(pointNo > maxminNo.maxPointNo)
{
maxminNo.maxPointNo = pointNo;
}
if(pointNo < maxminNo.minPointNo)
{
maxminNo.minPointNo = pointNo;
}
}
}
if(!mapDev2MaxMinPntNo.empty())
{
m_rtuAiMaxMinNo[nRtuNo].swap(mapDev2MaxMinPntNo);
}
}
const RtuPointMap &CDataMng::getAiInfoRef()
{
return m_rtuAiPointMap;
}
void CDataMng::loadDiInfo(const int nRtuNo, const bool bForceLoad)
{
if(nRtuNo < 0)
{
return;
}
loadAllDevInfo();
if(bForceLoad)
{
m_rtuDiPointMap.clear();
}
if(m_rtuDiPointMap.count(nRtuNo))
{
return;
}
MaxAndMinPointNo mapDev2MaxMinPntNo; //记录设备的最大点号和最小点号
QSqlQuery sqlQueue;
QString strSQL = QString("SELECT DOT_NO,RTU_NO,TAG_NAME,DESCRIPTION,APP_TAG_NAME,RES_PARA_INT1,DEV_TAG FROM fes_digital WHERE RTU_NO=%1").arg(nRtuNo);
m_pReadApi->execute(strSQL, sqlQueue);
if(sqlQueue.isActive())
{
while(sqlQueue.next())
{
//采用下标方式提高效率注意与SELECT语句顺序对应
int pointNo = sqlQueue.value(0).toInt();
int rtuNo = sqlQueue.value(1).toInt();
QString tagName = sqlQueue.value(2).toString();
QString tagDesc = sqlQueue.value(3).toString();
QString appTagName = sqlQueue.value(4).toString();
int resPara = sqlQueue.value(5).toInt();
QString devTag =sqlQueue.value(6).toString();
SFESPOINTINFO &pointInfo = m_rtuDiPointMap[rtuNo][pointNo];
pointInfo.nDotNo = pointNo;
pointInfo.nRtuNo = rtuNo;
pointInfo.strTagName = tagName;
pointInfo.strDesc = tagDesc;
pointInfo.strAppTagName = appTagName;
pointInfo.nRespPara = resPara;
pointInfo.strDevTag = devTag;
pointInfo.strDevDesc = m_rtuDevMap.value(rtuNo).value(devTag).strDesc;
SFESDEVMAXANDMINPOINTNO & maxminNo = mapDev2MaxMinPntNo[devTag];
if(pointNo > maxminNo.maxPointNo)
{
maxminNo.maxPointNo = pointNo;
}
if(pointNo < maxminNo.minPointNo)
{
maxminNo.minPointNo = pointNo;
}
}
}
if(!mapDev2MaxMinPntNo.empty())
{
m_rtuDiMaxMinNo[nRtuNo].swap(mapDev2MaxMinPntNo);
}
}
const RtuPointMap &CDataMng::getDiInfoRef()
{
return m_rtuDiPointMap;
}
const RtuMaxAndMinPointNo &CDataMng::getDiMaxMinNoRef()
{
return m_rtuDiMaxMinNo;
}
void CDataMng::loadAccInfo(const int nRtuNo, const bool bForceLoad)
{
if(nRtuNo < 0)
{
return;
}
loadAllDevInfo();
if(bForceLoad)
{
m_rtuPiPointMap.clear();
}
if(m_rtuPiPointMap.count(nRtuNo))
{
return;
}
MaxAndMinPointNo mapDev2MaxMinPntNo; //记录设备的最大点号和最小点号
QSqlQuery sqlQueue;
QString strSQL = QString("SELECT DOT_NO,RTU_NO,TAG_NAME,DESCRIPTION,APP_TAG_NAME,RES_PARA_INT1,DEV_TAG FROM fes_accuml WHERE RTU_NO=%1").arg(nRtuNo);
m_pReadApi->execute(strSQL, sqlQueue);
if(sqlQueue.isActive())
{
while(sqlQueue.next())
{
//采用下标方式提高效率注意与SELECT语句顺序对应
int pointNo = sqlQueue.value(0).toInt();
int rtuNo = sqlQueue.value(1).toInt();
QString tagName = sqlQueue.value(2).toString();
QString tagDesc = sqlQueue.value(3).toString();
QString appTagName = sqlQueue.value(4).toString();
int resPara = sqlQueue.value(5).toInt();
QString devTag =sqlQueue.value(6).toString();
SFESPOINTINFO &pointInfo = m_rtuPiPointMap[rtuNo][pointNo];
pointInfo.nDotNo = pointNo;
pointInfo.nRtuNo = rtuNo;
pointInfo.strTagName = tagName;
pointInfo.strDesc = tagDesc;
pointInfo.strAppTagName = appTagName;
pointInfo.nRespPara = resPara;
pointInfo.strDevTag = devTag;
pointInfo.strDevDesc = m_rtuDevMap.value(rtuNo).value(devTag).strDesc;
SFESDEVMAXANDMINPOINTNO & maxminNo = mapDev2MaxMinPntNo[devTag];
if(pointNo > maxminNo.maxPointNo)
{
maxminNo.maxPointNo = pointNo;
}
if(pointNo < maxminNo.minPointNo)
{
maxminNo.minPointNo = pointNo;
}
}
}
if(!mapDev2MaxMinPntNo.empty())
{
m_rtuPiMaxMinNo[nRtuNo].swap(mapDev2MaxMinPntNo);
}
}
const RtuPointMap &CDataMng::getAccInfoRef()
{
return m_rtuPiPointMap;
}
const RtuMaxAndMinPointNo &CDataMng::getAccMaxMinNoRef()
{
return m_rtuPiMaxMinNo;
}
void CDataMng::loadMiInfo(const int nRtuNo, const bool bForceLoad)
{
if(nRtuNo < 0)
{
return;
}
loadAllDevInfo();
if(bForceLoad)
{
m_rtuMiPointMap.clear();
}
if(m_rtuMiPointMap.count(nRtuNo))
{
return;
}
MaxAndMinPointNo mapDev2MaxMinPntNo; //记录设备的最大点号和最小点号
QString strSQL = QString("SELECT DOT_NO,RTU_NO,TAG_NAME,DESCRIPTION,APP_TAG_NAME,RES_PARA_INT1,DEV_TAG FROM fes_mix WHERE RTU_NO=%1").arg(nRtuNo);
QSqlQuery sqlQueue;
m_pReadApi->execute(strSQL, sqlQueue);
if(sqlQueue.isActive())
{
while(sqlQueue.next())
{
//采用下标方式提高效率注意与SELECT语句顺序对应
int pointNo = sqlQueue.value(0).toInt();
int rtuNo = sqlQueue.value(1).toInt();
QString tagName = sqlQueue.value(2).toString();
QString tagDesc = sqlQueue.value(3).toString();
QString appTagName = sqlQueue.value(4).toString();
int resPara = sqlQueue.value(5).toInt();
QString devTag =sqlQueue.value(6).toString();
SFESPOINTINFO &pointInfo = m_rtuMiPointMap[rtuNo][pointNo];
pointInfo.nDotNo = pointNo;
pointInfo.nRtuNo = rtuNo;
pointInfo.strTagName = tagName;
pointInfo.strDesc = tagDesc;
pointInfo.strAppTagName = appTagName;
pointInfo.nRespPara = resPara;
pointInfo.strDevTag = devTag;
pointInfo.strDevDesc = m_rtuDevMap.value(rtuNo).value(devTag).strDesc;
SFESDEVMAXANDMINPOINTNO & maxminNo = mapDev2MaxMinPntNo[devTag];
if(pointNo > maxminNo.maxPointNo)
{
maxminNo.maxPointNo = pointNo;
}
if(pointNo < maxminNo.minPointNo)
{
maxminNo.minPointNo = pointNo;
}
}
}
if(!mapDev2MaxMinPntNo.empty())
{
m_rtuMiMaxMinNo[nRtuNo].swap(mapDev2MaxMinPntNo);
}
}
const RtuPointMap &CDataMng::getMiInfoRef()
{
return m_rtuMiPointMap;
}
const RtuMaxAndMinPointNo &CDataMng::getMiMaxMinNoRef()
{
return m_rtuMiMaxMinNo;
}
void CDataMng::loadAoInfo(const int nRtuNo, const bool bForceLoad)
{
if(nRtuNo < 0)
{
return;
}
loadAllDevInfo();
if(bForceLoad)
{
m_rtuAoPointMap.clear();
}
if(m_rtuAoPointMap.count(nRtuNo))
{
return;
}
QString strSQL = QString("SELECT DOT_NO,RTU_NO,TAG_NAME,DESCRIPTION,RES_PARA_INT1,DEV_TAG FROM fes_analog_ctrl WHERE RTU_NO=%1").arg(nRtuNo);
QSqlQuery sqlQueue;
m_pReadApi->execute(strSQL, sqlQueue);
if(sqlQueue.isActive())
{
while(sqlQueue.next())
{
//采用下标方式提高效率注意与SELECT语句顺序对应
int pointNo = sqlQueue.value(0).toInt();
int rtuNo = sqlQueue.value(1).toInt();
QString tagName = sqlQueue.value(2).toString();
QString tagDesc = sqlQueue.value(3).toString();
int resPara = sqlQueue.value(4).toInt();
QString devTag =sqlQueue.value(5).toString();
SFESPOINTINFO &pointInfo = m_rtuAoPointMap[rtuNo][pointNo];
pointInfo.nDotNo = pointNo;
pointInfo.nRtuNo = rtuNo;
pointInfo.strTagName = tagName;
pointInfo.strDesc = tagDesc;
pointInfo.nRespPara = resPara;
pointInfo.strDevTag = devTag;
pointInfo.strDevDesc = m_rtuDevMap.value(rtuNo).value(devTag).strDesc;
}
}
}
const RtuPointMap &CDataMng::getAoInfoRef()
{
return m_rtuAoPointMap;
}
void CDataMng::loadDoInfo(const int nRtuNo, const bool bForceLoad)
{
if(nRtuNo < 0)
{
return;
}
loadAllDevInfo();
if(bForceLoad)
{
m_rtuDoPointMap.clear();
}
if(m_rtuDoPointMap.count(nRtuNo))
{
return;
}
QString strSQL = QString("SELECT DOT_NO,RTU_NO,TAG_NAME,DESCRIPTION,RES_PARA_INT1,DEV_TAG FROM fes_digital_ctrl WHERE RTU_NO=%1").arg(nRtuNo);
QSqlQuery sqlQueue;
m_pReadApi->execute(strSQL, sqlQueue);
if(sqlQueue.isActive())
{
while(sqlQueue.next())
{
//采用下标方式提高效率注意与SELECT语句顺序对应
int pointNo = sqlQueue.value(0).toInt();
int rtuNo = sqlQueue.value(1).toInt();
QString tagName = sqlQueue.value(2).toString();
QString tagDesc = sqlQueue.value(3).toString();
int resPara = sqlQueue.value(4).toInt();
QString devTag =sqlQueue.value(5).toString();
SFESPOINTINFO &pointInfo = m_rtuDoPointMap[rtuNo][pointNo];
pointInfo.nDotNo = pointNo;
pointInfo.nRtuNo = rtuNo;
pointInfo.strTagName = tagName;
pointInfo.strDesc = tagDesc;
pointInfo.nRespPara = resPara;
pointInfo.strDevTag = devTag;
pointInfo.strDevDesc = m_rtuDevMap.value(rtuNo).value(devTag).strDesc;
}
}
}
const RtuPointMap &CDataMng::getDoInfoRef()
{
return m_rtuDoPointMap;
}
void CDataMng::loadMoInfo(const int nRtuNo, const bool bForceLoad)
{
if(nRtuNo < 0)
{
return;
}
loadAllDevInfo();
if(bForceLoad)
{
m_rtuMoPointMap.clear();
}
if(m_rtuMoPointMap.count(nRtuNo))
{
return;
}
QString strSQL = QString("SELECT DOT_NO,RTU_NO,TAG_NAME,DESCRIPTION,RES_PARA_INT1,DEV_TAG FROM fes_mix_ctrl WHERE RTU_NO=%1").arg(nRtuNo);
QSqlQuery sqlQueue;
m_pReadApi->execute(strSQL, sqlQueue);
if(sqlQueue.isActive())
{
while(sqlQueue.next())
{
//采用下标方式提高效率注意与SELECT语句顺序对应
int pointNo = sqlQueue.value(0).toInt();
int rtuNo = sqlQueue.value(1).toInt();
QString tagName = sqlQueue.value(2).toString();
QString tagDesc = sqlQueue.value(3).toString();
int resPara = sqlQueue.value(4).toInt();
QString devTag =sqlQueue.value(5).toString();
SFESPOINTINFO &pointInfo = m_rtuMoPointMap[rtuNo][pointNo];
pointInfo.nDotNo = pointNo;
pointInfo.nRtuNo = rtuNo;
pointInfo.strTagName = tagName;
pointInfo.strDesc = tagDesc;
pointInfo.nRespPara = resPara;
pointInfo.strDevTag = devTag;
pointInfo.strDevDesc = m_rtuDevMap.value(rtuNo).value(devTag).strDesc;
}
}
}
const RtuPointMap &CDataMng::getMoInfoRef()
{
return m_rtuMoPointMap;
}
QVector<FesAppName> CDataMng::getAppInfo()
{
m_appVec.clear();
QSqlQuery ret;
QString strSql = "SELECT APP_ID,TAG_NAME,DESCRIPTION FROM sys_model_app_info ORDER BY APP_ID";
m_pReadApi->execute(strSql,ret);
if(ret.isActive())
{
while(ret.next())
{
FesAppName fesApp;
fesApp.appId = ret.value("APP_ID").toInt();
fesApp.desc = ret.value("DESCRIPTION").toString();
fesApp.appName = ret.value("TAG_NAME").toString();
if(fesApp.appId > CN_AppId_COMAPP)
{
m_appVec.append(fesApp);
}
}
}
return m_appVec;
}
const RtuMaxAndMinPointNo &CDataMng::getAiMaxMinNoRef()
{
return m_rtuAiMaxMinNo;
}
CDataMng::CDataMng():QObject(),
m_pReadApi(Q_NULLPTR),
m_chanHaveLoad(false)
{
m_pReadApi = new iot_dbms::CDbApi(DB_CONN_MODEL_READ);
m_pReadApi->open();
}

View File

@ -0,0 +1,185 @@
#ifndef CDATAMNG_H
#define CDATAMNG_H
#include <QObject>
#include "toolCommon.h"
#include "db_api_ex/CDbApi.h"
class QMutex;
class CDataMng : public QObject
{
Q_OBJECT
public:
static CDataMng * instance();
~CDataMng();
ChanInfoMap getChanInfo();
RtuDevMap getDevInfo();
void loadAllDevInfo(const bool bForceLoad = false);
const RtuDevMap& getDevInfoRef();
void loadAiInfo(const int nRtuNo,const bool bForceLoad = false);
const RtuPointMap& getAiInfoRef();
const RtuMaxAndMinPointNo& getAiMaxMinNoRef();
void loadDiInfo(const int nRtuNo,const bool bForceLoad = false);
const RtuPointMap& getDiInfoRef();
const RtuMaxAndMinPointNo& getDiMaxMinNoRef();
void loadAccInfo(const int nRtuNo,const bool bForceLoad = false);
const RtuPointMap& getAccInfoRef();
const RtuMaxAndMinPointNo& getAccMaxMinNoRef();
void loadMiInfo(const int nRtuNo,const bool bForceLoad = false);
const RtuPointMap& getMiInfoRef();
const RtuMaxAndMinPointNo& getMiMaxMinNoRef();
void loadAoInfo(const int nRtuNo,const bool bForceLoad = false);
const RtuPointMap& getAoInfoRef();
void loadDoInfo(const int nRtuNo,const bool bForceLoad = false);
const RtuPointMap& getDoInfoRef();
void loadMoInfo(const int nRtuNo,const bool bForceLoad = false);
const RtuPointMap& getMoInfoRef();
QVector<FesAppName> getAppInfo();
signals:
void signal_sendMsgToServer(const std::string &strMsg);
//FesParam
//通道状态 - 通道参数
void signal_chanParamResp(int nMsgType, const std::string &strBody);
//通道状态 - RTU参数
void signal_rtuParamResp(int nMsgType, const std::string &strBody);
//FesData
//前置数据 - 模拟量
void signal_aiRtuInfoResp(int nMsgType,const std::string &strBody);
void signal_aiParamResp(int nMsgType,const std::string &strBody);
void signal_aiValueResp(int nMsgType,const std::string &strBody);
//前置数据 - 数字量
void signal_diRtuInfoResp(int nMsgType,const std::string &strBody);
void signal_diParamResp(int nMsgType,const std::string &strBody);
void signal_diValueResp(int nMsgType,const std::string &strBody);
//前置数据 - 累积量
void signal_accRtuInfoResp(int nMsgType,const std::string &strBody);
void signal_accParamResp(int nMsgType,const std::string &strBody);
void signal_accValueResp(int nMsgType,const std::string &strBody);
//前置数据 - 混合量
void signal_miRtuInfoResp(int nMsgType,const std::string &strBody);
void signal_miParamResp(int nMsgType,const std::string &strBody);
void signal_miValueResp(int nMsgType,const std::string &strBody);
//数据仿真 - 模拟量
void signal_simAiRtuInfoResp(int nMsgType,const std::string &strBody);
void signal_simAiParamResp(int nMsgType,const std::string &strBody);
void signal_simAiValueResp(int nMsgType,const std::string &strBody);
void signal_simAiStartSimResp(int nMsgType,const std::string &strBody);
void signal_simAiStopSimResp(int nMsgType,const std::string &strBody);
//数据仿真 - 数字量
void signal_simDiRtuInfoResp(int nMsgType,const std::string &strBody);
void signal_simDiParamResp(int nMsgType,const std::string &strBody);
void signal_simDiValueResp(int nMsgType,const std::string &strBody);
void signal_simDiStartSimResp(int nMsgType,const std::string &strBody);
void signal_simDiStopSimResp(int nMsgType,const std::string &strBody);
//数据仿真 - 混合量
void signal_simMiRtuInfoResp(int nMsgType,const std::string &strBody);
void signal_simMiParamResp(int nMsgType,const std::string &strBody);
void signal_simMiValueResp(int nMsgType,const std::string &strBody);
void signal_simMiStartSimResp(int nMsgType,const std::string &strBody);
void signal_simMiStopSimResp(int nMsgType,const std::string &strBody);
//数据仿真 - 累积量
void signal_simAccRtuInfoResp(int nMsgType,const std::string &strBody);
void signal_simAccParamResp(int nMsgType,const std::string &strBody);
void signal_simAccValueResp(int nMsgType,const std::string &strBody);
void signal_simAccStartSimResp(int nMsgType,const std::string &strBody);
void signal_simAccStopSimResp(int nMsgType,const std::string &strBody);
//数据仿真 - 事件仿真
void signal_simEventRtuInfoResp(int nMsgType,const std::string &strBody);
void signal_simEventDiParamResp(int nMsgType,const std::string &strBody);
void signal_simEventCreateResp(int nMsgType,const std::string &strBody);
//控制仿真 - 模拟量
void signal_simAoRtuInfoResp(int nMsgType,const std::string &strBody);
void signal_simAoParamResp(int nMsgType,const std::string &strBody);
void signal_simAoControlResp(int nMsgType,const std::string &strBody);
//控制仿真 - 数字量
void signal_simDoRtuInfoResp(int nMsgType,const std::string &strBody);
void signal_simDoParamResp(int nMsgType,const std::string &strBody);
void signal_simDoControlResp(int nMsgType,const std::string &strBody);
//控制仿真 - 混合量
void signal_simMoRtuInfoResp(int nMsgType,const std::string &strBody);
void signal_simMoParamResp(int nMsgType,const std::string &strBody);
void signal_simMoControlResp(int nMsgType,const std::string &strBody);
//控制仿真 - 自定义命令
void signal_simDefCmdRtuInfoResp(int nMsgType,const std::string &strBody);
void signal_simDefCmdControlResp(int nMsgType,const std::string &strBody);
//转发数据 - 模拟量
void signal_fwAiRtuInfoResp(int nMsgType,const std::string &strBody);
void signal_fwAiParamResp(int nMsgType,const std::string &strBody);
void signal_fwAiValueResp(int nMsgType,const std::string &strBody);
//转发数据 - 数字量(单位开关)
void signal_fwDiRtuInfoResp(int nMsgType,const std::string &strBody);
void signal_fwDiParamResp(int nMsgType,const std::string &strBody);
void signal_fwDiValueResp(int nMsgType,const std::string &strBody);
//转发数据 - 数字量(双位开关)
void signal_fwDDiRtuInfoResp(int nMsgType,const std::string &strBody);
void signal_fwDDiParamResp(int nMsgType,const std::string &strBody);
void signal_fwDDiValueResp(int nMsgType,const std::string &strBody);
//转发数据 - 混合量
void signal_fwMiRtuInfoResp(int nMsgType,const std::string &strBody);
void signal_fwMiParamResp(int nMsgType,const std::string &strBody);
void signal_fwMiValueResp(int nMsgType,const std::string &strBody);
//转发数据 - 累积量
void signal_fwAccRtuInfoResp(int nMsgType,const std::string &strBody);
void signal_fwAccParamResp(int nMsgType,const std::string &strBody);
void signal_fwAccValueResp(int nMsgType,const std::string &strBody);
//事件监视
void signal_soeEventResp(int nMsgType,const std::string &strBody);
void signal_chanEventResp(int nMsgType,const std::string &strBody);
void signal_soeMemEventResp(int nMsgType,const std::string &strBody);
private:
CDataMng();
private:
static CDataMng *m_pInstance;
iot_dbms::CDbApi *m_pReadApi;
bool m_chanHaveLoad;
RtuDevMap m_rtuDevMap;
RtuPointMap m_rtuAiPointMap;
RtuPointMap m_rtuDiPointMap;
RtuPointMap m_rtuPiPointMap;
RtuPointMap m_rtuMiPointMap;
RtuPointMap m_rtuAoPointMap;
RtuPointMap m_rtuDoPointMap;
RtuPointMap m_rtuMoPointMap;
ChanInfoMap m_chanMap;
RtuMaxAndMinPointNo m_rtuAiMaxMinNo;
RtuMaxAndMinPointNo m_rtuDiMaxMinNo;
RtuMaxAndMinPointNo m_rtuPiMaxMinNo;
RtuMaxAndMinPointNo m_rtuMiMaxMinNo;
RtuMaxAndMinPointNo m_rtuAoMaxMinNo;
RtuMaxAndMinPointNo m_rtuDoMaxMinNo;
RtuMaxAndMinPointNo m_rtuMoMaxMinNo;
QVector<FesAppName> m_appVec;
};
#endif // CDATAMNG_H

View File

@ -0,0 +1,268 @@
#include "CDebugTool.h"
#include "ui_CDebugTool.h"
#include <QIcon>
#include "CommonSheet.h"
#include "pub_utility_api/FileUtil.h"
CDebugTool::CDebugTool(CSystemResources *pSystemResources, QWidget *parent):
m_pSystemResources(pSystemResources),
CustomUiMainWindow(parent),
m_pFessim(NULL),
m_pUpdateThread(NULL),
m_pEventFormShow(NULL),
ui(new Ui::CDebugTool)
{
ui->setupUi(this);
//setMinimumSize(1200,755);
setWindowTitle(tr("工程调试工具"));
setWindowIcon(QIcon(":/debug_tool.ico"));
CommonSheet sheetStyle;
QString sheet;
if(sheetStyle.getSheet(sheet))
{
setStyleSheet(sheet);
}else
{
LOGERROR("MainWindow::initSheet():获取样式文件失败!");
}
initDebugTool();
setTitleWidget(ui->mainmenu);
connect(ui->tabWidget,&QTabWidget::currentChanged,this,&CDebugTool::changeTab);
}
CDebugTool::~CDebugTool()
{
//releaseResouce();
if(m_pUpdateThread)
{
delete m_pUpdateThread;
m_pUpdateThread =NULL;
}
delete ui;
}
void CDebugTool::initDebugTool()
{
initLogSystem();
initVariable();
initView();
connectSignalSlot();
m_pUpdateThread->start();
}
void CDebugTool::initVariable()
{
m_pRealDataSelect = new CRealDataSelect;
m_pRealDataWatch = new CRealDataWatch;
m_pRealDatabaseSelect = new CRealDatabaseSelect;
m_pRealDatabaseShow = new CRealDatabaseShow;
m_pUpdateThread = new CUpdateThread;
m_pEventFormShow = new CEventFormShow;
}
void CDebugTool::initView()
{
addRealData();
addRealAlarm();
addRealEvent();
addHistoryEvent();
addRealDataBase();
ui->splitter_2->setSizes(QList<int>()<<200<<900);
ui->splitter->setSizes(QList<int>()<<200<<900);
}
void CDebugTool::addRealData()
{
QGridLayout *gridLayout = new QGridLayout(ui->groupBox_1);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(m_pRealDataSelect, 0, 0, 1, 1);
m_pRealDataSelect->setSystemResources(m_pSystemResources);
m_pRealDataSelect->initSelect();
gridLayout = new QGridLayout(ui->groupBox_2);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(m_pRealDataWatch, 0, 0, 1, 1);
m_pRealDataWatch->setSystemResources(m_pSystemResources);
m_pRealDataWatch->initWatch();
ui->textEdit_status->setToolTip("具体状态");
m_pRealDataSelect->setRealDataWatch(m_pRealDataWatch);
}
void CDebugTool::addRealAlarm()
{
QGridLayout *gridLayout = new QGridLayout(ui->tab);
ui->textEdit_status->setHidden(true);
ui->tab->setLayout(gridLayout);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(m_pEventFormShow, 0, 0, 1, 1);
m_pEventFormShow->setSystemResources(m_pSystemResources);
m_pEventFormShow->initRealModel();
//m_pEventFormShow->setSystemResources(m_pSystemResources);
// m_pAlarmFormShow->initSelect();
}
void CDebugTool::addRealEvent()
{
}
void CDebugTool::addHistoryEvent()
{
}
void CDebugTool::addRealDataBase()
{
QGridLayout *gridLayout4 = new QGridLayout(ui->groupBox_4);
gridLayout4->setSpacing(6);
gridLayout4->setContentsMargins(0, 0, 0, 0);
gridLayout4->addWidget(m_pRealDatabaseSelect, 0, 0, 1, 1);
m_pRealDatabaseSelect->initRealDb(m_pSystemResources);
QGridLayout * gridLayout5 = new QGridLayout(ui->groupBox_5);
gridLayout5->setSpacing(6);
gridLayout5->setContentsMargins(0, 0, 0, 0);
gridLayout5->addWidget(m_pRealDatabaseShow, 0, 0, 1, 1);
m_pRealDatabaseShow->initRealDatabaseShow(m_pSystemResources);
}
void CDebugTool::addNodeStatus()
{
// QGridLayout *gridLayout = new QGridLayout(ui->tab_nodeStatus);
// gridLayout->setSpacing(6);
// gridLayout->setContentsMargins(0, 0, 0, 0);
// gridLayout->addWidget(m_pNodeStatus, 0, 0, 1, 1);
}
void CDebugTool::addFessim()
{
QGridLayout *gridLayout = new QGridLayout(ui->tab_fes);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(m_pFessim, 0, 0, 1, 1);
m_pFessim->Init();
}
void CDebugTool::initLogSystem()
{
// QString app = QString::fromStdString(CN_AppName_BASE);
// iot_public::StartLogSystem(app.toStdString().c_str(),CN_ProcName_debug_tool.c_str());
// LOGINFO("initLogSystem()成功!");
}
void CDebugTool::initMsgBus()
{
//< 初始化消息总线库
if (!(iot_net::initMsgBus("debugToolAppName", "debugToolProcessName")))
{
qDebug() << "Initialize message bus failed, exit !" << endl;
LOGERROR("Initialize message bus failed, exit !");
return;
}
else
{
qDebug() << "Initialize message bus successed !" << endl;
LOGINFO("Initialize message bus successed !");
}
iot_service::CDpcdaForApp::initGlobalThread();
return;
}
void CDebugTool::releaseResouce()
{
iot_service::CDpcdaForApp::releaseGlobalThread();
//< 释放消息总线库
iot_net::releaseMsgBus();
//< 停止日志系统
//iot_public::StopLogSystem();
}
void CDebugTool::connectSignalSlot()
{
connect(m_pRealDataSelect,SIGNAL(signal_addPoint(QString,uint,QString,uint,QString,QString,QString,QString,QString,QString,QString,int,QString)),
m_pRealDataWatch,SLOT(slot_addPoint(QString,uint,QString,uint,QString,QString,QString,QString,QString,QString,QString,int,QString)));
connect(m_pUpdateThread,SIGNAL(signal_updateAi(QString,float,uint)),
m_pRealDataWatch,SLOT(slot_updateAi(QString,float,uint)));
connect(m_pUpdateThread,SIGNAL(signal_updateDi(QString,int,uint)),
m_pRealDataWatch,SLOT(slot_updateDi(QString,int,uint)));
connect(m_pUpdateThread,SIGNAL(signal_updatePi(QString,double,uint)),
m_pRealDataWatch,SLOT(slot_updatePi(QString,double,uint)));
connect(m_pUpdateThread,SIGNAL(signal_updateMi(QString,int,uint)),
m_pRealDataWatch,SLOT(slot_updateMi(QString,int,uint)));
connect(m_pRealDatabaseSelect,SIGNAL(signal_showTable(QString,QVector<QString>*,int,int,int,int,QMap<int,bool>,QString,QString)),
m_pRealDatabaseShow,SLOT(slot_showTable(QString,QVector<QString>*,int,int,int,int,QMap<int,bool>,QString,QString)));
connect(m_pRealDatabaseSelect,SIGNAL(signal_showOrHideColumn(int,int)),
m_pRealDatabaseShow,SLOT(slot_showOrHindColumn(int,int)));
connect(m_pRealDataWatch,SIGNAL(signal_selectTextEdit(QString ,QString , int )),
this,SLOT(slot_selectTextEdit(QString,QString, int )));
connect(m_pRealDataWatch,SIGNAL(signal_paging()),m_pRealDataSelect,SLOT(slot_paging()));
connect(m_pRealDatabaseShow,SIGNAL(signal_selectTextEdit(QString)),
this,SLOT(slot_selectTextEdit(QString)));
}
void CDebugTool::changeTab(int index)
{
switch (index) {
case 0:
ui->textEdit_status->setHidden(true);
break;
case 1:
ui->textEdit_status->setHidden(false);
break;
case 2:{
ui->textEdit_status->setHidden(false);
break;
}
case 3:
{
ui->textEdit_status->setHidden(true);
if(m_pFessim == NULL)
{
m_pFessim = new CFessim;
addFessim();
}
//此处判断是否连接 若连接 则不做处理 若断开状态 则直接调用连接
if(!m_pFessim->isConnect())
{
if(!m_pFessim->slot_connect())
{
return ;
}
int index = m_pFessim->getCurrentIndex();
m_pFessim->setActiveWindow(index);
}
break;
}
default:
break;
}
}
void CDebugTool::slot_selectTextEdit(QString allStatus, QString m_allName, int m_value)
{
ui->textEdit_status->setReadOnly(true);
ui->textEdit_status->setText("当前标签为"+m_allName+" 值为"
+QString::number(m_value)+" 状态为"
+allStatus);
}
void CDebugTool::slot_selectTextEdit(QString allQString)
{ ui->textEdit_status->setReadOnly(true);
ui->textEdit_status->setText(allQString);
}

View File

@ -0,0 +1,83 @@
#ifndef CDEBUGTOOL_H
#define CDEBUGTOOL_H
#include "CFessim.h"
#include "CNodeStatus.h"
#include "CRealDatabaseSelect.h"
#include "CRealDatabaseShow.h"
#include "CRealDataControl.h"
#include "CRealDataSelect.h"
#include "CRealDataWatch.h"
#include "CSystemResources.h"
#include "CUpdateThread.h"
#include "CEventFormShow.h"
#include "pub_logger_api/logger.h"
#include "net_msg_bus_api/MsgBusApi.h"
#include "pub_widget/NcFramelessHelper.h"
#include <QWidget>
#include <QGridLayout>
#include "pub_widget/CustomMainWindow.h"
namespace Ui {
class CDebugTool;
}
class CDebugTool : public CustomUiMainWindow
{
Q_OBJECT
public:
explicit CDebugTool(CSystemResources *pSystemResources,QWidget *parent = 0);
~CDebugTool();
private:
CSystemResources * m_pSystemResources;
CRealDataSelect * m_pRealDataSelect;
CRealDataWatch * m_pRealDataWatch;
CRealDatabaseSelect * m_pRealDatabaseSelect;
CRealDatabaseShow * m_pRealDatabaseShow;
CEventFormShow * m_pEventFormShow;
//CNodeStatus * m_pNodeStatus;
CFessim * m_pFessim;
CUpdateThread * m_pUpdateThread;
Ui::CDebugTool *ui;
private:
// void loadStyle();
void initDebugTool();
void initVariable();
void initView();
void addRealData();
void addRealAlarm();
void addRealEvent();
void addHistoryEvent();
void addRealDataBase();
void addNodeStatus();
void addFessim();
void initMsgBus();
void initLogSystem();
void releaseResouce();
void connectSignalSlot();
private slots:
void changeTab(int index);
void slot_selectTextEdit(QString allStatus,QString m_allName, int m_value);
void slot_selectTextEdit(QString allQString);
private:
};
#endif // CDEBUGTOOL_H

View File

@ -0,0 +1,178 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CDebugTool</class>
<widget class="QWidget" name="CDebugTool">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>500</height>
</rect>
</property>
<property name="windowTitle">
<string>CDebugTool</string>
</property>
<layout class="QGridLayout" name="gridLayout_4">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="mainmenu">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QWidget" name="memuForm" native="true"/>
</item>
<item row="1" column="1">
<widget class="WorkFrame" name="work_widget" native="true">
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<attribute name="title">
<string> 事件信息</string>
</attribute>
</widget>
<widget class="QWidget" name="tab_realData">
<attribute name="title">
<string>实时数据</string>
</attribute>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QSplitter" name="splitter_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<widget class="QGroupBox" name="groupBox_1">
<property name="title">
<string>测点选择</string>
</property>
</widget>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>测点监控</string>
</property>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_rdbTable">
<attribute name="title">
<string>实时库表</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_3">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QSplitter" name="splitter">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<widget class="QGroupBox" name="groupBox_4">
<property name="title">
<string>表选择</string>
</property>
</widget>
<widget class="QGroupBox" name="groupBox_5">
<property name="title">
<string>表内容</string>
</property>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_fes">
<attribute name="title">
<string>前置数据</string>
</attribute>
</widget>
</widget>
</item>
</layout>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QTextEdit" name="textEdit_status">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>25</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
<customwidgets>
<customwidget>
<class>WorkFrame</class>
<extends>QWidget</extends>
<header>pub_widget/WorkFrame.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,893 @@
#include "CEventDataCollect.h"
#include <QDateTime>
#include "pub_widget/MessageBox.h"
#include <QMutex>
#include <QThread>
#include "pub_logger_api/logger.h"
#include "net_msg_bus_api/MsgBusApi.h"
#include "public/pub_sysinfo_api/SysInfoApi.h"
#include "perm_mng_api/PermMngApi.h"
#include "CEventMsgManage.h"
//< 屏蔽xml_parser编译告警
#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-copy"
#endif
#include "boost/property_tree/xml_parser.hpp"
#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif
#include "boost/typeof/typeof.hpp"
#include "boost/filesystem.hpp"
#include "Common.h"
#include "pub_utility_api/FileUtil.h"
#include "pub_utility_api/CharUtil.h"
#include "dbms/db_api_ex/CDbApi.h"
using namespace std;
using namespace iot_public;
using namespace iot_dbms;
CEventDataCollect * CEventDataCollect::m_pInstance = NULL;
CSystemResources *m_pSystemResources=NULL;
CEventDataCollect * CEventDataCollect::instance()
{
if(NULL == m_pInstance)
{
m_pInstance = new CEventDataCollect();
}
return m_pInstance;
}
void CEventDataCollect::setSystemResources(CSystemResources *pSystemResources)
{
if(m_pSystemResources==NULL){
m_pSystemResources=pSystemResources;
}
}
CEventDataCollect::CEventDataCollect()
: m_pTimer(NULL)
{
msgMutex = new QMutex();
//m_rtdbPriorityOrderAccess = new iot_dbms::CRdbAccess();
//m_rtdbPriorityOrderAccess->open("base", "alarm_level_define");
//m_rtdbAccess = new iot_dbms::CRdbAccess();
m_pTimer = new QTimer();
m_pTimer->setInterval(1000);
connect(m_pTimer, &QTimer::timeout, this, &CEventDataCollect::slotUpdateEvent);
initialize();
}
int CEventDataCollect::queryPriorityOrder(int &id)
{
int nRet = -1;
if ( m_priorityOrderMap.contains(id) )
nRet = m_priorityOrderMap[id];
return nRet;
// iot_dbms::CTableLockGuard locker(*m_rtdbPriorityOrderAccess);
// iot_dbms::CVarType value;
// m_rtdbPriorityOrderAccess->getColumnValueByKey((void*)&id, "priority_order", value);
// return value.toInt();
}
CEventDataCollect::~CEventDataCollect()
{
LOGDEBUG("CEventDataCollect::~CEventDataCollect()");
}
bool CEventDataCollect::initialize()
{
m_pTimer->start();
initVariable();;
iot_public::CSysInfoInterfacePtr spSysInfo;
if (iot_public::createSysInfoInstance(spSysInfo))
{
iot_public::SNodeInfo stNodeInfo;
spSysInfo->getLocalNodeInfo(stNodeInfo);
iot_public::SLocationInfo stLocationInfo;
spSysInfo->getLocationInfoById(stNodeInfo.nLocationId, stLocationInfo);
m_nLocationID = stNodeInfo.nLocationId;
}
loadEventConfig();
return resumeThread();
}
void CEventDataCollect::release()
{
m_pTimer->stop();
suspendThread(true);
m_priorityOrderMap.clear();
m_priorityDescriptionMap.clear();
m_locationDescriptionMap.clear();
m_regionInfoDescriptionMap.clear();
m_alarmTypeDescriptionMap.clear();
m_deviceTypeDescriptionMap.clear();
m_subSystemDescriptionMap.clear();
m_areaInfoMap.clear();
m_areaLocMap.clear();
m_locationOrderList.clear();
CEventMsgManage::instance()->clearRTMsg();
}
void CEventDataCollect::loadEventConfig()
{
loadPermInfo();
loadPriorityOrder();
loadPriorityDescription();
loadLocationDescription();
loadRegionInfoDescription();
loadAlarmTypeDescription();
loadDeviceTypeDescription();
loadAlarmStatusDescription();
loadEventShowStatusDescription();
loadEventOtherStatusDescription();
loadUserName();
}
int CEventDataCollect::priorityId(const QString &description)
{
return m_priorityDescriptionMap.key(description, -1);
}
int CEventDataCollect::locationId(const QString &description)
{
return m_locationDescriptionMap.key(description, -1);
}
int CEventDataCollect::regionId(const QString &description)
{
return m_regionInfoDescriptionMap.key(description, -1);
}
int CEventDataCollect::alarmTypeId(const QString &description)
{
return m_alarmTypeDescriptionMap.key(description, -1);
}
int CEventDataCollect::eventStatusId(const QString &description)
{
return m_eventShowStatusMap.key(description, -1);
}
int CEventDataCollect::deviceTypeId(const QString &description)
{
return m_deviceTypeDescriptionMap.key(description, -1);
}
QString CEventDataCollect::priorityDescription(const int &id)
{
return m_priorityDescriptionMap.value(id, QString());
}
QString CEventDataCollect::locationDescription(const int &id)
{
return m_locationDescriptionMap.value(id, QString());
}
QString CEventDataCollect::regionDescription(const int &id)
{
return m_regionInfoDescriptionMap.value(id, QString());
}
QString CEventDataCollect::alarmTypeDescription(const int &id)
{
return m_alarmTypeDescriptionMap.value(id, QString());
}
QString CEventDataCollect::deviceTypeDescription(const int &id)
{
return m_deviceTypeDescriptionMap.value(id, QString());
}
QString CEventDataCollect::alarmStatusDescription(const int &id)
{
return m_alarmStatusMap.value(id, QString());
}
QString CEventDataCollect::userNameDescription(const int &id)
{
return m_userNameMap.value(id, QString());
}
QString CEventDataCollect::eventShowStatusDescription(const int &id)
{
return m_eventShowStatusMap.value(id, QString());
}
QList<int> CEventDataCollect::priorityList()
{
return m_priorityDescriptionMap.keys();
}
QList<int> CEventDataCollect::locationList()
{
return m_listPermLocationId;
}
QList<int> CEventDataCollect::regionList()
{
return m_listPermRegionId;
}
QList<int> CEventDataCollect::alarmTypeList()
{
return m_alarmTypeDescriptionMap.keys();
}
QList<int> CEventDataCollect::alarmStatusList()
{
return m_eventShowStatusMap.keys();
}
QList<int> CEventDataCollect::alarmOtherList()
{
return m_eventOtherStatusMap.keys();
}
QMap<int, SAreaInfo> CEventDataCollect::areaInfoMap()
{
return m_areaInfoMap;
}
QMap<int, QVector<int> > CEventDataCollect::areaLocMap()
{
return m_areaLocMap;
}
QList<int> CEventDataCollect::locationOrderList()
{
return m_locationOrderList;
}
void CEventDataCollect::loadPermInfo()
{
QSqlQuery locationTable;
m_pObjDbInterface->execute("SELECT LOCATION_ID FROM sys_model_location_info ORDER BY LOCATION_ID", locationTable);
if(locationTable.isActive())
{
QVariant val;
val.clear();
int locationId = -1;
while(locationTable.next())
{
val = locationTable.value("LOCATION_ID");
locationId = val.toInt();
m_listPermLocationId.append(locationId);
}
}
QSqlQuery RegionTable;
m_pObjDbInterface->execute("SELECT REGION_ID FROM region_info ORDER BY REGION_ID", RegionTable);
if(RegionTable.isActive())
{
QVariant val;
val.clear();
int regionId = -1;
while(RegionTable.next())
{
val = RegionTable.value("REGION_ID");
regionId = val.toInt();
m_listPermRegionId.append(regionId);
}
}
// iot_service::CPermMngApiPtr permMngPtr = iot_service::getPermMngInstance("base");
// if(permMngPtr != NULL)
// {
// permMngPtr->PermDllInit();
// std::vector <int> vecRegionId;
// std::vector <int> vecLocationId;
// m_listPermLocationId.clear();
// m_listPermRegionId.clear();
// if(PERM_NORMAL == permMngPtr->GetSpeFunc(FUNC_SPE_EVENT_VIEW, vecRegionId, vecLocationId))
// {
// std::vector <int>::iterator location = vecLocationId.begin();
// while (location != vecLocationId.end())
// {
// m_listPermLocationId.append(*location++);
// }
// std::vector <int>::iterator region = vecRegionId.begin();
// while (region != vecRegionId.end())
// {
// m_listPermRegionId.append(*region++);
// }
// }
// }
}
void CEventDataCollect::loadPriorityOrder()
{
m_priorityOrderMap.clear();
if ( !m_pObjDbInterface || !m_pObjDbInterface->isOpen() )
{
N_MessageBox::critical(qApp->activeWindow(),tr("错误"),tr("打开数据库失败"));
return;
}
QSqlQuery objQuery;
m_pObjDbInterface->execute("select priority_id,priority_order from alarm_level_define",objQuery);
while ( objQuery.next() )
m_priorityOrderMap[objQuery.value(0).toInt()] = objQuery.value(1).toInt();
objQuery.clear();
}
void CEventDataCollect::loadPriorityDescription()
{
m_priorityDescriptionMap.clear();
if ( !m_pObjDbInterface || !m_pObjDbInterface->isOpen() )
{
N_MessageBox::critical(qApp->activeWindow(),tr("错误"),tr("打开数据库失败"));
return;
}
QSqlQuery objQuery;
m_pObjDbInterface->execute("select priority_id,priority_name from alarm_level_define",objQuery);
while ( objQuery.next() )
m_priorityDescriptionMap[objQuery.value(0).toInt()] = objQuery.value(1).toString();
objQuery.clear();
// m_priorityDescriptionMap.clear();
// if(m_rtdbAccess->open("base", "alarm_level_define"))
// {
// iot_dbms::CTableLockGuard locker(*m_rtdbAccess);
// iot_dbms::CRdbQueryResult result;
// std::vector<std::string> columns;
// columns.push_back("priority_id");
// columns.push_back("priority_name");
// if(m_rtdbAccess->select(result, columns))
// {
// for(int nIndex(0); nIndex < result.getRecordCount(); nIndex++)
// {
// iot_dbms::CVarType key;
// iot_dbms::CVarType value;
// result.getColumnValue(nIndex, 0, key);
// result.getColumnValue(nIndex, 1, value);
// m_priorityDescriptionMap[key.toInt()] = QString::fromStdString(value.toStdString());
// }
// }
// }
}
void CEventDataCollect::loadLocationDescription()
{
m_areaInfoMap.clear();
if ( !m_pObjDbInterface || !m_pObjDbInterface->isOpen() )
{
N_MessageBox::critical(qApp->activeWindow(),tr("错误"),tr("打开数据库失败"));
return;
}
QSqlQuery objQuery;
m_pObjDbInterface->execute("select location_id,tag_name,description,location_type,plocation_id from sys_model_location_info order by location_no",objQuery);
while ( objQuery.next() )
{
SAreaInfo info;
info.nId = objQuery.value(0).toInt();
info.stTag = objQuery.value(1).toString();
info.stDes = objQuery.value(2).toString();
if ( objQuery.value(3).toInt() != (int)E_LOCATION_NODE )
info.eType = E_LOCATION_AREA;
else
info.eType = E_LOCATION_NODE;
info.nPareaId = objQuery.value(4).toInt();
m_areaInfoMap[info.nId] = info;
if(m_listPermLocationId.contains(info.nId))
{
m_locationOrderList.push_back(info.nId);
m_locationDescriptionMap[info.nId] = info.stDes;
}
}
objQuery.clear();
// m_areaInfoMap.clear();
// m_areaLocMap.clear();
// if(m_rtdbAccess->open("base", "sys_model_location_info"))
// {
// m_locationDescriptionMap.clear();
// m_locationOrderList.clear();
// iot_dbms::CTableLockGuard locker(*m_rtdbAccess);
// iot_dbms::CRdbQueryResult result;
// std::vector<std::string> columns;
// columns.push_back("location_id");
// columns.push_back("tag_name");
// columns.push_back("description");
// columns.push_back("location_type");
// columns.push_back("plocation_id");
// std::string sOrderColumn = "location_no";
// if(m_rtdbAccess->select(result, columns, sOrderColumn))
// {
// for(int nIndex(0); nIndex < result.getRecordCount(); nIndex++)
// {
// iot_dbms::CVarType area_id;
// iot_dbms::CVarType tag_name;
// iot_dbms::CVarType description;
// iot_dbms::CVarType area_type;
// iot_dbms::CVarType parea_id;
// result.getColumnValue(nIndex, 0, area_id);
// result.getColumnValue(nIndex, 1, tag_name);
// result.getColumnValue(nIndex, 2, description);
// result.getColumnValue(nIndex, 3, area_type);
// result.getColumnValue(nIndex, 4, parea_id);
// SAreaInfo info;
// info.nId =area_id.toInt();
// info.stTag =QString::fromStdString(tag_name.toStdString());
// info.stDes =QString::fromStdString(description.toStdString());
// if(area_type.toInt() != (int)E_LOCATION_NODE)
// {
// info.eType = E_LOCATION_AREA;
// }else
// {
// info.eType = E_LOCATION_NODE;
// }
// info.nPareaId =parea_id.toInt();
// m_areaInfoMap[info.nId] = info;
// if(m_listPermLocationId.contains(info.nId))
// {
// m_locationOrderList.push_back(info.nId);
// m_locationDescriptionMap[info.nId] = info.stDes;
// }
// }
// }
// }
QMap<int,SAreaInfo>::iterator it= m_areaInfoMap.begin();
while (it != m_areaInfoMap.end()) {
if(m_listPermLocationId.contains(it.key()))
{
if(it.value().eType == (int)E_LOCATION_NODE)
{
QMap<int,QVector<int> >::iterator pos = m_areaLocMap.find(it.value().nPareaId);
if(pos == m_areaLocMap.end())
{
QVector<int> locVec;
locVec.append(it.value().nId);
m_areaLocMap.insert(it.value().nPareaId,locVec);
}else
{
QVector<int> &locVec = pos.value();
locVec.append(it.value().nId);
}
}else
{
QMap<int,QVector<int> >::iterator pos = m_areaLocMap.find(it.key());
if(pos == m_areaLocMap.end())
{
QVector<int> locVec;
locVec.append(it.value().nId);
m_areaLocMap.insert(it.key(),locVec);
}else
{
QVector<int> &locVec = pos.value();
locVec.append(it.value().nId);
}
}
}
it++;
}
}
void CEventDataCollect::loadRegionInfoDescription()
{
m_regionInfoDescriptionMap.clear();
if ( !m_pObjDbInterface || !m_pObjDbInterface->isOpen() )
{
N_MessageBox::critical(qApp->activeWindow(),tr("错误"),tr("打开数据库失败"));
return;
}
QSqlQuery objQuery;
m_pObjDbInterface->execute("select region_id,description from region_info",objQuery);
while ( objQuery.next() )
{
if(m_listPermRegionId.contains(objQuery.value(0).toInt()))
m_regionInfoDescriptionMap[objQuery.value(0).toInt()] = objQuery.value(1).toString();
}
objQuery.clear();
// m_regionInfoDescriptionMap.clear();
// if(m_rtdbAccess->open("base", "region_info"))
// {
// iot_dbms::CTableLockGuard locker(*m_rtdbAccess);
// iot_dbms::CRdbQueryResult result;
// std::vector<std::string> columns;
// columns.push_back("region_id");
// columns.push_back("description");
// if(m_rtdbAccess->select(result, columns))
// {
// for(int nIndex(0); nIndex < result.getRecordCount(); nIndex++)
// {
// iot_dbms::CVarType key;
// iot_dbms::CVarType value;
// result.getColumnValue(nIndex, 0, key);
// result.getColumnValue(nIndex, 1, value);
// if(m_listPermRegionId.contains(key.toInt()))
// {
// m_regionInfoDescriptionMap[key.toInt()] = QString::fromStdString(value.toStdString());
// }
// }
// }
// }
}
void CEventDataCollect::loadAlarmTypeDescription()
{
m_alarmTypeDescriptionMap.clear();
if ( !m_pObjDbInterface || !m_pObjDbInterface->isOpen() )
{
N_MessageBox::critical(qApp->activeWindow(),tr("错误"),tr("打开数据库失败"));
return;
}
QSqlQuery objQuery;
m_pObjDbInterface->execute("select type_id,type_name from alarm_type_define",objQuery);
while ( objQuery.next() )
m_alarmTypeDescriptionMap[objQuery.value(0).toInt()] = objQuery.value(1).toString();
objQuery.clear();
// m_alarmTypeDescriptionMap.clear();
// if(m_rtdbAccess->open("base", "alarm_type_define"))
// {
// iot_dbms::CTableLockGuard locker(*m_rtdbAccess);
// iot_dbms::CRdbQueryResult result;
// std::vector<std::string> columns;
// columns.push_back("type_id");
// columns.push_back("type_name");
// if(m_rtdbAccess->select(result, columns))
// {
// for(int nIndex(0); nIndex < result.getRecordCount(); nIndex++)
// {
// iot_dbms::CVarType key;
// iot_dbms::CVarType value;
// result.getColumnValue(nIndex, 0, key);
// result.getColumnValue(nIndex, 1, value);
// m_alarmTypeDescriptionMap[key.toInt()] = QString::fromStdString(value.toStdString());
// }
// }
// }
}
void CEventDataCollect::loadDeviceTypeDescription()
{
m_deviceTypeDescriptionMap.clear();
if ( !m_pObjDbInterface || !m_pObjDbInterface->isOpen() )
{
N_MessageBox::critical(qApp->activeWindow(),tr("错误"),tr("打开数据库失败"));
return;
}
QSqlQuery objQuery;
m_pObjDbInterface->execute("select dev_type_id,description from dev_type_def",objQuery);
while ( objQuery.next() )
m_deviceTypeDescriptionMap[objQuery.value(0).toInt()] = objQuery.value(1).toString();
objQuery.clear();
// m_deviceTypeDescriptionMap.clear();
// if(m_rtdbAccess->open("base", "dev_type_def"))
// {
// iot_dbms::CTableLockGuard locker(*m_rtdbAccess);
// iot_dbms::CRdbQueryResult result;
// std::vector<std::string> columns;
// columns.push_back("dev_type_id");
// columns.push_back("description");
// if(m_rtdbAccess->select(result, columns))
// {
// for(int nIndex(0); nIndex < result.getRecordCount(); nIndex++)
// {
// iot_dbms::CVarType key;
// iot_dbms::CVarType value;
// result.getColumnValue(nIndex, 0, key);
// result.getColumnValue(nIndex, 1, value);
// m_deviceTypeDescriptionMap[key.toInt()] = QString::fromStdString(value.toStdString());
// }
// }
// }
}
void CEventDataCollect::loadAlarmStatusDescription()
{
m_alarmStatusMap.clear();
if ( !m_pObjDbInterface || !m_pObjDbInterface->isOpen() )
{
N_MessageBox::critical(qApp->activeWindow(),tr("错误"),tr("打开数据库失败"));
return;
}
QSqlQuery objQuery;
m_pObjDbInterface->execute("select status_value,display_name from alarm_status_define",objQuery);
while ( objQuery.next() )
m_alarmStatusMap[objQuery.value(0).toInt()] = objQuery.value(1).toString();
objQuery.clear();
// m_alarmStatusMap.clear();
// if(m_rtdbAccess->open("base", "alarm_status_define"))
// {
// iot_dbms::CTableLockGuard locker(*m_rtdbAccess);
// iot_dbms::CRdbQueryResult result;
// std::vector<std::string> columns;
// columns.push_back("status_value");
// columns.push_back("display_name");
// if(m_rtdbAccess->select(result, columns))
// {
// for(int nIndex(0); nIndex < result.getRecordCount(); nIndex++)
// {
// iot_dbms::CVarType key;
// iot_dbms::CVarType value;
// result.getColumnValue(nIndex, 0, key);
// result.getColumnValue(nIndex, 1, value);
// m_alarmStatusMap[key.toInt()] = QString::fromStdString(value.toStdString());
// }
// }
// }
}
void CEventDataCollect::loadUserName()
{
m_userNameMap.clear();
if ( !m_pObjDbInterface || !m_pObjDbInterface->isOpen() )
{
N_MessageBox::critical(qApp->activeWindow(),tr("错误"),tr("打开数据库失败"));
return;
}
QSqlQuery objQuery;
m_pObjDbInterface->execute("select perm_id,perm_name from rm_user_def",objQuery);
while ( objQuery.next() )
m_userNameMap[objQuery.value(0).toInt()] = objQuery.value(1).toString();
objQuery.clear();
// m_userNameMap.clear();
// if(m_rtdbAccess->open("base", "rm_user_def"))
// {
// iot_dbms::CTableLockGuard locker(*m_rtdbAccess);
// iot_dbms::CRdbQueryResult result;
// std::vector<std::string> columns;
// columns.push_back("perm_id");
// columns.push_back("perm_name");
// if(m_rtdbAccess->select(result, columns))
// {
// for(int nIndex(0); nIndex < result.getRecordCount(); nIndex++)
// {
// iot_dbms::CVarType key;
// iot_dbms::CVarType value;
// result.getColumnValue(nIndex, 0, key);
// result.getColumnValue(nIndex, 1, value);
// m_userNameMap[key.toInt()] = QString::fromStdString(value.toStdString());
// }
// }
// }
}
void CEventDataCollect::loadEventShowStatusDescription()
{
const std::string strConfFullPath = iot_public::CFileUtil::getPathOfCfgFile("alarmStatus.xml");
boost::property_tree::ptree pt;
namespace xml = boost::property_tree::xml_parser;
try
{
xml::read_xml(strConfFullPath, pt, xml::no_comments);
BOOST_AUTO(module, pt.get_child("root"));
for (BOOST_AUTO(pModuleIter, module.begin()); pModuleIter != module.end(); ++pModuleIter)
{
boost::property_tree::ptree ptParam = pModuleIter->second;
for (BOOST_AUTO(pParamIter, ptParam.begin()); pParamIter != ptParam.end(); ++pParamIter)
{
if (pParamIter->first == "param")
{
string strKey = pParamIter->second.get<string>("<xmlattr>.key");
//string strValue = pParamIter->second.get<string>("<xmlattr>.value");
if(StringToInt(strKey) != OTHERSTATUS)
{
m_eventShowStatusMap[StringToInt(strKey)] = m_alarmStatusMap[StringToInt(strKey)];
}else
{
m_eventShowStatusMap[StringToInt(strKey)] = tr("其他");
}
}
}
}
}
catch (std::exception &ex)
{
LOGERROR("解析配置文件[%s]失败.Msg=[%s]", strConfFullPath.c_str(), ex.what());
}
}
void CEventDataCollect::loadEventOtherStatusDescription()
{
m_eventOtherStatusMap.clear();
const std::string strConfFullPath = iot_public::CFileUtil::getPathOfCfgFile("alarmOther.xml");
boost::property_tree::ptree pt;
namespace xml = boost::property_tree::xml_parser;
try
{
xml::read_xml(strConfFullPath, pt, xml::no_comments);
BOOST_AUTO(module, pt.get_child("root"));
for (BOOST_AUTO(pModuleIter, module.begin()); pModuleIter != module.end(); ++pModuleIter)
{
boost::property_tree::ptree ptParam = pModuleIter->second;
for (BOOST_AUTO(pParamIter, ptParam.begin()); pParamIter != ptParam.end(); ++pParamIter)
{
if (pParamIter->first == "param")
{
string strKey = pParamIter->second.get<string>("<xmlattr>.key");
//string strValue = pParamIter->second.get<string>("<xmlattr>.value");
m_eventOtherStatusMap[StringToInt(strKey)] = m_alarmStatusMap[StringToInt(strKey)];
}
}
}
}
catch (std::exception &ex)
{
LOGERROR("解析配置文件[%s]失败.Msg=[%s]", strConfFullPath.c_str(), ex.what());
}
}
QMap<int, QString> CEventDataCollect::priorityDescriptionMap()
{
return m_priorityDescriptionMap;
}
QMap<int, QString> CEventDataCollect::locationDescriptionMap()
{
return m_locationDescriptionMap;
}
QMap<int, QString> CEventDataCollect::regionInfoDescriptionMap()
{
return m_regionInfoDescriptionMap;
}
QMap<int, QString> CEventDataCollect::alarmTypeDescriptionMap()
{
return m_alarmTypeDescriptionMap;
}
QMap<int, QString> CEventDataCollect::deviceTypeDescriptionMap()
{
return m_deviceTypeDescriptionMap;
}
QMap<int, QString> CEventDataCollect::alarmStatusMap()
{
return m_alarmStatusMap;
}
QMap<int, QString> CEventDataCollect::userNameMap()
{
return m_userNameMap;
}
QMap<int, QString> CEventDataCollect::eventShowStatusDescriptionMap()
{
return m_eventShowStatusMap;
}
QMap<int, QString> CEventDataCollect::eventOtherStatusDescriptionMap()
{
return m_eventOtherStatusMap;
}
void CEventDataCollect::slotUpdateEvent()
{
//loadEventConfig();
QMutexLocker locker(msgMutex);
if(!m_listEventCache.isEmpty())
{
emit sigMsgArrived(m_listEventCache);
m_listEventCache.clear();
}
}
void CEventDataCollect::handleAllEvtMsg(int nDomainID, iot_idl::SEvtCltAddEvt &objAllEvt)
{
QMutexLocker locker(msgMutex);
LOGINFO("-------------------------handleAllEvtMsg-------------------------");
CEventMsgManage::instance()->removeEventMsgByDomainID(nDomainID);
removeCache(nDomainID);
for(int nAddMsgIndex(0); nAddMsgIndex < objAllEvt.evt_info_size(); nAddMsgIndex++)
{
iot_idl::SEvtInfoToEvtClt msg = objAllEvt.evt_info(nAddMsgIndex);
EventMsgPtr event(new CEventMsgInfo());
event->initialize(msg);
event->priorityOrder = queryPriorityOrder(event->priority);
if(!m_listPermLocationId.contains(event->location_id))
{
continue;
}
if(!m_listPermRegionId.contains(event->region_id) && event->region_id != -1)
{
continue;
}
CEventMsgManage::instance()->addEventMsg(event);
}
emit sigMsgRefresh();
emit sigEventStateChanged();
}
void CEventDataCollect::handleAddEvtMsg(iot_idl::SEvtCltAddEvt &objAddEvt)
{
QMutexLocker locker(msgMutex);
LOGINFO("-------------------------handleAddEvtMsg-------------------------");
for(int nAddMsgIndex(0); nAddMsgIndex < objAddEvt.evt_info_size(); nAddMsgIndex++)
{
iot_idl::SEvtInfoToEvtClt msg = objAddEvt.evt_info(nAddMsgIndex);
EventMsgPtr event(new CEventMsgInfo());
event->initialize(msg);
event->priorityOrder = queryPriorityOrder(event->priority);
if(!m_listPermRegionId.contains(event->region_id) && event->region_id != -1)
{
continue;
}
CEventMsgManage::instance()->addEventMsg(event);
m_listEventCache.append(event);
}
emit sigEventStateChanged();
}
void CEventDataCollect::handleLinkWave2EvtMsg(iot_idl::SAlmCltLinkWave2Alm &objWave2Evt)
{
QMutexLocker locker(msgMutex);
QList<QString> uuidList;
LOGINFO("-------------------------handleAddEvtMsg-------------------------");
QString waveFile = QString::fromStdString(objWave2Evt.wave_file());
for(int nAddMsgIndex(0); nAddMsgIndex < objWave2Evt.uuid_base64_size(); nAddMsgIndex++)
{
QString uuid = QString::fromStdString(objWave2Evt.uuid_base64(nAddMsgIndex));
uuidList.append(uuid);
}
CEventMsgManage::instance()->linkWave2EvtMsg(uuidList,waveFile);
}
void CEventDataCollect::handleClearRTEvent()
{
QMutexLocker locker(msgMutex);
CEventMsgManage::instance()->clearRTMsg();
emit sigMsgRefresh();
emit sigEventStateChanged();
}
void CEventDataCollect::destory()
{
if(m_pTimer != NULL)
{
m_pTimer->stop();
delete m_pTimer;
}
m_pTimer = NULL;
suspendThread();
m_priorityOrderMap.clear();
m_priorityDescriptionMap.clear();
m_locationDescriptionMap.clear();
m_regionInfoDescriptionMap.clear();
m_alarmTypeDescriptionMap.clear();
m_deviceTypeDescriptionMap.clear();
m_subSystemDescriptionMap.clear();
m_locationOrderList.clear();
delete msgMutex;
// delete m_rtdbAccess;
m_pInstance = NULL;
}
void CEventDataCollect::removeCache(int nDomain)
{
QList<EventMsgPtr>::iterator it = m_listEventCache.begin();
while (it != m_listEventCache.end())
{
if(nDomain == (*it)->domain_id)
{
it = m_listEventCache.erase(it);
continue;
}
it++;
}
}
void CEventDataCollect::initVariable()
{
m_pObjDbInterface = m_pSystemResources->getDbInterface();
}

View File

@ -0,0 +1,150 @@
#ifndef CEventDataCollect_H
#define CEventDataCollect_H
#include <QObject>
#include <QMutex>
#include <QMap>
#include "AlarmMessage.pb.h"
#include "CEventMsgInfo.h"
#include "net_msg_bus_api/MsgBusApi.h"
//#include "dbms/rdb_api/CRdbAccess.h"
#include "CSystemResources.h"
#include <QTimer>
#include <QVector>
#define FUNC_SPE_EVENT_VIEW ("FUNC_SPE_EVENT_VIEW")
const int OTHERSTATUS = 9999;
class CEventDataCollect : public QObject, public iot_service::CAlmApiForEvtClt
{
Q_OBJECT
public:
static CEventDataCollect * instance();
static void setSystemResources(CSystemResources *pSystemResources);
virtual ~CEventDataCollect();
bool initialize();
void release();
void loadEventConfig();
int priorityId(const QString &description);
int locationId(const QString &description);
int regionId(const QString &description);
int alarmTypeId(const QString &description);
int eventStatusId(const QString &description);
int deviceTypeId(const QString &description);
QString priorityDescription(const int & id);
QString locationDescription(const int & id);
QString regionDescription(const int & id);
QString alarmTypeDescription(const int & id);
QString deviceTypeDescription(const int & id);
QString alarmStatusDescription(const int & id);
QString userNameDescription(const int & id);
QString eventShowStatusDescription(const int & id);
QList<int> priorityList();
QList<int> locationList();
QList<int> regionList();
QList<int> alarmTypeList();
QList<int> alarmStatusList();
QList<int> alarmOtherList();
QMap<int,SAreaInfo> areaInfoMap();
QMap<int,QVector<int> > areaLocMap();
QList<int> locationOrderList();
QMap<int, QString> priorityDescriptionMap();
QMap<int, QString> locationDescriptionMap();
QMap<int, QString> regionInfoDescriptionMap();
QMap<int, QString> alarmTypeDescriptionMap();
QMap<int, QString> deviceTypeDescriptionMap();
QMap<int, QString> alarmStatusMap();
QMap<int, QString> userNameMap();
QMap<int, QString> eventShowStatusDescriptionMap();
QMap<int, QString> eventOtherStatusDescriptionMap();
virtual void handleAllEvtMsg(int nDomainID, iot_idl::SEvtCltAddEvt &objAllEvt);
virtual void handleAddEvtMsg(iot_idl::SEvtCltAddEvt &objAddEvt);
virtual void handleLinkWave2EvtMsg( iot_idl::SAlmCltLinkWave2Alm &objWave2Evt);
void handleClearRTEvent();
void destory();
signals:
/**
* @brief sigMsgRefresh handleAllAlmMsg时触发model重新拉取报警消息
*/
void sigMsgRefresh();
/**
* @brief sigMsgArrived handleAddAlmMsg时触发model新报警消息到达
*/
void sigMsgArrived(QList<EventMsgPtr> listEvents);
/**
* @brief sigEventStateChanged
*/
void sigEventStateChanged();
public slots:
//void queryHistoryEvent(const QStringList &tables, QList<int> typeFilter, const QString &condition);
void slotUpdateEvent();
private:
CEventDataCollect();
int queryPriorityOrder(int &id);
void removeCache(int nDomain);
void initVariable();
void loadPermInfo();
void loadPriorityOrder();
void loadPriorityDescription();
void loadLocationDescription();
void loadRegionInfoDescription();
void loadAlarmTypeDescription();
void loadDeviceTypeDescription();
void loadAlarmStatusDescription();
void loadUserName();
void loadEventShowStatusDescription();
void loadEventOtherStatusDescription();
private:
QMutex * msgMutex;
QTimer * m_pTimer;
int m_nLocationID;
QList<EventMsgPtr> m_listEventCache;
//iot_dbms::CRdbAccess * m_rtdbAccess;
//iot_dbms::CRdbAccess * m_rtdbPriorityOrderAccess;
iot_dbms::CDbApi *m_pObjDbInterface;
QList<int> m_listPermLocationId;
QList<int> m_listPermRegionId;
QMap<int, int> m_priorityOrderMap;
QMap<int, QString> m_priorityDescriptionMap;
QMap<int, QString> m_locationDescriptionMap;
QMap<int, QString> m_regionInfoDescriptionMap;
QMap<int, QString> m_alarmTypeDescriptionMap;
QMap<int, QString> m_deviceTypeDescriptionMap;
QMap<int, QString> m_subSystemDescriptionMap;
QMap<int, QString> m_alarmStatusMap;
QMap<int, QString> m_userNameMap;
static CEventDataCollect * m_pInstance;
QMap<int, QString> m_eventShowStatusMap; //
QMap<int, QString> m_eventOtherStatusMap; //其他报警状态
QMap<int,SAreaInfo> m_areaInfoMap; //区域信息
QMap<int,QVector<int> > m_areaLocMap; //区域映射
QList<int> m_locationOrderList; //< location_id: 按location_no排序
};
#endif // CEventDataCollect_H

View File

@ -0,0 +1,210 @@
#include "CEventDelegate.h"
#include <QDomDocument>
#include <QFile>
#include <QPainter>
#include "CEventMsgInfo.h"
#include "CEventItemModel.h"
#include "pub_utility_api/FileUtil.h"
#include "pub_utility_api/FileStyle.h"
#include "pub_logger_api/logger.h"
#include <QApplication>
#include <QMouseEvent>
#include <QProcess>
CEventDelegate::CEventDelegate(QObject *parent)
: QStyledItemDelegate(parent),
m_pModel(Q_NULLPTR),
m_selectIsEmpty(false),
m_enableWave(true)
{
loadColorConfig();
}
void CEventDelegate::setEnableWave(bool isNeed)
{
m_enableWave = isNeed;
}
void CEventDelegate::setEventModel(CEventItemModel *model)
{
m_pModel = model;
}
void CEventDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if(!index.isValid())
{
return;
}
QColor fillColor(255,255,255);
QColor penColor(0,0,0);
bool select = option.state & QStyle::State_Selected;
//< Common
if(m_pModel != NULL)
{
EventMsgPtr info = m_pModel->getAlarmInfo(index);
if(info != Q_NULLPTR)
{
painter->save();
if(AS_ALARM_RTN == info->alm_style)
{
if(select)
{
fillColor = m_selectBackgroundColor;
if(m_selectIsEmpty)
{
if ( m_activeTextMap.contains(info->priorityOrder) )
penColor = m_activeTextMap[info->priorityOrder];
}
else
{
penColor = m_selectTextColor;
}
}
else
{
if ( m_resumeTextMap.contains(info->priorityOrder) )
penColor = m_resumeTextMap[info->priorityOrder];
if ( m_backgroundMap.contains(info->priorityOrder) )
fillColor = m_backgroundMap[info->priorityOrder];
}
}else
{
if(select)
{
fillColor = m_selectBackgroundColor;
if(m_selectIsEmpty)
{
if ( m_activeTextMap.contains(info->priorityOrder) )
penColor = m_activeTextMap[info->priorityOrder];
}
else
{
penColor = m_selectTextColor;
}
}
else
{
if ( m_activeTextMap.contains(info->priorityOrder) )
penColor = m_activeTextMap[info->priorityOrder];
if ( m_backgroundMap.contains(info->priorityOrder) )
fillColor = m_backgroundMap[info->priorityOrder];
}
}
painter->setPen(penColor);
painter->fillRect(option.rect, fillColor);
if(m_enableWave && REAL_BUTTON_COLUMN == index.column() && !info->wave_file.isEmpty())
{
painter->save();
QStyleOptionButton button;
button.state |= QStyle::State_Enabled;
button.rect = option.rect;
button.rect.adjust(option.rect.width() - 40-40-40, option.rect.height()/2-10, -12-40-40, -(option.rect.height()/2-10));
std::string style = iot_public::CFileStyle::getCurStyle();
QString file = iot_public::CFileUtil::getPathOfResFile("gui/icon/alarm/wave_"+style+".png").c_str();
button.iconSize = QSize(button.rect.width()+2,button.rect.height()+2);
button.icon = QIcon(file);
button.features = QStyleOptionButton::Flat;
QApplication::style()->drawControl(QStyle::CE_PushButton,&button,painter);
painter->restore();
}
painter->drawText(option.rect, m_pModel->data(index, Qt::TextAlignmentRole).toInt(), m_pModel->data(index).toString());
painter->restore();
}
}
}
bool CEventDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
{
if(!index.isValid())
{
return false;
}
if(m_pModel != NULL)
{
if(index.column() != REAL_BUTTON_COLUMN)
{
return false;
}
EventMsgPtr info = m_pModel->getAlarmInfo(index);
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
if(info && m_enableWave && !info->wave_file.isEmpty())
{
if(mouseEvent != NULL && mouseEvent->button() == Qt::LeftButton && mouseEvent->type() == QMouseEvent::MouseButtonPress)
{
QStyleOptionButton button;
button.rect = option.rect;
button.rect.adjust(option.rect.width() - 122, option.rect.height()/2-10, -90, -(option.rect.height()/2-10));
QRect rect = button.rect;
if(rect.contains(mouseEvent->pos()))
{
QString wave = info->wave_file;
wave = QString("%1%2%3").arg("\"").arg(wave).arg("\"");
LOGINFO("录波文件为:%s",wave.toStdString().c_str());
const std::string strProc = std::move(iot_public::CFileUtil::getPathOfBinFile(
std::string("WaveAnalyze") + iot_public::CFileUtil::getProcSuffix()));
if(strProc.empty())
LOGERROR("未找到可执行文件WaveAnalyze");
else
QProcess::startDetached(QString("%1 %2").arg(strProc.c_str()).arg(wave));
}
}
}
}
return QStyledItemDelegate::editorEvent(event, model, option, index);
}
void CEventDelegate::loadColorConfig()
{
QString filePath = QString::fromStdString(iot_public::CFileUtil::getCurModuleDir()) + QString("../../data/model/alarm_color_define.xml");
QDomDocument document;
QFile file(filePath);
if (!file.open(QIODevice::ReadOnly))
{
LOGINFO("loadColorConfig Failed!");
return;
}
if (!document.setContent(&file))
{
file.close();
return;
}
file.close();
QDomElement element = document.documentElement();
QDomNode node = element.firstChild();
while(!node.isNull())
{
QDomElement attr = node.toElement();
if(!attr.isNull())
{
if(QString("Level") == attr.tagName())
{
int priority = attr.attribute("priority").toInt();
m_backgroundMap[priority] = QColor(attr.attribute("background_color"));
m_alternatingMap[priority] = QColor(attr.attribute("alternating_color"));
m_confirmMap[priority] = QColor(attr.attribute("confirm_color"));
m_activeTextMap[priority] = QColor(attr.attribute("active_text_color"));
m_confirmTextMap[priority] = QColor(attr.attribute("confirm_text_color"));
m_resumeTextMap[priority] = QColor(attr.attribute("resume_text_color"));
}
else if(QString("Select") == attr.tagName())
{
m_selectBackgroundColor = QColor(attr.attribute("background_color"));
if(attr.attribute("text_color").isEmpty())
{
m_selectIsEmpty = true;
}else
{
m_selectTextColor = QColor(attr.attribute("text_color"));
}
}
}
node = node.nextSibling();
}
}

View File

@ -0,0 +1,46 @@
#ifndef CEVENTDELEGATE_H
#define CEVENTDELEGATE_H
#include <QStyledItemDelegate>
class CEventItemModel;
class CEventDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
CEventDelegate(QObject *parent = 0);
void setEnableWave(bool isNeed);
void setEventModel(CEventItemModel *model);
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
bool editorEvent(QEvent *event, QAbstractItemModel *model,
const QStyleOptionViewItem &option, const QModelIndex &index) Q_DECL_OVERRIDE;
private:
void loadColorConfig();
private:
CEventItemModel *m_pModel;
//< background color
QMap<int, QColor> m_backgroundMap;
QMap<int, QColor> m_alternatingMap;
QMap<int, QColor> m_confirmMap;
//< text color
QMap<int, QColor> m_activeTextMap;
QMap<int, QColor> m_confirmTextMap;
QMap<int, QColor> m_resumeTextMap;
//< select color
QColor m_selectBackgroundColor;
QColor m_selectTextColor;
//< no item
QColor m_emptyBackgroundColor;
QColor m_emptyTipColor;
QString m_emptyTip;
bool m_selectIsEmpty;
bool m_enableWave;
};
#endif // CEVENTDELEGATE_H

View File

@ -0,0 +1,405 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CEventFilterDialog</class>
<widget class="QDialog" name="CEventFilterDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>570</width>
<height>421</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>530</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="windowTitle">
<string>过滤</string>
</property>
<layout class="QGridLayout" name="gridLayout_12">
<item row="3" column="0">
<widget class="QGroupBox" name="timeFilterEnable">
<property name="title">
<string>时间</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<layout class="QGridLayout" name="gridLayout_10">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout_8">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>开始时间</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QDateTimeEdit" name="startTime">
<property name="date">
<date>
<year>2018</year>
<month>1</month>
<day>1</day>
</date>
</property>
<property name="minimumDateTime">
<datetime>
<hour>0</hour>
<minute>0</minute>
<second>0</second>
<year>2000</year>
<month>1</month>
<day>1</day>
</datetime>
</property>
<property name="maximumDate">
<date>
<year>2050</year>
<month>12</month>
<day>31</day>
</date>
</property>
<property name="currentSection">
<enum>QDateTimeEdit::YearSection</enum>
</property>
<property name="displayFormat">
<string>yyyy/MM/dd hh:mm</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="1">
<layout class="QGridLayout" name="gridLayout_9">
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>结束时间</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QDateTimeEdit" name="endTime">
<property name="showGroupSeparator" stdset="0">
<bool>false</bool>
</property>
<property name="date">
<date>
<year>2018</year>
<month>1</month>
<day>1</day>
</date>
</property>
<property name="minimumDateTime">
<datetime>
<hour>0</hour>
<minute>0</minute>
<second>0</second>
<year>2000</year>
<month>1</month>
<day>1</day>
</datetime>
</property>
<property name="maximumDate">
<date>
<year>2050</year>
<month>12</month>
<day>31</day>
</date>
</property>
<property name="displayFormat">
<string>yyyy/MM/dd hh:mm</string>
</property>
<property name="calendarPopup">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item row="4" column="0">
<layout class="QGridLayout" name="gridLayout_15">
<item row="0" column="0">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>281</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="ok">
<property name="text">
<string>确定</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="cancle">
<property name="text">
<string>取消</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<layout class="QGridLayout" name="gridLayout_5">
<item row="0" column="0">
<widget class="QGroupBox" name="levelFilter">
<property name="title">
<string>优先级</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0">
<widget class="QCheckBox" name="checkLevel">
<property name="text">
<string>全选</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="tristate">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QListWidget" name="level"/>
</item>
</layout>
</widget>
</item>
<item row="0" column="1">
<widget class="QGroupBox" name="locationFilter">
<property name="title">
<string>位置</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="1" column="0">
<widget class="QCheckBox" name="checkLocation">
<property name="text">
<string>全选</string>
</property>
<property name="tristate">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QTreeWidget" name="area">
<property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum>
</property>
<attribute name="headerVisible">
<bool>false</bool>
</attribute>
<column>
<property name="text">
<string notr="true">1</string>
</property>
</column>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="2">
<widget class="QGroupBox" name="regionFilter">
<property name="title">
<string>责任区</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="1" column="0">
<widget class="QCheckBox" name="checkRegion">
<property name="text">
<string>全选</string>
</property>
<property name="tristate">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QListWidget" name="region"/>
</item>
</layout>
</widget>
</item>
<item row="0" column="3">
<widget class="QGroupBox" name="alarmTypeFilter">
<property name="title">
<string>事件状态</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout_4">
<item row="1" column="0">
<widget class="QCheckBox" name="checkType">
<property name="text">
<string>全选</string>
</property>
<property name="tristate">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QListWidget" name="type"/>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QGroupBox" name="deviceFilterEnable">
<property name="title">
<string>设备类型</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<layout class="QGridLayout" name="gridLayout_6">
<item row="0" column="0">
<widget class="QComboBox" name="subSystem">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="deviceType">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="keywordFilterEnable">
<property name="title">
<string>事件内容关键字</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<layout class="QGridLayout" name="gridLayout_7">
<item row="0" column="0">
<widget class="QLineEdit" name="keyWord">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="returnFilterEnable">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>复归</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<layout class="QGridLayout" name="gridLayout_11">
<item row="0" column="0">
<widget class="QRadioButton" name="hasReturn">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>已复归</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QRadioButton" name="notReturn">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>未复归</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item row="0" column="0">
<widget class="QWidget" name="widget" native="true"/>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,71 @@
#include "CEventFormShow.h"
#include "ui_CEventFormShow.h"
#include<QGridLayout>
#include "CEventDataCollect.h"
CEventFormShow::CEventFormShow(QWidget *parent) :
QWidget(parent),m_pRealDelegate(NULL),m_pRealTimeModel(NULL),
ui(new Ui::CEventFormShow)
{
ui->setupUi(this);
// m_pmodel=new CEventForm(this,0);
// QGridLayout *gridLayout = new QGridLayout(this);
// gridLayout->setSpacing(6);
// gridLayout->setContentsMargins(0, 0, 0, 0);
// gridLayout->addWidget(m_pmodel, 0, 0, 1, 1);
}
CEventFormShow::~CEventFormShow()
{
if(m_pRealTimeModel)
delete m_pRealTimeModel;
delete ui;
}
void CEventFormShow::initRealModel()
{
CEventDataCollect::setSystemResources(m_pSystemResources);
QSettings columFlags("IOT_HMI", "eventReal config");
if(!columFlags.contains(QString("eventReal/colum_0")))
{
columFlags.setValue(QString("eventReal/colum_0"), false); //< 时间
columFlags.setValue(QString("eventReal/colum_1"), false); //< 优先级
columFlags.setValue(QString("eventReal/colum_2"), false); //< 位置
columFlags.setValue(QString("eventReal/colum_3"), true); //< 责任区
columFlags.setValue(QString("eventReal/colum_4"), true); //< 事件类型
columFlags.setValue(QString("eventReal/colum_5"), false); //< 事件状态
columFlags.setValue(QString("eventReal/colum_6"), false); //< 复归状态
}
if(m_pRealDelegate == NULL)
{
m_pRealDelegate = new CEventDelegate(this);
ui->eventView->setItemDelegate(m_pRealDelegate);
}
ui->eventView->setSortingEnabled(true);
if(NULL == m_pRealTimeModel)
{
m_pRealTimeModel = new CEventItemModel(this);
connect(ui->eventView->horizontalHeader(), SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)), m_pRealTimeModel, SLOT(sortColumn(int,Qt::SortOrder)));
ui->eventView->horizontalHeader()->setSortIndicator(0, Qt::AscendingOrder);
}
ui->eventView->setModel(m_pRealTimeModel);
m_pRealDelegate->setEventModel(m_pRealTimeModel);
QSettings columFlags1("IOT_HMI", "eventReal config");
for(int nColumnIndex(0); nColumnIndex < m_pRealTimeModel->columnCount() - 1; nColumnIndex++)
{
bool visible = columFlags1.value(QString("eventReal/colum_%1").arg(nColumnIndex)).toBool();
ui->eventView->setColumnHidden(nColumnIndex, visible);
}
ui->eventView->setColumnHidden(m_pRealTimeModel->columnCount() - 1, false);
ui->eventView->setColumnWidth(0, 250);
ui->eventView->setColumnWidth(1, 150);
ui->eventView->setColumnWidth(2, 150);
ui->eventView->setColumnWidth(3, 150);
ui->eventView->setColumnWidth(4, 150);
ui->eventView->setColumnWidth(5, 150);
}
void CEventFormShow::setSystemResources(CSystemResources *pSystemResources)
{
m_pSystemResources = pSystemResources;
}

View File

@ -0,0 +1,30 @@
#ifndef CEVENTFORMSHOW_H
#define CEVENTFORMSHOW_H
#include <QWidget>
#include "CSystemResources.h"
#include "CEventDelegate.h"
#include"CEventItemModel.h"
namespace Ui {
class CEventFormShow;
}
class CEventFormShow : public QWidget
{
Q_OBJECT
public:
explicit CEventFormShow(QWidget *parent = 0);
~CEventFormShow();
void setSystemResources(CSystemResources *pSystemResources);
void initRealModel();
private:
Ui::CEventFormShow *ui;
CEventDelegate *m_pRealDelegate;
CEventItemModel * m_pRealTimeModel;
CSystemResources *m_pSystemResources;
};
#endif // CEVENTFORMSHOW_H

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CEventFormShow</class>
<widget class="QWidget" name="CEventFormShow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>941</width>
<height>571</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="CEventView" name="eventView"/>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>CEventView</class>
<extends>QTableView</extends>
<header location="global">CEventView.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,724 @@
#include "CEventItemModel.h"
#include "CEventMsgInfo.h"
#include <QModelIndex>
#include <QMutexLocker>
#include <QTimer>
#include <QSortFilterProxyModel>
#include "CEventDataCollect.h"
#include "service/alarm_server_api/AlarmCommonDef.h"
#include "CEventMsgManage.h"
#include "pub_logger_api/logger.h"
/////////////////////////////////////////////////////////////////////////////
typedef QPair<int, QList<EventMsgPtr> > PAIRLISTALARMINFO;
CEventItemModel::CEventItemModel(QObject *parent)
:QAbstractTableModel(parent),
m_sortKey(E_SORT_TIME),
m_order(Qt::AscendingOrder)
{
header << tr("时间") << tr("优先级") << tr("位置") << tr("责任区") << tr("事件类型") << tr("事件状态") << tr("复归状态") << tr("事件内容");
initialize();
connect(CEventDataCollect::instance(), SIGNAL(sigMsgRefresh()),
this, SLOT(slotMsgRefresh()), Qt::QueuedConnection);
connect(CEventDataCollect::instance(), SIGNAL(sigMsgArrived(QList<EventMsgPtr>)),
this, SLOT(slotMsgArrived(QList<EventMsgPtr>)));
}
CEventItemModel::~CEventItemModel()
{
m_listShowEventInfo.clear();
CEventDataCollect::instance()->destory();
}
void CEventItemModel::initialize()
{
beginResetModel();
m_listShowEventInfo.clear();
endResetModel();
initFilterAndReloadData();
}
void CEventItemModel::initFilter()
{
m_isLevelFilterEnable = false;
m_levelFilter.clear();
m_isLocationFilterEnable = false;
m_locationFilter.clear();
m_isRegionFilterEnable = false;
m_regionFilter.clear();
m_isStatusFilterEnable = false;
m_statusFilter.clear();
m_statusFilter2.clear();
m_isDeviceTypeFileter = false;
m_subSystem = QString();
m_deviceType = QString();
m_isKeywordEnable = false;
m_keyword = QString();
m_timeFilterEnable = false;
m_isReturnFilterEnable = false;
m_isReturn = false;
}
void CEventItemModel::initFilterAndReloadData()
{
initFilter();
slotMsgRefresh();
}
void CEventItemModel::setSystemResources(CSystemResources *pSystemResources)
{
m_pSystemResources=pSystemResources;
}
EventMsgPtr CEventItemModel::getAlarmInfo(const QModelIndex &index) const
{
if(!index.isValid() || index.row() >= m_listShowEventInfo.count())
{
return NULL;
}
return m_listShowEventInfo.at(index.row());
}
const QList<EventMsgPtr> CEventItemModel::getListShowAlarmInfo() const
{
return m_listShowEventInfo;
}
void CEventItemModel::insertAlarmMsg(EventMsgPtr info)
{
int nInsertRowIndex = -1;
if (Qt::AscendingOrder == m_order)
{
for (int nIndex(0); nIndex < m_listShowEventInfo.count(); nIndex++)
{
EventMsgPtr msg(m_listShowEventInfo.at(nIndex));
if (!msg->lessThan(info, m_sortKey))
{
nInsertRowIndex = nIndex;
break;
}
}
}
else
{
for (int nIndex(0); nIndex < m_listShowEventInfo.count(); nIndex++)
{
EventMsgPtr msg(m_listShowEventInfo.at(nIndex));
if (!msg->moreThan(info, m_sortKey))
{
nInsertRowIndex = nIndex;
break;
}
}
}
if (-1 == nInsertRowIndex)
{
nInsertRowIndex = m_listShowEventInfo.count();
}
beginInsertRows(QModelIndex(), nInsertRowIndex, nInsertRowIndex);
m_listShowEventInfo.insert(nInsertRowIndex, info);
endInsertRows();
return;
}
QVariant CEventItemModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if(Qt::DisplayRole == role && Qt::Horizontal == orientation)
{
return QVariant(header.at(section));
}
return QVariant();
}
QVariant CEventItemModel::data(const QModelIndex &index, int role) const
{
if(!index.isValid() || index.row() >= m_listShowEventInfo.count())
{
return QVariant();
}
if(Qt::TextAlignmentRole == role)
{
if(index.column() == (int)E_SORT_CONTENT)
{
return QVariant(Qt::AlignLeft | Qt::AlignVCenter);
}else
{
return QVariant(Qt::AlignHCenter | Qt::AlignVCenter);
}
}
else if(Qt::DisplayRole == role)
{
switch (index.column())
{
case E_SORT_TIME :
{
return QDateTime::fromMSecsSinceEpoch(m_listShowEventInfo.at(index.row())->time_stamp, Qt::LocalTime).toString("yyyy-MM-dd hh:mm:ss.zzz");
}
case E_SORT_PRIORITY :
{
return CEventDataCollect::instance()->priorityDescription(m_listShowEventInfo.at(index.row())->priority);
}
case E_SORT_LOCATION :
{
return CEventDataCollect::instance()->locationDescription(m_listShowEventInfo.at(index.row())->location_id);
}
case E_SORT_REGION :
{
return CEventDataCollect::instance()->regionDescription(m_listShowEventInfo.at(index.row())->region_id);
}
case E_SORT_TYPE :
{
return CEventDataCollect::instance()->alarmTypeDescription(m_listShowEventInfo.at(index.row())->alm_type);
}
case E_SORT_STATUS :
{
return CEventDataCollect::instance()->alarmStatusDescription(m_listShowEventInfo.at(index.row())->alm_status);
}
case E_SORT_STYLE :
{
if(AS_ALARM == m_listShowEventInfo.at(index.row())->alm_style) //未复归
{
return tr("未复归");
}
else if(AS_ALARM_RTN == m_listShowEventInfo.at(index.row())->alm_style ) //已复归
{
return tr("已复归");
}else{
return QString("-");
}
}
case E_SORT_CONTENT :
{
return m_listShowEventInfo.at(index.row())->content;
}
default:
return QVariant();
}
}
return QVariant();
}
int CEventItemModel::columnCount(const QModelIndex &index) const
{
if (index.isValid())
{
return 0;
}
return header.count();
}
int CEventItemModel::rowCount(const QModelIndex &index) const
{
if (index.isValid())
{
return 0;
}
return m_listShowEventInfo.count();
}
Qt::ItemFlags CEventItemModel::flags(const QModelIndex &index) const
{
// return Qt::NoItemFlags;
if (!index.isValid())
{
return Qt::NoItemFlags;
}
return Qt::ItemIsSelectable | Qt::ItemIsEnabled;
}
//
void CEventItemModel::sortColumn(int column, Qt::SortOrder order)
{
if(order == Qt::AscendingOrder)
{
m_order = Qt::DescendingOrder;
}
else
{
m_order = Qt::AscendingOrder;
}
m_sortKey = (E_ALARM_SORTKEY)column;
beginResetModel();
sort();
endResetModel();
}
//<归并排序
void CEventItemModel::sort()
{
QMap<int, PAIRLISTALARMINFO> mapAlarmInfo;
//<分
for(int nIndex(0); nIndex < m_listShowEventInfo.count(); nIndex++)
{
EventMsgPtr temp = m_listShowEventInfo.at(nIndex);
mapAlarmInfo[nIndex / 1000].second.append(temp);
}
//<快速排序
for(int nMapIndex(0); nMapIndex < mapAlarmInfo.count(); nMapIndex++)
{
qucikSort(mapAlarmInfo[nMapIndex].second, 0, mapAlarmInfo[nMapIndex].second.count() - 1);
}
//<治
PAIRLISTALARMINFO tempListAlarmInfo = mapAlarmInfo[0];
for(int nPairIndex(1); nPairIndex < mapAlarmInfo.count(); nPairIndex++)
{
//<归并
tempListAlarmInfo.first = 0;
mapAlarmInfo[nPairIndex].first = 0;
while(mapAlarmInfo[nPairIndex].first < mapAlarmInfo[nPairIndex].second.count())
{
if(tempListAlarmInfo.first >= tempListAlarmInfo.second.count())
{
tempListAlarmInfo.second.append(mapAlarmInfo[nPairIndex].second.at(mapAlarmInfo[nPairIndex].first));
mapAlarmInfo[nPairIndex].first += 1;
}
else
{
if(Qt::AscendingOrder == m_order)
{
if(!tempListAlarmInfo.second[tempListAlarmInfo.first]->lessThan(mapAlarmInfo[nPairIndex].second.at(mapAlarmInfo[nPairIndex].first), m_sortKey))
{
tempListAlarmInfo.second.insert(tempListAlarmInfo.first, mapAlarmInfo[nPairIndex].second.at(mapAlarmInfo[nPairIndex].first));
mapAlarmInfo[nPairIndex].first += 1;
}
}
else if(Qt::DescendingOrder == m_order)
{
if(!tempListAlarmInfo.second[tempListAlarmInfo.first]->moreThan(mapAlarmInfo[nPairIndex].second.at(mapAlarmInfo[nPairIndex].first), m_sortKey))
{
tempListAlarmInfo.second.insert(tempListAlarmInfo.first, mapAlarmInfo[nPairIndex].second.at(mapAlarmInfo[nPairIndex].first));
mapAlarmInfo[nPairIndex].first += 1;
}
}
}
tempListAlarmInfo.first += 1;
}
}
m_listShowEventInfo = tempListAlarmInfo.second;
}
//
void CEventItemModel::qucikSort(QList<EventMsgPtr> &list, int start, int last)
{
int index;
while(start < last)
{
if(Qt::AscendingOrder == m_order)
{
index = partitionAscendingOrder(list, start, last);
}
else if(Qt::DescendingOrder == m_order)
{
index = partitionDescendingOrder(list, start, last);
}
qucikSort(list, start, index - 1);
start=index+1; //<尾优化
}
}
////
int CEventItemModel::partitionAscendingOrder(QList<EventMsgPtr> &list, int start, int last)
{
EventMsgPtr info = list[start];
int left = start;
int right = last;
while(left < right)
{
while(left < right && !list[right]->lessThan(info, m_sortKey))
{
--right;
}
list[left] = list[right];
while(left<right && list[left]->lessThan(info, m_sortKey))
{
++left;
}
list[right] = list[left];
}
list[left] = info;
return left;
}
int CEventItemModel::partitionDescendingOrder(QList<EventMsgPtr> &list, int start, int last)
{
EventMsgPtr info = list[start];
int left = start;
int right = last;
while(left < right)
{
while(left < right && !list[right]->moreThan(info, m_sortKey))
{
--right;
}
list[left] = list[right];
while(left<right && list[left]->moreThan(info, m_sortKey))
{
++left;
}
list[right] = list[left];
}
list[left] = info;
return left;
}
////
void CEventItemModel::getFilter(bool &isLevelFilterEnable, QList<int> &levelFilter,
bool &isLocationFilterEnable, QList<int> &locationFilter,
bool &isRegionFilterEnable, QList<int> &regionFilter,
bool &isTypeFilterEnable, QList<int> &alarmTypeFilter,
bool &deviceTypeFilter, QString &subSystem, QString &deviceType,
bool &keywordFilterEnable, QString &keyword,
bool &timeFilterEnable, QDateTime &startTime, QDateTime &endTime,
bool &returnFilterEnable,bool &isReturn)
{
Q_UNUSED(isLevelFilterEnable);
Q_UNUSED(levelFilter);
Q_UNUSED(isLocationFilterEnable);
Q_UNUSED(locationFilter);
Q_UNUSED(isRegionFilterEnable);
Q_UNUSED(regionFilter);
Q_UNUSED(isTypeFilterEnable);
Q_UNUSED(alarmTypeFilter);
Q_UNUSED(deviceTypeFilter);
Q_UNUSED(subSystem);
Q_UNUSED(deviceType);
Q_UNUSED(keywordFilterEnable);
Q_UNUSED(keyword);
Q_UNUSED(timeFilterEnable);
Q_UNUSED(startTime);
Q_UNUSED(endTime);
Q_UNUSED(returnFilterEnable);
Q_UNUSED(isReturn);
}
// isLevelFilterEnable = m_isLevelFilterEnable;
// levelFilter = m_levelFilter;
// isLocationFilterEnable = m_isLocationFilterEnable;
// locationFilter = m_locationFilter;
// isRegionFilterEnable = m_isRegionFilterEnable;
// regionFilter = m_regionFilter;
// isTypeFilterEnable = m_isStatusFilterEnable;
// alarmTypeFilter = m_statusFilter2;
// subSystem = m_subSystem;
// deviceTypeFilter = m_isDeviceTypeFileter;
// deviceType = m_deviceType;
// keywordFilterEnable = m_isKeywordEnable;
// keyword = m_keyword;
// timeFilterEnable = m_timeFilterEnable;
// startTime = m_startTime;
// endTime = m_endTime;
// returnFilterEnable = m_isReturnFilterEnable;
// isReturn = m_isReturn;
//}
////
bool CEventItemModel::conditionFilter(EventMsgPtr info)
{
//< 等级
if(m_isLevelFilterEnable && !m_levelFilter.contains(info->priority))
{
return false;
}
//< 车站
if(m_isLocationFilterEnable)
{
if(!m_locationFilter.contains(info->location_id))
{
return false;
}
}
else
{
if(!CEventDataCollect::instance()->locationList().contains(info->location_id))
{
return false;
}
}
//< 责任区
if(m_isRegionFilterEnable)
{
if(!m_regionFilter.contains(info->region_id))
{
return false;
}
}
else
{
if(!CEventDataCollect::instance()->regionList().contains(info->region_id) && info->region_id != -1) //< 未配置责任区的报警同样显示
{
return false;
}
}
//< 状态
if(m_isStatusFilterEnable && !m_statusFilter.contains(info->alm_status))
{
return false;
}
//< 设备类型
if(m_isDeviceTypeFileter)
{
if(CEventDataCollect::instance()->deviceTypeId(m_deviceType) != info->dev_type)
{
return false;
}
}
//< 关键字
if(m_isKeywordEnable)
{
if(!info->content.contains(m_keyword))
{
return false;
}
}
//< 时间
if(m_timeFilterEnable)
{
if((quint64)m_startTime.toMSecsSinceEpoch() >= info->time_stamp)
{
return false;
}
if((quint64)m_endTime.toMSecsSinceEpoch() <= info->time_stamp)
{
return false;
}
}
if(m_isReturnFilterEnable)
{
if(m_isReturn)
{
if(info->alm_style != AS_ALARM_RTN)
{
return false;
}
}
else
{
if(info->alm_style != AS_ALARM )
{
return false;
}
}
}
return true;
}
////
void CEventItemModel::setPriorityFilter(bool &isCheck, QList<int> &priorityFilter)
{
Q_UNUSED(isCheck);
Q_UNUSED(priorityFilter);
}
// m_isLevelFilterEnable = isCheck;
// m_levelFilter = priorityFilter;
// slotMsgRefresh();
//}
////
void CEventItemModel::setLocationFilter(bool &isCheck, QList<int> &locationFilter)
{
Q_UNUSED(isCheck);
Q_UNUSED(locationFilter);
}
// m_isLocationFilterEnable = isCheck;
// m_locationFilter = locationFilter;
// slotMsgRefresh();
//}
////
void CEventItemModel::setEventTypeFilter(bool &isCheck, QList<int> &eventTypeFilter, bool &other)
{
Q_UNUSED(isCheck);
Q_UNUSED(eventTypeFilter);
Q_UNUSED(other);
}
// m_isStatusFilterEnable = isCheck;
// m_statusFilter = eventTypeFilter;
// m_statusFilter2 = eventTypeFilter;
// if(other == true)
// {
// QMap<int,QString> otherEventStatus = CEventDataCollect::instance()->eventOtherStatusDescriptionMap();
// QMap<int, QString>::iterator it = otherEventStatus.begin();
// for(;it != otherEventStatus.end(); ++it)
// {
// m_statusFilter.append(it.key());
// }
// }
// slotMsgRefresh();
//}
////
void CEventItemModel::setEventTimeFilter(bool &isCheck, QDate &startTime, QDate &endTime)
{
Q_UNUSED(isCheck);
Q_UNUSED(startTime);
Q_UNUSED(endTime);
}
// m_timeFilterEnable = isCheck;
// if(isCheck)
// {
// QTime time_1(0,0,0);
// QTime time_2(23,59,59);
// m_startTime.setDate(startTime);
// m_startTime.setTime(time_1);
// m_endTime.setDate(endTime);
// m_endTime.setTime(time_2);
// }
// slotMsgRefresh();
//}
////
void CEventItemModel::setEventTimeFilter(bool &isCheck)
{
Q_UNUSED(isCheck);
}
// m_timeFilterEnable = isCheck;
// slotMsgRefresh();
//}
////
void CEventItemModel::getPriorityFilter(bool &isCheck, QList<int> &priorityFilter)
{
Q_UNUSED(isCheck);
Q_UNUSED(priorityFilter);
}
// isCheck = m_isLevelFilterEnable;
// priorityFilter = m_levelFilter;
//}
////
void CEventItemModel::getLocationFilter(bool &isCheck, QList<int> &locationFilter)
{
Q_UNUSED(isCheck);
Q_UNUSED(locationFilter);
}
// isCheck = m_isLocationFilterEnable;
// locationFilter = m_locationFilter;
//}
////
void CEventItemModel::getEventStatusFilter(bool &isCheck, QList<int> &eventStatusFilter)
{
Q_UNUSED(isCheck);
Q_UNUSED(eventStatusFilter);
}
// isCheck = m_isStatusFilterEnable;
// eventStatusFilter = m_statusFilter2;
//}
////
void CEventItemModel::getEventTimeFilter(bool &isCheck, QDateTime &startTime, QDateTime &endTime)
{
Q_UNUSED(isCheck);
Q_UNUSED(startTime);
Q_UNUSED(endTime);
}
// isCheck = m_timeFilterEnable;
// startTime = m_startTime;
// endTime = m_endTime;
//}
////
QList<EventMsgPtr> CEventItemModel::getListEventInfo()
{return m_listShowEventInfo;}
// return m_listShowEventInfo;
//}
void CEventItemModel::slotMsgRefresh()
{
//需要先过滤
m_listAllEventInfo = CEventMsgManage::instance()->getListEventInfo();
//根据复归过滤
QList<EventMsgPtr> listFilterInfo;
firstFilterByReturn(listFilterInfo);
m_listAllEventInfo.clear();
beginResetModel();
m_listShowEventInfo.clear();
QList<EventMsgPtr>::iterator it = listFilterInfo.begin();
while (it != listFilterInfo.end()) {
if(conditionFilter(*it))
{
m_listShowEventInfo.append(*it);
}
it++;
}
sort();
endResetModel();
}
void CEventItemModel::slotMsgArrived(QList<EventMsgPtr> listEvents)
{
if(m_isReturnFilterEnable)
{
slotMsgRefresh();
}else
{
QList<EventMsgPtr>::iterator itPos = listEvents.begin();
while(itPos != listEvents.end())
{
if(conditionFilter(*itPos))
{
insertAlarmMsg(*itPos);
}
itPos++;
}
}
for(int nIndex = m_listShowEventInfo.size() - 1; nIndex >= 0; --nIndex)
{
if(m_listShowEventInfo.at(nIndex)->deleted)
{
beginRemoveRows(QModelIndex(), nIndex, nIndex);
m_listShowEventInfo.removeAt(nIndex);
endRemoveRows();
}
}
}
void CEventItemModel::firstFilterByReturn(QList<EventMsgPtr> &filterList)
{
if(!m_isReturnFilterEnable)
{
filterList = m_listAllEventInfo;
return;
}
QHash<QString,EventMsgPtr> filerHash;
QList<EventMsgPtr>::iterator it = m_listAllEventInfo.begin();
while (it != m_listAllEventInfo.end()) {
if((*it)->key_id_tag.isEmpty())
{
it++;
continue;
}
//< 动作和复归
if((*it)->alm_style == AS_ALARM || (*it)->alm_style == AS_ALARM_RTN)
{
EventMsgPtr ptr = filerHash.value((*it)->key_id_tag,NULL);
if(ptr != NULL)
{
if((*it)->time_stamp >ptr->time_stamp)
{
filerHash[(*it)->key_id_tag] = (*it);
}
}else
{
filerHash[(*it)->key_id_tag] = (*it);
}
}
it++;
}
QHash<QString,EventMsgPtr>::iterator pos = filerHash.begin();
while (pos != filerHash.end()) {
filterList.append(pos.value());
pos++;
}
}

View File

@ -0,0 +1,145 @@
#ifndef CEVENTITEMMODEL_H
#define CEVENTITEMMODEL_H
#include <QAbstractTableModel>
#include <QDateTime>
#include "CEventMsgInfo.h"
#include "CEventDataCollect.h"
#include <QMutex>
#define Row_Full (15000)
class CEventMsgInfo;
class QTimer;
class CEventItemModel : public QAbstractTableModel
{
Q_OBJECT
public:
CEventItemModel(QObject *parent = Q_NULLPTR);
~CEventItemModel();
void initialize();
void initFilter();
void initFilterAndReloadData();
void setSystemResources(CSystemResources *pSystemResources);
EventMsgPtr getAlarmInfo(const QModelIndex &index) const;
const QList<EventMsgPtr> getListShowAlarmInfo() const;
/**
* @brief insertAlarmMsg
* @param info
*/
void insertAlarmMsg(EventMsgPtr info);
virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
virtual int columnCount(const QModelIndex &index = QModelIndex()) const;
virtual int rowCount(const QModelIndex &index = QModelIndex()) const;
virtual Qt::ItemFlags flags(const QModelIndex &index) const;
void sort();
void qucikSort(QList<EventMsgPtr> &listAlarmInfo, int left, int right);
int partitionAscendingOrder(QList<EventMsgPtr> &list, int start, int last);
int partitionDescendingOrder(QList<EventMsgPtr> &list, int start, int last);
/**
*
*/
void setFilter(const bool &isLevelFilterEnable, const QList<int> &levelFilter,
const bool &isStationFilterEnable, const QList<int> &stationFilter,
const bool &isRegionFilterEnable, const QList<int> &regionFilter,
const bool &isTypeFilterEnable, const QList<int> &typeFilter,
const bool &isDeviceTypeFilter = false, const QString &subSystem = QString(), const QString &deviceType = QString(),
const bool &isKeywordFilterEnable = false, const QString &keyword = QString(),
const bool &timeFilterEnable = false, const QDateTime &startTime = QDateTime(),
const QDateTime &endTime = QDateTime(),const bool &isReturnFilterEnable = false,const bool &isReturn = false);
/**
*
*/
void getFilter(bool &isLevelFilterEnable, QList<int> &levelFilter,
bool &isLocationFilterEnable, QList<int> &locationFilter,
bool &isRegionFilterEnable, QList<int> &regionFilter,
bool &isTypeFilterEnable, QList<int> &alarmTypeFilter,
bool &deviceTypeFilter, QString &subSystem, QString &deviceType,
bool &keywordFilterEnable, QString &keyword,
bool &timeFilterEnable, QDateTime &startTime, QDateTime &endTime,
bool &returnFilterEnable,bool &isReturn);
bool conditionFilter(EventMsgPtr info);
void setPriorityFilter(bool &isCheck, QList<int> &priorityFilter);
void setLocationFilter(bool &isCheck, QList<int> &locationFilter);
void setEventTypeFilter(bool &isCheck, QList<int> &eventTypeFilter, bool &other);
void setEventTimeFilter(bool &isCheck,QDate &startTime,QDate &endTime);
void setEventTimeFilter(bool &isCheck);
void getPriorityFilter(bool &isCheck,QList<int> &priorityFilter);
void getLocationFilter(bool &isCheck,QList<int> &locationFilter);
void getEventStatusFilter(bool &isCheck, QList<int> &eventStatusFilter);
void getEventTimeFilter(bool &isCheck,QDateTime &startTime, QDateTime &endTime);
QList<EventMsgPtr> getListEventInfo();
signals:
void sigRowChanged();
public slots:
void sortColumn(int column, Qt::SortOrder order = Qt::AscendingOrder);
private slots:
/**
* @brief slotMsgRefresh model
*/
void slotMsgRefresh();
/**
* @brief slotMsgArrived
* @param info
*/
void slotMsgArrived(QList<EventMsgPtr> listEvents);
private:
void firstFilterByReturn(QList<EventMsgPtr> &filterSet);
private:
QStringList header;
QList<EventMsgPtr> m_listShowEventInfo;
QList<EventMsgPtr> m_listAllEventInfo;
CSystemResources *m_pSystemResources;
E_ALARM_SORTKEY m_sortKey; //排序规则
Qt::SortOrder m_order;
//Filter
bool m_isLevelFilterEnable; //是否按报警级别过滤
QList<int> m_levelFilter; //报警级别过滤
bool m_isLocationFilterEnable; //是否按车站过滤
QList<int> m_locationFilter; //车站过滤
bool m_isRegionFilterEnable; //是否按责任区过滤
QList<int> m_regionFilter; //责任区过滤
bool m_isStatusFilterEnable; //是否按事件状态过滤
QList<int> m_statusFilter; //事件状态过滤(所有的要过滤事件状态--如果其他状态没有被勾选,则与下面的内容相同)
QList<int> m_statusFilter2; //事件状态过滤(显示在过滤窗中的事件状态)
bool m_isDeviceTypeFileter; //设备类型过滤
QString m_subSystem; //子系统
QString m_deviceType; //设备类型
bool m_isKeywordEnable; //关键字过滤
QString m_keyword; //关键字
bool m_timeFilterEnable; //是否根据时间过滤
QDateTime m_startTime; //起始时间
QDateTime m_endTime; //终止时间
bool m_isReturnFilterEnable; //是否根据复归状态过滤
bool m_isReturn;
QMap<int,SAreaInfo> m_areaInfoMap; //区域信息
QMap<int,QVector<int> > m_areaLocMap; //区域映射
};
#endif // CEVENTITEMMODEL_H

View File

@ -0,0 +1,448 @@
#include "CEventMsgInfo.h"
#include <QDateTime>
#include "CEventDataCollect.h"
#include <QDebug>
CEventMsgInfo::CEventMsgInfo()
{
alm_type = -1;
alm_style = AS_EVENT_ONLY;
time_stamp = 1000;
domain_id = -1;
location_id = -1;
app_id = -1;
content = QString("");
priority = -1;
dev_type = -1;
region_id = -1;
key_id_tag = QString();
uuid_base64 = QString();
priorityOrder = -1;
deleted = false;
filterDelete = false;
wave_file = QString();
}
CEventMsgInfo::CEventMsgInfo(const CEventMsgInfo &other)
{
alm_type = other.alm_type;
alm_style = other.alm_style;
time_stamp = other.time_stamp;
domain_id = other.domain_id;
location_id = other.location_id;
app_id = other.app_id;
content = other.content;
priority = other.priority;
dev_type = other.dev_type;
key_id_tag = other.key_id_tag;
uuid_base64 = other.uuid_base64;
region_id = other.region_id;
deleted = other.deleted;
filterDelete = other.filterDelete;
wave_file = other.wave_file;
}
void CEventMsgInfo::initialize(const iot_idl::SEvtInfoToEvtClt &eventInfo)
{
alm_type = eventInfo.alm_type();
E_ALARM_LOGICSTATE logic = (E_ALARM_LOGICSTATE)eventInfo.logic_state();
if(logic == E_ALS_ALARM || logic == E_ALS_ALARM_CFM ||
logic == E_ALS_ALARM_DEL || logic == E_ALS_ALARM_CFM_DEL)
{
alm_style = AS_ALARM;
}else if(logic == E_ALS_RETURN || logic == E_ALS_RETURN_CFM ||
logic == E_ALS_RETURN_DEL || logic == E_ALS_RETURN_CFM_DEL)
{
alm_style = AS_ALARM_RTN;
}else{
alm_style = AS_EVENT_ONLY;
}
time_stamp = eventInfo.time_stamp();
alm_status = eventInfo.alm_status();
domain_id = eventInfo.domain_id();
location_id = eventInfo.location_id();
app_id = eventInfo.app_id();
content = QString::fromStdString(eventInfo.content());
priority = eventInfo.priority();
dev_type = eventInfo.dev_type();
key_id_tag = QString::fromStdString(eventInfo.key_id_tag());
uuid_base64 = QString::fromStdString(eventInfo.uuid_base64());
if(eventInfo.has_region_id() && eventInfo.region_id() > 0)
{
region_id = eventInfo.region_id();
}
else
{
region_id = -1;
}
wave_file = QString::fromStdString(eventInfo.wave_file());
}
bool CEventMsgInfo::lessThan(EventMsgPtr info, E_ALARM_SORTKEY sortkey)
{
switch (sortkey)
{
case E_SORT_PRIORITY:
{
if(priorityOrder < info->priorityOrder)
{
return true;
}
else if(priorityOrder > info->priorityOrder)
{
return false;
}
else if(priorityOrder == info->priorityOrder)
{
if(time_stamp <= info->time_stamp)
{
return false;
}
return true;
}
break;
}
case E_SORT_TIME:
{
if(time_stamp < info->time_stamp)
{
return true;
}
if(time_stamp > info->time_stamp)
{
return false;
}
else if(time_stamp == info->time_stamp)
{
if(priorityOrder <= info->priorityOrder)
{
return true;
}
return false;
}
break;
}
case E_SORT_LOCATION:
{
if(location_id < info->location_id)
{
return true;
}
else if(location_id > info->location_id)
{
return false;
}
else if(location_id == info->location_id)
{
if(time_stamp <= info->time_stamp)
{
return false;
}
return true;
}
break;
}
case E_SORT_REGION:
{
if(region_id < info->region_id)
{
return true;
}
else if(region_id > info->region_id)
{
return false;
}
else if(region_id == info->region_id)
{
if(time_stamp <= info->time_stamp)
{
return false;
}
return true;
}
break;
}
case E_SORT_TYPE:
{
if(alm_type < info->alm_type)
{
return true;
}
else if(alm_type > info->alm_type)
{
return false;
}
else if(alm_type == info->alm_type)
{
if(time_stamp <= info->time_stamp)
{
return false;
}
return true;
}
break;
}
case E_SORT_STATUS:
{
if(alm_status < info->alm_status)
{
return true;
}
else if(alm_status > info->alm_status)
{
return false;
}
else if(alm_status == info->alm_status)
{
if(time_stamp <= info->time_stamp)
{
return false;
}
return true;
}
break;
}
case E_SORT_STYLE:
{
if(alm_style <info->alm_style)
{
return true;
}
else if(alm_style >info->alm_style)
{
return false;
}
else
{
if(time_stamp < info->time_stamp)
{
return true;
}
return false;
}
break;
}
case E_SORT_CONTENT:
{
if(content.isEmpty() && info->content.isEmpty())
{
return false;
}
else if(content.isEmpty() && (!info->content.isEmpty()))
{
return true;
}
else if((!content.isEmpty()) && info->content.isEmpty())
{
return false;
}
else if(content < info->content)
{
return true;
}
else if(content > info->content)
{
return false;
}
else if(content == info->content)
{
if(time_stamp < info->time_stamp)
{
return false;
}
return true;
}
break;
}
default:
break;
}
return false;
}
bool CEventMsgInfo::moreThan(EventMsgPtr info, E_ALARM_SORTKEY sortkey)
{
switch (sortkey)
{
case E_SORT_PRIORITY:
{
if(priorityOrder > info->priorityOrder)
{
return true;
}
else if(priorityOrder < info->priorityOrder)
{
return false;
}
else if(priorityOrder == info->priorityOrder)
{
if(time_stamp >= info->time_stamp)
{
return true;
}
return false;
}
break;
}
case E_SORT_TIME:
{
if(time_stamp > info->time_stamp)
{
return true;
}
if(time_stamp < info->time_stamp)
{
return false;
}
else if(time_stamp == info->time_stamp)
{
if(priorityOrder < info->priorityOrder)
{
return true;
}
return false;
}
break;
}
case E_SORT_LOCATION:
{
if(location_id > info->location_id)
{
return true;
}
else if(location_id < info->location_id)
{
return false;
}
else if(location_id == info->location_id)
{
if(time_stamp <= info->time_stamp)
{
return false;
}
return true;
}
break;
}
case E_SORT_REGION:
{
if(region_id > info->region_id)
{
return true;
}
else if(region_id < info->region_id)
{
return false;
}
else if(region_id == info->region_id)
{
if(time_stamp <= info->time_stamp)
{
return false;
}
return true;
}
break;
}
case E_SORT_TYPE:
{
if(alm_type > info->alm_type)
{
return true;
}
else if(alm_type < info->alm_type)
{
return false;
}
else if(alm_type == info->alm_type)
{
if(time_stamp <= info->time_stamp)
{
return false;
}
return true;
}
break;
}
case E_SORT_STATUS:
{
if(alm_status > info->alm_status)
{
return true;
}
else if(alm_status < info->alm_status)
{
return false;
}
else if(alm_status == info->alm_status)
{
if(time_stamp <= info->time_stamp)
{
return false;
}
return true;
}
break;
}
case E_SORT_STYLE:
{
if(alm_style <info->alm_style)
{
return false;
}
else if(alm_style >info->alm_style)
{
return true;
}
else
{
if(time_stamp < info->time_stamp)
{
return false;
}
return true;
}
break;
}
case E_SORT_CONTENT:
{
if(content.isEmpty() && info->content.isEmpty())
{
return true;
}
else if(content.isEmpty() && (!info->content.isEmpty()))
{
return false;
}
else if((!content.isEmpty()) && info->content.isEmpty())
{
return true;
}
else if(content > info->content)
{
return true;
}
else if(content < info->content)
{
return false;
}
else if(content == info->content)
{
if(time_stamp < info->time_stamp)
{
return false;
}
return true;
}
break;
}
default:
break;
}
return false;
}
bool CEventMsgInfo::operator==(const EventMsgPtr &target)
{
return uuid_base64 == target->uuid_base64;
}

View File

@ -0,0 +1,168 @@
#ifndef ALARMMSGINFO_H
#define ALARMMSGINFO_H
#include <QMetaType>
#include <QStringList>
#include <QSharedPointer>
#include "alarm_server_api/CAlmApiForEvtClt.h"
#include "common/DataType.h"
#include <QDateTime>
#define LIMIT_HIS_RECORD 10000
#define REAL_BUTTON_COLUMN 7 //按钮所在列
#define HIS_BUTTON_COLUMN 9 //按钮所在列
//排序
enum E_ALARM_VIEW
{
E_ALARM_REAL_EVENT = 0,
E_ALARM_HIS_EVENT =1
};
enum E_ALARM_SORTKEY
{
E_SORT_TIME = 0, //时间戳
E_SORT_PRIORITY, //优先级
E_SORT_LOCATION, //车站
E_SORT_REGION, //责任区
E_SORT_TYPE, //事件类型
E_SORT_STATUS, //事件状态
E_SORT_STYLE, //复归状态
E_SORT_CONTENT //告警内容
};
enum E_ALARM_STYLE
{
AS_ALARM = 0, // 告警动作
AS_ALARM_RTN = 1, // 告警恢复
AS_EVENT_ONLY = 2, // 仅产生事件
AS_DO_NOTHING = 3, // 无
};
// 报警状态
enum E_ALARM_LOGICSTATE
{
E_ALS_ALARM = 0, // 报警状态
E_ALS_ALARM_CFM=1, // 报警确认状态
E_ALS_RETURN=2, // 报警返回状态
E_ALS_RETURN_CFM=3, // 报警返回确认状态
ALS_EVT_ONLY = 4, // 仅事件
//在原始告警窗删除后,可能还需要在智能告警窗展示
E_ALS_ALARM_DEL = 20, // 告警状态,且在原始告警窗已删除,可能是达到数量上限而删除
E_ALS_ALARM_CFM_DEL =21, // 告警确认状态,且在原始告警窗已删除
E_ALS_RETURN_DEL=22, // 告警返回状态,且在原始告警窗已删除,可能是达到数量上限而删除
E_ALS_RETURN_CFM_DEL=23, // 告警返回确认状态,且在原始告警窗已删除
E_ALS_BAD = 100
};
enum E_LOCATION_TYPE
{
E_LOCATION_NODE = 0,
E_LOCATION_AREA
};
struct STimeKeyIdTag
{
quint64 time_stamp;
QString key_id_tag;
};
struct SAreaInfo
{
int nId;
QString stTag;
QString stDes;
E_LOCATION_TYPE eType;
int nPareaId;
SAreaInfo() {
nId = -1;
stTag = QString();
stDes = QString();
eType = E_LOCATION_NODE;
nPareaId = -1;
}
};
struct ST_FILTER
{
bool isLevelFilterEnable;
QList<int> levelFilter; //报警级别过滤
bool isLocationFilterEnable; //是否按车站过滤
QList<int> locationFilter; //车站过滤
bool isRegionFilterEnable; //是否按责任区过滤
QList<int> regionFilter; //责任区过滤
bool isStatusFilterEnable; //是否按报警类型过滤
QList<int> statusFilter; //事件状态过滤(所有的要过滤事件状态--如果其他状态没有被勾选,则与下面的内容相同)
QList<int> statusFilter2; //事件状态过滤(显示在过滤窗中的事件状态)
bool isDeviceTypeFileter; //设备类型过滤
QString subSystem; //子系统
QString deviceType; //设备类型
bool isKeywordEnable; //关键字过滤
QString keyword; //关键字
bool timeFilterEnable; //是否根据时间过滤
QDateTime startTime; //起始时间
QDateTime endTime; //终止时间
bool isReturnFilterEnable; //是否根据复归状态过滤
bool isReturn;
ST_FILTER() {
isLevelFilterEnable = false;
isLocationFilterEnable = false;
isRegionFilterEnable = false;
isStatusFilterEnable = false;
isDeviceTypeFileter = false;
subSystem = QString();
deviceType = QString();
isKeywordEnable = false;
keyword = QString();
timeFilterEnable = false;
QDateTime dataTime(QDateTime::currentDateTime());
dataTime.setTime(QTime(dataTime.time().hour(),dataTime.time().second(),0,0));
startTime = dataTime;
dataTime.setTime(QTime(dataTime.time().hour(),dataTime.time().second(),59,999));
endTime = dataTime;
isReturnFilterEnable =false;
isReturn = false;
}
};
class CEventMsgInfo;
typedef QSharedPointer<CEventMsgInfo> EventMsgPtr;
class CEventMsgInfo
{
public:
CEventMsgInfo();
CEventMsgInfo(const CEventMsgInfo &other);
void initialize(const iot_idl::SEvtInfoToEvtClt &eventInfo);
bool lessThan(EventMsgPtr info, E_ALARM_SORTKEY sortkey = E_SORT_PRIORITY);
bool moreThan(EventMsgPtr info, E_ALARM_SORTKEY sortkey = E_SORT_PRIORITY);
bool operator==(const EventMsgPtr &target);
qint32 alm_type; //报警类型
E_ALARM_STYLE alm_style; //< 告警类型
quint64 time_stamp; //时标RFC1305、POSIX时标标准
qint32 domain_id; //域ID
qint32 location_id; //位置ID
qint32 app_id; //应用号
QString content; //报警内容
qint32 priority; //报警优先级id
qint32 dev_type; //设备类型ID
qint32 region_id; //责任区ID
bool deleted; //实时事件删除标志
bool filterDelete; //过滤删除
QString uuid_base64; //< uuid 主键
QString key_id_tag; //< 测点ID
int32 alm_status; //事件状态
uint cfm_user; //确认人
uint64 cfm_time; //确认时间
//Extend
qint32 priorityOrder;
QString wave_file;
};
Q_DECLARE_METATYPE(CEventMsgInfo)
Q_DECLARE_METATYPE(EventMsgPtr)
#endif // ALARMMSGINFO_H

View File

@ -0,0 +1,115 @@
#include "CEventMsgManage.h"
#include <QMutex>
#include <QMutexLocker>
CEventMsgManage * CEventMsgManage::m_pInstance = Q_NULLPTR;
CEventMsgManage *CEventMsgManage::instance()
{
if(m_pInstance == Q_NULLPTR)
{
m_pInstance = new CEventMsgManage();
}
return m_pInstance;
}
CEventMsgManage::CEventMsgManage()
: QObject()
{
mutex = new QMutex();
}
CEventMsgManage::~CEventMsgManage()
{
m_listEventInfo.clear();
delete mutex;
m_pInstance = Q_NULLPTR;
}
QList<EventMsgPtr> CEventMsgManage::getListEventInfo()
{
QMutexLocker locker(mutex);
return m_listEventInfo;
}
int CEventMsgManage::getListEventCount()
{
if(m_listEventInfo.isEmpty())
{
return 0;
}
return m_listEventInfo.count();
}
void CEventMsgManage::addEventMsg(const EventMsgPtr msg)
{
QMutexLocker locker(mutex);
if(!m_listEventInfo.isEmpty())
{
bool inserted = false;
QList<EventMsgPtr>::iterator iter = m_listEventInfo.begin();
while (iter != m_listEventInfo.end())
{
if(msg->time_stamp >= (*iter)->time_stamp)
{
m_listEventInfo.insert(iter, msg);
inserted = true;
break;
}
iter++;
}
if (!inserted)
{
m_listEventInfo.append(msg);
}
}
else
{
m_listEventInfo.append(msg);
}
if(m_listEventInfo.size() > 10000)
{
EventMsgPtr info = m_listEventInfo.takeLast();
info->deleted = true;
}
}
void CEventMsgManage::linkWave2EvtMsg(const QList<QString> &uuidList, const QString &waveFile)
{
QMutexLocker locker(mutex);
for(int index(0);index<uuidList.size();index++)
{
QList<EventMsgPtr>::iterator it = m_listEventInfo.begin();
while (it != m_listEventInfo.end()) {
if((*it)->uuid_base64 == uuidList.at(index))
{
(*it)->wave_file = waveFile;
break;
}
it++;
}
}
}
void CEventMsgManage::removeEventMsgByDomainID(const int domainId)
{
QMutexLocker locker(mutex);
QList<EventMsgPtr>::iterator it = m_listEventInfo.begin();
while (it != m_listEventInfo.end())
{
if(domainId == (*it)->domain_id)
{
it = m_listEventInfo.erase(it);
continue;
}
it++;
}
}
void CEventMsgManage::clearRTMsg()
{
QMutexLocker locker(mutex);
m_listEventInfo.clear();
}

View File

@ -0,0 +1,39 @@
#ifndef CEventMsgManage_H
#define CEventMsgManage_H
#include <QObject>
#include "CEventMsgInfo.h"
class QMutex;
class CEventMsgManage : public QObject
{
Q_OBJECT
public:
static CEventMsgManage * instance();
~CEventMsgManage();
QList<EventMsgPtr> getListEventInfo();
int getListEventCount();
void addEventMsg(const EventMsgPtr msg);
void linkWave2EvtMsg(const QList<QString> &uuidList,const QString &waveFile);
void removeEventMsgByDomainID(const int domainId);
void clearRTMsg();
private:
CEventMsgManage();
private:
QMutex * mutex;
QList<EventMsgPtr> m_listEventInfo;
QList<EventMsgPtr> m_historyEventInfo;
static CEventMsgManage * m_pInstance;
};
#endif // CEventMsgManage_H

View File

@ -0,0 +1,36 @@
#include <QHeaderView>
#include "CEventView.h"
CEventView::CEventView(QWidget *parent)
:QTableView(parent)
{
setSortingEnabled(true);
//setAlternatingRowColors(true);
horizontalHeader()->setStretchLastSection(true);
setSelectionBehavior(QAbstractItemView::SelectRows);
//setSelectionMode(QAbstractItemView::MultiSelection);
}
QModelIndexList CEventView::selectedItems() const
{
QModelIndexList indexList;
foreach(QModelIndex index, selectedIndexes())
{
if(index.column() == 0)
{
indexList.append(index);
}
}
return indexList;
}
void CEventView::setDefaultRowHeight(int height)
{
verticalHeader()->setDefaultSectionSize(height);
}
void CEventView::selectionChanged(const QItemSelection &selected, const QItemSelection &deSelected)
{
QTableView::selectionChanged(selected, deSelected);
emit sig_selectionChanged(selectedIndexes());
}

View File

@ -0,0 +1,22 @@
#ifndef CEventView_H
#define CEventView_H
#include <QTableView>
class CEventView : public QTableView
{
Q_OBJECT
public:
CEventView(QWidget *parent = Q_NULLPTR);
QModelIndexList selectedItems() const;
void setDefaultRowHeight(int height);
signals:
void sig_selectionChanged(const QModelIndexList &list);
protected slots:
virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deSelected);
};
#endif // ALARMVIEW_H

View File

@ -0,0 +1,77 @@
#include "CFesChanData.h"
#include "ui_CFesChanData.h"
#include "CActiveWindow.h"
CFesChanData::CFesChanData(QWidget *parent) :
QWidget(parent),
ui(new Ui::CFesChanData)
{
ui->setupUi(this);
}
CFesChanData::~CFesChanData()
{
if(ptrChanMonDlg != NULL)
{
delete ptrChanMonDlg;
}
delete ui;
}
void CFesChanData::Init(bool isConnected)
{
if(isConnected)
{
m_ConnectFlag = CN_CommConnect;
}else
{
m_ConnectFlag = CN_CommDisconnect;
}
initVariable();
initSignalAndSlot();
initView();
}
void CFesChanData::slotActiveWindow()
{
setActiveWindow();
}
void CFesChanData::initVariable()
{
ptrChanMonDlg = new ChanMonDlg((int)E_ACTIVE_WINDOW_FES_CHAN_DATA,this);
ptrChanMonDlg->SetConnectFlags(m_ConnectFlag);
}
void CFesChanData::initSignalAndSlot()
{
}
void CFesChanData::initView()
{
QGridLayout *gridLayout = new QGridLayout(ui->widget);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrChanMonDlg, 0, 0, 1, 1);
}
void CFesChanData::setActiveWindow()
{
//CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES_CHAN_DATA);
}
void CFesChanData::OnNetConnect()
{
m_ConnectFlag =CN_CommConnect;
if(ptrChanMonDlg!=NULL)
ptrChanMonDlg->SetConnectFlags(m_ConnectFlag);
}
void CFesChanData::OnNetDisConnect()
{
m_ConnectFlag =CN_CommDisconnect;
if(ptrChanMonDlg!=NULL)
ptrChanMonDlg->SetConnectFlags(m_ConnectFlag);
}

View File

@ -0,0 +1,42 @@
#ifndef CFESCHANDATA_H
#define CFESCHANDATA_H
#include <QWidget>
#include "chanmondlg.h"
namespace Ui {
class CFesChanData;
}
class CFesChanData : public QWidget
{
Q_OBJECT
public:
explicit CFesChanData(QWidget *parent = 0);
~CFesChanData();
void Init(bool isConnected);
public slots:
void slotActiveWindow();
private:
void initVariable();
void initSignalAndSlot();
void initView();
private slots:
void setActiveWindow();
void OnNetConnect();
void OnNetDisConnect();
public:
ChanMonDlg *ptrChanMonDlg;
private:
Ui::CFesChanData *ui;
int m_ConnectFlag; //连接成功标志
};
#endif // CFESCHANDATA_H

View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CFesChanData</class>
<widget class="QWidget" name="CFesChanData">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>558</width>
<height>343</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QWidget" name="widget" native="true"/>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,170 @@
#include "CFesCtrlSim.h"
#include "ui_CFesCtrlSim.h"
#include "CActiveWindow.h"
CFesCtrlSim::CFesCtrlSim(QWidget *parent) :
QWidget(parent),
ui(new Ui::CFesCtrlSim),
ptrSimAoDlg(Q_NULLPTR),
ptrSimDoDlg(Q_NULLPTR),
ptrSimMoDlg(Q_NULLPTR),
ptrDefCmdDlg(Q_NULLPTR)
{
ui->setupUi(this);
}
CFesCtrlSim::~CFesCtrlSim()
{
if(ptrSimAoDlg != NULL)
{
delete ptrSimAoDlg;
}
if(ptrSimDoDlg != NULL)
{
delete ptrSimDoDlg;
}
if(ptrSimMoDlg != NULL)
{
delete ptrSimMoDlg;
}
if(ptrDefCmdDlg != NULL)
{
delete ptrDefCmdDlg;
}
delete ui;
}
void CFesCtrlSim::Init(bool isConnected)
{
if(isConnected)
{
m_ConnectFlag = CN_CommConnect;
}else
{
m_ConnectFlag = CN_CommDisconnect;
}
initVariable();
initSignalAndSlot();
initView();
}
void CFesCtrlSim::slotActiveWindow()
{
setActiveWindow(ui->tabWidget->currentIndex());
}
void CFesCtrlSim::initVariable()
{
ptrSimAoDlg = new SimAoDlg((int)E_ACTIVE_WINDOW_FES_AO_CTRL,this);
ptrSimAoDlg->SetConnectFlags(m_ConnectFlag);
}
void CFesCtrlSim::initSignalAndSlot()
{
connect(ui->tabWidget,&QTabWidget::currentChanged,this,&CFesCtrlSim::setActiveWindow);
}
void CFesCtrlSim::initView()
{
QGridLayout *gridLayout = new QGridLayout(ui->tab);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrSimAoDlg, 0, 0, 1, 1);
ui->tabWidget->removeTab(3);
}
void CFesCtrlSim::setActiveWindow(int current)
{
switch (current) {
case 0:
if(ptrSimAoDlg == NULL)
{
ptrSimAoDlg = new SimAoDlg((int)E_ACTIVE_WINDOW_FES_AO_CTRL,this);
ptrSimAoDlg->SetConnectFlags(m_ConnectFlag);
QGridLayout *gridLayout = new QGridLayout(ui->tab);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrSimAoDlg, 0, 0, 1, 1);
}
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES_AO_CTRL);
ptrSimAoDlg->OnRTURefresh();
break;
case 1:
if(ptrSimDoDlg == NULL)
{
ptrSimDoDlg = new SimDoDlg((int)E_ACTIVE_WINDOW_FES_DO_CTRL,this);
ptrSimDoDlg->SetConnectFlags(m_ConnectFlag);
QGridLayout *gridLayout = new QGridLayout(ui->tab_2);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrSimDoDlg, 0, 0, 1, 1);
}
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES_DO_CTRL);
ptrSimDoDlg->OnRTURefresh();
break;
case 2:
if(ptrSimMoDlg == NULL)
{
ptrSimMoDlg = new SimMoDlg((int)E_ACTIVE_WINDOW_FES_MO_CTRL,this);
ptrSimMoDlg->SetConnectFlags(m_ConnectFlag);
QGridLayout *gridLayout = new QGridLayout(ui->tab_3);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrSimMoDlg, 0, 0, 1, 1);
}
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES_MO_CTRL);
ptrSimMoDlg->OnRTURefresh();
break;
case 3:
if(ptrDefCmdDlg == NULL)
{
ptrDefCmdDlg = new DefCmdDlg((int)E_ACTIVE_WINDOW_FES_CUSTOM_CTRL,this);
ptrDefCmdDlg->SetConnectFlags(m_ConnectFlag);
QGridLayout *gridLayout = new QGridLayout(ui->tab_4);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrDefCmdDlg, 0, 0, 1, 1);
}
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES_CUSTOM_CTRL);
ptrDefCmdDlg->OnRTURefresh();
break;
default:
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES);
break;
}
}
void CFesCtrlSim::OnNetConnect()
{
m_ConnectFlag =CN_CommConnect;
if(ptrSimAoDlg!=NULL)
ptrSimAoDlg->SetConnectFlags(m_ConnectFlag);
if(ptrSimDoDlg!=NULL)
ptrSimDoDlg->SetConnectFlags(m_ConnectFlag);
if(ptrSimMoDlg!=NULL)
ptrSimMoDlg->SetConnectFlags(m_ConnectFlag);
if(ptrDefCmdDlg!=NULL)
ptrDefCmdDlg->SetConnectFlags(m_ConnectFlag);
}
void CFesCtrlSim::OnNetDisConnect()
{
m_ConnectFlag =CN_CommDisconnect;
if(ptrSimAoDlg!=NULL)
ptrSimAoDlg->SetConnectFlags(m_ConnectFlag);
if(ptrSimDoDlg!=NULL)
ptrSimDoDlg->SetConnectFlags(m_ConnectFlag);
if(ptrSimMoDlg!=NULL)
ptrSimMoDlg->SetConnectFlags(m_ConnectFlag);
if(ptrDefCmdDlg!=NULL)
ptrDefCmdDlg->SetConnectFlags(m_ConnectFlag);
}

View File

@ -0,0 +1,48 @@
#ifndef CFESCTRLSIM_H
#define CFESCTRLSIM_H
#include <QWidget>
#include "defcmddlg.h"
#include "simaodlg.h"
#include "simdodlg.h"
#include "simmodlg.h"
namespace Ui {
class CFesCtrlSim;
}
class CFesCtrlSim : public QWidget
{
Q_OBJECT
public:
explicit CFesCtrlSim(QWidget *parent = 0);
~CFesCtrlSim();
void Init(bool isConnected);
public slots:
void slotActiveWindow();
private:
void initVariable();
void initSignalAndSlot();
void initView();
private slots:
void setActiveWindow(int current);
void OnNetConnect();
void OnNetDisConnect();
public:
SimAoDlg *ptrSimAoDlg;
SimDoDlg *ptrSimDoDlg;
SimMoDlg *ptrSimMoDlg;
DefCmdDlg *ptrDefCmdDlg;
private:
Ui::CFesCtrlSim *ui;
int m_ConnectFlag; //连接成功标志
};
#endif // CFESCTRLSIM_H

View File

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CFesCtrlSim</class>
<widget class="QWidget" name="CFesCtrlSim">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>653</width>
<height>343</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QTabWidget" name="tabWidget">
<property name="enabled">
<bool>true</bool>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>模拟量控制</string>
</attribute>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>数字量控制</string>
</attribute>
</widget>
<widget class="QWidget" name="tab_3">
<attribute name="title">
<string>混合量控制</string>
</attribute>
</widget>
<widget class="QWidget" name="tab_4">
<property name="enabled">
<bool>true</bool>
</property>
<attribute name="title">
<string>自定义控制</string>
</attribute>
</widget>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,178 @@
#include "CFesData.h"
#include "ui_CFesData.h"
#include "pub_widget/MessageBox.h"
#include <QFile>
#include <QDebug>
#include <QXmlStreamReader>
#include "CActiveWindow.h"
CFesData::CFesData(QWidget *parent) :
QWidget(parent),
ui(new Ui::CFesData),
ptrAiMonDlg(Q_NULLPTR),
ptrDiMonDlg(Q_NULLPTR),
ptrPiMonDlg(Q_NULLPTR),
ptrMiMonDlg(Q_NULLPTR)
{
ui->setupUi(this);
}
CFesData::~CFesData()
{
if(ptrAiMonDlg != NULL)
{
delete ptrAiMonDlg;
}
if(ptrDiMonDlg != NULL)
{
delete ptrDiMonDlg;
}
if(ptrMiMonDlg != NULL)
{
delete ptrMiMonDlg;
}
if(ptrPiMonDlg != NULL)
{
delete ptrPiMonDlg;
}
delete ui;
}
void CFesData::Init(bool isConnected)
{
if(isConnected)
{
m_ConnectFlag = CN_CommConnect;
}else
{
m_ConnectFlag = CN_CommDisconnect;
}
initVariable();
initSignalAndSlot();
initView();
}
void CFesData::slotActiveWindow()
{
setActiveWindow(ui->tabWidget->currentIndex());
}
void CFesData::initVariable()
{
ptrAiMonDlg = new AiMonDlg((int)E_ACTIVE_WINDOW_FES_AI_DATA,this);
ptrAiMonDlg->SetConnectFlags(m_ConnectFlag);
}
void CFesData::initSignalAndSlot()
{
connect(ui->tabWidget,&QTabWidget::currentChanged,this,&CFesData::setActiveWindow);
}
void CFesData::initView()
{
QGridLayout *gridLayout = new QGridLayout(ui->tab_1);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrAiMonDlg, 0, 0, 1, 1);
}
void CFesData::setActiveWindow(int current)
{
switch (current) {
case 0:
{
if(ptrAiMonDlg == NULL)
{
ptrAiMonDlg = new AiMonDlg((int)E_ACTIVE_WINDOW_FES_AI_DATA,this);
ptrAiMonDlg->SetConnectFlags(m_ConnectFlag);
QGridLayout *gridLayout = new QGridLayout(ui->tab_1);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrAiMonDlg, 0, 0, 1, 1);
}
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES_AI_DATA);
ptrAiMonDlg->OnRTURefresh();
break;
}
case 1:
if(ptrDiMonDlg == NULL)
{
ptrDiMonDlg = new DiMonDlg((int)E_ACTIVE_WINDOW_FES_DI_DATA,this);
ptrDiMonDlg->SetConnectFlags(m_ConnectFlag);
QGridLayout *gridLayout = new QGridLayout(ui->tab_2);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrDiMonDlg, 0, 0, 1, 1);
}
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES_DI_DATA);
ptrDiMonDlg->OnRTURefresh();
break;
case 2:
if(ptrPiMonDlg == NULL)
{
ptrPiMonDlg = new PiMonDlg((int)E_ACTIVE_WINDOW_FES_PI_DATA,this);
ptrPiMonDlg->SetConnectFlags(m_ConnectFlag);
QGridLayout *gridLayout = new QGridLayout(ui->tab_3);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrPiMonDlg, 0, 0, 1, 1);
}
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES_PI_DATA);
ptrPiMonDlg->OnRTURefresh();
break;
case 3:
if(ptrMiMonDlg == NULL)
{
ptrMiMonDlg = new MiMonDlg((int)E_ACTIVE_WINDOW_FES_MI_DATA,this);
ptrMiMonDlg->SetConnectFlags(m_ConnectFlag);
QGridLayout *gridLayout = new QGridLayout(ui->tab_4);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrMiMonDlg, 0, 0, 1, 1);
}
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES_MI_DATA);
ptrMiMonDlg->OnRTURefresh();
break;
default:
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES);
break;
}
}
void CFesData::OnNetConnect()
{
m_ConnectFlag =CN_CommConnect;
if(ptrAiMonDlg!=NULL)
ptrAiMonDlg->SetConnectFlags(m_ConnectFlag);
if(ptrDiMonDlg!=NULL)
ptrDiMonDlg->SetConnectFlags(m_ConnectFlag);
if(ptrPiMonDlg!=NULL)
ptrPiMonDlg->SetConnectFlags(m_ConnectFlag);
if(ptrMiMonDlg!=NULL)
ptrMiMonDlg->SetConnectFlags(m_ConnectFlag);
}
void CFesData::OnNetDisConnect()
{
m_ConnectFlag =CN_CommDisconnect;
if(ptrAiMonDlg!=NULL)
ptrAiMonDlg->SetConnectFlags(m_ConnectFlag);
if(ptrDiMonDlg!=NULL)
ptrDiMonDlg->SetConnectFlags(m_ConnectFlag);
if(ptrPiMonDlg!=NULL)
ptrPiMonDlg->SetConnectFlags(m_ConnectFlag);
if(ptrMiMonDlg!=NULL)
ptrMiMonDlg->SetConnectFlags(m_ConnectFlag);
}

View File

@ -0,0 +1,48 @@
#ifndef CFESDATA_H
#define CFESDATA_H
#include <QWidget>
#include "aimondlg.h"
#include "dimondlg.h"
#include "pimondlg.h"
#include "mimondlg.h"
namespace Ui {
class CFesData;
}
class CFesData : public QWidget
{
Q_OBJECT
public:
explicit CFesData(QWidget *parent = 0);
~CFesData();
void Init(bool isConnected);
public slots:
void slotActiveWindow();
private:
void initVariable();
void initSignalAndSlot();
void initView();
private slots:
void setActiveWindow(int current);
void OnNetConnect();
void OnNetDisConnect();
public:
AiMonDlg *ptrAiMonDlg;
DiMonDlg *ptrDiMonDlg;
PiMonDlg *ptrPiMonDlg;
MiMonDlg *ptrMiMonDlg;
private:
Ui::CFesData *ui;
int m_ConnectFlag; //连接成功标志
};
#endif // CFESDATA_H

View File

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CFesData</class>
<widget class="QWidget" name="CFesData">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>660</width>
<height>401</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab_1">
<attribute name="title">
<string>模拟量</string>
</attribute>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>数字量</string>
</attribute>
</widget>
<widget class="QWidget" name="tab_3">
<attribute name="title">
<string>累积量</string>
</attribute>
</widget>
<widget class="QWidget" name="tab_4">
<attribute name="title">
<string>混合量</string>
</attribute>
</widget>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,193 @@
#include "CFesDataSim.h"
#include "ui_CFesDataSim.h"
#include "CActiveWindow.h"
CFesDataSim::CFesDataSim(QWidget *parent) :
QWidget(parent),
ui(new Ui::CFesDataSim),
ptrSimAiDlg(Q_NULLPTR),
ptrSimDiDlg(Q_NULLPTR),
ptrSimPiDlg(Q_NULLPTR),
ptrSimMiDlg(Q_NULLPTR),
ptrSimEventDlg(Q_NULLPTR)
{
ui->setupUi(this);
}
CFesDataSim::~CFesDataSim()
{
if(ptrSimAiDlg != NULL)
{
delete ptrSimAiDlg;
}
if(ptrSimDiDlg != NULL)
{
delete ptrSimDiDlg;
}
if(ptrSimPiDlg != NULL)
{
delete ptrSimPiDlg;
}
if(ptrSimMiDlg != NULL)
{
delete ptrSimMiDlg;
}
if(ptrSimEventDlg != NULL)
{
delete ptrSimEventDlg;
}
delete ui;
}
void CFesDataSim::Init(bool isConnected)
{
if(isConnected)
{
m_ConnectFlag = CN_CommConnect;
}else
{
m_ConnectFlag = CN_CommDisconnect;
}
initVariable();
initSignalAndSlot();
initView();
}
void CFesDataSim::slotActiveWindow()
{
setActiveWindow(ui->tabWidget->currentIndex());
}
void CFesDataSim::initVariable()
{
ptrSimAiDlg = new SimAiDlg((int)E_ACTIVE_WINDOW_FES_AI_CTRL,this);
ptrSimAiDlg->SetConnectFlags(m_ConnectFlag);
}
void CFesDataSim::initSignalAndSlot()
{
connect(ui->tabWidget,&QTabWidget::currentChanged,this,&CFesDataSim::setActiveWindow);
}
void CFesDataSim::initView()
{
QGridLayout *gridLayout = new QGridLayout(ui->tab);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrSimAiDlg, 0, 0, 1, 1);
}
void CFesDataSim::setActiveWindow(int current)
{
switch (current) {
case 0:
if(ptrSimAiDlg == NULL)
{
ptrSimAiDlg = new SimAiDlg((int)E_ACTIVE_WINDOW_FES_AI_CTRL,this);
ptrSimAiDlg->SetConnectFlags(m_ConnectFlag);
QGridLayout *gridLayout = new QGridLayout(ui->tab);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrSimAiDlg, 0, 0, 1, 1);
}
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES_AI_CTRL);
ptrSimAiDlg->OnRTURefresh();
break;
case 1:
if(ptrSimDiDlg == NULL)
{
ptrSimDiDlg = new SimDiDlg((int)E_ACTIVE_WINDOW_FES_DI_CTRL,this);
ptrSimDiDlg->SetConnectFlags(m_ConnectFlag);
QGridLayout *gridLayout = new QGridLayout(ui->tab_2);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrSimDiDlg, 0, 0, 1, 1);
}
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES_DI_CTRL);
ptrSimDiDlg->OnRTURefresh();
break;
case 2:
if(ptrSimPiDlg == NULL)
{
ptrSimPiDlg = new SimPiDlg((int)E_ACTIVE_WINDOW_FES_PI_CTRL,this);
ptrSimPiDlg->SetConnectFlags(m_ConnectFlag);
QGridLayout *gridLayout = new QGridLayout(ui->tab_3);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrSimPiDlg, 0, 0, 1, 1);
}
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES_PI_CTRL);
ptrSimPiDlg->OnRTURefresh();
break;
case 3:
if(ptrSimMiDlg == NULL)
{
ptrSimMiDlg = new SimMiDlg((int)E_ACTIVE_WINDOW_FES_MI_CTRL,this);
ptrSimMiDlg->SetConnectFlags(m_ConnectFlag);
QGridLayout *gridLayout = new QGridLayout(ui->tab_4);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrSimMiDlg, 0, 0, 1, 1);
}
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES_MI_CTRL);
ptrSimMiDlg->OnRTURefresh();
break;
case 4:
if(ptrSimEventDlg == NULL)
{
ptrSimEventDlg = new SimEventDlg((int)E_ACTIVE_WINDOW_FES_EVENT_CTRL,this);
ptrSimEventDlg->SetConnectFlags(m_ConnectFlag);
QGridLayout *gridLayout = new QGridLayout(ui->tab_5);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrSimEventDlg, 0, 0, 1, 1);
}
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES_EVENT_CTRL);
ptrSimEventDlg->OnRTURefresh();
break;
default:
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES);
break;
}
}
void CFesDataSim::OnNetConnect()
{
m_ConnectFlag =CN_CommConnect;
if(ptrSimAiDlg!=NULL)
ptrSimAiDlg->SetConnectFlags(m_ConnectFlag);
if(ptrSimDiDlg!=NULL)
ptrSimDiDlg->SetConnectFlags(m_ConnectFlag);
if(ptrSimPiDlg!=NULL)
ptrSimPiDlg->SetConnectFlags(m_ConnectFlag);
if(ptrSimMiDlg!=NULL)
ptrSimMiDlg->SetConnectFlags(m_ConnectFlag);
if(ptrSimEventDlg!=NULL)
ptrSimEventDlg->SetConnectFlags(m_ConnectFlag);
}
void CFesDataSim::OnNetDisConnect()
{
m_ConnectFlag =CN_CommDisconnect;
if(ptrSimAiDlg!=NULL)
ptrSimAiDlg->SetConnectFlags(m_ConnectFlag);
if(ptrSimDiDlg!=NULL)
ptrSimDiDlg->SetConnectFlags(m_ConnectFlag);
if(ptrSimPiDlg!=NULL)
ptrSimPiDlg->SetConnectFlags(m_ConnectFlag);
if(ptrSimMiDlg!=NULL)
ptrSimMiDlg->SetConnectFlags(m_ConnectFlag);
if(ptrSimEventDlg!=NULL)
ptrSimEventDlg->SetConnectFlags(m_ConnectFlag);
}

View File

@ -0,0 +1,54 @@
#ifndef CFESDATASIM_H
#define CFESDATASIM_H
#include <QWidget>
#include "simaidlg.h"
#include "simdidlg.h"
#include "simpidlg.h"
#include "simmidlg.h"
#include "simeventdlg.h"
namespace Ui {
class CFesDataSim;
}
class CFesDataSim : public QWidget
{
Q_OBJECT
public:
explicit CFesDataSim(QWidget *parent = 0);
~CFesDataSim();
void Init(bool isConnected);
public slots:
void slotActiveWindow();
private:
void initVariable();
void initSignalAndSlot();
void initView();
private slots:
void setActiveWindow(int current);
void OnNetConnect();
void OnNetDisConnect();
public:
SimAiDlg *ptrSimAiDlg;
SimDiDlg *ptrSimDiDlg;
SimPiDlg *ptrSimPiDlg;
SimMiDlg *ptrSimMiDlg;
SimEventDlg *ptrSimEventDlg;
private:
Ui::CFesDataSim *ui;
int m_ConnectFlag; //连接成功标志
RtuDevMap m_rtuDevMap;
RtuPointMap m_rtuAiPointMap;
RtuPointMap m_rtuDiPointMap;
RtuPointMap m_rtuPiPointMap;
RtuPointMap m_rtuMiPointMap;
};
#endif // CFESDATASIM_H

View File

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CFesDataSim</class>
<widget class="QWidget" name="CFesDataSim">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>675</width>
<height>269</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>模拟量仿真</string>
</attribute>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>数字量仿真</string>
</attribute>
</widget>
<widget class="QWidget" name="tab_3">
<attribute name="title">
<string>累积量仿真</string>
</attribute>
</widget>
<widget class="QWidget" name="tab_4">
<attribute name="title">
<string>混合量仿真</string>
</attribute>
</widget>
<widget class="QWidget" name="tab_5">
<attribute name="title">
<string>事件仿真</string>
</attribute>
</widget>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,133 @@
#include "CFesEvent.h"
#include "ui_CFesEvent.h"
#include "CActiveWindow.h"
CFesEvent::CFesEvent(QWidget *parent) :
QWidget(parent),
ui(new Ui::CFesEvent)
{
ui->setupUi(this);
ui->tabWidget->setCurrentIndex(0);
}
CFesEvent::~CFesEvent()
{
if(ptrChanEventDlg != NULL)
{
delete ptrChanEventDlg;
}
if(ptrSoeEventDlg != NULL)
{
delete ptrSoeEventDlg;
}
if(ptrSoeMemoryDlg != NULL)
{
delete ptrSoeMemoryDlg;
}
delete ui;
}
void CFesEvent::Init(bool isConnected)
{
if(isConnected)
{
m_ConnectFlag = CN_CommConnect;
}else
{
m_ConnectFlag = CN_CommDisconnect;
}
initVariable();
initSignalAndSlot();
initView();
}
void CFesEvent::slotActiveWindow()
{
setActiveWindow(ui->tabWidget->currentIndex());
}
void CFesEvent::initVariable()
{
ptrChanEventDlg = new ChanEventDlg((int)E_ACTIVE_WINDOW_FES_CHAN_EVENT,this);
ptrChanEventDlg->SetConnectFlags(m_ConnectFlag);
ptrSoeEventDlg = new SoeEventDlg((int)E_ACTIVE_WINDOW_FES_SOE_EVENT,this);
ptrSoeEventDlg->SetConnectFlags(m_ConnectFlag);
ptrSoeMemoryDlg = new SoeMemorydlg((int)E_ACTIVE_WINDOW_FES_SOE_MEMORY,this);
ptrSoeMemoryDlg->SetConnectFlags(m_ConnectFlag);
}
void CFesEvent::initSignalAndSlot()
{
connect(ui->tabWidget,&QTabWidget::currentChanged,this,&CFesEvent::setActiveWindow);
}
void CFesEvent::initView()
{
QGridLayout *gridLayout = new QGridLayout(ui->tab);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrSoeEventDlg, 0, 0, 1, 1);
gridLayout = new QGridLayout(ui->tab_2);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrChanEventDlg, 0, 0, 1, 1);
gridLayout = new QGridLayout(ui->tab_3);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrSoeMemoryDlg, 0, 0, 1, 1);
}
void CFesEvent::setActiveWindow(int current)
{
switch (current) {
case 0:
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES_SOE_EVENT);
ptrSoeEventDlg->OnStartRefreshData();
break;
case 1:
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES_CHAN_EVENT);
ptrChanEventDlg->OnStartRefreshData();
break;
case 2:
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES_SOE_MEMORY);
ptrSoeMemoryDlg->OnRefreshData();
break;
default:
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES);
break;
}
}
void CFesEvent::OnNetConnect()
{
m_ConnectFlag =CN_CommConnect;
if(ptrChanEventDlg!=NULL)
ptrChanEventDlg->SetConnectFlags(m_ConnectFlag);
if(ptrSoeEventDlg!=NULL)
ptrSoeEventDlg->SetConnectFlags(m_ConnectFlag);
if(ptrSoeMemoryDlg!=NULL)
ptrSoeMemoryDlg->SetConnectFlags(m_ConnectFlag);
}
void CFesEvent::OnNetDisConnect()
{
m_ConnectFlag =CN_CommDisconnect;
if(ptrChanEventDlg!=NULL)
ptrChanEventDlg->SetConnectFlags(m_ConnectFlag);
if(ptrSoeEventDlg!=NULL)
ptrSoeEventDlg->SetConnectFlags(m_ConnectFlag);
if(ptrSoeMemoryDlg!=NULL)
ptrSoeMemoryDlg->SetConnectFlags(m_ConnectFlag);
}

View File

@ -0,0 +1,42 @@
#ifndef CFESEVENT_H
#define CFESEVENT_H
#include <QWidget>
#include "chaneventdlg.h"
#include "soeeventdlg.h"
#include "soememorydlg.h"
namespace Ui {
class CFesEvent;
}
class CFesEvent : public QWidget
{
Q_OBJECT
public:
explicit CFesEvent(QWidget *parent = 0);
~CFesEvent();
void Init(bool isConnected);
public slots:
void slotActiveWindow();
private:
void initVariable();
void initSignalAndSlot();
void initView();
private slots:
void setActiveWindow(int current);
void OnNetConnect();
void OnNetDisConnect();
public:
ChanEventDlg * ptrChanEventDlg;
SoeEventDlg * ptrSoeEventDlg;
SoeMemorydlg * ptrSoeMemoryDlg;
private:
Ui::CFesEvent *ui;
int m_ConnectFlag; //连接成功标志
};
#endif // CFESEVENT_H

View File

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CFesEvent</class>
<widget class="QWidget" name="CFesEvent">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>684</width>
<height>298</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>SOE事件</string>
</attribute>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>通道事件</string>
</attribute>
</widget>
<widget class="QWidget" name="tab_3">
<attribute name="title">
<string>SOE内存</string>
</attribute>
</widget>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,224 @@
#include "CFesForwardData.h"
#include "ui_CFesForwardData.h"
#include "CActiveWindow.h"
CFesForwardData::CFesForwardData(QWidget *parent) :
QWidget(parent),
ui(new Ui::CFesForwardData),
ptrFwAiMonDlg(Q_NULLPTR),
ptrFwDiMonDlg(Q_NULLPTR),
ptrFwDDiMonDlg(Q_NULLPTR),
ptrFwAccMonDlg(Q_NULLPTR),
ptrFwMiMonDlg(Q_NULLPTR)
{
ui->setupUi(this);
}
CFesForwardData::~CFesForwardData()
{
if(ptrFwAiMonDlg != NULL)
{
delete ptrFwAiMonDlg;
}
if(ptrFwDiMonDlg != NULL)
{
delete ptrFwDiMonDlg;
}
if(ptrFwDDiMonDlg != NULL)
{
delete ptrFwDDiMonDlg;
}
if(ptrFwAccMonDlg != NULL)
{
delete ptrFwAccMonDlg;
}
if(ptrFwMiMonDlg != NULL)
{
delete ptrFwMiMonDlg;
}
delete ui;
}
void CFesForwardData::Init(bool isConnected)
{
if(isConnected)
{
m_ConnectFlag = CN_CommConnect;
}else
{
m_ConnectFlag = CN_CommDisconnect;
}
initVariable();
initSignalAndSlot();
initView();
}
void CFesForwardData::slotActiveWindow()
{
setActiveWindow(ui->tabWidget->currentIndex());
}
void CFesForwardData::initVariable()
{
ptrFwAiMonDlg = new FwAiMonDlg((int)E_ACTIVE_WINDOW_FES_AI_FARWARD,this);
ptrFwAiMonDlg->SetConnectFlags(m_ConnectFlag);
ptrFwDiMonDlg = new FwDiMonDlg((int)E_ACTIVE_WINDOW_FES_DI_FARWARD,this);
ptrFwDiMonDlg->SetConnectFlags(m_ConnectFlag);
ptrFwDDiMonDlg = new FwDDiMonDlg((int)E_ACTIVE_WINDOW_FES_DDI_FARWARD,this);
ptrFwDDiMonDlg->SetConnectFlags(m_ConnectFlag);
ptrFwAccMonDlg = new FwAccMonDlg((int)E_ACTIVE_WINDOW_FES_PI_FARWARD,this);
ptrFwAccMonDlg->SetConnectFlags(m_ConnectFlag);
ptrFwMiMonDlg = new FwMiMonDlg((int)E_ACTIVE_WINDOW_FES_MI_FARWARD,this);
ptrFwMiMonDlg->SetConnectFlags(m_ConnectFlag);
}
void CFesForwardData::initSignalAndSlot()
{
connect(ui->tabWidget,&QTabWidget::currentChanged,this,&CFesForwardData::setActiveWindow);
}
void CFesForwardData::initView()
{
QGridLayout *gridLayout = new QGridLayout(ui->tab);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrFwAiMonDlg, 0, 0, 1, 1);
gridLayout = new QGridLayout(ui->tab_2);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrFwDiMonDlg, 0, 0, 1, 1);
gridLayout = new QGridLayout(ui->tab_3);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrFwDDiMonDlg, 0, 0, 1, 1);
gridLayout = new QGridLayout(ui->tab_4);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrFwAccMonDlg, 0, 0, 1, 1);
gridLayout = new QGridLayout(ui->tab_5);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrFwMiMonDlg, 0, 0, 1, 1);
}
void CFesForwardData::setActiveWindow(int current)
{
switch (current) {
case 0:
if(ptrFwAiMonDlg == Q_NULLPTR)
{
ptrFwAiMonDlg = new FwAiMonDlg((int)E_ACTIVE_WINDOW_FES_AI_FARWARD,this);
ptrFwAiMonDlg->SetConnectFlags(m_ConnectFlag);
QGridLayout *gridLayout = new QGridLayout(ui->tab);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrFwAiMonDlg, 0, 0, 1, 1);
}
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES_AI_FARWARD);
ptrFwAiMonDlg->OnRTURefresh();
break;
case 1:
if(ptrFwDiMonDlg == Q_NULLPTR)
{
ptrFwDiMonDlg = new FwDiMonDlg((int)E_ACTIVE_WINDOW_FES_DI_FARWARD,this);
ptrFwDiMonDlg->SetConnectFlags(m_ConnectFlag);
QGridLayout *gridLayout = new QGridLayout(ui->tab_2);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrFwDiMonDlg, 0, 0, 1, 1);
}
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES_DI_FARWARD);
ptrFwDiMonDlg->OnRTURefresh();
break;
case 2:
if(ptrFwDDiMonDlg == Q_NULLPTR)
{
ptrFwDDiMonDlg = new FwDDiMonDlg((int)E_ACTIVE_WINDOW_FES_DDI_FARWARD,this);
ptrFwDDiMonDlg->SetConnectFlags(m_ConnectFlag);
QGridLayout *gridLayout = new QGridLayout(ui->tab_3);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrFwDDiMonDlg, 0, 0, 1, 1);
}
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES_DDI_FARWARD);
ptrFwDDiMonDlg->OnRTURefresh();
break;
case 3:
if(ptrFwAccMonDlg == Q_NULLPTR)
{
ptrFwAccMonDlg = new FwAccMonDlg((int)E_ACTIVE_WINDOW_FES_PI_FARWARD,this);
ptrFwAccMonDlg->SetConnectFlags(m_ConnectFlag);
QGridLayout *gridLayout = new QGridLayout(ui->tab_4);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrFwAccMonDlg, 0, 0, 1, 1);
}
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES_PI_FARWARD);
ptrFwAccMonDlg->OnRTURefresh();
break;
case 4:
if(ptrFwMiMonDlg == Q_NULLPTR)
{
ptrFwMiMonDlg = new FwMiMonDlg((int)E_ACTIVE_WINDOW_FES_MI_FARWARD,this);
ptrFwMiMonDlg->SetConnectFlags(m_ConnectFlag);
QGridLayout *gridLayout = new QGridLayout(ui->tab_5);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrFwMiMonDlg, 0, 0, 1, 1);
}
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES_MI_FARWARD);
ptrFwMiMonDlg->OnRTURefresh();
break;
default:
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES);
break;
}
}
void CFesForwardData::OnNetConnect()
{
m_ConnectFlag =CN_CommConnect;
if(ptrFwAiMonDlg!=NULL)
ptrFwAiMonDlg->SetConnectFlags(m_ConnectFlag);
if(ptrFwDiMonDlg!=NULL)
ptrFwDiMonDlg->SetConnectFlags(m_ConnectFlag);
if(ptrFwDDiMonDlg!=NULL)
ptrFwDDiMonDlg->SetConnectFlags(m_ConnectFlag);
if(ptrFwAccMonDlg!=NULL)
ptrFwAccMonDlg->SetConnectFlags(m_ConnectFlag);
if(ptrFwMiMonDlg!=NULL)
ptrFwMiMonDlg->SetConnectFlags(m_ConnectFlag);
}
void CFesForwardData::OnNetDisConnect()
{
m_ConnectFlag =CN_CommDisconnect;
if(ptrFwAiMonDlg!=NULL)
ptrFwAiMonDlg->SetConnectFlags(m_ConnectFlag);
if(ptrFwDiMonDlg!=NULL)
ptrFwDiMonDlg->SetConnectFlags(m_ConnectFlag);
if(ptrFwDDiMonDlg!=NULL)
ptrFwDDiMonDlg->SetConnectFlags(m_ConnectFlag);
if(ptrFwAccMonDlg!=NULL)
ptrFwAccMonDlg->SetConnectFlags(m_ConnectFlag);
if(ptrFwMiMonDlg!=NULL)
ptrFwMiMonDlg->SetConnectFlags(m_ConnectFlag);
}

View File

@ -0,0 +1,51 @@
#ifndef CFESFORWARDDATA_H
#define CFESFORWARDDATA_H
#include <QWidget>
#include "fwaimondlg.h"
#include "fwddimondlg.h"
#include "fwdimondlg.h"
#include "fwaccmondlg.h"
#include "fwmimondlg.h"
namespace Ui {
class CFesForwardData;
}
class CFesForwardData : public QWidget
{
Q_OBJECT
public:
explicit CFesForwardData(QWidget *parent = 0);
~CFesForwardData();
void Init(bool isConnected);
public slots:
void slotActiveWindow();
private:
void initVariable();
void initSignalAndSlot();
void initView();
private slots:
void setActiveWindow(int current);
void OnNetConnect();
void OnNetDisConnect();
private:
Ui::CFesForwardData *ui;
int m_ConnectFlag; //连接成功标志
public:
FwAiMonDlg *ptrFwAiMonDlg;
FwDiMonDlg *ptrFwDiMonDlg;
FwDDiMonDlg *ptrFwDDiMonDlg;
FwAccMonDlg *ptrFwAccMonDlg;
FwMiMonDlg *ptrFwMiMonDlg;
};
#endif // CFESFORWARDDATA_H

View File

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CFesForwardData</class>
<widget class="QWidget" name="CFesForwardData">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>633</width>
<height>279</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>模拟量</string>
</attribute>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>单点数字量</string>
</attribute>
</widget>
<widget class="QWidget" name="tab_3">
<attribute name="title">
<string>双点数字量</string>
</attribute>
</widget>
<widget class="QWidget" name="tab_4">
<attribute name="title">
<string>累积量</string>
</attribute>
</widget>
<widget class="QWidget" name="tab_5">
<attribute name="title">
<string>混合量</string>
</attribute>
</widget>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,108 @@
#include "CFesParamShow.h"
#include "ui_CFesParamShow.h"
#include "CActiveWindow.h"
CFesParamShow::CFesParamShow(QWidget *parent) :
QWidget(parent),
ui(new Ui::CFesParamShow)
{
ui->setupUi(this);
}
CFesParamShow::~CFesParamShow()
{
if(ptrChanParamDlg != NULL)
{
delete ptrChanParamDlg;
}
if(ptrRtuParamDlg != NULL)
{
delete ptrRtuParamDlg;
}
delete ui;
}
void CFesParamShow::Init(bool isConnected)
{
if(isConnected)
{
m_ConnectFlag = CN_CommConnect;
}else
{
m_ConnectFlag = CN_CommDisconnect;
}
initVariable();
initSignalAndSlot();
initView();
}
void CFesParamShow::slotActiveWindow()
{
setActiveWindow(ui->tabWidget->currentIndex());
}
void CFesParamShow::initVariable()
{
ptrChanParamDlg = new ChanParamDlg((int)E_ACTIVE_WINDOW_FES_CHAN_PARAM,this);
ptrChanParamDlg->SetConnectFlags(m_ConnectFlag);
ptrRtuParamDlg = new RtuParamDlg((int)E_ACTIVE_WINDOW_FES_RTU_PARAM,this);
ptrRtuParamDlg->SetConnectFlags(m_ConnectFlag);
}
void CFesParamShow::initSignalAndSlot()
{
connect(ui->tabWidget,&QTabWidget::currentChanged,this,&CFesParamShow::setActiveWindow);
}
void CFesParamShow::initView()
{
QGridLayout *gridLayout = new QGridLayout(ui->tab);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrChanParamDlg, 0, 0, 1, 1);
gridLayout = new QGridLayout(ui->tab_2);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(ptrRtuParamDlg, 0, 0, 1, 1);
}
void CFesParamShow::setActiveWindow(int current)
{
qDebug()<<"setActiveWindow:"<<current;
switch (current) {
case 0:
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES_CHAN_PARAM);
ptrChanParamDlg->OnRefresh();
break;
case 1:
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES_RTU_PARAM);
ptrRtuParamDlg->OnRefresh();
break;
default:
CActiveWindow::instance()->setActiveWindow((int)E_ACTIVE_WINDOW_FES);
break;
}
}
void CFesParamShow::OnNetConnect()
{
m_ConnectFlag =CN_CommConnect;
if(ptrChanParamDlg!=NULL)
ptrChanParamDlg->SetConnectFlags(m_ConnectFlag);
if(ptrRtuParamDlg!=NULL)
ptrRtuParamDlg->SetConnectFlags(m_ConnectFlag);
}
void CFesParamShow::OnNetDisConnect()
{
m_ConnectFlag =CN_CommDisconnect;
if(ptrChanParamDlg!=NULL)
ptrChanParamDlg->SetConnectFlags(m_ConnectFlag);
if(ptrRtuParamDlg!=NULL)
ptrRtuParamDlg->SetConnectFlags(m_ConnectFlag);
}

View File

@ -0,0 +1,42 @@
#ifndef CFESPARAMSHOW_H
#define CFESPARAMSHOW_H
#include <QWidget>
#include "chanparamdlg.h"
#include "rtuparamdlg.h"
namespace Ui {
class CFesParamShow;
}
class CFesParamShow : public QWidget
{
Q_OBJECT
public:
explicit CFesParamShow(QWidget *parent = 0);
~CFesParamShow();
void Init(bool isConnected);
public slots:
void slotActiveWindow();
private:
void initVariable();
void initSignalAndSlot();
void initView();
private slots:
void setActiveWindow(int current);
void OnNetConnect();
void OnNetDisConnect();
public:
ChanParamDlg *ptrChanParamDlg;
RtuParamDlg *ptrRtuParamDlg;
private:
Ui::CFesParamShow *ui;
int m_ConnectFlag; //连接成功标志
};
#endif // CFESPARAMSHOW_H

View File

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CFesParamShow</class>
<widget class="QWidget" name="CFesParamShow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>686</width>
<height>288</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>6</number>
</property>
<item row="0" column="0">
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>通道参数</string>
</attribute>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>RTU参数</string>
</attribute>
</widget>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,581 @@
#include "CFessim.h"
#include "ui_CFessim.h"
#include "pub_widget/MessageBox.h"
#include "CActiveWindow.h"
#include "chanmondlg.h"
#include "CDataMng.h"
#define CN_CFG_SIMIP "FesSimIP.conf"
CFessim::CFessim(QWidget *parent) :
QWidget(parent),
ui(new Ui::CFessim)
{
ui->setupUi(this);
m_pFesParamShow =NULL;
m_pFesData =NULL;
m_pFesEvent =NULL;
m_pFesDataSim =NULL;
m_pFesCtrlSim =NULL;
m_pFesForwardData =NULL;
//m_pFesChanData =NULL;
m_pChanMonDlg = NULL;
m_isConnect = false;
ui->pushButton_connect->setText(tr("连接"));
ui->label_netStatus->setText(tr("通讯断开"));
ui->label_netStatus->setStyleSheet("QLabel{color:red}");
ui->comboBox_app->setView(new QListView());
ui->listWidget->setCurrentRow(0);
qRegisterMetaType<std::string>("std::string&");
qRegisterMetaType<std::string>("std::string");
ui->iec61850_tool->hide();
}
CFessim::~CFessim()
{
stopThread();
delete ui;
}
void CFessim::Init()
{
initVariable();
initView();
initSignalAndSlot();
}
bool CFessim::isConnect()
{
return m_isConnect;
}
void CFessim::brushSomeData()
{
slot_listClick(ui->listWidget->currentIndex());
}
int CFessim::getCurrentIndex()
{
return ui->listWidget->currentIndex().row();
}
void CFessim::initVariable()
{
m_appVec = CDataMng::instance()->getAppInfo();
m_pFesParamShow = new CFesParamShow;
startThread();
}
void CFessim::initSignalAndSlot()
{
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_connected,this,&CFessim::ConnectOk);
connect(&m_objMbCliMngThread,SIGNAL(signal_disconnected()),this,SLOT(DisConnectOk()));
connect(ui->comboBox_app,SIGNAL(currentIndexChanged(const QString &)),this,SLOT(slot_modifyPort(const QString &)));
connect(ui->pushButton_connect,&QPushButton::clicked,this,&CFessim::slot_connect);
connect(ui->stackedWidget,&QStackedWidget::currentChanged,this,&CFessim::setActiveWindow);
connect(ui->listWidget,&QListWidget::clicked,this,&CFessim::slot_listClick);
connect(ui->fes_chan_data,&QPushButton::clicked,this,&CFessim::slotChanData);
// connect(ui->iec61850_tool,&QPushButton::clicked,this,&CFessim::slotOpen61850Tool);
connect(CDataMng::instance(),&CDataMng::signal_sendMsgToServer,&m_objMbCliMngThread,&CMbClientMngThread::slot_sendMsg);
}
void CFessim::initFesParamSS()
{
connect(&m_objMbCliMngThread,SIGNAL(signal_connected()),m_pFesParamShow,SLOT(OnNetConnect()));
connect(&m_objMbCliMngThread,SIGNAL(signal_disconnected()),m_pFesParamShow,SLOT(OnNetDisConnect()));
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_chanParamResp,CDataMng::instance(),&CDataMng::signal_chanParamResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_rtuParamResp,CDataMng::instance(),&CDataMng::signal_rtuParamResp);
connect(this,&CFessim::sigFesParamShowActiveWindow,m_pFesParamShow,&CFesParamShow::slotActiveWindow);
}
void CFessim::initFesDataSS()
{
connect(&m_objMbCliMngThread,SIGNAL(signal_connected()),m_pFesData,SLOT(OnNetConnect()));
connect(&m_objMbCliMngThread,SIGNAL(signal_disconnected()),m_pFesData,SLOT(OnNetDisConnect()));
//模拟量
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_aiRtuInfoResp,CDataMng::instance(),&CDataMng::signal_aiRtuInfoResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_aiParamResp,CDataMng::instance(),&CDataMng::signal_aiParamResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_aiValueResp,CDataMng::instance(),&CDataMng::signal_aiValueResp);
//数字量
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_diRtuInfoResp,CDataMng::instance(),&CDataMng::signal_diRtuInfoResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_diParamResp,CDataMng::instance(),&CDataMng::signal_diParamResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_diValueResp,CDataMng::instance(),&CDataMng::signal_diValueResp);
//累积量
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_accRtuInfoResp,CDataMng::instance(),&CDataMng::signal_accRtuInfoResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_accParamResp,CDataMng::instance(),&CDataMng::signal_accParamResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_accValueResp,CDataMng::instance(),&CDataMng::signal_accValueResp);
//混合量
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_miRtuInfoResp,CDataMng::instance(),&CDataMng::signal_miRtuInfoResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_miParamResp,CDataMng::instance(),&CDataMng::signal_miParamResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_miValueResp,CDataMng::instance(),&CDataMng::signal_miValueResp);
connect(this,&CFessim::sigFesDataActiveWindow,m_pFesData,&CFesData::slotActiveWindow);
}
void CFessim::initFesEventSS()
{
connect(&m_objMbCliMngThread,SIGNAL(signal_connected()),m_pFesEvent,SLOT(OnNetConnect()));
connect(&m_objMbCliMngThread,SIGNAL(signal_disconnected()),m_pFesEvent,SLOT(OnNetDisConnect()));
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_soeEventResp,CDataMng::instance(),&CDataMng::signal_soeEventResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_chanEventResp,CDataMng::instance(),&CDataMng::signal_chanEventResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_soeMemEventResp,CDataMng::instance(),&CDataMng::signal_soeMemEventResp);
connect(this,&CFessim::sigFesEventActiveWindow,m_pFesEvent,&CFesEvent::slotActiveWindow);
}
void CFessim::initFesDataSimSS()
{
connect(&m_objMbCliMngThread,SIGNAL(signal_connected()),m_pFesDataSim,SLOT(OnNetConnect()));
connect(&m_objMbCliMngThread,SIGNAL(signal_disconnected()),m_pFesDataSim,SLOT(OnNetDisConnect()));
//模拟量
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simAiRtuInfoResp,CDataMng::instance(),&CDataMng::signal_simAiRtuInfoResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simAiParamResp,CDataMng::instance(),&CDataMng::signal_simAiParamResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simAiValueResp,CDataMng::instance(),&CDataMng::signal_simAiValueResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simAiStartSimResp,CDataMng::instance(),&CDataMng::signal_simAiStartSimResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simAiStopSimResp,CDataMng::instance(),&CDataMng::signal_simAiStopSimResp);
//数字量
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simDiRtuInfoResp,CDataMng::instance(),&CDataMng::signal_simDiRtuInfoResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simDiParamResp,CDataMng::instance(),&CDataMng::signal_simDiParamResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simDiValueResp,CDataMng::instance(),&CDataMng::signal_simDiValueResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simDiStartSimResp,CDataMng::instance(),&CDataMng::signal_simDiStartSimResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simDiStopSimResp,CDataMng::instance(),&CDataMng::signal_simDiStopSimResp);
//混合量
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simMiRtuInfoResp,CDataMng::instance(),&CDataMng::signal_simMiRtuInfoResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simMiParamResp,CDataMng::instance(),&CDataMng::signal_simMiParamResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simMiValueResp,CDataMng::instance(),&CDataMng::signal_simMiValueResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simMiStartSimResp,CDataMng::instance(),&CDataMng::signal_simMiStartSimResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simMiStopSimResp,CDataMng::instance(),&CDataMng::signal_simMiStopSimResp);
//累计量
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simAccRtuInfoResp,CDataMng::instance(),&CDataMng::signal_simAccRtuInfoResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simAccParamResp,CDataMng::instance(),&CDataMng::signal_simAccParamResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simAccValueResp,CDataMng::instance(),&CDataMng::signal_simAccValueResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simAccStartSimResp,CDataMng::instance(),&CDataMng::signal_simAccStartSimResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simAccStopSimResp,CDataMng::instance(),&CDataMng::signal_simAccStopSimResp);
//事件
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simEventRtuInfoResp,CDataMng::instance(),&CDataMng::signal_simEventRtuInfoResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simEventDiParamResp,CDataMng::instance(),&CDataMng::signal_simEventDiParamResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simEventCreateResp,CDataMng::instance(),&CDataMng::signal_simEventCreateResp);
connect(this,&CFessim::sigFesDataSimActiveWindow,m_pFesDataSim,&CFesDataSim::slotActiveWindow);
}
void CFessim::initFesCtrlSimSS()
{
connect(&m_objMbCliMngThread,SIGNAL(signal_connected()),m_pFesCtrlSim,SLOT(OnNetConnect()));
connect(&m_objMbCliMngThread,SIGNAL(signal_disconnected()),m_pFesCtrlSim,SLOT(OnNetDisConnect()));
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simAoRtuInfoResp,CDataMng::instance(),&CDataMng::signal_simAoRtuInfoResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simAoParamResp,CDataMng::instance(),&CDataMng::signal_simAoParamResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simAoControlResp,CDataMng::instance(),&CDataMng::signal_simAoControlResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simDoRtuInfoResp,CDataMng::instance(),&CDataMng::signal_simDoRtuInfoResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simDoParamResp,CDataMng::instance(),&CDataMng::signal_simDoParamResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simDoControlResp,CDataMng::instance(),&CDataMng::signal_simDoControlResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simMoRtuInfoResp,CDataMng::instance(),&CDataMng::signal_simMoRtuInfoResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simMoParamResp,CDataMng::instance(),&CDataMng::signal_simMoParamResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simMoControlResp,CDataMng::instance(),&CDataMng::signal_simMoControlResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simDefCmdRtuInfoResp,CDataMng::instance(),&CDataMng::signal_simDefCmdRtuInfoResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_simDefCmdControlResp,CDataMng::instance(),&CDataMng::signal_simDefCmdControlResp);
connect(this,&CFessim::sigFesCtrlSimActiveWindow,m_pFesCtrlSim,&CFesCtrlSim::slotActiveWindow);
}
void CFessim::initFesForwDataSS()
{
connect(&m_objMbCliMngThread,SIGNAL(signal_connected()),m_pFesForwardData,SLOT(OnNetConnect()));
connect(&m_objMbCliMngThread,SIGNAL(signal_disconnected()),m_pFesForwardData,SLOT(OnNetDisConnect()));
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_fwAiRtuInfoResp,CDataMng::instance(),&CDataMng::signal_fwAiRtuInfoResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_fwAiParamResp,CDataMng::instance(),&CDataMng::signal_fwAiParamResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_fwAiValueResp,CDataMng::instance(),&CDataMng::signal_fwAiValueResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_fwDiRtuInfoResp,CDataMng::instance(),&CDataMng::signal_fwDiRtuInfoResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_fwDiParamResp,CDataMng::instance(),&CDataMng::signal_fwDiParamResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_fwDiValueResp,CDataMng::instance(),&CDataMng::signal_fwDiValueResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_fwDDiRtuInfoResp,CDataMng::instance(),&CDataMng::signal_fwDDiRtuInfoResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_fwDDiParamResp,CDataMng::instance(),&CDataMng::signal_fwDDiParamResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_fwDDiValueResp,CDataMng::instance(),&CDataMng::signal_fwDDiValueResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_fwMiRtuInfoResp,CDataMng::instance(),&CDataMng::signal_fwMiRtuInfoResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_fwMiParamResp,CDataMng::instance(),&CDataMng::signal_fwMiParamResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_fwMiValueResp,CDataMng::instance(),&CDataMng::signal_fwMiValueResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_fwAccRtuInfoResp,CDataMng::instance(),&CDataMng::signal_fwAccRtuInfoResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_fwAccParamResp,CDataMng::instance(),&CDataMng::signal_fwAccParamResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_fwAccValueResp,CDataMng::instance(),&CDataMng::signal_fwAccValueResp);
connect(this,&CFessim::sigFesForwardActiveWindow,m_pFesForwardData,&CFesForwardData::slotActiveWindow);
}
void CFessim::initFesChanDataSS()
{
// connect(&m_TcpClient,SIGNAL(NetConnected()),m_pFesChanData,SLOT(OnNetConnect()));
// connect(&m_TcpClient,SIGNAL(NetDisConnected()),m_pFesChanData,SLOT(OnNetDisConnect()));
// connect(m_pFesChanData->ptrChanMonDlg,SIGNAL(SendCmdSig(int,QByteArray,int )),ptrProtocolThread,SLOT(OnRecvCmd(int,QByteArray,int )));
// connect(ptrProtocolThread,SIGNAL(ChanMonStartSig(int,QByteArray,int )),m_pFesChanData->ptrChanMonDlg,SLOT(OnRecvChanMonStartResp(int,QByteArray,int )));
// connect(ptrProtocolThread,SIGNAL(ChanMonStopSig(int,QByteArray,int )),m_pFesChanData->ptrChanMonDlg,SLOT(OnRecvChanMonStopResp(int,QByteArray,int )));
// connect(ptrProtocolThread,SIGNAL(ChanClearSig(int,QByteArray,int )),m_pFesChanData->ptrChanMonDlg,SLOT(OnRecvChanClearResp(int,QByteArray,int )));
// connect(this,&CFessim::sigFesChanDataActiveWindow,m_pFesChanData,&CFesChanData::slotActiveWindow);
}
void CFessim::initView()
{
initLocalView();
addFesParam();
initFesParamSS();
}
void CFessim::initLocalView()
{
if(ui->comboBox_app->count()==0)
{
if(m_appVec.size()<=0)
{
ui->comboBox_app->addItem("AppName");
ui->lineEdit_port->setText(QString::number(CN_FesSimServerBasePortNo + 4));
ui->lineEdit_ip->setText("127.0.0.1");
}
else
{
ui->lineEdit_port->setText(QString::number(CN_FesSimServerBasePortNo + m_appVec[0].appId));
int i;
for(i=0;i<m_appVec.size();i++)
{
ui->comboBox_app->addItem(m_appVec[i].appName);
}
}
}
QFile file(CN_CFG_SIMIP);
if(file.exists())
{
if(file.open(QFile::ReadOnly | QFile::Text))
{
m_IpStr = file.readAll();
file.close();
}
}
else
{
if(m_IpStr.isEmpty())
m_IpStr = "127.0.0.1";
std::string tempStr = m_IpStr.toStdString();
if(file.open(QFile::WriteOnly | QFile::Append))
{
file.write(tempStr.c_str(),tempStr.length());
file.close();
}
}
ui->lineEdit_ip->setText(m_IpStr);
}
void CFessim::addFesParam()
{
QGridLayout *gridLayout = new QGridLayout(ui->frame_fesParam);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(m_pFesParamShow, 0, 0, 1, 1);
m_pFesParamShow->Init(m_isConnect);
}
void CFessim::addFesData()
{
QGridLayout *gridLayout = new QGridLayout(ui->frame_fesData);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(m_pFesData, 0, 0, 1, 1);
m_pFesData->Init(m_isConnect);
}
void CFessim::addFesEvent()
{
QGridLayout *gridLayout = new QGridLayout(ui->frame_fesEvent);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(m_pFesEvent, 0, 0, 1, 1);
m_pFesEvent->Init(m_isConnect);
}
void CFessim::addFesDataSim()
{
QGridLayout *gridLayout = new QGridLayout(ui->frame_fesDataSim);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(m_pFesDataSim, 0, 0, 1, 1);
m_pFesDataSim->Init(m_isConnect);
}
void CFessim::addFesCtrlSim()
{
QGridLayout *gridLayout = new QGridLayout(ui->frame_fesCtrlSim);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(m_pFesCtrlSim, 0, 0, 1, 1);
m_pFesCtrlSim->Init(m_isConnect);
}
void CFessim::addFesForwardData()
{
QGridLayout *gridLayout = new QGridLayout(ui->frame_fesForwardData);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(m_pFesForwardData, 0, 0, 1, 1);
m_pFesForwardData->Init(m_isConnect);
}
void CFessim::addFesChanData()
{
// QGridLayout *gridLayout = new QGridLayout(ui->frame_fesChanData);
// gridLayout->setSpacing(6);
// gridLayout->setContentsMargins(0, 0, 0, 0);
// gridLayout->addWidget(m_pFesChanData, 0, 0, 1, 1);
// m_pFesChanData->Init(m_isConnect);
}
void CFessim::setEnableView(bool enable)
{
ui->comboBox_app->setEnabled(enable);
ui->lineEdit_port->setEnabled(enable);
ui->lineEdit_ip->setEnabled(enable);
}
void CFessim::startThread()
{
}
void CFessim::stopThread()
{
m_objMbCliMngThread.disconnectToServer();
}
void CFessim::slot_modifyPort(const QString &text)
{
for(int i=0;i<m_appVec.size();i++)
{
if(text == m_appVec[i].appName)
{
ui->lineEdit_port->setText(QString::number(CN_FesSimServerBasePortNo + m_appVec[i].appId));
break;
}
}
}
bool CFessim::slot_connect()
{
if(m_isConnect)
{
m_objMbCliMngThread.disconnectToServer();
return true;
}
//上面是断开连接操作,下面是连接操作
bool ok;
int nPort = ui->lineEdit_port->text().toInt(&ok);
if(!ok)
{
N_MessageBox::warning(this,tr("警告"),tr("网络端口错误,无法连接网络"));
return false;
}
m_IpStr = ui->lineEdit_ip->text();
if(!m_objMbCliMngThread.connectToServer(m_IpStr,nPort))
{
return false;
}
QFile file(CN_CFG_SIMIP);
if(file.exists())
{
std::string tempStr = m_IpStr.toStdString();
if(file.open(QFile::WriteOnly | QFile::Truncate))
{
file.write(tempStr.c_str(),tempStr.length());
file.close();
}
}
return true;
}
void CFessim::ConnectOk()
{
ui->stackedWidget->currentIndex();
m_isConnect = true;
ui->pushButton_connect->setText(tr("断开"));
ui->label_netStatus->setText(tr("通讯连接"));
ui->label_netStatus->setStyleSheet("QLabel{color:green}");
setEnableView(false);
}
void CFessim::DisConnectOk()
{
if(m_objMbCliMngThread.isRunning())
{
m_objMbCliMngThread.requestInterruption();
m_objMbCliMngThread.quit();
m_objMbCliMngThread.wait();
}
m_isConnect = false;
ui->pushButton_connect->setText(tr("连接"));
ui->label_netStatus->setText(tr("通讯断开"));
ui->label_netStatus->setStyleSheet("QLabel{color:red}");
setEnableView(true);
}
void CFessim::setActiveWindow(int current)
{
switch (current) {
case 0:
{
if(m_pFesParamShow == NULL)
{
m_pFesParamShow = new CFesParamShow;
addFesParam();
initFesParamSS();
}
emit sigFesParamShowActiveWindow();
break;
}
case 1:
{
if(m_pFesData == NULL)
{
m_pFesData = new CFesData;
addFesData();
initFesDataSS();
}
emit sigFesDataActiveWindow();
break;
}
case 2:
{
if(m_pFesDataSim == NULL)
{
m_pFesDataSim = new CFesDataSim;
addFesDataSim();
initFesDataSimSS();
}
emit sigFesDataSimActiveWindow();
break;
}
case 3:
{
if(m_pFesCtrlSim == NULL)
{
m_pFesCtrlSim = new CFesCtrlSim;
addFesCtrlSim();
initFesCtrlSimSS();
}
emit sigFesCtrlSimActiveWindow();
break;
}
case 4:
{
if(m_pFesEvent == NULL)
{
m_pFesEvent = new CFesEvent;
addFesEvent();
initFesEventSS();
}
emit sigFesEventActiveWindow();
break;
}
case 5:
{
if(m_pFesForwardData == NULL)
{
m_pFesForwardData = new CFesForwardData;
addFesForwardData();
initFesForwDataSS();
}
emit sigFesForwardActiveWindow();
break;
}
// case 6:
// {
// if(m_pFesChanData == NULL)
// {
// m_pFesChanData = new CFesChanData;
// addFesChanData();
// initFesChanDataSS();
// }
// emit sigFesChanDataActiveWindow();
// break;
// }
default:
break;
}
}
void CFessim::slot_listClick(const QModelIndex &index)
{
if(!index.isValid())
{
return ;
}else
{
ui->stackedWidget->setCurrentIndex(index.row());
//setActiveWindow(5);
}
}
void CFessim::slotChanData()
{
if(m_pChanMonDlg != NULL)
{
m_pChanMonDlg->show();
}
else if(m_pChanMonDlg == NULL)
{
m_pChanMonDlg = new ChanMonDlg((int)E_ACTIVE_WINDOW_FES_CHAN_DATA,this);
if(m_pChanMonDlg==NULL)
{
return;
}
connect(m_pChanMonDlg,&ChanMonDlg::signal_sendMsg,&m_objMbCliMngThread,&CMbClientMngThread::slot_sendMsg);
m_pChanMonDlg->SetConnectFlags(m_isConnect); //放在关联signal_sendMsg信号后
connect(&m_objMbCliMngThread,SIGNAL(signal_connected()),m_pChanMonDlg,SLOT(OnNetConnect()));
connect(&m_objMbCliMngThread,SIGNAL(signal_disconnected()),m_pChanMonDlg,SLOT(OnNetDisConnect()));
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_chanParamResp,m_pChanMonDlg,&ChanMonDlg::slot_OnRecvResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_chanMonStartResp,m_pChanMonDlg,&ChanMonDlg::slot_OnRecvResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_chanMonStopResp,m_pChanMonDlg,&ChanMonDlg::slot_OnRecvResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_chanMonClearResp,m_pChanMonDlg,&ChanMonDlg::slot_OnRecvResp);
connect(&m_objMbCliMngThread,&CMbClientMngThread::signal_chanMonInfo,m_pChanMonDlg,&ChanMonDlg::slot_OnRecvResp);
connect(m_pChanMonDlg, &ChanMonDlg::closed, [=](){ m_pChanMonDlg = Q_NULLPTR;});
m_pChanMonDlg->show();
}
}
void CFessim::slotOpen61850Tool()
{
#ifdef Q_OS_WIN
QProcess p;
p.startDetached("clientScout.exe");
#else
QProcess p;
p.startDetached("clientScout");
#endif
}

View File

@ -0,0 +1,110 @@
#ifndef CFESSIM_H
#define CFESSIM_H
#include <QWidget>
#include "CSystemResources.h"
#include "ComProtocolThread.h"
#include "CFesData.h"
#include "CFesParamShow.h"
#include "CFesEvent.h"
#include "CFesDataSim.h"
#include "CFesCtrlSim.h"
#include "CFesForwardData.h"
#include "CFesChanData.h"
#include "MbClientMngThread.h"
namespace Ui {
class CFessim;
}
class CFessim : public QWidget
{
Q_OBJECT
public:
explicit CFessim(QWidget *parent = 0);
~CFessim();
void Init();
void loadChan();
void loadDev();
void loadAiDesc();
void loadDiDesc();
void loadPiDesc();
void loadMiDesc();
void loadAoDesc();
void loadDoDesc();
void loadMoDesc();
bool isConnect();
void brushSomeData();
int getCurrentIndex();
signals:
void sigFesParamShowActiveWindow();
void sigFesDataActiveWindow();
void sigFesEventActiveWindow();
void sigFesDataSimActiveWindow();
void sigFesCtrlSimActiveWindow();
void sigFesForwardActiveWindow();
void sigFesChanDataActiveWindow();
private:
void initVariable();
void initSignalAndSlot();
void initFesParamSS();//SS-----信号槽
void initFesDataSS();//SS-----信号槽
void initFesEventSS();//SS-----信号槽
void initFesDataSimSS();//SS-----信号槽
void initFesCtrlSimSS();//SS-----信号槽
void initFesForwDataSS();//SS-----信号槽
void initFesChanDataSS();//SS-----信号槽
void initView();
void initLocalView();
void addFesParam();
void addFesData();
void addFesEvent();
void addFesDataSim();
void addFesCtrlSim();
void addFesForwardData();
void addFesChanData();
void setEnableView(bool enable);
void startThread();
void stopThread();
public slots:
void slot_modifyPort(const QString &text);
void ConnectOk();
void DisConnectOk();
void setActiveWindow(int current);
void slot_listClick(const QModelIndex &index);
void slotChanData();
void slotOpen61850Tool();
public slots:
bool slot_connect();
private:
Ui::CFessim *ui;
QVector<FesAppName> m_appVec;
QString m_IpStr;
bool m_isConnect;
CFesParamShow * m_pFesParamShow;
CFesData * m_pFesData;
CFesEvent * m_pFesEvent;
CFesDataSim * m_pFesDataSim;
CFesCtrlSim * m_pFesCtrlSim;
CFesForwardData * m_pFesForwardData;
//CFesChanData * m_pFesChanData;
ChanMonDlg *m_pChanMonDlg;
CMbClientMngThread m_objMbCliMngThread;
};
#endif // CFESSIM_H

View File

@ -0,0 +1,609 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CFessim</class>
<widget class="QWidget" name="CFessim">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>855</width>
<height>373</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout_8">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>9</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>1</number>
</property>
<property name="horizontalSpacing">
<number>0</number>
</property>
<property name="verticalSpacing">
<number>6</number>
</property>
<item row="1" column="0">
<widget class="QFrame" name="frame_6">
<property name="maximumSize">
<size>
<width>102</width>
<height>16777215</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout_7">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>1</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QListWidget" name="listWidget">
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
</size>
</property>
<property name="currentRow">
<number>-1</number>
</property>
<item>
<property name="text">
<string>通讯状态</string>
</property>
<property name="font">
<font>
<pointsize>9</pointsize>
</font>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</item>
<item>
<property name="text">
<string>前置数据</string>
</property>
<property name="font">
<font>
<pointsize>9</pointsize>
</font>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</item>
<item>
<property name="text">
<string>数据仿真</string>
</property>
<property name="font">
<font>
<pointsize>9</pointsize>
</font>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</item>
<item>
<property name="text">
<string>控制仿真</string>
</property>
<property name="font">
<font>
<pointsize>9</pointsize>
</font>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</item>
<item>
<property name="text">
<string>事件监视</string>
</property>
<property name="font">
<font>
<pointsize>9</pointsize>
</font>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</item>
<item>
<property name="text">
<string>转发数据</string>
</property>
<property name="font">
<font>
<pointsize>9</pointsize>
</font>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</item>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="fes_chan_data">
<property name="font">
<font>
<pointsize>9</pointsize>
</font>
</property>
<property name="text">
<string>通道报文</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QPushButton" name="iec61850_tool">
<property name="font">
<font>
<pointsize>9</pointsize>
</font>
</property>
<property name="text">
<string>61850工具</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="1">
<widget class="QStackedWidget" name="stackedWidget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="page_1">
<layout class="QGridLayout" name="gridLayout_3">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QFrame" name="frame_fesParam">
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_2">
<layout class="QGridLayout" name="gridLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QFrame" name="frame_fesData">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_3">
<layout class="QGridLayout" name="gridLayout_4">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QFrame" name="frame_fesDataSim">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_4">
<layout class="QGridLayout" name="gridLayout_5">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QFrame" name="frame_fesCtrlSim">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_5">
<layout class="QGridLayout" name="gridLayout_6">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QFrame" name="frame_fesEvent">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_6">
<layout class="QGridLayout" name="gridLayout_9">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QFrame" name="frame_fesForwardData">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_7">
<layout class="QGridLayout" name="gridLayout_10">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QFrame" name="frame_fesChanData">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QFrame" name="frame_fessimLocal">
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="verticalSpacing">
<number>0</number>
</property>
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>10</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="label">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>专业名称</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox_app">
<property name="minimumSize">
<size>
<width>100</width>
<height>23</height>
</size>
</property>
<property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToContents</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>IP地址</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_ip">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>23</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>网络端口</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_port">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>23</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_connect">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>连接/断开</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="netStatus">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>通讯状态:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_netStatus">
<property name="minimumSize">
<size>
<width>100</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CHistoryEvent</class>
<widget class="QWidget" name="CHistoryEvent">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>401</width>
<height>239</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="verticalSpacing">
<number>0</number>
</property>
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QTableView" name="tableView"/>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>查询</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_2">
<property name="text">
<string>打印</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>事件条数</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,93 @@
#include "CMyCalendar.h"
#include "ui_CMyCalendar.h"
#include <pub_logger_api/logger.h>
#include "pub_widget/MessageBox.h"
#include <QDateTime>
CMyCalendar::CMyCalendar(QWidget *parent) :
QWidget(parent),
ui(new Ui::CMyCalendar)
{
ui->setupUi(this);
connect(ui->calendarWidget,SIGNAL(clicked(QDate)),this,SLOT(slot_startTime(QDate)));
connect(ui->calendarWidget_2,SIGNAL(clicked(QDate)),this,SLOT(slot_endTime(QDate)));
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(slot_cancle()));
m_startTime = QDate::currentDate();
m_endTime = QDate::currentDate();
ui->lineEdit->setText(m_startTime.toString("yyyy-MM-dd"));
ui->lineEdit_2->setText(m_endTime.toString("yyyy-MM-dd"));
ui->lineEdit->setReadOnly(true);
ui->lineEdit_2->setReadOnly(true);
}
CMyCalendar::~CMyCalendar()
{
delete ui;
}
void CMyCalendar::setView(E_ALARM_VIEW view)
{
m_view = view;
if(m_view == E_ALARM_HIS_EVENT)
{
ui->pushButton->setEnabled(false);
}else
{
ui->pushButton->setEnabled(true);
}
}
void CMyCalendar::keyPressEvent(QKeyEvent *event)
{
if(event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return)
{
return ;
}
QWidget::keyPressEvent(event);
}
void CMyCalendar::slot_endTime(QDate date)
{
ui->lineEdit_2->setText(date.toString("yyyy-MM-dd"));
m_endTime = date;
if(m_startTime.isNull() )
{
return;
}
if(m_endTime < m_startTime)
{
return ;
}
if(m_view == E_ALARM_HIS_EVENT)
{
QTime time_1(0,0,0);
QTime time_2(23,59,59);
QDateTime startTime;
QDateTime endTime;
startTime.setDate(m_startTime);
startTime.setTime(time_1);
endTime.setDate(m_endTime);
endTime.setTime(time_2);
if((endTime.toMSecsSinceEpoch()-startTime.toMSecsSinceEpoch())/1000/3600/24 >= 90 )
{
return;
}
}
emit sig_endTimeClick(m_startTime,m_endTime);
}
void CMyCalendar::slot_startTime(QDate date)
{
m_startTime = date;
ui->lineEdit->setText(date.toString("yyyy-MM-dd"));
}
void CMyCalendar::slot_cancle()
{
if(m_view == E_ALARM_HIS_EVENT)
{
return;
}
emit sig_cancle();
}

View File

@ -0,0 +1,38 @@
#ifndef CMYCALENDAR_H
#define CMYCALENDAR_H
#include <QWidget>
#include <QDate>
#include <QKeyEvent>
#include "CEventMsgInfo.h"
namespace Ui {
class CMyCalendar;
}
class CMyCalendar : public QWidget
{
Q_OBJECT
signals:
void sig_endTimeClick(QDate startDate,QDate endDate);
void sig_startTimeClick(QDate date);
void sig_cancle();
public:
explicit CMyCalendar(QWidget *parent = 0);
~CMyCalendar();
void setView(E_ALARM_VIEW view);
protected:
void keyPressEvent(QKeyEvent *event);
public slots:
void slot_endTime(QDate date);
void slot_startTime(QDate date);
void slot_cancle();
private:
Ui::CMyCalendar *ui;
QDate m_startTime;
QDate m_endTime;
E_ALARM_VIEW m_view;
};
#endif // CMYCALENDAR_H

View File

@ -0,0 +1,119 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CMyCalendar</class>
<widget class="QWidget" name="CMyCalendar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>538</width>
<height>264</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QFrame" name="frame_event">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>0</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QLineEdit" name="lineEdit"/>
</item>
<item>
<widget class="QLabel" name="label">
<property name="minimumSize">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>至</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_2"/>
</item>
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>取消</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QCalendarWidget" name="calendarWidget"/>
</item>
<item>
<widget class="QCalendarWidget" name="calendarWidget_2"/>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,22 @@
#include "CMyCheckBox.h"
#include <QMouseEvent>
CMyCheckBox::CMyCheckBox(QString text, QWidget *parent)
:QCheckBox(text,parent)
{
}
CMyCheckBox::CMyCheckBox(QWidget *parent)
:QCheckBox(parent)
{
}
void CMyCheckBox::mouseReleaseEvent(QMouseEvent *e)
{
Q_UNUSED(e);
setChecked(!isChecked());
emit clicked(isChecked());
}

View File

@ -0,0 +1,16 @@
#ifndef MYCHECKBOX_H
#define MYCHECKBOX_H
#include <QCheckBox>
class CMyCheckBox : public QCheckBox
{
public:
CMyCheckBox(QString text,QWidget *parent = Q_NULLPTR);
CMyCheckBox(QWidget *parent = Q_NULLPTR);
protected:
void mouseReleaseEvent(QMouseEvent *e);
};
#endif // MYCHECKBOX_H

View File

@ -0,0 +1,12 @@
#include "CMyListWidget.h"
CMyListWidget::CMyListWidget(QWidget *parent):QListWidget(parent)
{
}
void CMyListWidget::showEvent(QShowEvent *event)
{
this->updateGeometries();
QListWidget::showEvent(event);
}

View File

@ -0,0 +1,15 @@
#ifndef CMYLISTWIDGET_H
#define CMYLISTWIDGET_H
#include <QListWidget>
class CMyListWidget : public QListWidget
{
public:
explicit CMyListWidget(QWidget *parent = 0);
protected:
void showEvent(QShowEvent *event);
};
#endif // CMYLISTWIDGET_H

View File

@ -0,0 +1,14 @@
#include "CNodeStatus.h"
#include "ui_CNodeStatus.h"
CNodeStatus::CNodeStatus(QWidget *parent) :
QWidget(parent),
ui(new Ui::CNodeStatus)
{
ui->setupUi(this);
}
CNodeStatus::~CNodeStatus()
{
delete ui;
}

View File

@ -0,0 +1,22 @@
#ifndef CNODESTATUS_H
#define CNODESTATUS_H
#include <QWidget>
namespace Ui {
class CNodeStatus;
}
class CNodeStatus : public QWidget
{
Q_OBJECT
public:
explicit CNodeStatus(QWidget *parent = 0);
~CNodeStatus();
private:
Ui::CNodeStatus *ui;
};
#endif // CNODESTATUS_H

View File

@ -0,0 +1,134 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CNodeStatus</class>
<widget class="QWidget" name="CNodeStatus">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>关键字</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox">
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit">
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>查找</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_2">
<property name="text">
<string>刷新</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QTableView" name="tableView">
<property name="maximumSize">
<size>
<width>200</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QTableView" name="tableView_2"/>
</item>
<item>
<widget class="QTableView" name="tableView_3"/>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="pushButton_3">
<property name="text">
<string>全部选中</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_4">
<property name="text">
<string>全部取消</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,40 @@
#include "CRdbWorker.h"
#include "pub_logger_api/logger.h"
#include<QDebug>
CRdbWorker::CRdbWorker()
{
m_pNetRdbApi = new iot_dbms::CRdbNetApi();
}
CRdbWorker::~CRdbWorker()
{
if(m_pNetRdbApi)
{
delete m_pNetRdbApi;
}
m_pNetRdbApi = NULL;
}
void CRdbWorker::search(int domainId, int appid, iot_idl::RdbQuery msgQuery, QString tableName, int searchWays)
{
iot_idl::RdbRet retMsg;
bool isSuccess = false;
if(m_pNetRdbApi)
{
m_pNetRdbApi->connect(domainId,appid);
if(m_pNetRdbApi->query(msgQuery,retMsg))
{
isSuccess = true;
}
}
if(searchWays == 0)
{
emit sigAutoSearch(isSuccess,retMsg,tableName);
}else
{
emit sigNotAutoSearch(isSuccess,retMsg,tableName);
}
}

View File

@ -0,0 +1,22 @@
#ifndef CRDBWORKER_H
#define CRDBWORKER_H
#include <QObject>
#include "rdb_net_api/CRdbNetApi.h"
#include "rdb_api/CRdbAccessEx.h"
class CRdbWorker : public QObject
{
Q_OBJECT
public:
CRdbWorker();
~CRdbWorker();
signals:
void sigAutoSearch(bool isSuccess,iot_idl::RdbRet rdbRet,QString tableName);
void sigNotAutoSearch(bool isSuccess,iot_idl::RdbRet rdbRet,QString tableName);
public slots:
void search(int domainId, int appid, iot_idl::RdbQuery msgQuery,QString tableName,int searchWays);
private:
iot_dbms::CRdbNetApi *m_pNetRdbApi; //网络实时数据库接口指针
};
#endif // CRDBWORKER_H

View File

@ -0,0 +1,249 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CRealAlarm</class>
<widget class="QWidget" name="CRealAlarm">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>829</width>
<height>350</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>全部确认</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_2">
<property name="text">
<string>当前页确认</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_3">
<property name="text">
<string>所选确认</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_4">
<property name="text">
<string>取消选择</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="pushButton_5">
<property name="text">
<string>刷新</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_6">
<property name="text">
<string>停止刷新</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label">
<property name="maximumSize">
<size>
<width>75</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>选中条数</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit">
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="maximumSize">
<size>
<width>90</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>总报警条数</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_2">
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="maximumSize">
<size>
<width>75</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>未确认条数</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_3">
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QTableWidget" name="tableWidget"/>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QCheckBox" name="checkBox">
<property name="text">
<string>级别排序</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_2">
<property name="text">
<string>滚动刷新</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_3">
<property name="text">
<string>状态筛选</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_4">
<property name="enabled">
<bool>true</bool>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>当前报警条数</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_4">
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_5">
<property name="maximumSize">
<size>
<width>60</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>选中条数</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_5">
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,127 @@
#ifndef CREALDATACONTROL_H
#define CREALDATACONTROL_H
#include "pub_widget/CustomDialog.h"
#include <QMap>
#include <QVector>
#include <QDateTime>
#include "pub_widget/MessageBox.h"
#include <sstream>
#include <QTimer>
#include "CSystemResources.h"
#include "MessageChannel.h"
#include "operate_server_api/JsonMessageStruct.h"
#include "operate_server_api/JsonOptCommand.h"
#include "rdb_net_api/CRdbNetApi.h"
#include "net_msg_bus_api/MsgBusApi.h"
#define APP_ID 4
namespace Ui {
class CRealDataControl;
}
class CRealDataControl : public CustomUiDialog
{
Q_OBJECT
public:
explicit CRealDataControl(int locationId,
int subSystemId,
QString pointName,
QString tagName,
QString tableName,
CSystemResources *,
bool isCtrl,
QWidget *parent);
~CRealDataControl();
void initControl(int locationId,int subSystemId,QString pointName,QString tagName,QString tableName,CSystemResources *pSystemResources);
private slots:
void slot_updateOtherArgs(int );
void slot_exeCmd();
void slot_timeOutReciceMsg();
void slot_exeStatus();
private:
Ui::CRealDataControl * ui;
iot_net::CMbCommunicator * m_pSendComm;
iot_net::CMbCommunicator * m_pReceiveComm;
CSystemResources * m_pSystemResources;
iot_dbms::CDbApi * m_pDbInterface;
iot_public::SAppInfo m_stAppInfo;
int m_nDestSubSystemId;
int m_nDestLocationId;
QString m_strPointName;
QString m_strPointTagName;
QString m_strTableName;
QString m_strSrcTag;
int m_nSrcDomainId;
int m_nAppId;
QString m_strHostName;
QString m_strInstName;
QString m_strCommName;
int m_nPermUserId;
int m_nPermUserGroupId;
QTimer * m_pTimer;
int m_timeOutTimes;
QVector<QString> m_aiLimitOtherArgs;
bool m_isCtrl;
private:
void initVariable(int locationId,int subSystemId,QString pointName,QString tagName,QString tableName,CSystemResources *pSystemResources);
void initView();
void initCmdTypeComBox();
void initCMbCommunicator();
void initSingalSlot();
void addAiCmd();
void addDiCmd();
void addMiCmd();
void addPiCmd();
void addConstCmd();
void getHead(SOptReqHead &);
void exeSetAiLimit();
void exeInhibitRef();
void exeInhibitAlarm();
void exeInhibitCtrl();
void exeSetValue();
void exeCtrlRequest();
void exeCtrlSelect();
void exeCtrlExecute();
void exeCtrlCancel();
void exeCtrlClose();
void exeCommon();
void aiLimitQuery();
void OptPointQuery();
void ctrlRequestReply(const std::string &);
//只有在 遥控选择、遥控执行、才需要设置targetValue
void setTargetValue(bool &isExist);
};
#endif // CREALDATACONTROL_H

View File

@ -0,0 +1,290 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CRealDataControl</class>
<widget class="QWidget" name="CRealDataControl">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>301</width>
<height>445</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="minimumSize">
<size>
<width>85</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>85</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>控制测点:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label_2">
<property name="minimumSize">
<size>
<width>85</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>85</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>命令类型:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox_cmdType">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QLabel" name="label_3">
<property name="minimumSize">
<size>
<width>85</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>85</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>其他参数:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox_otherArgs">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
<item row="3" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLabel" name="label_4">
<property name="minimumSize">
<size>
<width>85</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>85</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>控制数值:</string>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLineEdit" name="lineEdit_ctrlValue">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox_ctrlValue">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item row="4" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QPushButton" name="pushButton_exe">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>执行命令</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_exeStatus">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>状态查询</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="5" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label_6">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>执行状态</string>
</property>
</widget>
</item>
<item>
<widget class="QTextBrowser" name="textBrowser_exeStatus"/>
</item>
<item>
<widget class="QLabel" name="label_5">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>反馈结果</string>
</property>
</widget>
</item>
<item>
<widget class="QTextBrowser" name="textBrowser_exeResult"/>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,905 @@
#include "CRealDataSelect.h"
#include "ui_CRealDataSelect.h"
#include <QDebug>
#include <QScrollBar>
#include <QAbstractItemView>
CRealDataSelect::CRealDataSelect(QWidget *parent) :
QWidget(parent),
ui(new Ui::CRealDataSelect)
{
ui->setupUi(this);
m_nAddModel = -1;
//ui->lineEdit->setHidden(true);
//ui->pushButton->setHidden(true);
//ui->comboBox_devGroup->setView(new QListView());
ui->comboBox_location->setView(new QListView());
ui->comboBox_subSystem->setView(new QListView());
//ui->comboBox_devGroup->setHidden(true);
//ui->devGroup->setHidden(true);
//ui->listWidget_device->setHidden(true);
//ui->device->setHidden(true);
ui->treeWidget_devGroup->setContextMenuPolicy(Qt::CustomContextMenu);
ui->tableWidget_MesurePoint->setHidden(true);
ui->pushButton->setHidden(true);
initPntTableInfo();
}
void CRealDataSelect::setSystemResources(CSystemResources *pSystemResources)
{
m_pSystemResources = pSystemResources;
}
void CRealDataSelect::setRealDataWatch(CRealDataWatch *pWatch)
{
m_pRealDataWatch = pWatch;
}
CRealDataSelect::~CRealDataSelect()
{
delete ui;
}
void CRealDataSelect::initSelect()
{
initVariable();
initSignalsSlots();
initLocationComBox();
initSubSystemComBox();
//initDevGroupComBox();
// initDeviceListWidget();
initPointTableWidget();
}
void CRealDataSelect::initVariable()
{
m_pObjDbInterface = m_pSystemResources->getDbInterface();
}
void CRealDataSelect::initLocationComBox()
{
QSqlQuery locationTable;
m_pObjDbInterface->execute("SELECT DESCRIPTION,LOCATION_ID FROM sys_model_location_info ORDER BY LOCATION_ID", locationTable);
if(locationTable.isActive())
{
QVariant val;
val.clear();
QString locationName = "";
uint locationId = -1;
while(locationTable.next())
{
val = locationTable.value("DESCRIPTION");
locationName = val.toString();
val = locationTable.value("LOCATION_ID");
locationId = val.toUInt();
ui->comboBox_location->addItem(locationName,locationId);
}
}
ui->lineEdit->setPlaceholderText(tr("请输入描述信息"));
}
void CRealDataSelect::initSubSystemComBox()
{
QSqlQuery subSystemTable;
m_pObjDbInterface->execute("SELECT DESCRIPTION,SUB_SYSTEM_ID FROM sys_model_sub_system_info ORDER BY SUB_SYSTEM_ID", subSystemTable);
if(subSystemTable.isActive())
{
QVariant val;
val.clear();
QString subSystemName = "";
uint subSystemId = -1;
while(subSystemTable.next())
{
val = subSystemTable.value("DESCRIPTION");
subSystemName = val.toString();
val = subSystemTable.value("SUB_SYSTEM_ID");
subSystemId = val.toUInt();
if(subSystemId > CN_AppId_COMAPP)
{
ui->comboBox_subSystem->addItem(subSystemName,subSystemId);
}
}
}
}
//void CRealDataSelect::initDevGroupComBox()
//{
// QSqlQuery devGroupTable;
// ui->comboBox_devGroup->clear();
// m_pObjDbInterface->execute("SELECT DESCRIPTION,TAG_NAME,LOCATION_ID,SUB_SYSTEM FROM dev_group ORDER BY TAG_NAME", devGroupTable);
// if(devGroupTable.isActive())
// {
// QVariant val;
// val.clear();
// QString devGroupName = "";
// QString devGroupTag = "";
// while(devGroupTable.next())
// {
// val = devGroupTable.value("DESCRIPTION");
// devGroupName = val.toString();
// val = devGroupTable.value("TAG_NAME");
// devGroupTag = val.toString();
// ui->comboBox_devGroup->addItem(devGroupName,devGroupTag);
// //ui->treeWidget_devGroup->addTopLevelItem(nodeItem);
// }
// }
//}
//void CRealDataSelect::initDeviceListWidget()
//{
// //已废弃
// QString sqlStr= "SELECT DESCRIPTION,TAG_NAME,LOCATION_ID,SUB_SYSTEM FROM dev_info ORDER BY TAG_NAME";
// QSqlQuery deviceTable;
// m_pObjDbInterface->execute(sqlStr,deviceTable);
// if(deviceTable.isActive())
// {
// QVariant val;
// val.clear();
// QString devName;
// QString devTag;
// uint locationId;
// uint subSystemId;
// QListWidgetItem *item;
// while(deviceTable.next())
// {
// val = deviceTable.value("DESCRIPTION");
// devName = val.toString();
// val = deviceTable.value("TAG_NAME");
// devTag = val.toString();
// locationId = deviceTable.value("LOCATION_ID").toUInt();
// subSystemId = deviceTable.value("SUB_SYSTEM").toUInt();
// item = new QListWidgetItem();
// item->setText(devName);
// item->setData(Qt::UserRole+1,devTag);
// item->setData(Qt::UserRole+2,locationId);
// item->setData(Qt::UserRole+3,subSystemId);
// ui->listWidget_device->addItem(item);
// }
// }
//}
void CRealDataSelect::initPointTableWidget()
{
ui->tableWidget_MesurePoint->setColumnCount(2);
QStringList header;
header.append(tr("类型"));
header.append(tr("测点"));
ui->tableWidget_MesurePoint->setHorizontalHeaderLabels(header);
ui->tableWidget_MesurePoint->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->tableWidget_MesurePoint->setColumnWidth(0,50);
ui->tableWidget_MesurePoint->setColumnWidth(1,100);
//ui->tableWidget_MesurePoint->setMaximumWidth(200);
ui->tableWidget_MesurePoint->horizontalHeader()->setStretchLastSection(true);
ui->tableWidget_MesurePoint->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);
//设置table的水平滚动条
ui->tableWidget_MesurePoint->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
ui->tableWidget_MesurePoint->setEditTriggers(QAbstractItemView::NoEditTriggers);
}
void CRealDataSelect::initSignalsSlots()
{
connect(ui->comboBox_location,SIGNAL(currentIndexChanged(int)),
this,SLOT(slot_selectTreeDevGroup(int)));
//connect(ui->comboBox_subSystem,SIGNAL(currentIndexChanged(int)),
//this,SLOT(slot_selectDevGroup(int)));
connect(ui->comboBox_subSystem,SIGNAL(currentIndexChanged(int)),
this,SLOT(slot_selectTreeDevGroup(int)));
connect(ui->lineEdit,SIGNAL(textEdited(QString)),this,SLOT(slot_queryDev(QString)));
//connect(ui->comboBox_location,SIGNAL(currentIndexChanged(int)),
// this,SLOT(slot_selectDevice(int)));
//connect(ui->comboBox_subSystem,SIGNAL(currentIndexChanged(int)),
//this,SLOT(slot_selectDevice(int)));
//connect(ui->comboBox_devGroup,SIGNAL(currentIndexChanged(int)),
// this,SLOT(slot_selectDevice(int)));
//connect(ui->listWidget_device,SIGNAL(itemClicked(QListWidgetItem*)),
//this,SLOT(slot_showPoint(QListWidgetItem*)));
connect(ui->treeWidget_devGroup,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int))
,this,SLOT(solt_showPoint(QTreeWidgetItem*,int)));
// connect(ui->tableWidget_MesurePoint,SIGNAL(cellDoubleClicked(int,int)),
// this,SLOT(slot_addPoint(int,int)));
connect(ui->pushButton,SIGNAL(clicked()),
this,SLOT(slot_queryDev()));
// connect(ui->listWidget_device,SIGNAL(itemDoubleClicked(QListWidgetItem*)),
//this,SLOT(slot_addAllCurrentPoint(QListWidgetItem*)));
// connect(ui->treeWidget_devGroup,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),
// this,SLOT(slot_addAllCurrentPoint(QTreeWidgetItem*,int)));
}
//void CRealDataSelect::slot_selectDevice(int)
//{
// ui->listWidget_device->clear();
// ui->tableWidget_MesurePoint->clearContents();
// ui->tableWidget_MesurePoint->setRowCount(0);
// uint locationId = ui->comboBox_location->currentData(Qt::UserRole).toUInt();
// uint subSystemId = ui->comboBox_subSystem->currentData(Qt::UserRole).toUInt();
// QString devGroup = ui->comboBox_devGroup->currentData(Qt::UserRole).toString();
// QString sqlStr = QString("SELECT DESCRIPTION,TAG_NAME,LOCATION_ID,SUB_SYSTEM FROM dev_info where LOCATION_ID = %1 "
// " AND SUB_SYSTEM = %2 "
// " and group_tag_name ='%3' ORDER BY TAG_NAME").arg(locationId).arg(subSystemId).arg(devGroup);
// QSqlQuery deviceTable;
// m_pObjDbInterface->execute(sqlStr,deviceTable);
// if(deviceTable.isActive())
// {
// QString devName;
// QString devTag;
// uint locationId_2;
// uint subSystemId_2;
// QListWidgetItem *item;
// while(deviceTable.next())
// {
// devName = deviceTable.value("DESCRIPTION").toString();
// devTag = deviceTable.value("TAG_NAME").toString();
// locationId_2 = deviceTable.value("LOCATION_ID").toUInt();
// subSystemId_2 = deviceTable.value("SUB_SYSTEM").toUInt();
// item = new QListWidgetItem();
// item->setText(devName);
// item->setData(Qt::UserRole+1,devTag);
// item->setData(Qt::UserRole+2,locationId_2);
// item->setData(Qt::UserRole+3,subSystemId_2);
// ui->listWidget_device->addItem(item);
// }
// }
//}
//void CRealDataSelect::slot_selectDevGroup(int)
//{
// uint locationId = ui->comboBox_location->currentData(Qt::UserRole).toUInt();
// uint subSystemId = ui->comboBox_subSystem->currentData(Qt::UserRole).toUInt();
// ui->comboBox_devGroup->clear();
// QSqlQuery devGroupTable;
// devGroupTable.clear();
// QString sqlStr = QString("SELECT DESCRIPTION,TAG_NAME,LOCATION_ID,SUB_SYSTEM FROM dev_group where SUB_SYSTEM =%1 "
// "and LOCATION_ID = %2 ORDER BY TAG_NAME").arg(subSystemId).arg(locationId);
// m_pObjDbInterface->execute(sqlStr, devGroupTable);
// if(devGroupTable.isActive())
// {
// QVariant val;
// val.clear();
// QString devGroupName ="";
// QString devGroupTag = "";
// while(devGroupTable.next())
// {
// val = devGroupTable.value("DESCRIPTION");
// devGroupName = val.toString();
// val = devGroupTable.value("TAG_NAME");
// devGroupTag = val.toString();
// ui->comboBox_devGroup->addItem(devGroupName,devGroupTag);
// }
// }
//}
//void CRealDataSelect::slot_showPoint(QListWidgetItem* _item)
//{
// ui->tableWidget_MesurePoint->clearContents();
// QString devTage = _item->data(Qt::UserRole+1).toString();
// QString analogTableName = "ANALOG";
// QString digitalTableName = "DIGITAL";
// QString accumlTableName = "ACCUML";
// QString mixTableName = "MIX";
// QString constTableName = "CONST";
// QStringList tableNameList;
// QStringList pointType;
// tableNameList.append(analogTableName);
// pointType.append(tr("模拟量"));
// tableNameList.append(digitalTableName);
// pointType.append(tr("数字量"));
// tableNameList.append(accumlTableName);
// pointType.append(tr("累积量"));
// tableNameList.append(mixTableName);
// pointType.append(tr("混合量"));
// tableNameList.append(constTableName);
// pointType.append(tr("常量"));
// QString strSql1 = "SELECT DESCRIPTION,TAG_NAME FROM ";
// QString strSql2 = QString(" WHERE DEVICE = ")+QString("'")+ devTage+"'";
// uint rowCount = 0;
// int j = 0;
// QTableWidgetItem *item;
// QSqlQuery pointTable;
// for(int i = 0 ; i < 4; i++)
// {
// pointTable.clear();
// m_pObjDbInterface->execute(strSql1+tableNameList[i]+strSql2,pointTable);
// qDebug()<<"sql语句"<<strSql1+tableNameList[i]+strSql2;
// if(pointTable.isActive())
// {
// rowCount += pointTable.size();
// ui->tableWidget_MesurePoint->setRowCount(rowCount);
// while(pointTable.next())
// {
// item = new QTableWidgetItem;
// item->setData(Qt::UserRole+1,tableNameList[i]);
// item->setText(pointType[i]);
// ui->tableWidget_MesurePoint->setItem(j,0,item);
// item = new QTableWidgetItem;
// item->setData(Qt::UserRole+1,pointTable.value("TAG_NAME").toString());
// item->setText(pointTable.value("DESCRIPTION").toString());
// item->setToolTip(pointTable.value("DESCRIPTION").toString());
// ui->tableWidget_MesurePoint->setItem(j++,1,item);
// }
// }
// }
//}
void CRealDataSelect::solt_showPoint(QTreeWidgetItem* _item, int treeIndex)
{
Q_UNUSED(treeIndex);
if(_item == NULL || ui->treeWidget_devGroup->currentItem() == NULL ||
ui->treeWidget_devGroup->currentItem()->parent() == NULL)
{
return;
}
uint locationId = ui->treeWidget_devGroup->currentItem()->data(0,Qt::UserRole+2).toUInt();
uint subSystemId = ui->treeWidget_devGroup->currentItem()->data(0,Qt::UserRole+3).toUInt();
QString locationDesc = ui->comboBox_location->currentText();
QString subSystemDesc = ui->comboBox_subSystem->currentText();
QString devDescription = ui->treeWidget_devGroup->currentItem()->text(0);
QString devTagName = ui->treeWidget_devGroup->currentItem()->data(0,Qt::UserRole+1).toString();
QString descDevG = ui->treeWidget_devGroup->currentItem()->parent()->text(0);
QStringList devTagSplit = devTagName.split(".");
QString devGTag ="";
if(devTagSplit.size() == 2)
{
QString devg = devTagSplit.at(1);
QStringList devg_ = devg.split("_");
devGTag = devTagSplit.at(0)+"."+devg_.at(0);
}
QVector<SAddPointInfoPtr> vecPntPtr;
vecPntPtr.reserve(20000); //<一般一个设备不会超过2万点
ui->tableWidget_MesurePoint->clearContents();
QString devTage = _item->data(0,Qt::UserRole+1).toString();
//分页信息
QString keyword;
int nCurPage = 0;
int nPageSize = 0;
m_pRealDataWatch->getFilterAndPageInfo(keyword,nCurPage,nPageSize);
QString strSql1 = "SELECT DESCRIPTION,TAG_NAME,RTU_TAG,SEQ_NO,%1 FROM %2 %3";
QString strSql2 = QString(" WHERE DEVICE = ")+QString("'")+ devTage+"'";
if(nCurPage != 0 && nPageSize != 0)
{
if(!keyword.isEmpty())
{
strSql2 += QString(" and DESCRIPTION LIKE '%%1%'").arg(keyword);
}
strSql2 += QString(" LIMIT %1,%2").arg((nCurPage -1)*nPageSize).arg(nPageSize);
}
strSql2 += " ORDER BY SEQ_NO ASC";
uint rowCount = 0;
int nRow = 0;
int nAddModel = 1;
QTableWidgetItem *item;
QSqlQuery pointTable;
for(int nTabIdx = 0 ; nTabIdx < 4; nTabIdx++)
{
pointTable.clear();
QString strSQL = strSql1.arg(m_listPntIsCtrlCol[nTabIdx]).arg(m_listTableName[nTabIdx]).arg(strSql2);
m_pObjDbInterface->execute(strSQL,pointTable);
if(!pointTable.isActive())
{
continue;
}
rowCount += pointTable.size();
ui->tableWidget_MesurePoint->setRowCount(rowCount);
while(pointTable.next())
{
item = new QTableWidgetItem;
item->setData(Qt::UserRole+1,m_listTableName[nTabIdx]);
item->setText(m_listPointType[nTabIdx]);
ui->tableWidget_MesurePoint->setItem(nRow,0,item);
item = new QTableWidgetItem;
//用下标访问效率高注意与select字段顺序对应
QString strPntTagName = pointTable.value(1).toString();
item->setData(Qt::UserRole+1,strPntTagName); //<tag_name
QString strDesc = pointTable.value(0).toString();
item->setText(strDesc);
item->setToolTip(strDesc);
ui->tableWidget_MesurePoint->setItem(nRow++,1,item);
SAddPointInfoPtr ptrPntInfo = SAddPointInfoPtr::create();
ptrPntInfo->nLocationId = locationId;
ptrPntInfo->nSubsystemId = subSystemId;
ptrPntInfo->nAddModel = nAddModel++;
ptrPntInfo->strLocationDesc = locationDesc;
ptrPntInfo->strSubsystemDesc = subSystemDesc;
ptrPntInfo->strPntType = m_listPointType[nTabIdx];
ptrPntInfo->strTableName = m_listTableName[nTabIdx];
ptrPntInfo->strPntDesc = strDesc;
ptrPntInfo->strPntTagName = strPntTagName;
ptrPntInfo->strDevDesc = devDescription;
ptrPntInfo->strDevTagName = devTagName;
ptrPntInfo->strDevGroupDesc = descDevG;
ptrPntInfo->strRtuTag = pointTable.value(2).toString(); //<rtu_name
ptrPntInfo->nSeqNo = pointTable.value(3).toInt(); //<seq_no
ptrPntInfo->nIsControl = pointTable.value(4).toInt(); //<is_control
vecPntPtr.push_back(ptrPntInfo);
}
}
emit signal_batchAddPoint(vecPntPtr);
}
void CRealDataSelect::initPntTableInfo()
{
m_listTableName.append("ANALOG");
m_listPntIsCtrlCol.append("IS_CONTROL");
m_listPointType.append(tr("模拟量"));
m_listTableName.append("DIGITAL");
m_listPntIsCtrlCol.append("IS_CONTROL");
m_listPointType.append(tr("数字量"));
m_listTableName.append("ACCUML");
m_listPntIsCtrlCol.append("0 as IS_CONTROL");
m_listPointType.append(tr("累积量"));
m_listTableName.append("MIX");
m_listPntIsCtrlCol.append("IS_CONTROL");
m_listPointType.append(tr("混合量"));
m_listTableName.append("CONST");
m_listPntIsCtrlCol.append("0 as IS_CONTROL");
m_listPointType.append(tr("常量"));
}
void CRealDataSelect::slot_addPoint(int row,int)
{
uint locationId = ui->treeWidget_devGroup->currentItem()->data(0,Qt::UserRole+2).toUInt();
uint subSystemId = ui->treeWidget_devGroup->currentItem()->data(0,Qt::UserRole+3).toUInt();
QString pointType = ui->tableWidget_MesurePoint->item(row,0)->text();
QString tableName = ui->tableWidget_MesurePoint->item(row,0)->data(Qt::UserRole+1).toString();
QString pointDescription = ui->tableWidget_MesurePoint->item(row,1)->text();
QString pointTagName = ui->tableWidget_MesurePoint->item(row,1)->data(Qt::UserRole+1).toString();
QString devDescription = ui->treeWidget_devGroup->currentItem()->text(0);
QString devTagName = ui->treeWidget_devGroup->currentItem()->data(0,Qt::UserRole+1).toString();
QStringList devTagSplit = devTagName.split(".");
QString devGTag ="";
if(devTagSplit.size() == 2)
{
QString devg = devTagSplit.at(1);
QStringList devg_ = devg.split("_");
devGTag = devTagSplit.at(0)+"."+devg_.at(0);
}
QString descDevG =ui->treeWidget_devGroup->currentItem()->parent()->text(0);
emit signal_addPoint(ui->comboBox_location->currentText(),locationId,
ui->comboBox_subSystem->currentText(),subSystemId,
pointType,tableName,
pointDescription,pointTagName,
devDescription,devTagName,descDevG,m_nAddModel,devTagName);
}
void CRealDataSelect::slot_queryDev()
{
QString keyWord = ui->lineEdit->text().trimmed();
QTreeWidgetItemIterator it(ui->treeWidget_devGroup);
while(*it){
ui->treeWidget_devGroup->setItemHidden(*it,false);
it++;
}
if(keyWord.isEmpty())
{
return;
}
else
{
QTreeWidgetItemIterator itor(ui->treeWidget_devGroup);
while(*itor){
if((*itor)->text(0).contains(keyWord,Qt::CaseInsensitive))
{
for(int i=0;i<(*itor)->childCount();i++)
{
itor++;
}
itor++;
continue;
}
else
{
//确认子节点是否匹配
bool childBool=0;
for(int i=0;i<(*itor)->childCount();i++)
{
if((*itor)->child(i)->text(0).contains(keyWord,Qt::CaseInsensitive))
{
childBool=1;
}
else
{
ui->treeWidget_devGroup->setItemHidden((*itor)->child(i),true);
}
}
if(childBool==false)
{
ui->treeWidget_devGroup->setItemHidden(*itor,true);
}
for(int i=0;i<(*itor)->childCount();i++){
itor++;
}
}
itor++;
}
}
}
void CRealDataSelect::slot_queryDev(QString)
{
slot_selectTreeDevGroup(0);
QString keyWord = ui->lineEdit->text().trimmed();
QString tag_name = ui->lineEdit->text();
/* caodingfa: 从代码逻辑来看,已经无法适配现有功能,注释掉
if((allSelect(tag_name))||(preciseSelect()))
{
return;
}
*/
QTreeWidgetItemIterator it(ui->treeWidget_devGroup);
while(*it){
ui->treeWidget_devGroup->setItemHidden(*it,false);
it++;
}
if(keyWord.isEmpty())
{
return;
}
else
{
QTreeWidgetItemIterator itor(ui->treeWidget_devGroup);
while(*itor)
{
if((*itor)->text(0).contains(keyWord,Qt::CaseInsensitive))
{
int k=(*itor)->childCount();
for(int i=0;i<k;i++)
{
itor++;
}
itor++;
continue;
}
else
{
//确认子节点是否匹配
bool childBool=0;
for(int i=0;i<(*itor)->childCount();i++)
{
if((*itor)->child(i)->text(0).contains(keyWord,Qt::CaseInsensitive))
{
childBool=1;
}
else
{
ui->treeWidget_devGroup->setItemHidden((*itor)->child(i),true);
}
}
if(childBool==false)
{
ui->treeWidget_devGroup->setItemHidden(*itor,true);
}
for(int i=0;i<(*itor)->childCount();i++){
itor++;
}
}
itor++;
}
}
}
void CRealDataSelect::slot_addAllCurrentPoint(QListWidgetItem *)
{
int rowCount = ui->tableWidget_MesurePoint->rowCount();
m_nAddModel = 1;
for(int i = 0; i < rowCount; ++i)
{
slot_addPoint(i,0);
m_nAddModel++;
}
m_nAddModel = -1;
}
void CRealDataSelect::slot_selectTreeDevGroup(int)
{
uint locationId = ui->comboBox_location->currentData(Qt::UserRole).toUInt();
uint subSystemId = ui->comboBox_subSystem->currentData(Qt::UserRole).toUInt();
ui->treeWidget_devGroup->clear();
// QTreeWidgetItem *firstItem=new QTreeWidgetItem();
// firstItem->setText(0,ui->comboBox_location->currentText());
// ui->treeWidget_devGroup->addTopLevelItem(firstItem);
QSqlQuery devGroupTable;
devGroupTable.clear();
QString sqlStr = QString("SELECT a.DESCRIPTION dev_group_name,b.DESCRIPTION device_name,"
" b.TAG_NAME tag_name,a.LOCATION_ID location_id,a.SUB_SYSTEM sub_system FROM dev_group a,dev_info b"
" where a.LOCATION_ID= %1 and a.SUB_SYSTEM= %2 and "
"a.TAG_NAME =b.GROUP_TAG_NAME order by a.DESCRIPTION ").arg(locationId).arg(subSystemId);
m_pObjDbInterface->execute(sqlStr, devGroupTable);
if(devGroupTable.isActive())
{
QVariant val;
val.clear();
QString dev_group_name ="";
QString device_name = "";
QString lastDevGroupName="";
QString tag_name="";
QString location_id="";
QString sub_system="";
QTreeWidgetItem *lastItem=new QTreeWidgetItem();
while(devGroupTable.next())
{
dev_group_name = devGroupTable.value(0).toString();
device_name = devGroupTable.value(1).toString();
tag_name = devGroupTable.value(2).toString();
location_id = devGroupTable.value(3).toString();
sub_system = devGroupTable.value(4).toString();
if(lastDevGroupName!=dev_group_name){
QTreeWidgetItem *nodeItem = new QTreeWidgetItem(ui->treeWidget_devGroup);
nodeItem->setText(0,dev_group_name);
nodeItem->setSelected(false);
QTreeWidgetItem *childItem = new QTreeWidgetItem(nodeItem);
childItem->setText(0,device_name);
childItem->setData(0,Qt::UserRole+1,tag_name);
childItem->setData(0,Qt::UserRole+2,location_id);
childItem->setData(0,Qt::UserRole+3,sub_system);
lastDevGroupName=dev_group_name;
lastItem=nodeItem;
}
else{
QTreeWidgetItem *childItem = new QTreeWidgetItem(lastItem);
childItem->setText(0,device_name);
childItem->setData(0,Qt::UserRole+1,tag_name);
childItem->setData(0,Qt::UserRole+2,location_id);
childItem->setData(0,Qt::UserRole+3,sub_system);
}
}
}
// uint locationId = ui->comboBox_location->currentData(Qt::UserRole).toUInt();
// uint subSystemId = ui->comboBox_subSystem->currentData(Qt::UserRole).toUInt();
// QString devGroup = ui->comboBox_devGroup->currentData(Qt::UserRole).toString();
// QString sqlStr = QString("SELECT DESCRIPTION,TAG_NAME,LOCATION_ID,SUB_SYSTEM FROM dev_info where LOCATION_ID = %1 "
// " AND SUB_SYSTEM = %2 "
// " and group_tag_name ='%3' ORDER BY TAG_NAME").arg(locationId).arg(subSystemId).arg(devGroup);
// QSqlQuery deviceTable;
// m_pObjDbInterface->execute(sqlStr,deviceTable);
// if(deviceTable.isActive())
// {
// QString devName;
// QString devTag;
// uint locationId_2;
// uint subSystemId_2;
// QListWidgetItem *item;
// while(deviceTable.next())
// {
// devName = deviceTable.value("DESCRIPTION").toString();
// devTag = deviceTable.value("TAG_NAME").toString();
// locationId_2 = deviceTable.value("LOCATION_ID").toUInt();
// subSystemId_2 = deviceTable.value("SUB_SYSTEM").toUInt();
// item = new QListWidgetItem();
// item->setText(devName);
// item->setData(Qt::UserRole+1,devTag);
// item->setData(Qt::UserRole+2,locationId_2);
// item->setData(Qt::UserRole+3,subSystemId_2);
// ui->listWidget_device->addItem(item);
}
void CRealDataSelect::slot_paging()
{
solt_showPoint(ui->treeWidget_devGroup->currentItem(),ui->treeWidget_devGroup->currentColumn());
}
void CRealDataSelect::slot_addAllCurrentPoint(QTreeWidgetItem *, int)
{
int rowCount = ui->tableWidget_MesurePoint->rowCount();
m_nAddModel = 1;
for(int i = 0; i < rowCount; ++i)
{
slot_addPoint(i,0);
m_nAddModel++;
}
m_nAddModel = -1;
}
bool CRealDataSelect::allSelect(QString tag_name)
{
bool pointBool=false;
QString analogTableName = "ANALOG";
QString digitalTableName = "DIGITAL";
QString accumlTableName = "ACCUML";
QString mixTableName = "MIX";
QStringList tableNameList;
QStringList pointType;
tableNameList.append(analogTableName);
pointType.append(tr("模拟量"));
tableNameList.append(digitalTableName);
pointType.append(tr("数字量"));
tableNameList.append(accumlTableName);
pointType.append(tr("累积量"));
tableNameList.append(mixTableName);
pointType.append(tr("混合量"));
uint locationId ;
uint subSystemId ;
QString tableName ;
QString pointDescription ;
QString pointTagName ;
QString point_type;
//QString devDescription = ui->listWidget_device->currentItem()->text();
//QString devTagName = ui->listWidget_device->currentItem()->data(Qt::UserRole+1).toString();
QString devDescription;
QString devTagName ;
QString descDevG ;
QString allName;
QString strSql1 = "select a.TAG_NAME allName,a.DESCRIPTION pointDescription,a.SEQ_NO,a.LOCATION_ID locationId,"
"a.SUB_SYSTEM subSystemId ,a.RTU_TAG,a.device devTagName,di.DESCRIPTION devDescription,dg.DESCRIPTION descDevG "
"from ";
QString strSql2 = QString(" a ,dev_info di ,dev_group dg where "
" a.TAG_NAME = ")+QString("'")+ tag_name+"' and"
" a.DEVICE =di.TAG_NAME and di.GROUP_TAG_NAME =dg.TAG_NAME ";
uint rowCount = 0;
int j = 0;
QTableWidgetItem *item;
QSqlQuery pointTable;
for(int i = 0 ; i < 4; i++)
{
pointTable.clear();
tableName = tableNameList[i];
point_type = pointType[i];
m_pObjDbInterface->execute(strSql1 + tableName + strSql2,pointTable);
if(pointTable.isActive())
{
rowCount += pointTable.size();
ui->tableWidget_MesurePoint->setRowCount(rowCount);
while(pointTable.next())
{
pointBool=true;
item = new QTableWidgetItem;
item->setData(Qt::UserRole+1,tableName);
item->setText(point_type);
ui->tableWidget_MesurePoint->setItem(j,0,item);
item = new QTableWidgetItem;
allName=pointTable.value(0).toString();
pointDescription=pointTable.value(1).toString();
locationId=pointTable.value(3).toInt();
subSystemId=pointTable.value(4).toInt();
devTagName=pointTable.value(6).toString();
devDescription=pointTable.value(7).toString();
descDevG=pointTable.value(8).toString();
pointTagName=allName;
m_nAddModel=1;
}
}
}
if(pointBool==false){
return false;
}
for(int k=0;k<ui->comboBox_location->count();k++)
{
if(ui->comboBox_location->itemData(k,Qt::UserRole).toUInt()==locationId)
{
ui->comboBox_location->setCurrentIndex(k);
}
}
for(int k=0;k<ui->comboBox_subSystem->count();k++)
{
if(ui->comboBox_subSystem->itemData(k,Qt::UserRole).toUInt()==subSystemId)
{
ui->comboBox_subSystem->setCurrentIndex(k);
}
}
ui->treeWidget_devGroup->clear();
slot_selectTreeDevGroup(0);
QTreeWidgetItemIterator itor(ui->treeWidget_devGroup);
while(*itor){
bool childNumber=false;
if((*itor)->text(0).contains(descDevG,Qt::CaseInsensitive))
{
int itorCount=(*itor)->childCount();
(*itor)->setHidden(false);
for(int i=0;i<itorCount;i++)
{
if((*itor)->child(i)->text(0).contains(devDescription,Qt::CaseInsensitive))
{
childNumber=true;
(*itor)->child(i)->setHidden(false);
}
else{
(*itor)->child(i)->setHidden(true);
}
}
if(childNumber==false){
(*itor)->setHidden(true);
}
for(int i=0;i<=itorCount;i++){
itor++;
}
continue;
}
(*itor)->setHidden(true);
itor++;
}
emit signal_addPoint(ui->comboBox_location->currentText(),locationId,
ui->comboBox_subSystem->currentText(),subSystemId,
point_type,tableName,
pointDescription,pointTagName,
devDescription,devTagName,descDevG,m_nAddModel,allName);
return true;
}
bool CRealDataSelect::preciseSelect()
{
QStringList devTagSplit;
QString analogTableName = "ANALOG";
QString digitalTableName = "DIGITAL";
QString accumlTableName = "ACCUML";
QString mixTableName = "MIX";
QString currTextEdit=ui->lineEdit->text();
devTagSplit=currTextEdit.split(".");
for(int i=0;i<devTagSplit.size();i++){
if(devTagSplit.at(i).contains(analogTableName,Qt::CaseInsensitive)
||devTagSplit.at(i).contains(digitalTableName,Qt::CaseInsensitive)
||devTagSplit.at(i).contains(accumlTableName,Qt::CaseInsensitive)
||devTagSplit.at(i).contains(mixTableName,Qt::CaseInsensitive))
{
return(allSelect(devTagSplit.at(i+1)+"."+devTagSplit.at(i+2)+"."+devTagSplit.at(i+3)));
}
}
return false;
}

View File

@ -0,0 +1,80 @@
#ifndef CREALDATASELECT_H
#define CREALDATASELECT_H
#include <QWidget>
#include <QSqlQuery>
#include <QListWidgetItem>
#include <QTableWidgetItem>
#include <QModelIndex>
#include "pub_widget/MessageBox.h"
#include "db_api_ex/CDbApi.h"
#include "CSystemResources.h"
#include<QTreeWidget>
#include "CRealDataWatch.h"
namespace Ui {
class CRealDataSelect;
}
class CRealDataSelect : public QWidget
{
Q_OBJECT
public:
explicit CRealDataSelect(QWidget *parent = 0);
void setSystemResources(CSystemResources *);
void setRealDataWatch(CRealDataWatch *pWatch);
void initSelect();
~CRealDataSelect();
signals:
void signal_addPoint(QString,uint,QString,uint,QString,QString,QString,QString,QString,QString,QString,int,QString);
void signal_batchAddPoint(QVector<SAddPointInfoPtr> &listPntInfo);
private slots:
//void slot_selectDevice(int);
//void slot_selectDevGroup(int);
//void slot_showPoint(QListWidgetItem*);
void solt_showPoint(QTreeWidgetItem*,int);
void slot_addPoint(int,int);
void slot_queryDev();
void slot_queryDev(QString);
void slot_addAllCurrentPoint(QListWidgetItem* pItem);
//void slot_selectTreeDevGroup(int);
void slot_addAllCurrentPoint(QTreeWidgetItem*,int);
void slot_selectTreeDevGroup(int);
void slot_paging();
private:
void initPntTableInfo();
private:
Ui::CRealDataSelect *ui;
iot_dbms::CDbApi *m_pObjDbInterface;
CSystemResources *m_pSystemResources;
// bool m_isFristQuery;
CRealDataWatch *m_pRealDataWatch;
QStringList m_listTableName;
QStringList m_listPointType;
QStringList m_listPntIsCtrlCol; //< 用来存储每个表is_control的SQL的因为acc表没有此字段为了兼容加入此逻辑
private:
void initView();
void initVariable();
void initLocationComBox();
void initSubSystemComBox();
void initDevGroupComBox();
void initDeviceListWidget();
void initPointTableWidget();
bool allSelect(QString tag_name);
bool preciseSelect();
void initSignalsSlots();
int m_nAddModel; //添加模式
};
#endif // CREALDATASELECT_H

View File

@ -0,0 +1,200 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CRealDataSelect</class>
<widget class="QWidget" name="CRealDataSelect">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>414</width>
<height>707</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>0</height>
</size>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4"/>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="location">
<property name="minimumSize">
<size>
<width>45</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>45</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>位置</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox_location">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="sub">
<property name="minimumSize">
<size>
<width>45</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>45</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>专业</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox_subSystem">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3" stretch="4,1">
<item>
<widget class="QLineEdit" name="lineEdit">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>查询</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_10" stretch="9">
<item>
<widget class="QTreeWidget" name="treeWidget_devGroup">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<column>
<property name="text">
<string>设备组</string>
</property>
</column>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_9">
<item>
<widget class="QTableWidget" name="tableWidget_MesurePoint">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,722 @@
#include "CRealDataWatch.h"
#include "ui_CRealDataWatch.h"
#include <QDebug>
#include "perm_mng_api/PermMngApi.h"
#include <QContextMenuEvent>
#include <QAction>
#include <QMenu>
#include <QHeaderView>
#include <QRegExp>
#include "toolCommon.h"
#include "CStatusDialog.h"
CRealDataWatch::CRealDataWatch(QWidget *parent) :
QWidget(parent),
ui(new Ui::CRealDataWatch)
{
ui->setupUi(this);
m_searchDialog = NULL;
m_bIsLgoin = false;
m_pSearchButton = new QPushButton(this);
m_pSearchButton->setObjectName("searchButton");
m_pSearchButton->setText("");
m_pSearchButton->setMaximumSize(28, 29);
m_pSearchButton->setCursor(QCursor(Qt::ArrowCursor));
m_pSearchButton->setShortcut(Qt::Key_Return);
QHBoxLayout * pSearchLayout = new QHBoxLayout();
pSearchLayout->setContentsMargins(0, 0, 0, 0);
pSearchLayout->addStretch();
pSearchLayout->addWidget(m_pSearchButton);
ui->lineEdit->setLayout(pSearchLayout);
ui->checkBox_append->setChecked(false);
ui->checkBox_paging->setChecked(false); //todo:分页实现不完善,临时实现
ui->lineEdit_pageNum->setAlignment(Qt::AlignHCenter);
m_nCurPageNum = 0;
m_nPageSize = 0;
}
CRealDataWatch::~CRealDataWatch()
{
m_pDpcdaForApp->unsubscribeAll();
delete ui;
}
void CRealDataWatch::setSystemResources(CSystemResources *pSystemResources)
{
m_pSystemResources = pSystemResources;
}
void CRealDataWatch::deletePoint(int row)
{
QString tableName = ui->tableWidget_point->item(row,3)->data(Qt::UserRole+1).toString();
QString tagName = ui->tableWidget_point->item(row,4)->data(Qt::UserRole+1).toString();
m_pDpcdaForApp->unsubscribe(tableName.toStdString(),
tagName.toStdString(),
QString("value").toStdString());
m_pDpcdaForApp->unsubscribe(tableName.toStdString(),
tagName.toStdString(),
QString("status").toStdString());
ui->tableWidget_point->removeRow(row);
}
void CRealDataWatch::contextMenuEvent(QContextMenuEvent *event)
{
QWidget::contextMenuEvent(event);
if(event->pos().x() < ui->tableWidget_point->pos().x())
{
return;
}
QRect headerRect = ui->tableWidget_point->horizontalHeader()->rect();
headerRect.moveTopLeft(ui->tableWidget_point->mapTo(this, QPoint()));
if(!headerRect.contains(event->pos()))
{
QMenu menu(this);
QAction *allSelectAction = menu.addAction(tr("全选"));
connect(allSelectAction,&QAction::triggered,[=](){ui->tableWidget_point->selectAll();});
QAction *deleteSelectAction = menu.addAction(tr("删除"));
connect(deleteSelectAction,&QAction::triggered,[=](){
slot_deleteMaxPoint();
});
QAction *cancleSelectAction = menu.addAction(tr("取消选择"));
connect(cancleSelectAction,&QAction::triggered,[=](){
ui->tableWidget_point->clearSelection();
});
menu.exec(QCursor::pos());
}
}
void CRealDataWatch::keyPressEvent(QKeyEvent *event)
{
if(event->key() == Qt::Key_Enter)
{
filter();
}
else if(event->key() == Qt::Key_Delete)
{
slot_deleteMaxPoint();
}
QWidget::keyPressEvent(event);
}
bool CRealDataWatch::eventFilter(QObject *watched, QEvent *event)
{
if(event->type() == QEvent::KeyPress)
{
QKeyEvent * theKey = static_cast<QKeyEvent*>(event);
if(theKey->key() == Qt::Key_Enter || theKey->key() == Qt::Key_Return)
{
filter();
return true;
}else if(theKey->key() == Qt::Key_Delete)
{
slot_deleteMaxPoint();
return true;
}
}
return QObject::eventFilter(watched,event);
}
void CRealDataWatch::initWatch()
{
initVariable();
initView();
initSignalSlot();
}
void CRealDataWatch::initVariable()
{
m_pObjDbInterface = m_pSystemResources->getDbInterface();
m_pDpcdaForApp = new iot_service::CDpcdaForApp;
m_searchDialog = new CStatusDialog(m_pSystemResources,this);
}
void CRealDataWatch::initView()
{
initCheckBox();
initTableWidgetPoint();
ui->lineEdit->setPlaceholderText(tr("请输入描述信息"));
}
void CRealDataWatch::initCheckBox()
{
ui->checkBox_all->setChecked(true);
ui->checkBox_analog->setChecked(true);
ui->checkBox_digital->setChecked(true);
ui->checkBox_accuml->setChecked(true);
ui->checkBox_mix->setChecked(true);
}
void CRealDataWatch::initTableWidgetPoint()
{
ui->tableWidget_point->setColumnCount(12);
ui->tableWidget_point->setColumnWidth(0,200);
ui->tableWidget_point->setColumnWidth(1,40);
ui->tableWidget_point->setColumnWidth(2,40);
ui->tableWidget_point->setColumnWidth(3,50);
ui->tableWidget_point->setColumnWidth(4,60);
ui->tableWidget_point->setColumnWidth(5,20);
ui->tableWidget_point->setColumnWidth(6,20);
ui->tableWidget_point->setColumnWidth(7,210);
ui->tableWidget_point->setColumnWidth(8,120);
ui->tableWidget_point->setColumnWidth(9,180);
ui->tableWidget_point->setColumnWidth(10,40);
QStringList header;
header.append(tr("标签")); //0 //0
header.append(tr(""));//6 //1
header.append(tr("状态"));//7 //2
header.append(tr("类型")); //0 //3
header.append(tr("测点")); //1 //4
header.append(tr("位置")); //2
header.append(tr("专业")); //3 //6
header.append(tr("设备组"));//4
header.append(tr("设备"));//5 //8
header.append(tr("RTU"));//8
header.append(tr("SEQ_NO"));//9 //10
header.append(tr("是否可控"));//10 /11
ui->tableWidget_point->hideColumn(5);
ui->tableWidget_point->hideColumn(6);
ui->tableWidget_point->setHorizontalHeaderLabels(header);
ui->tableWidget_point->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->tableWidget_point->setSelectionMode(QAbstractItemView::SingleSelection);
ui->tableWidget_point->setEditTriggers(QAbstractItemView::NoEditTriggers);
ui->tableWidget_point->horizontalHeader()->setStretchLastSection(true);
ui->tableWidget_point->setAlternatingRowColors(true);
}
void CRealDataWatch::initSignalSlot()
{
connect(ui->checkBox_all,SIGNAL(clicked(bool)),
this,SLOT(slot_checkBox(bool)));
connect(ui->checkBox_accuml,SIGNAL(clicked(bool)),
this,SLOT(slot_checkBox(bool)));
connect(ui->checkBox_analog,SIGNAL(clicked(bool)),
this,SLOT(slot_checkBox(bool)));
connect(ui->checkBox_digital,SIGNAL(clicked(bool)),
this,SLOT(slot_checkBox(bool)));
connect(ui->checkBox_mix,SIGNAL(clicked(bool)),
this,SLOT(slot_checkBox(bool)));
connect(m_pSearchButton,SIGNAL(clicked()),
this,SLOT(slot_pointFilter()));
connect(ui->tableWidget_point,SIGNAL(cellDoubleClicked(int,int)),
this,SLOT(slot_ctrlRealData(int,int)));
connect(ui->tableWidget_point,SIGNAL(itemClicked(QTableWidgetItem *)),
this,SLOT(slot_pointsitemClicked(QTableWidgetItem *)));
// connect(ui->tableWidget_point,SIGNAL(currentItemChanged(QTableWidgetItem*,QTableWidgetItem*)),
// this,SLOT(slot_textChanged(QTableWidgetItem*,QTableWidgetItem*)));
connect(m_searchDialog,SIGNAL(signal_selectTextEdit(QString ,QString , int )),
this,SLOT(slot_selectTextEdit(QString ,QString , int )));
}
void CRealDataWatch::slot_checkBox(bool)
{
QObject * pObjCheckBox = sender();
QString checkBoxName = pObjCheckBox->objectName();
QStringList nameList = checkBoxName.split('_');
if(QString("all") == nameList[1])
{
if(ui->checkBox_all->isChecked())
{
ui->checkBox_analog->setChecked(true);
ui->checkBox_digital->setChecked(true);
ui->checkBox_accuml->setChecked(true);
ui->checkBox_mix->setChecked(true);
}
else
{
ui->checkBox_analog->setChecked(false);
ui->checkBox_digital->setChecked(false);
ui->checkBox_accuml->setChecked(false);
ui->checkBox_mix->setChecked(false);
}
}
else
{
if(ui->checkBox_accuml->isChecked()&&
ui->checkBox_analog->isChecked()&&
ui->checkBox_digital->isChecked()&&
ui->checkBox_mix->isChecked())
{
ui->checkBox_all->setChecked(true);
}
else
{
ui->checkBox_all->setChecked(false);
}
}
filter();
}
void CRealDataWatch::addPointToTable(const SAddPointInfo &stPntInfo)
{
if((stPntInfo.nAddModel == 1 || stPntInfo.nAddModel == -1) && !ui->checkBox_append->isChecked())
{
m_mapPnt2Row.clear(); //< 清理掉测点与行号的缓存,在slot_deleteMaxPoint前删除提高效率
ui->tableWidget_point->setSelectionMode(QAbstractItemView::MultiSelection);
ui->tableWidget_point->selectAll();
slot_deleteMaxPoint();
ui->tableWidget_point->setSelectionMode(QAbstractItemView::SingleSelection);
}
if(stPntInfo.strTableName == QString("CONST"))
{
N_MessageBox::about(this,tr("提示"),tr("const类型测点未配置"));
return;
}
QString strFullTagName = stPntInfo.strTableName + "." + stPntInfo.strPntTagName;
if(m_mapPnt2Row.find(strFullTagName) != m_mapPnt2Row.end())
{
return;
}
m_pDpcdaForApp->subscribe(stPntInfo.strTableName.toLower().toStdString(),
stPntInfo.strPntTagName.toStdString(),
QString("value").toStdString());
m_pDpcdaForApp->subscribe(stPntInfo.strTableName.toLower().toStdString(),
stPntInfo.strPntTagName.toStdString(),
QString("status").toStdString());
uint rowCount = ui->tableWidget_point->rowCount();
ui->tableWidget_point->setRowCount(rowCount+1);
QTableWidgetItem * item = NULL;
m_mapPnt2Row[strFullTagName] = rowCount;
item = new QTableWidgetItem; //< 值,占位
item->setTextAlignment(Qt::AlignCenter);
ui->tableWidget_point->setItem(rowCount,1,item);
item = new QTableWidgetItem; //< 状态,占位
item->setTextAlignment(Qt::AlignCenter);
ui->tableWidget_point->setItem(rowCount,2,item);
item = new QTableWidgetItem;
item->setText(stPntInfo.strPntType);
item->setData(Qt::UserRole+1,stPntInfo.strTableName);
ui->tableWidget_point->setItem(rowCount,3,item);
item = new QTableWidgetItem;
item->setText(stPntInfo.strPntDesc);
item->setData(Qt::UserRole+1,stPntInfo.strPntTagName);
ui->tableWidget_point->setItem(rowCount,4,item);
item = new QTableWidgetItem;
item->setText(stPntInfo.strLocationDesc);
item->setData(Qt::UserRole+1,stPntInfo.nLocationId);
ui->tableWidget_point->setItem(rowCount,5,item);
item = new QTableWidgetItem;
item->setText(stPntInfo.strSubsystemDesc);
item->setData(Qt::UserRole+1,stPntInfo.nSubsystemId);
ui->tableWidget_point->setItem(rowCount,6,item);
item = new QTableWidgetItem;
item->setText(stPntInfo.strDevDesc);
item->setData(Qt::UserRole+1,stPntInfo.strDevTagName);
ui->tableWidget_point->setItem(rowCount,8,item);
item = new QTableWidgetItem;
item->setData(Qt::UserRole+1,0);
item->setText(stPntInfo.strDevGroupDesc);
ui->tableWidget_point->setItem(rowCount,7,item);
item = new QTableWidgetItem;
item->setData(Qt::UserRole+1,0);
item->setText(stPntInfo.strPntTagName);
ui->tableWidget_point->setItem(rowCount,0,item);
item = new QTableWidgetItem;
item->setText(stPntInfo.strRtuTag);
ui->tableWidget_point->setItem(rowCount,9,item);
item = new QTableWidgetItem;
item->setText(QString::number(stPntInfo.nSeqNo,10));
ui->tableWidget_point->setItem(rowCount,10,item);
item = new QTableWidgetItem;
item->setData(Qt::UserRole+1,stPntInfo.nIsControl);
QString strIsCtrlDesc = (stPntInfo.nIsControl == 0) ? tr("") : tr("");
item->setText(strIsCtrlDesc);
ui->tableWidget_point->setItem(rowCount,11,item);
}
void CRealDataWatch::slot_batchAddPoint(QVector<SAddPointInfoPtr> &vecPntInfo)
{
for(int nRow = 0;nRow < vecPntInfo.size();nRow++)
{
addPointToTable(*vecPntInfo[nRow]);
}
filter(); //< 统一执行一遍过滤
}
void CRealDataWatch::updateValueAndStatus(const int &nRow, const QString &strValue, const uint &nStatus)
{
QTableWidgetItem * itemValue = ui->tableWidget_point->item(nRow,1);
if(itemValue != NULL)
{
itemValue->setText(strValue);
}
QTableWidgetItem *itemStatus = ui->tableWidget_point->item(nRow,2);
if(itemStatus != NULL)
{
itemStatus->setText(getPointStatus(nStatus));
itemStatus->setData(Qt::UserRole+1,nStatus);
}
}
void CRealDataWatch::slot_updatePntRealData(iot_idl::SRealTimeDataPkg stRealData)
{
for(int i = 0; i < stRealData.stairtd_size();++i)
{
const ::iot_idl::SAiRealTimeData &aiStru = stRealData.stairtd(i);
auto pIter = m_mapPnt2Row.find("ANALOG." + QString::fromStdString(aiStru.strtagname()));
if(pIter == m_mapPnt2Row.end())
{
continue;
}
updateValueAndStatus(pIter.value(),dfToString(aiStru.fvalue()),aiStru.ustatus());
}
for(int i = 0; i < stRealData.stdirtd_size();++i)
{
const ::iot_idl::SDiRealTimeData &diStu = stRealData.stdirtd(i);
auto pIter = m_mapPnt2Row.find("DIGITAL." + QString::fromStdString(diStu.strtagname()));
if(pIter == m_mapPnt2Row.end())
{
continue;
}
updateValueAndStatus(pIter.value(),QString::number(diStu.nvalue(),10),diStu.ustatus());
}
for(int i = 0; i < stRealData.stpirtd_size();++i)
{
const ::iot_idl::SPiRealTimeData &piStu = stRealData.stpirtd(i);
auto pIter = m_mapPnt2Row.find("ACCUML." + QString::fromStdString(piStu.strtagname()));
if(pIter == m_mapPnt2Row.end())
{
continue;
}
updateValueAndStatus(pIter.value(),dfToString(piStu.dvalue()),piStu.ustatus());
}
for(int i = 0; i < stRealData.stmirtd_size();++i)
{
const ::iot_idl::SMiRealTimeData &miStu = stRealData.stmirtd(i);
auto pIter = m_mapPnt2Row.find("MIX." + QString::fromStdString(miStu.strtagname()));
if(pIter == m_mapPnt2Row.end())
{
continue;
}
updateValueAndStatus(pIter.value(),QString::number(miStu.nvalue(),10),miStu.ustatus());
}
}
void CRealDataWatch::filter()
{
QString tableNameList;
if(ui->checkBox_analog->isChecked())
{
tableNameList.append("ANALOG");
}
if(ui->checkBox_digital->isChecked())
{
tableNameList.append("DIGITAL");
}
if(ui->checkBox_accuml->isChecked())
{
tableNameList.append("ACCUML");
}
if(ui->checkBox_mix->isChecked())
{
tableNameList.append("MIX");
}
int rowCount = ui->tableWidget_point->rowCount();
for(int i = 0 ; i < rowCount ; ++i)
{
if(!ui->checkBox_all->isChecked()&& //如果全选框勾上了,就不用作类型过滤
!tableNameList.contains(ui->tableWidget_point->item(i,3)->data(Qt::UserRole+1).toString()))
{
ui->tableWidget_point->hideRow(i);
continue;
}
if(!filterByKeyWord(i))
{
ui->tableWidget_point->hideRow(i);
continue;
}
ui->tableWidget_point->showRow(i);
}
}
void CRealDataWatch::slot_pointFilter()
{
emit signal_paging();
filter();
}
bool CRealDataWatch::isBelongThisLocation(int &locationId, int &row)
{
if(row < 0 || row >= ui->tableWidget_point->rowCount())
{
return false;
}
if(ui->tableWidget_point->item(row,5)->data(Qt::UserRole+1).toInt() == locationId)
{
return true;
}
else
{
return false;
}
}
bool CRealDataWatch::isBelongThisSubSystem(int &subSystemId, int &row)
{
if(row < 0 || row >= ui->tableWidget_point->rowCount())
{
return false;
}
if(ui->tableWidget_point->item(row,6)->data(Qt::UserRole+1).toInt() == subSystemId)
{
return true;
}
else
{
return false;
}
}
bool CRealDataWatch::devNameIsContainKeyWord(QString &kv, int &row)
{
if(row < 0 || row >= ui->tableWidget_point->rowCount())
{
return false;
}
if(ui->tableWidget_point->item(row,8)->text().contains(kv))
{
return true;
}
else
{
return false;
}
}
bool CRealDataWatch::pointNameIsContainKeyWord(QString &kv, int row)
{
if(row < 0 || row >= ui->tableWidget_point->rowCount())
{
return false;
}
if(ui->tableWidget_point->item(row,4)->text().contains(kv))
{
return true;
}
else
{
return false;
}
}
//某一行,通过位置、或者专业、或者设备关键、或者测点关键字过滤某一行
bool CRealDataWatch::filterByKeyWord(int row)
{
QString kv = ui->lineEdit->text().trimmed();
if(0 == kv.compare(""))
{
return true;
}
else
{
return ( devNameIsContainKeyWord(kv,row) || pointNameIsContainKeyWord(kv,row));
}
}
QString CRealDataWatch::dfToString(float value)
{
QString text = QString::number(value,10,6);
return changeFomart(text);
}
QString CRealDataWatch::dfToString(double value)
{
QString text = QString::number(value,10,6);
return changeFomart(text);
}
QString CRealDataWatch::changeFomart(QString &text)
{
if(text.isEmpty())
{
return text;
}
QStringList list =text.split(".");
if(list.count() != 2)
{
return text;
}
QString dd = list[1];
dd.remove(QRegExp("0*$"));
if(dd.isEmpty())
{
return list[0];
}else
{
return QString("%1.%2").arg(list[0]).arg(dd);
}
}
void CRealDataWatch::slot_ctrlRealData(int _row, int)
{
int row = _row;
bool isCtl = ui->tableWidget_point->item(row,11)->data(Qt::UserRole+1).toBool();
int locationId = ui->tableWidget_point->item(row,5)->data(Qt::UserRole+1).toInt();
int subSystemId = ui->tableWidget_point->item(row,6)->data(Qt::UserRole+1).toInt();
QString tagName = ui->tableWidget_point->item(row,4)->data(Qt::UserRole+1).toString();
QString pointName = ui->tableWidget_point->item(row,4)->text();
QString tableName = ui->tableWidget_point->item(row,3)->data(Qt::UserRole+1).toString();
CRealDataControl *ctrlDialog = new CRealDataControl(locationId,
subSystemId,
pointName,
tagName,
tableName,
m_pSystemResources,
isCtl,
this);
ctrlDialog->setWindowTitle(pointName + tr(" 操作"));
ctrlDialog->exec();
delete ctrlDialog;
ctrlDialog = nullptr;
}
void CRealDataWatch::slot_deleteMaxPoint()
{
if(ui->tableWidget_point->rowCount()<= 0)
return ;
QModelIndexList modelIndexList = ui->tableWidget_point->selectionModel()->selectedRows(0);
if(modelIndexList.isEmpty())
{
N_MessageBox::warning(this, tr("提示"), tr("当前未选中任何项!"), N_MessageBox::Ok);
return;
}
std::sort(modelIndexList.begin(), modelIndexList.end());
for(int i = modelIndexList.size()-1;i>=0;i--)
{
deletePoint(modelIndexList.at(i).row());
}
//< 重新构建测点与行号的映射关系
m_mapPnt2Row.clear();
for(int nRow = 0; nRow < ui->tableWidget_point->rowCount(); nRow++)
{
QString tableName = ui->tableWidget_point->item(nRow,3)->data(Qt::UserRole+1).toString();
QString tagName = ui->tableWidget_point->item(nRow,4)->data(Qt::UserRole+1).toString();
m_mapPnt2Row[tableName + "." + tagName] = nRow;
}
}
void CRealDataWatch::slot_pointsitemClicked(QTableWidgetItem *item)
{
if(m_searchDialog != NULL)
{
//m_searchDialog->show();
}
else
{
m_searchDialog = new CStatusDialog(m_pSystemResources,this);
//m_searchDialog->show();
}
bool isDigital = QString("DIGITAL")
== ui->tableWidget_point->item(item->row(),3)
->data(Qt::UserRole+1).toString();
if(ui->tableWidget_point->item(item->row(),2)==0){
return;
}
int status =int(ui->tableWidget_point->item(item->row(),2)->data(Qt::UserRole+1).toDouble());
QString allName=ui->tableWidget_point->item(item->row(),0)->text();
int value=int(ui->tableWidget_point->item(item->row(),1) ->text().toDouble());
m_searchDialog->initData(isDigital ? 0:1,status,allName,value);
}
void CRealDataWatch::slot_selectTextEdit(QString allStatus,QString m_allName, int m_value)
{
emit signal_selectTextEdit(allStatus,m_allName,m_value);
}
void CRealDataWatch::getFilterAndPageInfo(QString &keyword,int &nCurPage, int &nPageSize)
{
keyword = ui->lineEdit->text().trimmed();
nCurPage = m_nCurPageNum;
nPageSize = m_nPageSize;
}
void CRealDataWatch::on_checkBox_paging_stateChanged(int arg1)
{
if(arg1 == 2) //选中
{
m_nCurPageNum = 1;
m_nPageSize = 100;
ui->lineEdit_pageNum->setText(QString::number(m_nCurPageNum));
}
else if(arg1 == 0)
{
m_nCurPageNum = 0;
m_nPageSize = 0;
}
}
void CRealDataWatch::on_btn_pre_clicked()
{
m_nCurPageNum = m_nCurPageNum > 1 ? (m_nCurPageNum-1) : 1;
ui->lineEdit_pageNum->setText(QString::number(m_nCurPageNum));
emit signal_paging();
}
void CRealDataWatch::on_btn_next_clicked()
{
++m_nCurPageNum;
ui->lineEdit_pageNum->setText(QString::number(m_nCurPageNum));
emit signal_paging();
}
void CRealDataWatch::on_btn_status_search_clicked()
{
if(m_searchDialog != NULL)
m_searchDialog->show();
else
{
m_searchDialog = new CStatusDialog(m_pSystemResources,this);
m_searchDialog->show();
}
}

View File

@ -0,0 +1,123 @@
#ifndef CREALDATAWATCH_H
#define CREALDATAWATCH_H
#include <QWidget>
#include <QCheckBox>
#include "pub_widget/MessageBox.h"
#include <QTableWidgetItem>
#include "CRealDataControl.h"
#include <QPushButton>
#include "CSystemResources.h"
#include "db_api_ex/CDbApi.h"
#include "dp_chg_data_api/CDpcdaForApp.h"
#include "pub_logger_api/logger.h"
#include "net_msg_bus_api/MsgBusApi.h"
#include "perm_mng_api/PermMngApi.h"
#include "DataProcMessage.pb.h"
namespace Ui {
class CRealDataWatch;
}
struct SAddPointInfo
{
int nLocationId; //< 位置ID
int nSubsystemId; //< 子系统ID
int nAddModel; //< 正常应该是添加模式,实际作用待确认
QString strLocationDesc; //< 位置描述
QString strSubsystemDesc; //< 子系统描述
QString strPntType; //< 测点类型
QString strTableName; //< 表名
QString strPntDesc; //< 测点描述
QString strPntTagName; //< 测点tag
QString strDevDesc; //< 设备描述
QString strDevTagName; //< 设备tag
QString strDevGroupDesc; //< 设备组描述
QString strRtuTag; //< RTU TAG
int nSeqNo; //< 测点表中的seq_no
int nIsControl; //< 测点表中的is_control
};
typedef QSharedPointer<SAddPointInfo> SAddPointInfoPtr;
class CStatusDialog;
class CRealDataWatch : public QWidget
{
Q_OBJECT
public slots:
void slot_batchAddPoint(QVector<SAddPointInfoPtr> &vecPntInfo);
void slot_updatePntRealData(iot_idl::SRealTimeDataPkg stRealData);
private slots:
void slot_checkBox(bool);
void slot_pointFilter();
void slot_ctrlRealData(int _row,int _col);
// void slot_textChanged(QTableWidgetItem*,QTableWidgetItem*);
void slot_deleteMaxPoint();
void slot_pointsitemClicked(QTableWidgetItem *item);
void slot_selectTextEdit(QString allStatus,QString m_allName, int m_value);
void on_checkBox_paging_stateChanged(int arg1);
void on_btn_pre_clicked();
void on_btn_next_clicked();
void on_btn_status_search_clicked();
public:
explicit CRealDataWatch(QWidget *parent = 0);
~CRealDataWatch();
void initWatch();
void setSystemResources(CSystemResources *);
void deletePoint(int row);
void getFilterAndPageInfo(QString &keyword,int &nCurPage,int &nPageSize);
signals:
void signal_selectTextEdit(QString allStatus,QString m_allName, int m_value);
void signal_paging();
protected:
void contextMenuEvent(QContextMenuEvent *event);
void keyPressEvent(QKeyEvent *event);
bool eventFilter(QObject *watched, QEvent *event);
private:
Ui::CRealDataWatch *ui;
iot_dbms::CDbApi *m_pObjDbInterface;
CSystemResources *m_pSystemResources;
iot_service::CDpcdaForApp *m_pDpcdaForApp;
bool m_bIsLgoin;
QPushButton *m_pSearchButton;
CStatusDialog* m_searchDialog;
int m_nCurPageNum;//2个值同时为0时不启用分页
int m_nPageSize;
QHash<QString,int> m_mapPnt2Row; //< 表名.测点tag -> 表中行号
private:
void initVariable();
void initView();
void initCheckBox();
void initTableWidgetPoint();
void initSignalSlot();
void filter();
bool isBelongThisLocation(int &locationId,int &row);
bool isBelongThisSubSystem(int &subSystemId,int &row);
bool devNameIsContainKeyWord(QString &kv,int &row);
bool pointNameIsContainKeyWord(QString &kv,int row);
bool filterByKeyWord(int row);
QString dfToString(float value);
QString dfToString(double value);
QString changeFomart(QString &text);
void addPointToTable(const SAddPointInfo &stPntInfo);
void updateValueAndStatus(const int &nRow,const QString &strValue,const uint &nStatus);
};
#endif // CREALDATAWATCH_H

View File

@ -0,0 +1,237 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CRealDataWatch</class>
<widget class="QWidget" name="CRealDataWatch">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>858</width>
<height>452</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="horizontalSpacing">
<number>1</number>
</property>
<property name="verticalSpacing">
<number>6</number>
</property>
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>6</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>测点描述:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit">
<property name="minimumSize">
<size>
<width>300</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer_10">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btn_status_search">
<property name="text">
<string>状态查询</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QCheckBox" name="checkBox_all">
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>全选</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_analog">
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>模拟量</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_digital">
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>数字量</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_accuml">
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>累积量</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_mix">
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>混合量</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QCheckBox" name="checkBox_paging">
<property name="text">
<string>启用分页</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_pre">
<property name="text">
<string>上一页</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_pageNum">
<property name="maximumSize">
<size>
<width>30</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_next">
<property name="text">
<string>下一页</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_6">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QCheckBox" name="checkBox_append">
<property name="text">
<string>累加式</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item>
<widget class="QTableWidget" name="tableWidget_point"/>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,63 @@
#include "CRealDatabaseItemInfo.h"
#include <QDebug>
CRealDatabaseItemInfo::CRealDatabaseItemInfo()
{
}
void CRealDatabaseItemInfo::initialize(const iot_idl::RdbRecord &msgRecord)
{
init(msgRecord);
}
void CRealDatabaseItemInfo::init(const iot_idl::RdbRecord &msgRecord)
{
m_data.clear();
for(int index(0);index<msgRecord.msgvaluearray_size();index++)
{
switch(msgRecord.msgvaluearray(index).edatatype())
{
case iot_idl::DataType::CN_DATATYPE_BOOL:
m_data.append(QString::number(msgRecord.msgvaluearray(index).bvalue()));
break;
case iot_idl::DataType::CN_DATATYPE_FLOAT:
m_data.append(QString::number(msgRecord.msgvaluearray(index).fvalue()));
break;
case iot_idl::DataType::CN_DATATYPE_INT32:
m_data.append(QString::number(msgRecord.msgvaluearray(index).nvalue()));
break;
case iot_idl::DataType::CN_DATATYPE_STRING:
{
m_data.append(QString::fromStdString(msgRecord.msgvaluearray(index).strvalue()));
break;
}
case iot_idl::DataType::CN_DATATYPE_UINT32:
m_data.append(QString::number(msgRecord.msgvaluearray(index).uvalue()));
break;
case iot_idl::DataType::CN_DATATYPE_INT64:
m_data.append(QString::number(msgRecord.msgvaluearray(index).lvalue()));
break;
case iot_idl::DataType::CN_DATATYPE_UINT64:
m_data.append(QString::number(msgRecord.msgvaluearray(index).ulvalue()));
break;
case iot_idl::DataType::CN_DATATYPE_DOUBLE:
m_data.append(QString::number(msgRecord.msgvaluearray(index).dvalue()));
break;
default:
break;
}
}
}
QString CRealDatabaseItemInfo::getDataByColumn(int column)
{
if(m_data.size()>column)
{
return m_data.at(column);
}
return QString();
}
void CRealDatabaseItemInfo::setData(int index, QString stValue)
{
m_data[index] = stValue;
}

View File

@ -0,0 +1,24 @@
#ifndef CREALDATABASEITEMINFO_H
#define CREALDATABASEITEMINFO_H
#include <QMetaType>
#include <QStringList>
#include <QSharedPointer>
#include "rdb_net_api/CRdbNetApi.h"
#include <QVector>
class CRealDatabaseItemInfo
{
public:
CRealDatabaseItemInfo();
void initialize(const iot_idl::RdbRecord &msgRecord);
void init(const iot_idl::RdbRecord &msgRecord);
QString getDataByColumn(int column);
void setData(int index,QString stValue);
public:
//公共
QVector<QString> m_data;
};
typedef QSharedPointer<CRealDatabaseItemInfo> RealDatabasePtr;
#endif // CREALDATABASEITEMINFO_H

View File

@ -0,0 +1,82 @@
#include "CRealDatabaseItemModel.h"
CRealDatabaseItemModel::CRealDatabaseItemModel(const QStringList &tableHeader, QObject *parent)
: QAbstractTableModel(parent),
m_header(tableHeader)
{
}
QVariant CRealDatabaseItemModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if(Qt::DisplayRole == role && Qt::Horizontal == orientation)
{
return QVariant(m_header.at(section));
}
return QVariant();
}
int CRealDatabaseItemModel::rowCount(const QModelIndex &parent) const
{
if (parent.isValid())
return 0;
return m_data.count();
}
int CRealDatabaseItemModel::columnCount(const QModelIndex &parent) const
{
if (parent.isValid())
return 0;
return m_header.count();
}
QVariant CRealDatabaseItemModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid() || index.row() >= m_data.count())
return QVariant();
int column1 = index.column();
int row1 = index.row();
if(Qt::TextAlignmentRole == role)
{
return QVariant(Qt::AlignLeft | Qt::AlignVCenter);
}
else if(Qt::DisplayRole == role)
{
return queryData(column1,row1);
}
return QVariant();
}
QVariant CRealDatabaseItemModel::queryData(int column, int row) const
{
RealDatabasePtr ptr =m_data.at(row);
return ptr->getDataByColumn(column);
}
void CRealDatabaseItemModel::clear()
{
beginResetModel();
m_data.clear();
endResetModel();
}
void CRealDatabaseItemModel::setHead(QStringList listHead)
{
m_header = listHead;
}
void CRealDatabaseItemModel::setTable(QString tableName)
{
}
void CRealDatabaseItemModel::slotDataRefresh(QList<RealDatabasePtr> data)
{
beginResetModel();
m_data = data;
endResetModel();
}

View File

@ -0,0 +1,34 @@
#ifndef CREALDATABASEITEMMODEL_H
#define CREALDATABASEITEMMODEL_H
#include <QAbstractTableModel>
#include "CRealDatabaseItemInfo.h"
class CRealDatabaseItemModel : public QAbstractTableModel
{
Q_OBJECT
public:
explicit CRealDatabaseItemModel(const QStringList &tableHeader, QObject *parent = nullptr);
// Header:
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
// Basic functionality:
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
QVariant queryData(int column,int row) const;
void clear();
void setHead(QStringList listHead);
void setTable(QString tableName);
public slots:
void slotDataRefresh(QList<RealDatabasePtr> data);
private:
QStringList m_header;
QList<RealDatabasePtr> m_data;
};
#endif // CREALDATABASEITEMMODEL_H

View File

@ -0,0 +1,966 @@
#include "CRealDatabaseSelect.h"
#include "ui_CRealDatabaseSelect.h"
#include <QListWidgetItem>
#include <QDebug>
#include "db_sysinfo_api/CDbSysInfo.h"
CRealDatabaseSelect::CRealDatabaseSelect(QWidget *parent) :
QWidget(parent),
ui(new Ui::CRealDatabaseSelect),
m_pSystemResources(NULL),
m_pObjDbInterface(NULL)
{
ui->setupUi(this);
ui->comboBox_location->setView(new QListView());
ui->comboBox_sub->setView(new QListView());
// ui->listWidget_column->setHidden(true);
// ui->listWidget_tableName->setHidden(true);
// ui->label_2->setHidden(true);
// ui->label_3->setHidden(true);
// ui->checkBox_allColmn->setHidden(true);
ui->listWidget_column->setHidden(true);
ui->listWidget_tableName->setHidden(true);
ui->label_2->setHidden(true);
ui->label_3->setHidden(true);
ui->checkBox_allColmn->setHidden(true);
}
CRealDatabaseSelect::~CRealDatabaseSelect()
{
releaseRsouces();
delete ui;
}
//初始化整个的实时数据库现实页面
bool CRealDatabaseSelect::initRealDb(CSystemResources *_p)
{
if(!initVariable(_p))
{
qDebug() << QString(tr("实时数据库选择初始化变量失败"))<<endl;
return false;
}
initLocationInfo();
initSignalAndSlot();
initView();
slot_selectTreeGevice(0);
return true;
}
// 选择应用时对用的槽函数
void CRealDatabaseSelect::slot_selectSub(int )
{
ui->comboBox_tableName->clear();
int subId = ui->comboBox_sub->currentData().toInt();
QStringList *pTableNameList = m_subIdToTableNameMap.value(subId);
QListWidgetItem *pItem;
if(NULL != pTableNameList)
{
for(int i = 0 ; i < pTableNameList->size(); ++i)
{
pItem = new QListWidgetItem();
pItem->setText(m_tableNameDescMap[pTableNameList->at(i)]);
pItem->setData(Qt::UserRole+1,subId);
ui->listWidget_tableName->addItem(pItem);
}
};
ui->comboBox_tableName->addItem("accuml",subId);
ui->comboBox_tableName->addItem("analog",subId);
ui->comboBox_tableName->addItem("digital",subId);
ui->comboBox_tableName->addItem("mix",subId);
ui->comboBox_tableName->addItem("fes_rtu_para",subId);
ui->comboBox_tableName->addItem("fes_channel_para",subId);
}
//选择表时对应的槽函数
void CRealDatabaseSelect::slot_selectTable(QListWidgetItem * _item)
{
//slot_checkBoxAllStateChanged(1);
QMap<int,bool> isShowOrHideMap;
isShowOrHideMap.clear();
showColumns(_item,isShowOrHideMap);
showTable(_item,isShowOrHideMap);
QMap<int,bool>::iterator it = isShowOrHideMap.begin();
while (it != isShowOrHideMap.end()) {
int state = 0;
if(it.value())
{
state = 1;
}
emit signal_showOrHideColumn(it.key(),state);
it++;
}
}
void CRealDatabaseSelect::slot_checkBoxAllStateChanged(int state)
{
qDebug() << "state:"<<state<<endl;
QListWidgetItem *item;
QCheckBox *box;
bool flag = false;
if(0 == state)
{
flag = false;
}
else
{
flag = true;
}
int columnCount = ui->listWidget_column->count();
for(int i = 0; i < columnCount; ++i)
{
item = ui->listWidget_column->item(i);
box = (QCheckBox*)ui->listWidget_column->itemWidget(item);
box->setChecked(flag);
}
}
void CRealDatabaseSelect::slot_columnCheckBoxStateChanged(int state)
{
Q_UNUSED(state);
int nColumn = ((QCheckBox *)QObject::sender())->objectName().toInt();
// emit signal_showOrHideColumn(nColumn,state);
}
void CRealDatabaseSelect::slot_selectTable(int)
{
if(ui->comboBox_location->currentData().toInt() < 0)
{
return ;
}
if(ui->listWidget_tableName->currentItem())
{
QMap<int,bool> isShowOrHideMap;
isShowOrHideMap.clear();
showColumns(ui->listWidget_tableName->currentItem(),isShowOrHideMap);
showTable(ui->listWidget_tableName->currentItem(),isShowOrHideMap);
QMap<int,bool>::iterator it = isShowOrHideMap.begin();
while (it != isShowOrHideMap.end()) {
int state = 0;
if(it.value())
{
state = 1;
}
emit signal_showOrHideColumn(it.key(),state);
it++;
}
}
//showTable(ui->comboBox_tableName->currentText().toStdString());
if(ui->comboBox_tableName->currentText()=="fes_rtu_para"||ui->comboBox_tableName->currentText()=="fes_channel_para")
{
QTreeWidgetItemIterator it(ui->treeWidget_device);
while(*it){
(*it)->setHidden(true);
it++;
}
}
else
{
QTreeWidgetItemIterator it(ui->treeWidget_device);
while(*it){
(*it)->setHidden(false);
it++;
}
}
}
//初始化成员变量
bool CRealDatabaseSelect::initVariable(CSystemResources *_p)
{
if(!initSystemResources(_p))
{
qDebug() << "系统资源指针失败"<<endl;
return false;
}
if(!initDbInterface())
{
qDebug() << "初始化数据库接口失败"<<endl;
return false;
}
if(!initMapLocation())
{
qDebug() << "初始化车站信息失败"<<endl;
return false;
}
if(!initSubToApp())
{
qDebug() << "初始化专业和应用映射失败" <<endl;
return false;
}
if(!initMapSubSystemIdToDesc())
{
qDebug() << "初始化专业信息失败" <<endl;
return false;
}
if(!initMapSubIdToTableName())
{
qDebug() << "初始化专业ID到对应的表名列表失败" <<endl;
return false;
}
if(!initMapTableInfo())
{
qDebug() << "初始化表信息(列名,列数据类型)失败" <<endl;
return false;
}
return true;
}
//初始化系统资源的指针
bool CRealDatabaseSelect::initSystemResources(CSystemResources *_p)
{
m_pSystemResources = _p;
if(NULL == m_pSystemResources)
{
return false;
}
return true;
}
//初始化数据库的接口
bool CRealDatabaseSelect::initDbInterface()
{
if(NULL == m_pSystemResources)
{
return false;
}
m_pObjDbInterface = m_pSystemResources->getDbInterface();
if(NULL == m_pObjDbInterface )
{
qDebug() << "初始化系统资源失败" <<endl;
return false;
}
return true;
}
bool CRealDatabaseSelect::initMapLocation()
{
m_mapLocationToDomain.clear();
m_mapLocationIdToDesc.clear();
if(NULL == m_pObjDbInterface)
{
return false;
}
QSqlQuery ret;
QString strSql = "SELECT LOCATION_ID,DOMAIN_ID,DESCRIPTION FROM sys_model_location_info ORDER BY LOCATION_ID";
m_pObjDbInterface->execute(strSql,ret);
if(ret.isActive())
{
int locationId = -1;
int domainId =-1;
QString locationDesc;
while(ret.next())
{
locationId = ret.value("LOCATION_ID").toInt();
locationDesc = ret.value("DESCRIPTION").toString();
domainId = ret.value("DOMAIN_ID").toInt();
m_mapLocationToDomain[locationId] = domainId;
m_mapLocationIdToDesc[locationId] = locationDesc;
}
return true;
}
else
{
return false;
}
}
bool CRealDatabaseSelect::initSubToApp()
{
m_mapSubToApp.clear();
if(NULL == m_pObjDbInterface)
{
return false;
}
QSqlQuery ret;
QString strSql = "SELECT APP_ID,SUB_SYSTEM FROM sys_model_app_info ORDER BY APP_ID";
m_pObjDbInterface->execute(strSql,ret);
if(ret.isActive())
{
int appId = -1;
while(ret.next())
{
appId = ret.value("APP_ID").toInt();
QString subArray = ret.value("SUB_SYSTEM").toString();
QStringList subList = subArray.split(",");
for(int index(0);index<subList.size();index++)
{
QString sub =subList.at(index);
int subId = sub.toInt();
if(subId > CN_AppId_COMAPP)
{
m_mapSubToApp[subId] = appId;
}
}
}
return true;
}
else
{
return false;
}
}
//初始化一个专业IDsubSystemId对应描述
bool CRealDatabaseSelect::initMapSubSystemIdToDesc()
{
m_mapSubSystemIdToDesc.clear();
if(NULL == m_pObjDbInterface)
{
return false;
}
QSqlQuery ret;
QString strSql = "SELECT SUB_SYSTEM_ID,DESCRIPTION FROM sys_model_sub_system_info ORDER BY SUB_SYSTEM_ID";
m_pObjDbInterface->execute(strSql,ret);
if(ret.isActive())
{
int subId = -1;
QString subDesc;
while(ret.next())
{
subId = ret.value("SUB_SYSTEM_ID").toInt();
subDesc = ret.value("DESCRIPTION").toString();
if(subId >CN_AppId_COMAPP)
{
m_mapSubSystemIdToDesc.insert(subId,subDesc);
}
}
return true;
}
else
{
return false;
}
}
//初始化应用包含哪些表的map
bool CRealDatabaseSelect::initMapSubIdToTableName()
{
//由于关系库删除rt_开头的表所以此处需要改动jxd,2020-4-1
foreach (int subId, m_mapSubSystemIdToDesc.keys()) {
std::vector<std::string> tableVec;
if(!CDbSysInfo::getAllRdbTableNameBySubsystemId(subId,tableVec))
{
LOGERROR("获取应用[%d]下的表失败!",subId);
return false;
}else
{
QMap<int,QStringList *>::iterator it = m_subIdToTableNameMap.find(subId);
if(it == m_subIdToTableNameMap.end())
{
m_subIdToTableNameMap.insert(subId,new QStringList);
}
for(int index(0);index<tableVec.size();index++)
{
QString tabName = QString::fromStdString(tableVec.at(index));
m_tableNameDescMap.insert(tabName,tabName);
m_subIdToTableNameMap.value(subId)->append(tabName);
}
}
}
return true;
}
//初始化MapTableInfo
bool CRealDatabaseSelect::initMapTableInfo()
{
//由于关系库删除rt_开头的表所以此处需要改动jxd,2020-4-1
foreach (QString tableName, m_tableNameDescMap.keys()) {
std::vector<SColumnModeInfo> verColumnName;
std::string tabName = tableName.toStdString();
if(!CDbSysInfo::getAllRdbColumnNameByTableName(tabName,verColumnName))
{
LOGERROR("获取表[%s]字段信息失败!",tableName.toStdString().c_str());
return false;
}else
{
m_mapTableInfo.insert(tableName,new QVector<QString>);
for(int index(0);index<verColumnName.size();index++)
{
QString name = QString::fromStdString(verColumnName.at(index).strName);
QString desc = QString::fromStdString(verColumnName.at(index).strDesc);
if((tableName=="accuml"||tableName=="analog"||tableName=="digital"||tableName=="mix")&&name=="VALUE")
{
m_mapTableInfo.value(tableName)->insert(2,name.toLower());
}
else if((tableName=="accuml"||tableName=="analog"||tableName=="digital"||tableName=="mix")&&name=="STATUS")
{
m_mapTableInfo.value(tableName)->insert(3,name.toLower());
}
else if((tableName=="fes_rtu_para"||tableName=="fes_channel_para")&&name=="STATUS")
{
m_mapTableInfo.value(tableName)->insert(3,name.toLower());
}
else
{
m_mapTableInfo.value(tableName)->append(name.toLower());
}
QHash<QString,QMap<QString,QString> >::iterator it =m_mapTableColumnDesc.find(tableName);
if(it ==m_mapTableColumnDesc.end())
{
QMap<QString,QString> map;
map.insert(name.toLower(),desc);
m_mapTableColumnDesc.insert(tableName,map);
}else
{
it.value().insert(name.toLower(),desc);
}
}
}
}
return true;
}
//连接信号和槽函数
void CRealDatabaseSelect::initSignalAndSlot()
{
connect(ui->comboBox_sub,SIGNAL(currentIndexChanged(int)),
this,SLOT(slot_selectSub(int)));
connect(ui->listWidget_tableName,SIGNAL(itemClicked(QListWidgetItem*)),
this,SLOT(slot_selectTable(QListWidgetItem*)));
// connect(ui->comboBox_tableName,SIGNAL(currentIndexChanged(int),this,SLOT(slot_selectTable(int)));
// connect(ui->checkBox_allColmn,SIGNAL(stateChanged(int)),
//this,SLOT(slot_checkBoxAllStateChanged(int)));
connect(ui->comboBox_location,SIGNAL(currentIndexChanged(int)),this,SLOT(slot_selectTable(int)));
connect(ui->comboBox_location,SIGNAL(currentIndexChanged(int)),this,SLOT(slot_selectTreeGevice(int)));
connect(ui->comboBox_sub,SIGNAL(currentIndexChanged(int)),this,SLOT(slot_selectTreeGevice(int)));
connect(ui->comboBox_tableName,SIGNAL(currentIndexChanged(int)),this,SLOT(slot_selectListWidget(int)));
connect(ui->treeWidget_device,SIGNAL(itemClicked(QTreeWidgetItem*,int)),this,SLOT(solt_showPoint(QTreeWidgetItem*,int)));
connect(ui->lineEdit_devgroup,SIGNAL(textChanged(QString)),this,SLOT(solt_showTreeWidget(QString)));
}
void CRealDatabaseSelect::initView()
{
initSubInfo();
}
void CRealDatabaseSelect::initLocationInfo()
{
QMap<int,QString>::iterator it;
int locationId;
QString locationDesc;
for(it = m_mapLocationIdToDesc.begin(); it != m_mapLocationIdToDesc.end() ; ++it)
{
locationId = it.key();
locationDesc = it.value();
ui->comboBox_location->addItem(locationDesc,locationId);
}
}
void CRealDatabaseSelect::initSubInfo()
{
QMap<int,QString>::iterator it;
int subId;
QString subDesc;
for(it = m_mapSubSystemIdToDesc.begin(); it != m_mapSubSystemIdToDesc.end() ; ++it)
{
subId = it.key();
subDesc = it.value();
ui->comboBox_sub->addItem(subDesc,subId);
}
}
//初始化列信息
void CRealDatabaseSelect::initColumnInfo()
{
ui->checkBox_allColmn->setChecked(false);
}
//释放一些资源NEW 出来的内存
void CRealDatabaseSelect::releaseRsouces()
{
QMap<int,QStringList*>::iterator it;
for(it = m_subIdToTableNameMap.begin(); it != m_subIdToTableNameMap.end(); ++it)
{
delete it.value();
}
QMap<QString,QVector<QString> *>::iterator tableInfoIt;
for(tableInfoIt = m_mapTableInfo.begin(); tableInfoIt != m_mapTableInfo.end() ; ++tableInfoIt)
{
delete tableInfoIt.value();
}
}
//展示一个表的列
void CRealDatabaseSelect::showColumns(QListWidgetItem *_item,QMap<int,bool> &isShowOrHideMap)
{
ui->checkBox_allColmn->setChecked(true);
QListWidgetItem *tableItem = _item;
ui->listWidget_column->clear();
QString tableName = m_tableNameDescMap.key(tableItem->text());
bool isPointTable = false;
if(tableName == "analog" || tableName == "digital" ||
tableName == "mix" || tableName == "accuml")
{
isPointTable =true;
}
if(m_mapTableInfo.end() != m_mapTableInfo.find(tableName))
{
QVector<QString> *p = m_mapTableInfo.value(tableName);
QVector<QString>::iterator it;
int i = 0;
for(it = p->begin(); it != p->end();++it,++i)
{
QListWidgetItem *columnItem = new QListWidgetItem();
QCheckBox *box = new QCheckBox(*it,ui->listWidget_column);
box->setToolTip(m_mapTableColumnDesc.value(tableName).value(*it));
box->setObjectName(QString::number(i));
box->setCheckable(true);
if(isPointTable)
{
if((*it)== "tag_name" || (*it)== "description" ||
(*it)== "device" || (*it)== "value" || (*it)=="seq_no" || (*it)=="rtu_tag" || (*it)== "status")
{
isShowOrHideMap[i] = true;
box->setChecked(true);
}else
{
isShowOrHideMap[i] = true;
box->setChecked(false);
}
}else
{
isShowOrHideMap[i] = true;
box->setChecked(true);
}
ui->listWidget_column->addItem(columnItem);
ui->listWidget_column->setItemWidget(columnItem,box);
//connect(box,SIGNAL(stateChanged(int)),
//this,SLOT(slot_columnCheckBoxStateChanged(int)));
}
}
}
void CRealDatabaseSelect::showTable(QListWidgetItem *_item, QMap<int, bool> &isShowOrHideMap)
{
QListWidgetItem *tableItem = _item;
int subId = ui->comboBox_sub->currentData().toInt();
int locationId = ui->comboBox_location->currentData().toInt();
int domainId = m_mapLocationToDomain.value(locationId);
int appId = m_mapSubToApp.value(subId);
QString tableName = m_tableNameDescMap.key(tableItem->text());
if(m_mapTableInfo.end() != m_mapTableInfo.find(tableName))
{
QVector<QString> *p = m_mapTableInfo.value(tableName);
emit signal_showTable(tableName,p,domainId,locationId,appId,subId,isShowOrHideMap); //哪张表,有哪些列(指针),应用ID
}
}
void CRealDatabaseSelect::showTable(QString tableName)
{
Q_UNUSED(tableName);
/*
int subId = ui->comboBox_sub->currentData().toInt();
int locationId = ui->comboBox_location->currentData().toInt();
int domainId = m_mapLocationToDomain.value(locationId);
int appId = m_mapSubToApp.value(subId);
if(m_mapTableInfo.end() != m_mapTableInfo.find(tableName))
{
QVector<QString> *p = m_mapTableInfo.value(tableName);
//emit signal_showTable();
}
*/
}
void CRealDatabaseSelect::slot_selectTreeGevice(int)
{
uint locationId = ui->comboBox_location->currentData().toUInt();
uint subSystemId = ui->comboBox_sub->currentData().toUInt();
ui->treeWidget_device->clear();
// QTreeWidgetItem *firstItem=new QTreeWidgetItem();
// firstItem->setText(0,ui->comboBox_location->currentText());
// ui->treeWidget_devGroup->addTopLevelItem(firstItem);
QSqlQuery devGroupTable;
devGroupTable.clear();
QString sqlStr = QString("SELECT a.DESCRIPTION dev_group_name,b.DESCRIPTION device_name, b.tag_name allName,b.GROUP_TAG_NAME GROUP_TAG_NAME,"
" b.TAG_NAME tga_name,a.LOCATION_ID location_id,a.SUB_SYSTEM sub_system FROM dev_group a,dev_info b"
" where a.LOCATION_ID= %1 and a.SUB_SYSTEM= %2 and "
"a.TAG_NAME =b.GROUP_TAG_NAME order by a.DESCRIPTION ").arg(locationId).arg(subSystemId);
m_pObjDbInterface->execute(sqlStr, devGroupTable);
if(devGroupTable.isActive())
{
QVariant val;
val.clear();
QString dev_group_name ="";
QString device_name = "";
QString lastDevGroupName="";
QString tag_name="";
QString location_id="";
QString sub_system="";
QString allName="";
QString group_tag_name="";
QTreeWidgetItem *lastItem=new QTreeWidgetItem();
while(devGroupTable.next())
{
val = devGroupTable.value("dev_group_name");
dev_group_name = val.toString();
val = devGroupTable.value("GROUP_TAG_NAME");
group_tag_name = val.toString();
val = devGroupTable.value("device_name");
device_name = val.toString();
val = devGroupTable.value("tga_name");
tag_name = val.toString();
val = devGroupTable.value("location_id");
location_id = val.toString();
val = devGroupTable.value("sub_system");
sub_system = val.toString();
val = devGroupTable.value("allName");
allName = val.toString();
if(lastDevGroupName!=dev_group_name){
QTreeWidgetItem *nodeItem = new QTreeWidgetItem(ui->treeWidget_device);
nodeItem->setText(0,dev_group_name);
nodeItem->setData(0,Qt::UserRole+1,group_tag_name);
nodeItem->setSelected(false);
QTreeWidgetItem *childItem = new QTreeWidgetItem(nodeItem);
childItem->setText(0,device_name);
childItem->setData(0,Qt::UserRole+1,tag_name);
childItem->setData(0,Qt::UserRole+2,location_id);
childItem->setData(0,Qt::UserRole+3,sub_system);
childItem->setData(0,Qt::UserRole+4,allName);
lastDevGroupName=dev_group_name;
lastItem=nodeItem;
}
else{
QTreeWidgetItem *childItem = new QTreeWidgetItem(lastItem);
childItem->setText(0,device_name);
childItem->setData(0,Qt::UserRole+1,tag_name);
childItem->setData(0,Qt::UserRole+2,location_id);
childItem->setData(0,Qt::UserRole+3,sub_system);
childItem->setData(0,Qt::UserRole+4,allName);
}
}
}
ui->treeWidget_device->setCurrentItem(ui->treeWidget_device->topLevelItem(0));
if(ui->comboBox_tableName->currentText()=="fes_rtu_para"||ui->comboBox_tableName->currentText()=="fes_channel_para")
{
QTreeWidgetItem *a=new QTreeWidgetItem;
solt_showPoint(a,0);
QTreeWidgetItemIterator it(ui->treeWidget_device);
while(*it){
(*it)->setHidden(true);
it++;
}
}
else
{
QTreeWidgetItemIterator it(ui->treeWidget_device);
while(*it){
(*it)->setHidden(false);
it++;
}
}
}
void CRealDatabaseSelect::slot_selectListWidget(int)
{
if(ui->comboBox_tableName->currentText()=="fes_rtu_para"||ui->comboBox_tableName->currentText()=="fes_channel_para")
{
QTreeWidgetItemIterator it(ui->treeWidget_device);
while(*it){
(*it)->setHidden(true);
it++;
}
}
else
{
QTreeWidgetItemIterator it(ui->treeWidget_device);
while(*it){
(*it)->setHidden(false);
it++;
}
}
QMap<int,bool> isShowOrHideMap;
int subId = ui->comboBox_sub->currentData().toInt();
int locationId = ui->comboBox_location->currentData().toInt();
int domainId = m_mapLocationToDomain.value(locationId);
int appId = m_mapSubToApp.value(subId);
QString tableName = m_tableNameDescMap.key(ui->comboBox_tableName->currentText());
if(m_mapTableInfo.end() != m_mapTableInfo.find(tableName))
{
QVector<QString> *p = m_mapTableInfo.value(tableName);
if(ui->treeWidget_device->topLevelItemCount()>1)
{
if(ui->treeWidget_device->currentItem()->childCount()>0)
{
QString devGroupName=ui->treeWidget_device->currentItem()->data(0,Qt::UserRole+1).toString();
QString deviceName="all";
emit signal_showTable(tableName,p,domainId,locationId,appId,subId,isShowOrHideMap,devGroupName,deviceName);
}
else
{
QString devGroupName=ui->treeWidget_device->currentItem()->parent()->data(0,Qt::UserRole+1).toString();
QString deviceName=ui->treeWidget_device->currentItem()->data(0,Qt::UserRole+4).toString();
emit signal_showTable(tableName,p,domainId,locationId,appId,subId,isShowOrHideMap,devGroupName,deviceName);
}
}
emit signal_showTable(tableName,p,domainId,locationId,appId,subId,isShowOrHideMap); //哪张表,有哪些列(指针),应用ID
}
}
void CRealDatabaseSelect::solt_showPoint(QTreeWidgetItem *, int)
{
QMap<int,bool> isShowOrHideMap;
int subId = ui->comboBox_sub->currentData().toInt();
int locationId = ui->comboBox_location->currentData().toInt();
int domainId = m_mapLocationToDomain.value(locationId);
int appId = m_mapSubToApp.value(subId);
QString tableName = m_tableNameDescMap.key(ui->comboBox_tableName->currentText());
if(m_mapTableInfo.end() != m_mapTableInfo.find(tableName))
{
QVector<QString> *p = m_mapTableInfo.value(tableName);
if(ui->treeWidget_device->topLevelItemCount()>1)
{
if(ui->treeWidget_device->currentItem()->childCount()>0)
{
QString devGroupName=ui->treeWidget_device->currentItem()->data(0,Qt::UserRole+1).toString();
QString deviceName="all";
emit signal_showTable(tableName,p,domainId,locationId,appId,subId,isShowOrHideMap,devGroupName,deviceName);
}
else
{
QString devGroupName=ui->treeWidget_device->currentItem()->parent()->data(0,Qt::UserRole+1).toString();
QString deviceName=ui->treeWidget_device->currentItem()->data(0,Qt::UserRole+4).toString();
emit signal_showTable(tableName,p,domainId,locationId,appId,subId,isShowOrHideMap,devGroupName,deviceName);
}
}
emit signal_showTable(tableName,p,domainId,locationId,appId,subId,isShowOrHideMap); //哪张表,有哪些列(指针),应用ID
}
}
void CRealDatabaseSelect::solt_showTreeWidget(QString)
{
slot_selectTreeGevice(0);
QString keyWord = ui->lineEdit_devgroup->text().trimmed();
QString tag_name = ui->lineEdit_devgroup->text();
if(allSelect(tag_name)||preciseSelect())
{
return;
}
QTreeWidgetItemIterator it(ui->treeWidget_device);
while(*it){
(*it)->setHidden(false);
it++;
}
if(keyWord.isEmpty())
{
return;
}
else
{
QTreeWidgetItemIterator itor(ui->treeWidget_device);
while(*itor){
if((*itor)->text(0).contains(keyWord,Qt::CaseInsensitive))
{
int k=(*itor)->childCount();
for(int i=0;i<k;i++)
{
itor++;
}
itor++;
continue;
}
else
{
//确认子节点是否匹配
bool childBool=0;
int k=(*itor)->childCount();
for(int i=0;i<k;i++)
{
if((*itor)->child(i)->text(0).contains(keyWord,Qt::CaseInsensitive))
{
childBool=1;
}
else
{
(*itor)->child(i)->setHidden(true);
}
}
if(childBool==false)
{
(*itor)->setHidden(true);
}
k=(*itor)->childCount();
for(int i=0;i<k;i++)
{
itor++;
}
}
itor++;
}
}
}
bool CRealDatabaseSelect::allSelect(QString tag_name)
{
bool pointBool=false;
QString analogTableName = "analog";
QString digitalTableName = "digital";
QString accumlTableName = "accuml";
QString mixTableName = "mix";
QStringList tableNameList;
QStringList pointType;
tableNameList.append(analogTableName);
pointType.append(tr("模拟量"));
tableNameList.append(digitalTableName);
pointType.append(tr("数字量"));
tableNameList.append(accumlTableName);
pointType.append(tr("累积量"));
tableNameList.append(mixTableName);
pointType.append(tr("混合量"));
uint locationId ;
uint subSystemId ;
QString tableName ;
QString pointDescription ;
QString pointTagName ;
QString point_type;
//QString devDescription = ui->listWidget_device->currentItem()->text();
//QString devTagName = ui->listWidget_device->currentItem()->data(Qt::UserRole+1).toString();
QString devDescription;
QString devTagName ;
QString descDevG ;
QString allName;
QString strSql1 = "select a.TAG_NAME allName,a.DESCRIPTION pointDescription,a.SEQ_NO,a.LOCATION_ID locationId,"
"a.SUB_SYSTEM subSystemId ,a.RTU_TAG,a.device devTagName,di.DESCRIPTION devDescription,dg.DESCRIPTION descDevG "
"from ";
QString strSql2 = QString(" a ,dev_info di ,dev_group dg where "
" a.TAG_NAME = ")+QString("'")+ tag_name+"' and"
" a.DEVICE =di.TAG_NAME and di.GROUP_TAG_NAME =dg.TAG_NAME ";
uint rowCount = 0;
QSqlQuery pointTable;
for(int i = 0 ; i < 4; i++)
{
pointTable.clear();
m_pObjDbInterface->execute(strSql1+tableNameList[i]+strSql2,pointTable);
if(pointTable.isActive())
{
rowCount += pointTable.size();
while(pointTable.next())
{
pointBool=true;
locationId=pointTable.value("locationId").toInt();
subSystemId=pointTable.value("subSystemId").toInt();
allName=pointTable.value("allName").toString();
pointDescription=pointTable.value("pointDescription").toString();
descDevG=pointTable.value("descDevG").toString();
devDescription=pointTable.value("devDescription").toString();
pointTagName=allName;
tableName=tableNameList[i];
point_type=pointType[i];
devTagName=pointTable.value("devTagName").toString();
}
}
}
if(pointBool==false){
return false;
}
for(int k=0;k<ui->comboBox_location->count();k++)
{
if(ui->comboBox_location->itemData(k).toInt()==locationId)
{
ui->comboBox_location->setCurrentIndex(k);
}
}
for(int k=0;k<ui->comboBox_sub->count();k++)
{
if(ui->comboBox_sub->itemData(k).toInt()==subSystemId)
{
ui->comboBox_sub->setCurrentIndex(k);
}
}
for(int k=0;k<ui->comboBox_tableName->count();k++)
{
if(ui->comboBox_tableName->itemText(k)==tableName)
{
ui->comboBox_tableName->setCurrentIndex(k);
}
}
ui->treeWidget_device->clear();
slot_selectTreeGevice(0);
QString devGroupName="";
QString deviceName="";
QTreeWidgetItemIterator itor(ui->treeWidget_device);
while(*itor){
bool childNumber=false;
if((*itor)->text(0).contains(descDevG,Qt::CaseInsensitive))
{
int itorCount=(*itor)->childCount();
(*itor)->setHidden(false);
for(int i=0;i<itorCount;i++)
{
if((*itor)->child(i)->text(0).contains(devDescription,Qt::CaseInsensitive))
{
devGroupName =(*itor)->child(i)->parent()->data(0,Qt::UserRole+1).toString();
deviceName=(*itor)->child(i)->data(0,Qt::UserRole+4).toString();
childNumber=true;
(*itor)->child(i)->setHidden(false);
}
else{
(*itor)->child(i)->setHidden(true);
}
}
if(childNumber==false){
(*itor)->setHidden(true);
}
for(int i=0;i<=itorCount;i++){
itor++;
}
continue;
}
(*itor)->setHidden(true);
itor++;
}
QVector<QString> *p = m_mapTableInfo.value(tableName);
int subId = ui->comboBox_sub->currentData().toInt();
int domainId = m_mapLocationToDomain.value(locationId);
int appId = m_mapSubToApp.value(subId);
QMap<int,bool> isShowOrHideMap;
emit signal_showTable(tableName,p,domainId,locationId,appId,subId,isShowOrHideMap,devGroupName,deviceName);
return true;
}
bool CRealDatabaseSelect::preciseSelect()
{
QStringList devTagSplit;
QString analogTableName = "ANALOG";
QString digitalTableName = "DIGITAL";
QString accumlTableName = "ACCUML";
QString mixTableName = "MIX";
QString currTextEdit=ui->lineEdit_devgroup->text();
devTagSplit=currTextEdit.split(".");
for(int i=0;i<devTagSplit.size();i++){
if(devTagSplit.at(i).contains(analogTableName,Qt::CaseInsensitive)
||devTagSplit.at(i).contains(digitalTableName,Qt::CaseInsensitive)
||devTagSplit.at(i).contains(accumlTableName,Qt::CaseInsensitive)
||devTagSplit.at(i).contains(mixTableName,Qt::CaseInsensitive))
{
return(allSelect(devTagSplit.at(i+1)+"."+devTagSplit.at(i+2)+"."+devTagSplit.at(i+3)));
}
}
return false;
}

View File

@ -0,0 +1,86 @@
#ifndef CREALDATABASESELECT_H
#define CREALDATABASESELECT_H
#include <QWidget>
#include <QListWidgetItem>
#include <QMap>
#include "CSystemResources.h"
#include "toolCommon.h"
#include<QTreeWidget>
namespace Ui {
class CRealDatabaseSelect;
}
class CRealDatabaseSelect : public QWidget
{
Q_OBJECT
public:
explicit CRealDatabaseSelect(QWidget *parent = 0);
~CRealDatabaseSelect();
bool initRealDb(CSystemResources *_p);
private slots:
void slot_selectSub(int _index);
void slot_selectTable(QListWidgetItem *);
void slot_checkBoxAllStateChanged(int state);
void slot_columnCheckBoxStateChanged(int state);
void slot_selectTable(int);
void slot_selectTreeGevice(int);
void slot_selectListWidget(int);
void solt_showPoint(QTreeWidgetItem*,int);
void solt_showTreeWidget(QString);
signals:
void signal_showTable(QString, QVector<QString> *,int,int,int,int,QMap<int,bool>,QString,QString);
void signal_showTable(QString, QVector<QString> *,int,int,int,int,QMap<int,bool>);
void signal_showOrHideColumn(int nColumn,int state);
private:
bool initVariable(CSystemResources *_p);
bool initSystemResources(CSystemResources *_p);
bool initDbInterface();
//bool initMapAppIdToAppTag();
bool initMapLocation();
bool initSubToApp();
bool initMapSubSystemIdToDesc();
bool initMapSubIdToTableName();
bool initMapTableInfo();
bool preciseSelect();
bool allSelect(QString tag_name);
void initSignalAndSlot();
void initView();
void initLocationInfo();
void initSubInfo();
void initColumnInfo();
void releaseRsouces();
void showColumns(QListWidgetItem *, QMap<int, bool> &isShowOrHideMap);
void showTable(QListWidgetItem *,QMap<int, bool> &isShowOrHideMap);
void showTable(QString);
private:
CSystemResources *m_pSystemResources;
iot_dbms::CDbApi *m_pObjDbInterface;
QMap<int,QString> m_mapAppIdToAppTag; //<- 应用ID和应用名
QMap<QString,QString> m_mapAppTagToAppDesc; //<- 应用名和应用描述
QMap<int,int> m_mapLocationToDomain; //车站id和域id
QMap<int,int> m_mapSubToApp; //专业id和应用id
QMap<int,QString> m_mapLocationIdToDesc; //<- 车站
QMap<int,QString> m_mapSubSystemIdToDesc; //<- 子系统ID和描述
QMap<int,QStringList *> m_subIdToTableNameMap; //<- 这个专业ID下有哪些表
QMap<QString,QVector<QString> *> m_mapTableInfo; //<- 每一张表的信息,包括这张表的所有列名和其数据类型
QHash<QString,QMap<QString,QString> > m_mapTableColumnDesc; //
QMap<QString,QString> m_tableNameDescMap; //表名和表描述
Ui::CRealDatabaseSelect *ui;
};
#endif // CREALDATABASESELECT_H

View File

@ -0,0 +1,247 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CRealDatabaseSelect</class>
<widget class="QWidget" name="CRealDatabaseSelect">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>524</width>
<height>706</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>0</height>
</size>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLabel" name="label_4">
<property name="minimumSize">
<size>
<width>45</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>45</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>位置</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox_location">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="minimumSize">
<size>
<width>45</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>45</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>专业</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox_sub">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QLabel" name="label_6">
<property name="minimumSize">
<size>
<width>45</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>45</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>表</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox_tableName"/>
</item>
</layout>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_devgroup"/>
</item>
<item>
<widget class="QTreeWidget" name="treeWidget_device">
<column>
<property name="text">
<string>设备组</string>
</property>
</column>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="spacing">
<number>4</number>
</property>
<item>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QLabel" name="label_2">
<property name="minimumSize">
<size>
<width>45</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>45</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>表</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QListWidget" name="listWidget_tableName"/>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>4</number>
</property>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="label_3">
<property name="minimumSize">
<size>
<width>45</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>45</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>列</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QCheckBox" name="checkBox_allColmn">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>所有列</string>
</property>
</widget>
</item>
<item>
<widget class="QListWidget" name="listWidget_column"/>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,148 @@
#ifndef CREALDATABASESHOW_H
#define CREALDATABASESHOW_H
#include "toolCommon.h"
#include "CSystemResources.h"
#include "rdb_net_api/CRdbNetApi.h"
#include "net_msg_bus_api/MsgBusApi.h"
#include "rdb_api/CRdbAccessEx.h"
#include "CRealDatabaseItemInfo.h"
#include <QWidget>
#include <QVector>
#include <QThread>
#include "CRdbWorker.h"
#include "CStatusDialog.h"
class CRealDatabaseItemModel;
namespace Ui {
class CRealDatabaseShow;
}
class CStatusDialog;
class CRealDatabaseShow : public QWidget
{
Q_OBJECT
public:
explicit CRealDatabaseShow(QWidget *parent = 0);
~CRealDatabaseShow();
private:
void releaseRsouces();
public:
bool initRealDatabaseShow(CSystemResources *_p);
private:
bool initVariable(CSystemResources *_p);
bool initSystemResources(CSystemResources *_p);
bool initNetRdbApi();
bool initMapLocationIdDesc();
bool initMapLocSubDevGInfo();
bool initMapLocSubRtuInfo();
bool initMapDevGDevInfo();
bool initMapRtuFesDevInfo();
void initSignalAndSlot();
void initView();
void initFilter();
void initComboxDevG();
void initComboxDevice();
void initComboxRtu();
void initComboxFesDev();
signals:
void sigTimerShot(const bool bStop);
void sigDataRefresh(QList<RealDatabasePtr>);
void sigSearch(int domainId,int appid,iot_idl::RdbQuery rdbQuery,QString tableName,int searchWays);
void signal_selectTextEdit(QString allQString);
public slots:
void slotTimerShot(const bool start);
void slot_showTable(QString, QVector<QString> *,int _domainId,int _locationId,int _appId, int _subId,QMap<int,bool> isLineShow,QString devGroupName,QString deviceName);
void slot_showOrHindColumn(int nColumn, int state);
void slot_filterDevg(int _index);
void slot_filterRtu(int _index);
void slot_filterDev(int _index);
void slot_filterFesDev(int _index);
void auto_brush();
void not_auto_brush();
void slotAutoResult(const bool & isSuccess,const iot_idl::RdbRet & retMsg,const QString& tableName);
void slotNotAutoResult(const bool &isSuccess, const iot_idl::RdbRet &retMsg, const QString &tableName);
void statusSearch();
void showStatus(const QModelIndex &index);
private:
bool makeData(const iot_idl::RdbRet &retMsg);
void setItemData(int &row,int &column,const iot_idl::SVariable &);
QStringList getTableHead();
void setTableHead();
QString dataTypeToQString(const iot_idl::SVariable &sVariable);
void hideDevGroup();
void showDevGroup();
void hideDev();
void showDev();
void hideRtu();
void showRtu();
void hideFesDev();
void showFesDev();
void search();
bool makeQuery(iot_idl::RdbQuery &msgQuery);
bool makeUpdateQuery(iot_idl::RdbQuery &msgQuery);
bool makeCondition(iot_idl::RdbQuery &msgQuery);
private:
Ui::CRealDatabaseShow *ui;
CRealDatabaseItemModel *m_model; //< 模型
QMap<QString,RealDatabasePtr> m_showdata; //< 模型数据
CSystemResources *m_pSystemResources; //< 系统资源类指针
QVector<QString> * m_pVecTableInfo; //< 表的列名数组指针
iot_dbms::CDbApi *m_pObjDbInterface; //< mysql数据库的接口指针
int m_nsubId; //< 专业ID
int m_nDomainId; //< 域ID
int m_nlocationId; //< 车站id
int m_nappId; //< 应用id
QString m_strTableName; //< 表的名
QString m_devGroupName; //< 设备组名
QString m_deviceName; //< 设备名
QMap<int,QString> m_locationIdDescMap; //< <车站id,描述>
QMap<QString,QVector<QString> > m_locSubDevGMap; //< <车站id.专业id,DevVec>
QMap<QString,QVector<QString> > m_locSubRtuMap; //< <车站id.专业id,RtuVec>
QMap<QString,QString> m_devGDescMap; //< <设备组标签,描述>
QMap<QString,QString> m_devDescMap; //< <设备标签,描述>
QMap<QString,QString> m_rtuDescMap; //< <Rtu标签,描述>
QMap<QString,QString> m_fesDevDescMap; //< <前置设备标签,描述>
QMap<QString,QVector<QString> > m_devGDevMap; //< <设备组标签,DevVec>
QMap<QString,QVector<QString> > m_rtuFesDevMap; //< <rtu标签,FesDevVec>
/**
* @brief ()
* @brief RTU
* @brief location_id m_bLocationFilter生效 , sub_system m_bSubFilter生效
* @brief device m_bDevFilter生效,m_bRtuFilter和 m_bFesDevFilter (m_bDevFilter生效则足以缓解网络查询负担,)
* @brief device() , dev_tag() ,m_bFesDevFilter生效,m_bRtuFilter不生效(dev_tag是由rtu_tag得到,,)
* @brief device,dev_tagrtu_tag,m_bRtuFilter生效,
* @brief ,
*/
bool m_bLocationFilter; //< 是否车站过滤 (m_strTableName 中包含location_id字段时可用)
bool m_bSubFilter; //< 是否专业过滤 (m_strTableName 中包含sub_system字段时可用)
bool m_bDevFilter; //< 是否设备过滤 (m_strTableName 中包含device字段时可用)
bool m_bRtuFilter; //< 是否RTU过滤 (m_strTableName 中包含rtu_tag字段时可用)
bool m_bFesDevFilter; //< 是否前置设备过滤 (m_strTableName 中包含dev_tag字段时可用)
bool m_canSearch; //< 主线程是否可以通知查询线程查询(自动刷新需要判断)
QTimer *m_timer; //< 定时器 默认1秒 定时查询Ai Di Mi Pi
QThread *m_rdbThread; //< 查询线程
CRdbWorker *m_worker; //< 工作线程
CStatusDialog *m_searchDialog;
};
#endif // CREALDATABASESHOW_H

View File

@ -0,0 +1,228 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CRealDatabaseShow</class>
<widget class="QWidget" name="CRealDatabaseShow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>783</width>
<height>626</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>1</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>6</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2" stretch="0">
<property name="spacing">
<number>6</number>
</property>
<item>
<widget class="QWidget" name="widget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label_devG">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>45</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>设备组</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox_devGroup">
<property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToContents</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_dev">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>30</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>设备</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox_device">
<property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToContents</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_rtu">
<property name="minimumSize">
<size>
<width>30</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>30</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>RTU</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox_rtu">
<property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToContents</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_fesDev">
<property name="minimumSize">
<size>
<width>60</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>60</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>前置设备</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox_fesDev">
<property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToContents</enum>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="statusSearch">
<property name="text">
<string>状态查询</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QStackedWidget" name="stackedWidget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="page">
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QTableWidget" name="tableWidget_showTable"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_2">
<layout class="QGridLayout" name="gridLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QTableView" name="tableView"/>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,96 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CRealEvent</class>
<widget class="QWidget" name="CRealEvent">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>437</width>
<height>243</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QTableView" name="tableView"/>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QCheckBox" name="checkBox">
<property name="text">
<string>滚动刷新</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_2">
<property name="text">
<string>筛选状态</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>筛选</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_2">
<property name="text">
<string>打印</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>事件条数</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,162 @@
#include <QFile>
#include "CSelectAppDlg.h"
#include "ui_CSelectAppDlg.h"
#include <QListView>
#include <QAbstractItemView>
#include "common/Common.h"
CSelectAppDlg::CSelectAppDlg(QWidget *parent) :
QDialog(parent),
ui(new Ui::CSelectAppDlg)
{
ui->setupUi(this);
this->setWindowTitle(tr("专业选择"));
ui->AppcomboBox->setView(new QListView());
Qt::WindowFlags flags=Qt::Window;
// flags |=Qt::WindowMinMaxButtonsHint|Qt::WindowCloseButtonHint;
flags |=Qt::WindowCloseButtonHint;
setWindowFlags(flags);
setFixedSize(this->width(),this->height());//固定窗口大小
setStyleSheet("QComboBox QAbstractItemView::item{height: 30px;}");
memset(m_IpAddr,0,sizeof(m_IpAddr));
connect(ui->ConnectButton,SIGNAL(clicked()),this,SLOT(OnConnect()));
connect(ui->DisConnectButton,SIGNAL(clicked()),this,SLOT(OnDisConnect()));
connect(&m_TcpClient,SIGNAL(NetConnected()),this,SLOT(ConnectOk()));
connect(&m_TcpClient,SIGNAL(NetDisConnected()),this,SLOT(DisConnectOk()));
connect(ui->AppcomboBox,&QComboBox::currentTextChanged,this,&CSelectAppDlg::OnAppId);
ui->ConnectButton->setEnabled(true);
ui->DisConnectButton->setEnabled(false);
m_IpStr.clear();
}
CSelectAppDlg::~CSelectAppDlg()
{
delete ui;
}
void CSelectAppDlg::SelectApp(const std::vector<FesAppName> &vecAppName)
{
m_vecName = vecAppName;
if(ui->AppcomboBox->count()==0)
{
if(m_vecName.size()<=0)
{
ui->AppcomboBox->addItem("AppName");
ui->NetPortNo->setText("18001");
}
else
{
int i;
for(i=0;i<m_vecName.size();i++)
{
if(m_vecName[i].appName.toStdString() != CN_AppName_BASE
&& m_vecName[i].appName.toStdString() != CN_AppName_PUBLIC
&& m_vecName[i].appName.toStdString() != CN_AppName_COMAPP)
ui->AppcomboBox->addItem(m_vecName[i].appName);
}
}
}
QFile file("FesSimIP.txt");
if(file.exists())
{
if(file.open(QFile::ReadOnly | QFile::Text))
{
m_IpStr = file.readAll();
file.close();
}
}
else
{
if(m_IpStr.isEmpty())
m_IpStr = "192.168.77.18";
std::string tempStr = m_IpStr.toStdString();
if(file.open(QFile::WriteOnly | QFile::Append))
{
file.write(tempStr.c_str(),tempStr.length());
file.close();
}
}
ui->IPAddr->setText(m_IpStr);
}
void CSelectAppDlg::OnConnect()
{
QString tempStr ;
tempStr = ui->NetPortNo->text();
bool ok;
m_NetPortNo = tempStr.toInt(&ok,10);
if(ok == false)
{
QPalette pe;
pe.setColor(QPalette::WindowText,Qt::red);
ui->ConnectStatusStr->setPalette(pe);
ui->ConnectStatusStr->setText(tr("网络端口错误,无法连接网络。"));
return;
}
m_IpStr = ui->IPAddr->text();
QByteArray ba=m_IpStr.toLocal8Bit();
strcpy(m_IpAddr,ba.data());
m_TcpClient.Init(m_IpAddr,m_NetPortNo);
if(m_TcpClient.TcpConnect()==iotSuccess)
{
}
else
{
}
//save FesSimIp.txt
QFile file("FesSimIP.txt");
if(file.exists())
{
std::string tempStr = m_IpStr.toStdString();
if(file.open(QFile::WriteOnly | QFile::Truncate))
{
file.write(tempStr.c_str(),tempStr.length());
file.close();
}
}
}
void CSelectAppDlg::OnDisConnect()
{
m_TcpClient.TcpClose();
}
void CSelectAppDlg::ConnectOk()
{
QPalette pe;
pe.setColor(QPalette::WindowText,Qt::green);
ui->ConnectStatusStr->setPalette(pe);
ui->ConnectStatusStr->setText(tr("网络连接"));
ui->ConnectButton->setEnabled(false);
ui->DisConnectButton->setEnabled(true);
}
void CSelectAppDlg::DisConnectOk()
{
QPalette pe;
pe.setColor(QPalette::WindowText,Qt::red);
ui->ConnectStatusStr->setPalette(pe);
ui->ConnectStatusStr->setText(tr("网络断开"));
ui->ConnectButton->setEnabled(true);
ui->DisConnectButton->setEnabled(false);
}
void CSelectAppDlg::OnAppId(const QString &text)
{
for(size_t i=0;i<m_vecName.size();i++)
{
if(text == m_vecName[i].appName)
{
ui->NetPortNo->setText(QString::number(18000+m_vecName[i].appId));
break;
}
}
}

View File

@ -0,0 +1,41 @@
#ifndef CSELECTAPPDLG_H
#define CSELECTAPPDLG_H
#include <QDialog>
#include "FesSimProtocol.h"
#include "CTcpClient.h"
namespace Ui {
class CSelectAppDlg;
}
class CSelectAppDlg : public QDialog
{
Q_OBJECT
public:
explicit CSelectAppDlg(QWidget *parent = 0);
~CSelectAppDlg();
int m_AppType;
CTcpClient m_TcpClient;
int m_NetPortNo;
char m_IpAddr[64];
void SelectApp(const std::vector<FesAppName> &vecAppName);
private slots:
void OnConnect();
void OnDisConnect();
void ConnectOk();
void DisConnectOk();
void OnAppId(const QString &);
private:
Ui::CSelectAppDlg *ui;
std::vector<FesAppName> m_vecName;
QString m_IpStr;
};
#endif // CSELECTAPPDLG_H

View File

@ -0,0 +1,263 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CSelectAppDlg</class>
<widget class="QDialog" name="CSelectAppDlg">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>356</width>
<height>303</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<widget class="QWidget" name="layoutWidget">
<property name="geometry">
<rect>
<x>50</x>
<y>50</y>
<width>245</width>
<height>188</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label_5">
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>专业名称:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="AppcomboBox">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label">
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>FES IP地址</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="IPAddr">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QLabel" name="label_2">
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>FES网络端口</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="NetPortNo">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLabel" name="label_4">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>连接状态:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="ConnectStatusStr">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="ConnectButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>连接</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="DisConnectButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>断开连接</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,154 @@
#include "CStatusDialog.h"
#include "ui_CStatusDialog.h"
#include "pub_widget/MessageBox.h"
CStatusDialog::CStatusDialog(CSystemResources *_p,QWidget *parent) :
CustomUiDialog(parent),
ui(new Ui::CStatusDialog)
{
m_pSystemResources = _p;
ui->setupUi(this);
setWindowTitle( "状态查询" );
if(initDbInterface())
{
loadData();
}
ui->comboBox->setView(new QListView());
connect(ui->pushButton,&QPushButton::clicked,this,&CStatusDialog::search);
connect(ui->comboBox,&QComboBox::currentTextChanged,this,&CStatusDialog::switchWidget);
initCombox();
CustomUiDialog::setAutoLayout(true);
}
CStatusDialog::~CStatusDialog()
{
delete ui;
}
bool CStatusDialog::initDbInterface()
{
m_pObjDbInterface = m_pSystemResources->getDbInterface();
if(m_pObjDbInterface != NULL)
return true;
return false;
}
void CStatusDialog::initData(int type, int status,QString allName,int value)
{
ui->comboBox->setCurrentIndex(type);
ui->lineEdit->setText(QString::number((uint)status));
m_allName=allName;
m_value=value;
search();
}
QString CStatusDialog::all_textEditQstring()
{
return all_textEditQst;
}
void CStatusDialog::initCombox()
{
ui->comboBox->clear();
// ui->comboBox->addItem("menu1");
// ui->comboBox->addItem("menu2");
// ui->comboBox->addItem("menu3");
// ui->comboBox->addItem(QString::number(m_dict_menu.size()));
foreach (QString menu, m_dict_menu.keys()) {
if(menu == "数字量状态" || menu == "模拟量状态")
ui->comboBox->addItem(menu);
}
}
void CStatusDialog::loadData()
{
m_dict_menu.clear();
QSqlQuery sqlQueue;
m_pObjDbInterface->execute("SELECT MENU_NAME,ACTUAL_VALUE,DISPLAY_VALUE FROM dict_menu_info", sqlQueue);
if(sqlQueue.isActive())
{
while(sqlQueue.next())
{
QString menu = sqlQueue.value("MENU_NAME").toString();
int value = sqlQueue.value("ACTUAL_VALUE").toInt();
QString desc = sqlQueue.value("DISPLAY_VALUE").toString();
QMap<QString,QMap<int,QString > >::iterator it =m_dict_menu.find(menu);
if(it != m_dict_menu.end())
{
QMap<int,QString >& valueDesc = it.value();
valueDesc[value] = desc;
}else
{
QMap<int,QString > valueDesc;
valueDesc[value] = desc;
m_dict_menu[menu] = valueDesc;
}
}
}
}
void CStatusDialog::setCheck(quint64 status)
{
QString allStatus = QString("%1,").arg(status);
for ( int i=0; i<m_listItem.count(); i++ )
{
QListWidgetItem *item = m_listItem.at(i);
if ( status & quint64(1)<<(item->data(Qt::UserRole).toInt()) )
{
item->setCheckState(Qt::Checked);
item->setTextColor(Qt::red);
allStatus=allStatus+item->text()+"";
}
else
{
item->setCheckState(Qt::Unchecked);
item->setTextColor(Qt::black);
}
}
allStatus.chop(1);
allStatus=allStatus+"";
emit signal_selectTextEdit(allStatus,m_allName,m_value);
all_textEditQst="当前标签为"+m_allName+" 值为"
+QString::number(m_value)+" 状态为"
+allStatus;
}
void CStatusDialog::resetView()
{
ui->listWidget->clear();
}
void CStatusDialog::search()
{
QString lineText = ui->lineEdit->text();
if(lineText.isEmpty())
{
N_MessageBox::warning(this,tr("提示"),tr("请输入状态值!"));
}
quint64 status = lineText.toULongLong();
setCheck(status);
}
void CStatusDialog::switchWidget(const QString &text)
{
resetView();
m_listItem.clear();
QMap<int,QString> valueDesc = m_dict_menu.value(text);
QMap<int,QString>::iterator it =valueDesc.begin();
while (it != valueDesc.end()) {
QListWidgetItem *item;
item = new QListWidgetItem();
item->setFlags(item->flags() & ~Qt::ItemIsEnabled & ~Qt::ItemIsSelectable);
// item->setText(QString::number(it.key())+":"+ it.value());
item->setText(it.value());
item->setData(Qt::UserRole,it.key());
item->setCheckState(Qt::Unchecked);
ui->listWidget->addItem(item);
m_listItem.append(item);
it++;
}
}

View File

@ -0,0 +1,45 @@
#ifndef CSTATUSDIALOG_H
#define CSTATUSDIALOG_H
#include "pub_widget/CustomDialog.h"
#include "CSystemResources.h"
#include <QCheckBox>
#include <QVBoxLayout>
#include <QListWidgetItem>
namespace Ui {
class CStatusDialog;
}
class CStatusDialog : public CustomUiDialog
{
Q_OBJECT
public:
explicit CStatusDialog(CSystemResources *_p,QWidget *parent);
~CStatusDialog();
bool initDbInterface();
void initData(int type,int status,QString allName,int value);
QString all_textEditQstring();
private:
void initCombox();
void loadData();
void setCheck(quint64 status);
void resetView();
private slots:
void search();
void switchWidget(const QString& text);
signals:
void signal_selectTextEdit(QString allStatus,QString m_allName,int m_value);
private:
Ui::CStatusDialog *ui;
iot_dbms::CDbApi *m_pObjDbInterface;
CSystemResources *m_pSystemResources;
QMap<QString,QMap<int,QString > > m_dict_menu;
QList<QListWidgetItem *> m_listItem;
QString all_textEditQst;
QVector<QString> m_allNameVec;
QString m_allName;
int m_value;
};
#endif // CSTATUSDIALOG_H

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CStatusDialog</class>
<widget class="QDialog" name="CStatusDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>328</width>
<height>481</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="1" column="0">
<widget class="QListWidget" name="listWidget"/>
</item>
<item row="0" column="0">
<widget class="QWidget" name="widget" native="true">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>80</height>
</size>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>类型:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="comboBox"/>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="lineEdit"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>值:</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QPushButton" name="pushButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>46</height>
</size>
</property>
<property name="text">
<string>查询</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,209 @@
#include "CSystemResources.h"
#include <QString>
CSystemResources::CSystemResources()
{
m_pObjDbInterface = NULL;
}
CSystemResources::~CSystemResources()
{
releaseResources();
}
//设置权限用户Id
void CSystemResources::setPermUserId(int &_userID)
{
m_nPermUserID = _userID;
}
//设置权限用户组ID
void CSystemResources::setPermUserGroupId(int &_userGroupId)
{
m_nPermUserGroupID = _userGroupId;
}
//初始化一些系统资源
int CSystemResources::initSystemResources()
{
initLogSystem();
if(!initMsgBus())
{
qDebug() << QObject::tr("初始化消息总线失败") <<endl;
return -1;
}
if(!initDbInterface())
{
qDebug() << QObject::tr("初始化数据库接口失败") <<endl;
return -2;
}
if(!initLcId2DomainId())
{
return -3;
}
if(!initSysVariable())
{
return -4;
}
return 0;
}
//得到数据库的接口
iot_dbms::CDbApi *CSystemResources::getDbInterface()
{
return m_pObjDbInterface;
}
//locationId到DomainID的映射
int CSystemResources::getDomainIdByLocationId(int locationId)
{
return m_mapLocationId2DomainId[locationId];
}
//通过子系统得到应用信息
int CSystemResources::getAppInfoBySubSystemId(int SubSystemId, iot_public::SAppInfo &appInfo)
{
m_pSysInfoInterfacePtr->getAppInfoBySubsystemId(SubSystemId,appInfo);
return 0;
}
//得到进程名
QString CSystemResources::getStrSrcTag()
{
return m_strSrcTag;
}
//得到当前域ID
int CSystemResources::getSrcDomainId()
{
return m_nSrcDomainID;
}
//得到当前应用ID
int CSystemResources::getAppId()
{
return m_nAppID;
}
//得到当前主机名
QString CSystemResources::getHostName()
{
return m_strHostName;
}
//得到当前实例名
QString CSystemResources::getInstName()
{
return m_strInstName;
}
//得到通讯器名
QString CSystemResources::getCommName()
{
return m_strCommName;
}
//得到权限用户ID
int CSystemResources::getPermUserId()
{
return m_nPermUserID;
}
//得到权限用户组ID
int CSystemResources::getPermUserGroupId()
{
return m_nPermUserGroupID;
}
void CSystemResources::initLogSystem()
{
//iot_public::StartLogSystem("PUBLIC", "debugTool");
}
bool CSystemResources::initMsgBus()
{
//< 初始化消息总线库
if (!(iot_net::initMsgBus("debugToolAppName", "debugToolProcessName")))
{
qDebug() << "初始化消息总线失败" <<endl;
return false;
}
if(!iot_service::CDpcdaForApp::initGlobalThread())
{
qDebug() << "初始化消息总线全局处理线程失败" <<endl;
return false;
}
return true;
}
bool CSystemResources::initDbInterface()
{
m_pObjDbInterface = new iot_dbms::CDbApi(DB_CONN_MODEL_READ);
if(!m_pObjDbInterface->open())
{
qDebug() << "数据库接口打开失败" <<endl;
return false;
}
return true;
}
bool CSystemResources::initLcId2DomainId()
{
QSqlQuery locIdAndDomId;
QString strSql = "SELECT LOCATION_ID,DOMAIN_ID FROM sys_model_location_info ORDER BY LOCATION_ID";
m_pObjDbInterface->execute(strSql,locIdAndDomId);
if(locIdAndDomId.isActive())
{
int locationId;
int domainId;
while(locIdAndDomId.next())
{
locationId = locIdAndDomId.value("LOCATION_ID").toInt();
domainId = locIdAndDomId.value("DOMAIN_ID").toInt();
m_mapLocationId2DomainId[locationId] = domainId;
}
}
else
{
qDebug() << "查询表sys_model_location_info失败" <<endl;
return false;
}
return true;
}
bool CSystemResources::initSysVariable()
{
iot_public::SNodeInfo stNodeInfo;
iot_public::createSysInfoInstance(m_pSysInfoInterfacePtr);
if(NULL == m_pSysInfoInterfacePtr)
{
return false;
}
m_pSysInfoInterfacePtr->getLocalNodeInfo(stNodeInfo);
m_strSrcTag = SRC_PROCESS_NAME;
m_nSrcDomainID = stNodeInfo.nDomainId;
m_nAppID = APP_ID;
m_strHostName = QString::fromStdString(stNodeInfo.strName);
m_strInstName = SRC_INST_NMAE;
m_strCommName = SRC_COMM_NAME;
m_nPermUserID = -1;
m_nPermUserGroupID = -1;
return true;
}
void CSystemResources::releaseResources()
{
m_pSysInfoInterfacePtr.reset();
if(NULL != m_pObjDbInterface)
{
m_pObjDbInterface->close();
m_pObjDbInterface = NULL;
}
iot_service::CDpcdaForApp::releaseGlobalThread();
//< 释放消息总线库
iot_net::releaseMsgBus();
//< 停止日志系统
//iot_public::StopLogSystem();
}

View File

@ -0,0 +1,78 @@
#ifndef CSYSTEMRESOURCES_H
#define CSYSTEMRESOURCES_H
#include <QDebug>
#include <QMap>
#include "db_api_ex/CDbApi.h"
#include "pub_sysinfo_api/SysInfoApi.h"
#include "pub_logger_api/logger.h"
#include "net_msg_bus_api/MsgBusApi.h"
#include "dp_chg_data_api/CDpcdaForApp.h"
#include "Common.h"
#define SRC_PROCESS_NAME "debug_tool"
#define APP_ID 4
#define SRC_INST_NMAE "debugToolInst"
#define SRC_COMM_NAME "debugToolCtlComm"
//#define USER_ID 1
//#define USER_GROUP_ID 1
class CSystemResources
{
public:
CSystemResources();
~CSystemResources();
void setPermUserId(int &_userID);
void setPermUserGroupId(int &_userGroupId);
int initSystemResources();
iot_dbms::CDbApi *getDbInterface();
int getDomainIdByLocationId(int locationId);
int getAppInfoBySubSystemId(int SubSystemId,iot_public::SAppInfo &appInfo);
QString getStrSrcTag();
int getSrcDomainId();
int getAppId();
QString getHostName();
QString getInstName();
QString getCommName();
int getPermUserId();
int getPermUserGroupId();
void releaseResources();
private:
void initLogSystem();
bool initMsgBus();
bool initDbInterface();
bool initLcId2DomainId();
bool initSysVariable();
private:
iot_dbms::CDbApi *m_pObjDbInterface;
QMap<int,int> m_mapLocationId2DomainId;
QString m_strSrcTag ; //源标签(即发送端进程名)
int m_nSrcDomainID ; //消息发送源域名
int m_nAppID ; //所属应用ID
QString m_strHostName ; //发送端主机名
QString m_strInstName ; //发送端实例名
QString m_strCommName ;
int m_nPermUserID ; //发送端用户ID
int m_nPermUserGroupID ; //发送端用户组ID
iot_public::CSysInfoInterfacePtr m_pSysInfoInterfacePtr;
};
#endif // CSYSTEMRESOURCES_H

View File

@ -0,0 +1,73 @@
#include "CUpdateThread.h"
#include "pub_logger_api/logger.h"
CUpdateThread::CUpdateThread(QObject *parent) : QThread(parent)
{
bIsRun = true;
m_pMbComm = new iot_net::CMbCommunicator("updatePoint");
//< 获取通讯器名称(可选)
qDebug() << "My communicator name is " << m_pMbComm->getName().c_str() << endl;
if (m_pMbComm->addSub(0, CH_SCADA_TO_HMI_DATA_CHANGE))
qDebug() << "addSub() successed !" << endl;
else
qDebug() << "addSub() failed !" << endl;
}
CUpdateThread::~CUpdateThread()
{
stopThread();
quit();
wait();
m_pMbComm->delSub(0, CH_SCADA_TO_HMI_DATA_CHANGE);
delete m_pMbComm;
m_pMbComm = nullptr;
}
void CUpdateThread::run()
{
while (bIsRun)
{
if(m_pMbComm->recvMsg(objMsg,1000))
{
if(!objMsg.isValid())
{
continue;
}
switch (objMsg.getChannelID())
{
case CH_SCADA_TO_HMI_DATA_CHANGE:
if(iot_idl::MT_DP_CHANGE_DATA == objMsg.getMsgType())
{
parserMsg(objMsg);
}
break;
default:
break;
}
}
}
}
void CUpdateThread::stopThread()
{
bIsRun = false;
}
int CUpdateThread::parserMsg(const iot_net::CMbMessage &msg)
{
::iot_idl::SRealTimeDataPkg changeDataPackage;
try
{
if(changeDataPackage.ParseFromArray(msg.getDataPtr(),(int)msg.getDataSize()))
{
signal_updatePntRealData(changeDataPackage);
}
}
catch(...)
{
return 0;
}
return 1;
}

View File

@ -0,0 +1,34 @@
#ifndef CUPDATETHREAD_H
#define CUPDATETHREAD_H
#include <QThread>
#include <QDebug>
#include "net_msg_bus_api/MsgBusApi.h"
#include "MessageChannel.h"
#include "DataProcMessage.pb.h"
class CUpdateThread : public QThread
{
Q_OBJECT
public:
explicit CUpdateThread(QObject *parent = 0 );
~CUpdateThread();
virtual void run() Q_DECL_OVERRIDE;
void stopThread();
signals:
void signal_updatePntRealData(iot_idl::SRealTimeDataPkg stRealData);
private:
iot_net::CMbCommunicator *m_pMbComm;
iot_net::CMbMessage objMsg;
bool bIsRun;
private:
int parserMsg(const iot_net::CMbMessage &);
};
#endif // CUPDATETHREAD_H

View File

@ -0,0 +1,180 @@
#ifndef HEARTBEATTHREAD_H
#define HEARTBEATTHREAD_H
#include <QThread>
#include <QMutexLocker>
#include <QByteArray>
#include "FesSimProtocol.h"
const int EN_HeartBeatCount =500;
const int EN_MaxRespBufSize = 4096;
const int EN_MaxCmdBufSize = 1024;
const int EN_MaxReportBufSize = 51200; //1024*50;sio monitor buffer
//通道连接状态
const int CN_CommDisconnect =0; //链接关闭
const int CN_CommConnect =1; //链接成功
typedef struct{
SFesSimAiParam param;
SFesSimAiData value;
}SFesSimAi;
typedef struct{
SFesSimFwAiParam param;
SFesSimAiData value;
}SFesSimFwAi;
typedef struct{
int RtuNo; //RTU号
int Used; //使用标志
int MaxPoints;
char RtuName[CN_FesMaxNameSize]; //RTU
int AiNum;
SFesSimAi *pAi;
}SAiMonRtu;
typedef struct{
int RtuNo; //RTU号
int Used; //使用标志
int MaxPoints;
char RtuName[CN_FesMaxNameSize]; //RTU
int AiNum;
SFesSimFwAi *pAi;
}SFwAiMonRtu;
typedef struct{
SFesSimDiParam param;
SFesSimDiData value;
}SFesSimDi;
typedef struct{
int RtuNo; //RTU号
int Used; //使用标志
int MaxPoints;
char RtuName[CN_FesMaxNameSize]; //RTU
int DiNum;
SFesSimDi *pDi;
}SDiMonRtu;
typedef struct{
SFesSimFwDiParam param;
SFesSimDiData value;
}SFesSimFwDi;
typedef struct{
int RtuNo; //RTU号
int Used; //使用标志
int MaxPoints;
char RtuName[CN_FesMaxNameSize]; //RTU
int DiNum;
SFesSimFwDi *pDi;
}SFwDiMonRtu;
typedef struct{
SFesSimAccParam param;
SFesSimAccData value;
}SFesSimAcc;
typedef struct{
int RtuNo; //RTU号
int Used; //使用标志
int MaxPoints;
char RtuName[CN_FesMaxNameSize]; //RTU
int AccNum;
SFesSimAcc *pAcc;
}SAccMonRtu;
typedef struct{
SFesSimFwAccParam param;
SFesSimAccData value;
}SFesSimFwAcc;
typedef struct{
int RtuNo; //RTU号
int Used; //使用标志
int MaxPoints;
char RtuName[CN_FesMaxNameSize]; //RTU
int AccNum;
SFesSimFwAcc *pAcc;
}SFwAccMonRtu;
typedef struct{
SFesSimMiParam param;
SFesSimMiData value;
}SFesSimMi;
typedef struct{
int RtuNo; //RTU号
int Used; //使用标志
int MaxPoints;
char RtuName[CN_FesMaxNameSize]; //RTU
int DiNum;
SFesSimMi *pMi;
}SMiMonRtu;
typedef struct{
SFesSimFwMiParam param;
SFesSimMiData value;
}SFesSimFwMi;
typedef struct{
int RtuNo; //RTU号
int Used; //使用标志
int MaxPoints;
char RtuName[CN_FesMaxNameSize]; //RTU
int DiNum;
SFesSimFwMi *pMi;
}SFwMiMonRtu;
typedef struct{
int RtuNo; //RTU号
int Used; //使用标志
int MaxPoints;
char RtuName[CN_FesMaxNameSize]; //RTU
int DiNum;
SFesSimAoParam *pAo;
}SAoMonRtu;
typedef struct{
int RtuNo; //RTU号
int Used; //使用标志
int MaxPoints;
char RtuName[CN_FesMaxNameSize]; //RTU
int DiNum;
SFesSimDoParam *pDo;
}SDoMonRtu;
typedef struct{
int RtuNo; //RTU号
int Used; //使用标志
int MaxPoints;
char RtuName[CN_FesMaxNameSize]; //RTU
int DiNum;
SFesSimMoParam *pMo;
}SMoMonRtu;
typedef struct{
int RtuNo; //RTU号
int Used; //使用标志
int MaxPoints;
char RtuName[CN_FesMaxNameSize]; //RTU
}SSettingMonRtu;
//本结构是通道管理的内部结构备用通道收发的统计数据RxNum、TxNum、ErrCnt在自己通道结构中
//其他数据都在主通道结构中
typedef struct {
uint32 Writex;//写指针
uint32 Readx; //读指针
unsigned char Data[EN_MaxReportBufSize]; //数据内容
}SChanRxBuf;
namespace Ui {
class PiMonDlg;
}
#endif

View File

@ -0,0 +1,43 @@
#include "CommonSheet.h"
#include <QApplication>
#include "pub_utility_api/FileStyle.h"
CommonSheet::CommonSheet()
{
QString qss = QString();
std::string strFullPath = iot_public::CFileStyle::getPathOfStyleFile("public.qss","zh","light");
QFile qssfile1(QString::fromStdString(strFullPath));
qssfile1.open(QFile::ReadOnly);
if (qssfile1.isOpen())
{
qss += QLatin1String(qssfile1.readAll());
qssfile1.close();
}
strFullPath = iot_public::CFileStyle::getPathOfStyleFile("debug_tool.qss","zh","light");
QFile qssfile2(QString::fromStdString(strFullPath));
qssfile2.open(QFile::ReadOnly);
if (qssfile2.isOpen())
{
qss += QLatin1String(qssfile2.readAll());
qssfile2.close();
}
if (!qss.isEmpty())
{
m_stSheet = qss;
}
}
bool CommonSheet::getSheet(QString &sheet)
{
if(m_stSheet.isEmpty())
{
return false;
}else
{
sheet = m_stSheet;
return true;
}
}

View File

@ -0,0 +1,15 @@
#ifndef COMMONSHEET_H
#define COMMONSHEET_H
#include <QDir>
#include <QString>
class CommonSheet
{
public:
CommonSheet();
bool getSheet(QString &sheet);
private:
QString m_stSheet;
};
#endif // COMMONSHEET_H

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,321 @@
/*
@file fesrdbstruct.cpp
@brief fes
@author thxiao
*/
#pragma once
const int CN_FesMaxTableNameSize =32; //TagName最大长度
const int CN_FesMaxColumnNameSize =16; //TagName最大长度
const int CN_FesMaxTagSize =64; //TagName最大长度
const int CN_FesMaxDescSize =128; //TagName最大长度
const int CN_FesMaxNameSize =64; //Name最大长度
const int CN_FesMaxNetDescSize =32; //"127.0.0.1"
const int CN_FesMaxChangeChanNum =4; //RTU允许切换的最大通道数
const int CN_FesMaxNetRouteNum =4; //每个通道最大路由数
#define RT_DICT_TEXT_TBL "dict_text_define"
#define RT_FES_RTU_TBL "fes_rtu_para"
#define RT_FES_CHAN_TBL "fes_channel_para"
#define RT_FES_PROTOCOL_TBL "fes_protocol"
#define RT_FES_AI_TBL "fes_analog"
#define RT_FES_AO_TBL "fes_analog_ctrl"
#define RT_FES_DI_TBL "fes_digital"
#define RT_FES_DO_TBL "fes_digital_ctrl"
#define RT_FES_ACC_TBL "fes_accuml"
#define RT_FES_MI_TBL "fes_mix"
#define RT_FES_MO_TBL "fes_mix_ctrl"
#define RT_FES_DATA_BLOCK_TBL "fes_data_block"
#define RT_FES_DEV_INFO_TBL "fes_dev_info"
//转发点表
#define RT_FES_FW_AI_TBL "fes_forwarding_anaolg"
#define RT_FES_FW_AO_TBL "fes_forwarding_anaolg_ctrl"
#define RT_FES_FW_DI_TBL "fes_forwarding_digital"
#define RT_FES_FW_DO_TBL "fes_forwarding_digital_ctrl"
#define RT_FES_FW_ACC_TBL "fes_forwarding_accuml"
typedef struct{
int RtuNo; //RTU号
char TagName[CN_FesMaxTagSize]; //RTU
char RtuName[CN_FesMaxNameSize]; //RTU
char RtuDesc[CN_FesMaxDescSize];//rtu描述
int nLocationId;//位置
int nSubSystem; //专业
int Used; //使用标志
int RtuAddr; //RTU地址
int ChanNo; //通道号
int RecvFailLimit; //连续接收数据失败计数(>5代表停运
}SFesRdbRtuParam;
typedef struct{
int ChanNo; //通道号
char TagName[CN_FesMaxTagSize]; //RTU
char ChanName[CN_FesMaxNameSize];//通道名
char ChanDesc[CN_FesMaxDescSize];//通道描述
int nLocationId; //位置
int nSubSystem; //专业
int nRegionId; //责任区ID
int Used; //通道使用标志
double ErrRateLimit; //帧错误标准
char NetDesc1[CN_FesMaxNetDescSize]; //通道IP
int PortNo1; //通道网络端口
char NetDesc2[CN_FesMaxNetDescSize]; //通道IP
int PortNo2; //通道网络端口
char NetDesc3[CN_FesMaxNetDescSize]; //通道IP
int PortNo3; //通道网络端口
char NetDesc4[CN_FesMaxNetDescSize]; //通道IP
int PortNo4; //通道网络端口
int CommProperty; //通道性质 0接收通道 1转发通道
int CommType; //通信方式
int ChanMode; //通道方式0双通道通信方式 1单通道方式
int ProtocolId; //规约类型
int ConnectWaitSec; //连接等待重连时间,单位秒
int ConnectTimeout; //链接超时,单位秒
int RetryTimes; //最大重连次数
int RespTimeout; //响应超时,单位毫秒
int RecvTimeout; //接收超时,单位秒,判断是否需要端开连接重新连接
int MaxRxSize; //接收缓存区长度
int MaxTxSize; //发送缓存区长度
int BackupChanNo1;//实际配置的备用通道号
int BackupChanNo2;//实际配置的备用通道号
int BackupChanNo3;//实际配置的备用通道号
int ResParam1;
int ResParam2;
int ResParam3;
int ResParam4;
}SFesRdbChanParam;
typedef struct
{
int ProtocolId;
char Name[CN_FesMaxNameSize];
}SFesRdbProtocolParam;
typedef struct {
int RtuNo;
int Index; //序号
int FunCode; //功能码即MODBUS中的命令码
int StartAddr; //数据起始地址
int DataLen; //数据长度
int PollTime; //命令下发周期(相对时间,一个周期=50ms
int FrameType; //帧类别
int IsCreateSoe; //对遥信帧有效0不产生SOE1产生SOE
int Param1; //保留参数1
int Param2; //保留参数2
}SFesRdbDataBlock;
typedef struct {
int RtuNo;
int PointNo;
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
char PointTagName[CN_FesMaxTagSize];
int IsFilter; //是否过滤AI突变
int Percent; //突变百分比
int DeadBandType;//死区类型
double DeadBand; //死区值
double ZeroBand; //归零死区
double Base; //基值
double Coeff; //系数;
double MaxRange; //度上限
double MinRange; //度下限
int Param1; //规约参数,每种协议含义相同。 如modbus FunNo
int Param2; //规约参数,每种协议含义相同。 如modbus DataAddress
int Param3; //规约参数,每种协议含义相同。 如modbus InfoNo
int Param4; //规约参数,每种协议含义相同。
}SFesRdbAiParam;
typedef struct {
int RtuNo;
int PointNo;
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
char PointTagName[CN_FesMaxTagSize];
int IsFilterErr; //是否过滤错误DI
int IsFilterDisturb;//是否过滤DI抖动
int DisturbTime; //抖动时限
int Revers; //取反
int Param1; //规约参数,每种协议含义相同。 如modbus FunNo
int Param2; //规约参数,每种协议含义相同。 如modbus DataAddress
int Param3; //规约参数,每种协议含义相同。 如modbus InfoNo
int Param4; //规约参数,每种协议各不相同。
}SFesRdbDiParam;
typedef struct {
int RtuNo;
int PointNo;
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
char PointTagName[CN_FesMaxTagSize];
double Base; //基值
double Coeff; //系数;
int Param1; //规约参数,每种协议各不相同。 如modbus FunNo
int Param2; //规约参数,每种协议各不相同。 如modbus DataAddress
int Param3; //规约参数,每种协议各不相同。 如modbus InfoNo
int Param4; //规约参数,每种协议各不相同。 如modbus ValueType
}SFesRdbAccParam;
typedef struct {
int RtuNo;
int PointNo;
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
char PointTagName[CN_FesMaxTagSize];
int Base; //基值
int Coeff; //系数;
int MaxRange; //度上限
int MinRange; //度下限
int Param1; //规约参数,每种协议各不相同。 如modbus FunNo
int Param2; //规约参数,每种协议各不相同。 如modbus DataAddress
int Param3; //规约参数,每种协议各不相同。 如modbus InfoNo
int Param4; //规约参数,每种协议各不相同。 如modbus ValueType
}SFesRdbMiParam;
typedef struct {
int RtuNo;
int PointNo;
char PointTagName[CN_FesMaxTagSize];
int Revers; //取反
int Param1; //规约参数,每种协议含义相同。 如modbus FunNo
int Param2; //规约参数,每种协议含义相同。 如modbus DataAddress
int Param3; //规约参数,每种协议含义相同。 如modbus InfoNo
int Param4; //规约参数,每种协议各不相同。
}SFesRdbDoParam;
typedef struct {
int RtuNo;
int PointNo;
char PointTagName[CN_FesMaxTagSize];
double Base; //基值
double Coeff; //系数;
double MaxRange; //度上限
double MinRange; //度下限
int Param1; //规约参数,每种协议含义相同。 如modbus FunNo
int Param2; //规约参数,每种协议含义相同。 如modbus DataAddress
int Param3; //规约参数,每种协议含义相同。 如modbus InfoNo
int Param4; //规约参数,每种协议含义相同。
}SFesRdbAoParam;
typedef struct {
int RtuNo;
int PointNo;
char PointTagName[CN_FesMaxTagSize];
int Base; //基值
int Coeff; //系数;
int MaxRange; //度上限
int MinRange; //度下限
int Param1; //规约参数,每种协议各不相同。 如modbus FunNo
int Param2; //规约参数,每种协议各不相同。 如modbus DataAddress
int Param3; //规约参数,每种协议各不相同。 如modbus InfoNo
int Param4; //规约参数,每种协议各不相同。 如modbus ValueType
}SFesRdbMoParam;
typedef struct {
int RtuNo;
int DevID; //FEP 的设备ID号
char DevDesc[CN_FesMaxNameSize]; //设备描述
}SFesRdbDevInfo;
//转发表Rdb结构参数
typedef struct {
char FwRtuTagName[CN_FesMaxNameSize]; //所属转发rtu
int PointId; //点ID 从0开始递增
int RemoteNo; //远动序号
char TagName[CN_FesMaxTagSize]; //采集标签名
char PointDesc[CN_FesMaxDescSize]; //点描述
char PointShortName[CN_FesMaxNameSize]; //点名缩写
char FesRtuTagName[CN_FesMaxNameSize]; //采集rtu标签
int FesRtuNo; //采集rtu号
int FesPointNo; //采集点号
int GroupNo; //组号
double Coeff; //系数;
double Base; //修正值
double DeadBand; //死区值
double ZeroDeadBand; //归零死区值
int Property; //属性
long paralong1; //备用参数1
long paralong2; //备用参数2
char parastring[CN_FesMaxNameSize]; //备用字符串
}SFesRdbFwAiParam;
typedef struct {
char FwRtuTagName[CN_FesMaxNameSize]; //所属转发rtu
int PointId; //点ID 从0开始递增
int RemoteNo; //远动序号
char TagName[CN_FesMaxTagSize]; //采集标签名
char PointDesc[CN_FesMaxDescSize]; //点描述
char PointShortName[CN_FesMaxNameSize]; //点名缩写
char FesRtuTagName[CN_FesMaxNameSize]; //采集rtu标签
int FesRtuNo; //采集rtu号
int FesPointNo; //采集点号
int GroupNo; //组号
int Revert; //取反;
int Property; //属性
long paralong1; //备用参数1
long paralong2; //备用参数2
char parastring[CN_FesMaxNameSize]; //备用字符串
}SFesRdbFwDiParam;
typedef struct {
char FwRtuTagName[CN_FesMaxNameSize]; //所属转发rtu
int PointId; //点ID 从0开始递增
int RemoteNo; //远动序号
char TagName[CN_FesMaxTagSize]; //采集标签名
char PointDesc[CN_FesMaxDescSize]; //点描述
char PointShortName[CN_FesMaxNameSize]; //点名缩写
char FesRtuTagName[CN_FesMaxNameSize]; //采集rtu标签
int FesRtuNo; //采集rtu号
int FesPointNo; //采集点号
int GroupNo; //组号
double Coeff; //系数;
double Base; //修正值
int Property; //属性
long paralong1; //备用参数1
long paralong2; //备用参数2
char parastring[CN_FesMaxNameSize]; //备用字符串
}SFesRdbFwAccParam;
typedef struct {
char FwRtuTagName[CN_FesMaxNameSize]; //所属转发rtu
int PointId; //点ID 从0开始递增
int RemoteNo; //远动序号
char TagName[CN_FesMaxTagSize]; //采集标签名
char PointDesc[CN_FesMaxDescSize]; //点描述
char PointShortName[CN_FesMaxNameSize]; //点名缩写
char FesRtuTagName[CN_FesMaxNameSize]; //采集rtu标签
int FesRtuNo; //采集rtu号
int FesPointNo; //采集点号
int GroupNo; //组号
int Property; //属性
long paralong1; //备用参数1
long paralong2; //备用参数2
char parastring[CN_FesMaxNameSize]; //备用字符串
}SFesRdbFwAoParam;
typedef struct {
char FwRtuTagName[CN_FesMaxNameSize]; //所属转发rtu
int PointId; //点ID 从0开始递增
int RemoteNo; //远动序号
char TagName[CN_FesMaxTagSize]; //采集标签名
char PointDesc[CN_FesMaxDescSize]; //点描述
char PointShortName[CN_FesMaxNameSize]; //点名缩写
char FesRtuTagName[CN_FesMaxNameSize]; //采集rtu标签
int FesRtuNo; //采集rtu号
int FesPointNo; //采集点号
int GroupNo; //组号
int Property; //属性
long paralong1; //备用参数1
long paralong2; //备用参数2
char parastring[CN_FesMaxNameSize]; //备用字符串
}SFesRdbFwDoParam;
typedef struct {
int nFaultCode;
char FaultName[CN_FesMaxNameSize]; //Fault Name
}SFesRdbFaultCode;

Some files were not shown because too many files have changed in this diff Show More