add save monitor functions
This commit is contained in:
parent
993c9b8e3a
commit
c7f51ae47d
|
|
@ -7,6 +7,7 @@
|
|||
#include <QHash>
|
||||
#include <QUuid>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonArray>
|
||||
#include <QWidget>
|
||||
#include <QStandardItemModel>
|
||||
#include "tools.h"
|
||||
|
|
@ -1083,6 +1084,35 @@ struct monitorRelationSturctItem //监控关系结构item
|
|||
int nEquipType; //设备类别
|
||||
QString sName; //名称
|
||||
QUuid uid; //id
|
||||
|
||||
QJsonObject toJson() const {
|
||||
QJsonObject obj;
|
||||
obj["nCategory"] = nCategory;
|
||||
obj["nEquipType"] = nEquipType;
|
||||
obj["sName"] = sName;
|
||||
obj["uid"] = uid.toString();
|
||||
return obj;
|
||||
}
|
||||
|
||||
// 从JSON对象解析
|
||||
void fromJson(const QJsonObject& json) {
|
||||
nCategory = json["nCategory"].toInt();
|
||||
nEquipType = json["nEquipType"].toInt();
|
||||
sName = json["sName"].toString();
|
||||
uid = QUuid::fromString(json["uid"].toString());
|
||||
}
|
||||
|
||||
// 检查有效性
|
||||
bool isValid() const {
|
||||
return !uid.isNull() && !sName.isEmpty();
|
||||
}
|
||||
|
||||
// 重载相等运算符
|
||||
bool operator==(const monitorRelationSturctItem& other) const {
|
||||
return uid == other.uid &&
|
||||
sName == other.sName &&
|
||||
nCategory == other.nCategory;
|
||||
}
|
||||
};
|
||||
|
||||
struct monitorRelationItem //监控关系item
|
||||
|
|
@ -1090,6 +1120,68 @@ struct monitorRelationItem //监控关系item
|
|||
monitorRelationSturctItem parent;
|
||||
monitorRelationSturctItem item;
|
||||
QList<monitorRelationSturctItem> subList;
|
||||
|
||||
QJsonObject toJson() const {
|
||||
QJsonObject obj;
|
||||
obj["parent"] = parent.toJson();
|
||||
obj["item"] = item.toJson();
|
||||
|
||||
// 序列化子列表
|
||||
QJsonArray subArray;
|
||||
for (const auto& subItem : subList) {
|
||||
subArray.append(subItem.toJson());
|
||||
}
|
||||
obj["subList"] = subArray;
|
||||
obj["subCount"] = subList.size();
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
// 从JSON对象解析
|
||||
void fromJson(const QJsonObject& json) {
|
||||
parent.fromJson(json["parent"].toObject());
|
||||
item.fromJson(json["item"].toObject());
|
||||
|
||||
// 解析子列表
|
||||
subList.clear();
|
||||
QJsonArray subArray = json["subList"].toArray();
|
||||
for (const QJsonValue& subValue : subArray) {
|
||||
monitorRelationSturctItem sub;
|
||||
sub.fromJson(subValue.toObject());
|
||||
subList.append(sub);
|
||||
}
|
||||
}
|
||||
|
||||
// 检查有效性
|
||||
bool isValid() const {
|
||||
return parent.isValid() && item.isValid();
|
||||
}
|
||||
|
||||
// 添加子项
|
||||
void addSubItem(const monitorRelationSturctItem& subItem) {
|
||||
subList.append(subItem);
|
||||
}
|
||||
|
||||
// 移除子项
|
||||
bool removeSubItem(const QUuid& subUid) {
|
||||
for (int i = 0; i < subList.size(); ++i) {
|
||||
if (subList[i].uid == subUid) {
|
||||
subList.removeAt(i);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// 查找子项
|
||||
monitorRelationSturctItem* findSubItem(const QUuid& subUid) {
|
||||
for (auto& sub : subList) {
|
||||
if (sub.uid == subUid) {
|
||||
return ⊂
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
};
|
||||
|
||||
struct monitorItemAttributeInfo //单个监控item属性
|
||||
|
|
@ -1105,6 +1197,50 @@ struct monitorItemAttributeInfo //单个监控item属性
|
|||
QString sTimeRange; //时间范围(分)
|
||||
QString sValue; //属性值
|
||||
bool bSelected = false;
|
||||
|
||||
// 转换为JSON对象
|
||||
QJsonObject toJson() const {
|
||||
QJsonObject obj;
|
||||
obj["sGroup"] = sGroup;
|
||||
obj["sTag"] = sTag;
|
||||
obj["sName"] = sName;
|
||||
obj["nConnectType"] = nConnectType;
|
||||
obj["sConnectPara"] = sConnectPara;
|
||||
obj["nShowType"] = nShowType;
|
||||
obj["bShowDiagram"] = bShowDiagram;
|
||||
obj["nGraphType"] = nGraphType;
|
||||
obj["sTimeRange"] = sTimeRange;
|
||||
obj["sValue"] = sValue;
|
||||
obj["bSelected"] = bSelected;
|
||||
return obj;
|
||||
}
|
||||
|
||||
// 从JSON对象解析
|
||||
void fromJson(const QJsonObject& json) {
|
||||
sGroup = json["sGroup"].toString();
|
||||
sTag = json["sTag"].toString();
|
||||
sName = json["sName"].toString();
|
||||
nConnectType = json["nConnectType"].toInt();
|
||||
sConnectPara = json["sConnectPara"].toString();
|
||||
nShowType = json["nShowType"].toInt();
|
||||
bShowDiagram = json["bShowDiagram"].toBool();
|
||||
nGraphType = json["nGraphType"].toInt();
|
||||
sTimeRange = json["sTimeRange"].toString();
|
||||
sValue = json["sValue"].toString();
|
||||
bSelected = json["bSelected"].toBool();
|
||||
}
|
||||
|
||||
// 检查有效性
|
||||
bool isValid() const {
|
||||
return !sTag.isEmpty() && !sName.isEmpty();
|
||||
}
|
||||
|
||||
// 重载相等运算符
|
||||
bool operator==(const monitorItemAttributeInfo& other) const {
|
||||
return sTag == other.sTag &&
|
||||
sName == other.sName &&
|
||||
sGroup == other.sGroup;
|
||||
}
|
||||
};
|
||||
|
||||
enum class monitorItemState{ //监控item的状态
|
||||
|
|
@ -1134,6 +1270,36 @@ struct monitorItemDisplayInfo //监控模式显示信息
|
|||
int nHeight;
|
||||
QString sMeta; //元模型名
|
||||
QString sModel; //工程模名
|
||||
|
||||
QJsonObject toJson() const {
|
||||
QJsonObject obj;
|
||||
obj["nItemType"] = nItemType;
|
||||
obj["sStateName"] = sStateName;
|
||||
obj["bEnable"] = bEnable;
|
||||
obj["sColor"] = sColor;
|
||||
obj["bytPicture"] = QString(bytPicture.toBase64());
|
||||
obj["nWidth"] = nWidth;
|
||||
obj["nHeight"] = nHeight;
|
||||
obj["sMeta"] = sMeta;
|
||||
obj["sModel"] = sModel;
|
||||
return obj;
|
||||
}
|
||||
|
||||
// 从JSON对象解析 - 成员函数
|
||||
void fromJson(const QJsonObject& json) {
|
||||
nItemType = json["nItemType"].toInt();
|
||||
sStateName = json["sStateName"].toString();
|
||||
bEnable = json["bEnable"].toBool();
|
||||
sColor = json["sColor"].toString();
|
||||
|
||||
QString pictureBase64 = json["bytPicture"].toString();
|
||||
bytPicture = QByteArray::fromBase64(pictureBase64.toUtf8());
|
||||
|
||||
nWidth = json["nWidth"].toInt();
|
||||
nHeight = json["nHeight"].toInt();
|
||||
sMeta = json["sMeta"].toString();
|
||||
sModel = json["sModel"].toString();
|
||||
}
|
||||
};
|
||||
|
||||
struct monitorItemTypeStruct //监控设备类型
|
||||
|
|
@ -1152,6 +1318,20 @@ struct monitorItemTypeStruct //监控设备类型
|
|||
bool operator<(const monitorItemTypeStruct& other) const {
|
||||
return sTag < other.sTag || (sTag == other.sTag && sName < other.sName);
|
||||
}
|
||||
|
||||
// 转换为JSON对象 - 成员函数
|
||||
QJsonObject toJson() const {
|
||||
QJsonObject obj;
|
||||
obj["sTag"] = sTag;
|
||||
obj["sName"] = sName;
|
||||
return obj;
|
||||
}
|
||||
|
||||
// 从JSON对象解析 - 成员函数
|
||||
void fromJson(const QJsonObject& json) {
|
||||
sTag = json["sTag"].toString();
|
||||
sName = json["sName"].toString();
|
||||
}
|
||||
};
|
||||
|
||||
struct monitorItemStateStruct //监控设备状态
|
||||
|
|
@ -1170,6 +1350,20 @@ struct monitorItemStateStruct //监控设备状态
|
|||
bool operator<(const monitorItemStateStruct& other) const {
|
||||
return sState < other.sState || (sState == other.sState && eState < other.eState);
|
||||
}
|
||||
|
||||
// 转换为JSON对象 - 成员函数
|
||||
QJsonObject toJson() const {
|
||||
QJsonObject obj;
|
||||
obj["sState"] = sState;
|
||||
obj["eState"] = static_cast<int>(eState);
|
||||
return obj;
|
||||
}
|
||||
|
||||
// 从JSON对象解析 - 成员函数
|
||||
void fromJson(const QJsonObject& json) {
|
||||
sState = json["sState"].toString();
|
||||
eState = static_cast<monitorItemState>(json["eState"].toInt());
|
||||
}
|
||||
};
|
||||
|
||||
struct ModelTypeInfo{ //类型临时信息
|
||||
|
|
|
|||
|
|
@ -39,9 +39,17 @@ public:
|
|||
|
||||
virtual void loadNodes(QJsonObject obj) {}; //加载图元信息
|
||||
virtual void saveNodes(int pageId) {}; //保存到数据库
|
||||
virtual QJsonObject getDiagramInfo() {return QJsonObject();}
|
||||
|
||||
DesignerScene* getScene() {return m_pGraphicsScene;}
|
||||
DesignerView* getView() {return m_pGraphicsView;}
|
||||
|
||||
void setGeneratePanelLst(QStringList lst){_lstGeneratePanel = lst;}
|
||||
QStringList& getGeneratePanelLst(){return _lstGeneratePanel;}
|
||||
void setGenerateByPanel(QString s) {_sGenerateByPanel = s;}
|
||||
QString getGenerateByPanel() {return _sGenerateByPanel;}
|
||||
|
||||
PowerEntity* getEntity() {return _pEntity;}
|
||||
signals:
|
||||
void panelDelete(const QString&,int);
|
||||
protected:
|
||||
|
|
@ -58,6 +66,8 @@ protected:
|
|||
QVBoxLayout* _verticalLayout;
|
||||
QHBoxLayout* _horizontalLayout;
|
||||
QSplitter* _hSplitter;
|
||||
QStringList _lstGeneratePanel; //生成的panel列表
|
||||
QString _sGenerateByPanel; //被哪个panel生成
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -82,6 +82,8 @@ public slots:
|
|||
void onSignal_monitorSelected(DiagramInfo); //监控选中
|
||||
void onSignal_saveMonitor(QList<QPair<QString,QUuid>>); //保存选中的监控
|
||||
|
||||
void updateMonitorListFromDB(); //从数据库更新监控列表
|
||||
|
||||
QMap<QString,QPair<DrawingPanel*,QMdiSubWindow*>> getMapDraw() {return m_mapDrawPanel;}
|
||||
QMap<QString,QPair<EditPanel*,QMdiSubWindow*>> getMapEdit() {return m_mapEditPanel;}
|
||||
QMap<QString,QPair<MonitorPanel*,QMdiSubWindow*>> getMapMonitor() {return m_mapMonitorPanel;}
|
||||
|
|
|
|||
|
|
@ -101,7 +101,10 @@ public:
|
|||
/*************************监控(运行时)**************************/
|
||||
void generateMonitor(QString,QList<monitorRelationItem>); //生成监控 (监控名,选中的设备列表)
|
||||
void generateMonitorConfig(MonitorPanel*); //生成监控配置参数结构
|
||||
void setMonitorPara(QMap<QUuid,QList<monitorItemAttributeInfo>> map){m_monitorPara = map;}
|
||||
QMap<QUuid,QList<monitorItemAttributeInfo>>& getMonitorPara() {return m_monitorPara;}
|
||||
void setMonitorRelation(QList<monitorRelationItem> lst){m_lstMonitorRelation = lst;}
|
||||
QList<monitorRelationItem> getMonitorRelation() {return m_lstMonitorRelation;}
|
||||
|
||||
void monitorItemSelected(QUuid); //运行时item选中事件
|
||||
void monitorItemDetailAttr(QUuid); //显示属性详情
|
||||
|
|
@ -164,6 +167,7 @@ private:
|
|||
QMap<QUuid,QList<monitorItemAttributeInfo>> m_monitorPara; //监控参数
|
||||
QMap<int,QList<QPair<monitorItemState,QString>>> m_monitorStateMap; //元件状态对照表 <type,<state,状态名>>
|
||||
QMap<monitorItemTypeStruct,QMap<monitorItemStateStruct,monitorItemDisplayInfo>> m_monitorDisplaySetting; //元件设置
|
||||
QList<monitorRelationItem> m_lstMonitorRelation; //监控item层级关系
|
||||
public:
|
||||
static bool _dataInitialised;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -35,6 +35,16 @@ public:
|
|||
|
||||
void initDisplayState(); //初始化显示状态参照表
|
||||
void initDisplaySetting(); //初始化显示状态设置
|
||||
public:
|
||||
//对层级关系的序列化与反序列化
|
||||
QJsonArray serializeRelationToJsonArray(const QList<monitorRelationItem>& data) const;
|
||||
bool deserializeRelationFromJsonArray(const QJsonArray& jsonArray, QList<monitorRelationItem>& result);
|
||||
//对para的序列化与反序列化
|
||||
QJsonArray serializeParaToJsonArray(const QMap<QUuid, QList<monitorItemAttributeInfo>>& data) const;
|
||||
bool deserializeParaFromJsonArray(const QJsonArray& jsonArray,QMap<QUuid, QList<monitorItemAttributeInfo>>& result);
|
||||
//对displaySetiing的序列化与反序列化
|
||||
QJsonArray serializeDisplayToJsonArray(const QMap<monitorItemTypeStruct, QMap<monitorItemStateStruct, monitorItemDisplayInfo>>& data) const;
|
||||
void deserializeDisplayFromJsonArray(const QJsonArray& jsonArray,QMap<monitorItemTypeStruct, QMap<monitorItemStateStruct, monitorItemDisplayInfo>>& result);
|
||||
public slots:
|
||||
void onRunClicked();
|
||||
void onStopClicked();
|
||||
|
|
|
|||
|
|
@ -14,11 +14,12 @@ BaseDrawingPanel::BaseDrawingPanel(PowerEntity* pEntity,QWidget *parent,DiagramM
|
|||
: QWidget(parent)
|
||||
,_pModel(nullptr)
|
||||
,_mode(mode)
|
||||
,_pEntity(pEntity)
|
||||
,_pEntity(nullptr)
|
||||
,_verticalLayout(nullptr)
|
||||
,_horizontalLayout(nullptr)
|
||||
,_hSplitter(nullptr)
|
||||
{
|
||||
_pEntity = pEntity;
|
||||
_pModel = new FixedPortsModel(pEntity);
|
||||
_pModel->setTopWidget(this);
|
||||
m_pSelectorManager = new SelectorManager(_pModel,this);
|
||||
|
|
|
|||
|
|
@ -116,15 +116,31 @@ void DiagramCavas::onSignal_addPage()
|
|||
void DiagramCavas::onSignal_savePage()
|
||||
{
|
||||
QWidget* pWindow= currentSubWindow()->widget();
|
||||
DrawingPanel* pPanel = dynamic_cast<DrawingPanel*>(pWindow);
|
||||
BaseDrawingPanel* pPanel = dynamic_cast<BaseDrawingPanel*>(pWindow);
|
||||
if(pPanel)
|
||||
{
|
||||
if(pPanel->getMode() == DM_run)
|
||||
{
|
||||
QMessageBox::about(NULL,QString::fromWCharArray(L"提示"), QString::fromWCharArray(L"运行中无法保存!"));
|
||||
auto pMonitor = dynamic_cast<MonitorPanel*>(pPanel);
|
||||
if(pMonitor){
|
||||
if(DataBase::GetInstance()->getPageIdByName(pMonitor->getParentPage()) == -1){
|
||||
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"请先保存工程模型"));
|
||||
return;
|
||||
}
|
||||
auto pEntity = pMonitor->getEntity();
|
||||
if(pEntity){
|
||||
if(DataBase::GetInstance()->getMonitorIdByName(pEntity->name()).isNull()) //不存在,创建
|
||||
DataBase::GetInstance()->insertMonitor(QUuid(pEntity->id()),pEntity->name(),pEntity->name(),pMonitor->getParentPage(),pMonitor->getMonitorInfo());
|
||||
else
|
||||
DataBase::GetInstance()->updateMonitor(pEntity->name(),pMonitor->getMonitorInfo());
|
||||
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"保存成功"));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else if(pPanel->getMode() == DM_edit)
|
||||
{
|
||||
auto pDrawPanel = dynamic_cast<MonitorPanel*>(pPanel);
|
||||
_curPage = pPanel->pageName();
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText(QString::fromWCharArray(L"提示"));
|
||||
|
|
@ -215,8 +231,8 @@ void DiagramCavas::onSignal_loadMonitor(PowerEntity* p)
|
|||
if(!m_mapMonitorPanel.contains(p->name()))
|
||||
{
|
||||
onSignal_addDrawingPanel(p,DiagramMode::DM_run);
|
||||
//QJsonObject context = DataBase::GetInstance()->getPageContextByName(p->name());
|
||||
//m_mapDrawPanel[p->name()].first->loadNodes(context);
|
||||
QJsonObject context = DataBase::GetInstance()->getMonitorContextByTag(p->name());
|
||||
m_mapMonitorPanel[p->name()].first->loadNodes(context);
|
||||
}
|
||||
else //已存在
|
||||
{
|
||||
|
|
@ -609,3 +625,16 @@ void DiagramCavas::onSignal_saveMonitor(QList<QPair<QString,QUuid>> lst)
|
|||
}
|
||||
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"保存成功"));
|
||||
}
|
||||
|
||||
void DiagramCavas::updateMonitorListFromDB()
|
||||
{
|
||||
QList<monitorPageInfo> lstMonitor = DataBase::GetInstance()->getAllMonitor();
|
||||
for(auto &info:lstMonitor)
|
||||
{
|
||||
auto p = TopologyManager::instance().findDiagram(info.uid.toString(),ModelFunctionType::RuntimeModel);
|
||||
if(!p){
|
||||
TopologyManager::instance().createDiagram(info.uid.toString(),info.name,ModelFunctionType::RuntimeModel);
|
||||
emit updateMonitorList(info.parent,qMakePair(info.name,info.uid));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -319,13 +319,6 @@ void DrawingPanel::loadNodes(QJsonObject obj)
|
|||
}
|
||||
}
|
||||
emit _pModel->updateCurrentItems(lstSecond,false);
|
||||
|
||||
}
|
||||
|
||||
if(_mode == DM_run)
|
||||
{
|
||||
//if(_pModel)
|
||||
//_pModel->startHttpRequest();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -139,7 +139,7 @@ bool FixedPortsModel::addNodeItem(QUuid uuid,GraphicsProjectModelItem* pItem)
|
|||
}
|
||||
}
|
||||
|
||||
QString FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width,double height,double rotate)
|
||||
QString FixedPortsModel::addNodeItem(QUuid id,QPointF pos,double width,double height,double rotate)
|
||||
{
|
||||
//todo:load图形时必有拓扑实体,关联到对应的entity
|
||||
BaseProperty* pro = nullptr;
|
||||
|
|
@ -776,8 +776,12 @@ void FixedPortsModel::loadNodeDataFromDataBase()
|
|||
|
||||
QString FixedPortsModel::addConnectLline(QUuid lineId,QUuid srcId,QUuid destId,QUuid srcPort,QUuid destPort)
|
||||
{
|
||||
GraphicsProjectModelItem* src = _nodeItem[srcId];
|
||||
GraphicsProjectModelItem* dest = _nodeItem[destId];
|
||||
GraphicsProjectModelItem* src = nullptr;
|
||||
if(_nodeItem.contains(srcId))
|
||||
src = _nodeItem.value(srcId);
|
||||
GraphicsProjectModelItem* dest = nullptr;
|
||||
if(_nodeItem.contains(destId))
|
||||
dest = _nodeItem.value(destId);
|
||||
QMap<QUuid,BaseProperty*> mapData = BasePropertyManager::instance().getEntityData();
|
||||
if(mapData.contains(lineId))
|
||||
{
|
||||
|
|
@ -2596,6 +2600,10 @@ void FixedPortsModel::generateMonitor(QString sPage,QList<monitorRelationItem> l
|
|||
info.parentId = _pEntity->id();
|
||||
_cavas->onSignal_createDiagram(info,DiagramMode::DM_run);
|
||||
pPanel = _cavas->getMonitorPanel(sPage);
|
||||
pPanel->getModelController()->setMonitorRelation(lst);
|
||||
|
||||
_widget->getGeneratePanelLst().append(sPage); //记录生成的运行页
|
||||
pPanel->setParentPage(_pageName); //生成页记录被哪个组态生成
|
||||
|
||||
QList<monitorRelationItem> lstFirst;
|
||||
for(auto& itemInfo:lst)
|
||||
|
|
@ -2749,23 +2757,10 @@ void FixedPortsModel::monitorItemDetailAttr(QUuid uid)
|
|||
void FixedPortsModel::monitorItemSet(QUuid uid)
|
||||
{
|
||||
if(_nodeItem.contains(uid)){
|
||||
//QList<QString> lstRemove; //需要从item移除的动态数据
|
||||
QList<QString> lstAdd; //需要向item添加的动态数据
|
||||
|
||||
auto pItem = _nodeItem.value(uid);
|
||||
auto lst = m_monitorPara.value(uid);
|
||||
//auto mapText = pItem->getDynamicText();
|
||||
|
||||
/*for(auto iter = mapText.begin();iter != mapText.end();++iter){
|
||||
bool exist = false;
|
||||
for(auto& info:lst){
|
||||
if(info.sTag == iter.key()){ //新旧队列都存在
|
||||
exist = true;
|
||||
}
|
||||
}
|
||||
if(!exist)
|
||||
lstRemove.append(iter.key());
|
||||
}*/
|
||||
|
||||
for(auto& info:lst){
|
||||
if(info.bShowDiagram && info.bSelected){
|
||||
|
|
@ -2773,9 +2768,6 @@ void FixedPortsModel::monitorItemSet(QUuid uid)
|
|||
}
|
||||
}
|
||||
|
||||
/*for(auto& str:lstRemove){
|
||||
pItem->removeDynamicText(str);
|
||||
}*/
|
||||
pItem->removeAllDynamicText();
|
||||
|
||||
for(auto& str:lstAdd){
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
#include <QCloseEvent>
|
||||
#include <QToolBar>
|
||||
#include <QVBoxLayout>
|
||||
#include <QJsonDocument>
|
||||
#include "graphicsDataModel/fixedPortsModel.h"
|
||||
#include "graphicsItem/graphicsBaseItem.h"
|
||||
#include "powerEntity.h"
|
||||
|
|
@ -160,13 +161,144 @@ QJsonObject MonitorPanel::getMonitorInfo() const
|
|||
}
|
||||
}
|
||||
obj["bays"] = arrBay;
|
||||
|
||||
auto relation = serializeRelationToJsonArray(_pModel->getMonitorRelation());
|
||||
obj["relation"] = relation;
|
||||
|
||||
auto para = serializeParaToJsonArray(_pModel->getMonitorPara()); //设定参数
|
||||
obj["para"] = para;
|
||||
|
||||
auto settingArr = serializeDisplayToJsonArray(_pModel->getMonitorDisplaySetting()); //显示参数
|
||||
obj["displaySetting"] = settingArr;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
void MonitorPanel::loadNodes(QJsonObject obj)
|
||||
{
|
||||
QJsonArray nodesJsonArray = obj["nodes"].toArray();
|
||||
|
||||
QList<QPair<QString,QUuid>> lst;
|
||||
for (QJsonValueRef nodeJson : nodesJsonArray)
|
||||
{
|
||||
QJsonObject node = nodeJson.toObject();
|
||||
QString uuid = node["id"].toString();
|
||||
double dX = node["x"].toDouble();
|
||||
double dY = node["y"].toDouble();
|
||||
double dWidth = node["width"].toDouble();
|
||||
double dHeight = node["height"].toDouble();
|
||||
double dRotate = node["rotate"].toDouble();
|
||||
|
||||
if(_pModel)
|
||||
{
|
||||
QString sName = _pModel->addNodeItem(QUuid(uuid),QPointF(dX,dY),dWidth,dHeight,dRotate);
|
||||
if(sName != "err"){
|
||||
lst.append(qMakePair(sName,QUuid(uuid)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
QJsonArray connectArr = obj["connections"].toArray();
|
||||
for(QJsonValueRef connectJson:connectArr)
|
||||
{
|
||||
QJsonObject connect = connectJson.toObject();
|
||||
QUuid id = QUuid(connect["id"].toString()); //电缆线id,关联component中的电缆
|
||||
QUuid srcId = QUuid(connect["SrcNodeId"].toString());
|
||||
QUuid srcPortId = QUuid(connect["SrcPortId"].toString());
|
||||
QUuid destId = QUuid(connect["DestNodeId"].toString());
|
||||
QUuid destPortId = QUuid(connect["DestPortId"].toString());
|
||||
|
||||
PowerConnection* pCon = TopologyManager::instance().connection(srcPortId.toString(),destPortId.toString());
|
||||
if(pCon)
|
||||
{
|
||||
QString srcItemId = pCon->fromComponent();
|
||||
QString destItemId = pCon->toComponent();
|
||||
//todo:从拓扑结构中查找port的id
|
||||
if(_pModel)
|
||||
{
|
||||
QString sName = _pModel->addConnectLline(id,QUuid(srcItemId),QUuid(destItemId),srcPortId,destPortId);
|
||||
if(sName != "err"){
|
||||
lst.append(qMakePair(sName,QUuid(id)));
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//todo:提示拓扑结构已改变
|
||||
}
|
||||
}
|
||||
|
||||
QJsonArray bayArr = obj["bays"].toArray();
|
||||
for(QJsonValueRef bayJson:bayArr)
|
||||
{
|
||||
QJsonObject bay = bayJson.toObject();
|
||||
QUuid id = QUuid(bay["id"].toString());
|
||||
if(_pModel)
|
||||
{
|
||||
_pModel->addBayItem(id);
|
||||
}
|
||||
}
|
||||
|
||||
QJsonArray paraArr = obj["para"].toArray();
|
||||
QMap<QUuid, QList<monitorItemAttributeInfo>> mapPara;
|
||||
bool resPara = deserializeParaFromJsonArray(paraArr,mapPara);
|
||||
if(resPara){
|
||||
if(_pModel){
|
||||
_pModel->setMonitorPara(mapPara);
|
||||
auto pItems = _pModel->getProjectItems();
|
||||
for(auto& p:pItems){ //将设置值更新到每个item
|
||||
auto pPro = p->getProperty();
|
||||
if(pPro)
|
||||
_pModel->monitorItemSet(pPro->uuid());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QJsonArray displayArr = obj["displaySetting"].toArray();
|
||||
QMap<monitorItemTypeStruct, QMap<monitorItemStateStruct, monitorItemDisplayInfo>> mapDisplay;
|
||||
deserializeDisplayFromJsonArray(displayArr,mapDisplay);
|
||||
if(_pModel){
|
||||
_pModel->setMonitorDisplaySetting(mapDisplay);
|
||||
_pModel->updateMonitorDisplay();
|
||||
}
|
||||
|
||||
QJsonArray relationArr = obj["relation"].toArray();
|
||||
QList<monitorRelationItem> lstRelation;
|
||||
bool resRel = deserializeRelationFromJsonArray(relationArr, lstRelation);
|
||||
if(resRel){
|
||||
QList<monitorRelationItem> lstFirst;
|
||||
if(_pModel){
|
||||
auto pItems = _pModel->getProjectItems();
|
||||
for(auto& itemInfo:lstRelation)
|
||||
{
|
||||
if(itemInfo.item.nCategory == 0){ //设备
|
||||
if(pItems.contains(itemInfo.item.uid)){
|
||||
if(itemInfo.item.nEquipType == 1 || itemInfo.item.nEquipType == 15 || itemInfo.item.nEquipType == 16){ //先添加母线及独立设备
|
||||
lstFirst.append(itemInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QList<monitorRelationItem> lstSecond;
|
||||
for(auto& itemInfo:lstRelation) //第二次循环处理间隔内设备
|
||||
{
|
||||
if(itemInfo.item.nCategory == 0){ //间隔
|
||||
if(pItems.contains(itemInfo.item.uid)){
|
||||
if(itemInfo.item.nEquipType != 1 && itemInfo.item.nEquipType != 15 && itemInfo.item.nEquipType != 16){
|
||||
lstSecond.append(itemInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
updateSelectedItems(lstFirst,true); //直接生成监控tree
|
||||
updateSelectedItems(lstSecond,false);
|
||||
|
||||
_pModel->setMonitorRelation(lstRelation);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MonitorPanel::saveNodes(int pageId)
|
||||
|
|
@ -465,3 +597,162 @@ void MonitorPanel::initDisplaySetting()
|
|||
_pModel->getMonitorDisplaySetting().insert(keyType,mapStates);
|
||||
}
|
||||
}
|
||||
|
||||
QJsonArray MonitorPanel::serializeRelationToJsonArray(const QList<monitorRelationItem>& data) const
|
||||
{
|
||||
QJsonArray rootArray;
|
||||
|
||||
for (const auto& relationItem : data) {
|
||||
rootArray.append(relationItem.toJson());
|
||||
}
|
||||
|
||||
return rootArray;
|
||||
}
|
||||
|
||||
// 从 QJsonArray 反序列化到 QList<monitorRelationItem>
|
||||
bool MonitorPanel::deserializeRelationFromJsonArray(const QJsonArray& jsonArray, QList<monitorRelationItem>& result)
|
||||
{
|
||||
result.clear();
|
||||
|
||||
for (const QJsonValue& itemValue : jsonArray) {
|
||||
if (!itemValue.isObject()) continue;
|
||||
|
||||
monitorRelationItem relationItem;
|
||||
relationItem.fromJson(itemValue.toObject());
|
||||
|
||||
if (relationItem.isValid()) {
|
||||
result.append(relationItem);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
QJsonArray MonitorPanel::serializeParaToJsonArray(const QMap<QUuid, QList<monitorItemAttributeInfo>>& data) const
|
||||
{
|
||||
QJsonArray rootArray;
|
||||
|
||||
for (auto it = data.begin(); it != data.end(); ++it) {
|
||||
const QUuid& uuid = it.key();
|
||||
const QList<monitorItemAttributeInfo>& attributeList = it.value();
|
||||
|
||||
QJsonObject uuidObject;
|
||||
uuidObject["uuid"] = uuid.toString();
|
||||
|
||||
QJsonArray attributesArray;
|
||||
|
||||
// 序列化属性列表
|
||||
for (const auto& attribute : attributeList) {
|
||||
attributesArray.append(attribute.toJson());
|
||||
}
|
||||
|
||||
uuidObject["attributes"] = attributesArray;
|
||||
uuidObject["attributeCount"] = attributesArray.size();
|
||||
|
||||
rootArray.append(uuidObject);
|
||||
}
|
||||
|
||||
return rootArray;
|
||||
}
|
||||
|
||||
// 从 QJsonArray 反序列化到 QMap<QUuid, QList<monitorItemAttributeInfo>>
|
||||
bool MonitorPanel::deserializeParaFromJsonArray(const QJsonArray& jsonArray,
|
||||
QMap<QUuid, QList<monitorItemAttributeInfo>>& result)
|
||||
{
|
||||
result.clear();
|
||||
|
||||
for (const QJsonValue& uuidValue : jsonArray) {
|
||||
if (!uuidValue.isObject()) continue;
|
||||
|
||||
QJsonObject uuidObject = uuidValue.toObject();
|
||||
|
||||
// 解析UUID
|
||||
QUuid uuid = QUuid::fromString(uuidObject["uuid"].toString());
|
||||
if (uuid.isNull()) continue;
|
||||
|
||||
// 解析属性列表
|
||||
QList<monitorItemAttributeInfo> attributeList;
|
||||
QJsonArray attributesArray = uuidObject["attributes"].toArray();
|
||||
|
||||
for (const QJsonValue& attrValue : attributesArray) {
|
||||
if (!attrValue.isObject()) continue;
|
||||
|
||||
monitorItemAttributeInfo attribute;
|
||||
attribute.fromJson(attrValue.toObject());
|
||||
attributeList.append(attribute);
|
||||
}
|
||||
|
||||
result[uuid] = attributeList;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
QJsonArray MonitorPanel::serializeDisplayToJsonArray(const QMap<monitorItemTypeStruct, QMap<monitorItemStateStruct, monitorItemDisplayInfo>>& data) const
|
||||
{
|
||||
|
||||
QJsonArray rootArray;
|
||||
|
||||
for (auto typeIt = data.begin(); typeIt != data.end(); ++typeIt) {
|
||||
const monitorItemTypeStruct& typeKey = typeIt.key();
|
||||
const auto& stateMap = typeIt.value();
|
||||
|
||||
QJsonObject typeObject;
|
||||
typeObject["typeKey"] = typeKey.toJson();
|
||||
|
||||
QJsonArray statesArray;
|
||||
|
||||
for (auto stateIt = stateMap.begin(); stateIt != stateMap.end(); ++stateIt) {
|
||||
const monitorItemStateStruct& stateKey = stateIt.key();
|
||||
const monitorItemDisplayInfo& displayInfo = stateIt.value();
|
||||
|
||||
QJsonObject stateObject;
|
||||
stateObject["stateKey"] = stateKey.toJson();
|
||||
stateObject["displayInfo"] = displayInfo.toJson();
|
||||
|
||||
statesArray.append(stateObject);
|
||||
}
|
||||
|
||||
typeObject["states"] = statesArray;
|
||||
rootArray.append(typeObject);
|
||||
}
|
||||
|
||||
return rootArray;
|
||||
}
|
||||
|
||||
// 从JSON数组反序列化
|
||||
void MonitorPanel::deserializeDisplayFromJsonArray(const QJsonArray& jsonArray,QMap<monitorItemTypeStruct, QMap<monitorItemStateStruct, monitorItemDisplayInfo>>& result)
|
||||
{
|
||||
|
||||
result.clear();
|
||||
|
||||
for (const QJsonValue& typeValue : jsonArray) {
|
||||
if (!typeValue.isObject()) continue;
|
||||
|
||||
QJsonObject typeObject = typeValue.toObject();
|
||||
|
||||
// 解析类型键
|
||||
monitorItemTypeStruct typeKey;
|
||||
typeKey.fromJson(typeObject["typeKey"].toObject());
|
||||
|
||||
QMap<monitorItemStateStruct, monitorItemDisplayInfo> stateMap;
|
||||
QJsonArray statesArray = typeObject["states"].toArray();
|
||||
|
||||
for (const QJsonValue& stateValue : statesArray) {
|
||||
if (!stateValue.isObject()) continue;
|
||||
|
||||
QJsonObject stateObject = stateValue.toObject();
|
||||
|
||||
monitorItemStateStruct stateKey;
|
||||
stateKey.fromJson(stateObject["stateKey"].toObject());
|
||||
|
||||
monitorItemDisplayInfo displayInfo;
|
||||
displayInfo.fromJson(stateObject["displayInfo"].toObject());
|
||||
|
||||
stateMap[stateKey] = displayInfo;
|
||||
}
|
||||
|
||||
result[typeKey] = stateMap;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -204,6 +204,9 @@ void CMainWindow::initializeAction()
|
|||
_pActMonitor->setChecked(true);
|
||||
m_pMonitorItemsDock->show();
|
||||
m_pMonitorPagesDock->show();
|
||||
|
||||
if(m_pDiagramCavas)
|
||||
m_pDiagramCavas->updateMonitorListFromDB();
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue