diff --git a/CMakeLists.txt b/CMakeLists.txt index 75a0a6d..a8ab15a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,6 +70,7 @@ set(CPP_SOURCE_FILES source/renameModel.cpp common/source/httpInterface.cpp + common/source/global.cpp ) set(UI_FILES ui/mainwindow.ui diff --git a/common/include/global.h b/common/include/global.h index c269eb4..60672e5 100644 --- a/common/include/global.h +++ b/common/include/global.h @@ -29,7 +29,14 @@ enum GraphicsItemType enum AbstractItemType //工程模关联的对象类型 { + AIT_bus = 1, + AIT_motor +}; +class corresbondItem //类型关联函数 +{ +public: + static QMap linkType; }; enum DiagramMode //组态图模式 @@ -123,12 +130,60 @@ struct projectManager //工程模管理类 QJsonObject checkState; //属性选择状态 }; +//===================================== +struct propertyGroupState //模型属性组信息 +{ + QString groupName; //属性组名称 + QString tableName; //属性组表名 + QJsonObject propertyState; //属性状态信息 +}; + +//================工程模使用====================== + +struct propertyStateInfo //属性 +{ + QString name; //属性名 + QString tagName; //别名 + QString type; //属性类型 + QString defaultValue; //默认值 +}; + +typedef QMap PropertyValueInfo; + +struct groupStateInfo //属性组(结构信息) +{ + QString groupName; //组名 + QString tableName; //表名 + PropertyValueInfo info; //属性信息 +}; + +struct groupStateValue //属性组(实时数据) +{ + QString groupName; //组名 + QString tableName; //表名 + QMap mapInfo; +}; + +struct modelStateInfo //模型结构信息 +{ + QString modelName; + int modelType; + QMap groupInfo; //属性组信息 +}; + +struct modelDataInfo //模型数据信息 +{ + QString modelName; + int modelType; + QMap groupInfo; //属性组实时信息 +}; //================================================== struct componentInfo { int id = 0; QUuid uuid; + QString modelName; QString nspath; QString tag; QString name; diff --git a/common/source/global.cpp b/common/source/global.cpp new file mode 100644 index 0000000..c65e7a8 --- /dev/null +++ b/common/source/global.cpp @@ -0,0 +1,5 @@ +#include "global.h" + +QMap corresbondItem::linkType = { + {AIT_bus,GIT_bus}, + }; diff --git a/diagramCavas/include/diagramCavas.h b/diagramCavas/include/diagramCavas.h index a623993..2bacdc7 100644 --- a/diagramCavas/include/diagramCavas.h +++ b/diagramCavas/include/diagramCavas.h @@ -23,7 +23,7 @@ public: void initial(); public slots: void onSignal_addDrawingPanel(const QString& sTitile,DiagramMode = DM_edit); - void onSignal_addGraphicsItem(GraphicsItemType&); + void onSignal_addGraphicsItem(modelStateInfo&); void onSignal_addPage(); void onSignal_savePage(); void onSignal_loadPage(const QString&); diff --git a/diagramCavas/include/drawingPanel.h b/diagramCavas/include/drawingPanel.h index 7e94234..e86b3be 100644 --- a/diagramCavas/include/drawingPanel.h +++ b/diagramCavas/include/drawingPanel.h @@ -49,7 +49,7 @@ signals: protected: void closeEvent(QCloseEvent *closeEvent); public slots: - void onSignal_addGraphicsItem(GraphicsItemType&); + void onSignal_addGraphicsItem(modelStateInfo&); private: Ui::drawingPanel *ui; DesignerView* m_pGraphicsView; diff --git a/diagramCavas/include/graphicsDataModel/fixedPortsModel.h b/diagramCavas/include/graphicsDataModel/fixedPortsModel.h index 0014c4d..b7a600a 100644 --- a/diagramCavas/include/graphicsDataModel/fixedPortsModel.h +++ b/diagramCavas/include/graphicsDataModel/fixedPortsModel.h @@ -28,7 +28,7 @@ public: bool addNodeItem(QUuid uuid,GraphicsBaseItem*); void addNodeItem(QUuid id,/*int type,*/QPointF pos); QVariant nodeData(QUuid nodeId, NodeRole role) const; - BaseProperty* addNodeData(QUuid id,int type,QString name); //对应component数据,一个data可对应多个item + BaseProperty* addNodeData(QUuid id,int type,QString name,QString modelName); //对应component数据,一个data可对应多个item void loadNodeDataFromDataBase(); //从数据库加载数据 void addConnectLline(QUuid srcId,QUuid destId,int srcPort,int destPort); void deleteNodeItem(GraphicsBaseItem*); @@ -37,6 +37,9 @@ public: void setScene(DesignerScene* p){_scene = p;} void setTopWidget(DrawingPanel* p) {_widget = p;} QWidget* getTopWidget(); + void addModelProperty(modelStateInfo); //使用信号接收属性数据 + void getModelInfo(); //获取模型结构信息 + void getModelData(); //获取模型数据 Q_SIGNALS: void activatePage(const QString&); //激活当前model所在page public: @@ -58,6 +61,8 @@ private: DrawingPanel* _widget; //顶层widget HttpInterface* _Interface; QTimer* _timer; + QMap _modelStateInfo; //接收的模型结构信息 + QMap _modleDataInfo; //模型实时数据 public: static bool _dataInitialised; static QMap _nodeData; //一个data可对应多个item diff --git a/diagramCavas/include/graphicsItem/graphicsBaseItem.h b/diagramCavas/include/graphicsItem/graphicsBaseItem.h index cbb3a5a..58f26f8 100644 --- a/diagramCavas/include/graphicsItem/graphicsBaseItem.h +++ b/diagramCavas/include/graphicsItem/graphicsBaseItem.h @@ -486,6 +486,8 @@ public: virtual void updateConnectData(); //更新连接关系数据 virtual void setItemChanged(bool b){_itemChanged = b;} virtual bool itemChanged() const {return _itemChanged;} + virtual void setModelName(QString sName){_modelName = sName;} + virtual QString getModelName() const {return _modelName;} protected: virtual QVariant itemChange(QGraphicsItem::GraphicsItemChange, const QVariant&); virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent*); @@ -505,6 +507,7 @@ protected: int _lastPort; //最后触碰的port BaseProperty* _property; bool _itemChanged; //图元变化标志,判断是否需要保存 + QString _modelName; //当前图元使用的模型名,用来在model中检索属性信息 }; class BaseProperty:public QObject //属性类,存放电路元件属性 @@ -516,6 +519,8 @@ public: void setUuid(QUuid id) {uUid = id;} QUuid uuid() const {return uUid;} + void setModelName(QString sName) {sModelName = sName;} + QString modelName() const {return sModelName;} void setType(int n) {nType = n;} int type() const {return nType;} void setPage(int n){nPageId = n;} @@ -554,6 +559,7 @@ signals: void updateData(); //通知数据拥有者更新 protected: QUuid uUid; + QString sModelName; //模型名 int nType; //设备类型 int nPageId; //暂定为创建本数据的图Id(待定) QString sTag; @@ -573,4 +579,17 @@ protected: bool _prepareDelete; //状态,为真准备删除 }; +typedef QMap VariableMap; //属性名,值 + +class VariableProperty:public BaseProperty //收到的变量数据 +{ + Q_OBJECT +public: + VariableProperty(QObject* parent); + ~VariableProperty(); + QMap& getMapGroup() {return _MapGroup;} +private: + QMap _MapGroup; //<属性组,属性集> +}; + #endif diff --git a/diagramCavas/include/util/creatingSelector.h b/diagramCavas/include/util/creatingSelector.h index 5673ac3..7570bbc 100644 --- a/diagramCavas/include/util/creatingSelector.h +++ b/diagramCavas/include/util/creatingSelector.h @@ -35,11 +35,11 @@ public: virtual void mouseMoveEvent(QGraphicsSceneMouseEvent*, DesignerScene*); virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent*, DesignerScene*); - void setCreatingItem(GraphicsItemType& type) { m_creatingItemType=type; } + void setCreatingItem(modelStateInfo& info) { m_creatingItemInfo=info; } private: CreatingMethod m_creatingMethod; - GraphicsItemType m_creatingItemType; + modelStateInfo m_creatingItemInfo; GraphicsBaseItem* m_pCreatingItem; QPointF m_scalBasePoint; }; diff --git a/diagramCavas/include/util/selectorManager.h b/diagramCavas/include/util/selectorManager.h index 4ee7573..8def88f 100644 --- a/diagramCavas/include/util/selectorManager.h +++ b/diagramCavas/include/util/selectorManager.h @@ -28,7 +28,7 @@ public: void setWorkingSelector(SelectorType s) { m_curSelector=s; } BaseSelector* getWorkingSelector(); //根据操作方式获取selector - void setDrawGraphicsItem(GraphicsItemType); + void setDrawGraphicsItem(modelStateInfo&); void setName(const QString&); public slots: void onSignal_setWorkingSelector(SelectorType); diff --git a/diagramCavas/source/diagramCavas.cpp b/diagramCavas/source/diagramCavas.cpp index c28bc01..c166ca2 100644 --- a/diagramCavas/source/diagramCavas.cpp +++ b/diagramCavas/source/diagramCavas.cpp @@ -39,13 +39,13 @@ void DiagramCavas::onSignal_addDrawingPanel(const QString& sTitile,DiagramMode m connect(pPanel,&DrawingPanel::panelDelete,this,&DiagramCavas::onSignal_panelDelete); } -void DiagramCavas::onSignal_addGraphicsItem(GraphicsItemType& type) +void DiagramCavas::onSignal_addGraphicsItem(modelStateInfo& info) { QWidget* pWindow= currentSubWindow()->widget(); DrawingPanel* pPanel = dynamic_cast(pWindow); if(pPanel) - pPanel->onSignal_addGraphicsItem(type); + pPanel->onSignal_addGraphicsItem(info); } void DiagramCavas::onSignal_addPage() diff --git a/diagramCavas/source/drawingPanel.cpp b/diagramCavas/source/drawingPanel.cpp index dcd8062..e7f3b46 100644 --- a/diagramCavas/source/drawingPanel.cpp +++ b/diagramCavas/source/drawingPanel.cpp @@ -146,12 +146,12 @@ void DrawingPanel::closeEvent(QCloseEvent *closeEvent) emit panelDelete(_name); } -void DrawingPanel::onSignal_addGraphicsItem(GraphicsItemType& itemType) +void DrawingPanel::onSignal_addGraphicsItem(modelStateInfo& info) { if(m_pSelectorManager) { m_pSelectorManager->setWorkingSelector(ST_cerating); - m_pSelectorManager->setDrawGraphicsItem(itemType); + m_pSelectorManager->setDrawGraphicsItem(info); } } diff --git a/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp b/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp index 4454ead..00caa63 100644 --- a/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp +++ b/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp @@ -124,6 +124,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos) item->addPoint(pos); item->setProperty(pro); //绑定模型 item->updateByProperty(); //使用模型更新自身 + item->setModelName(pro->modelName()); _nodeItem.insert(id,item); connect(item,&GraphicsBaseItem::ifExist,this,&FixedPortsModel::onSignal_ifExits); } @@ -131,26 +132,34 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos) } } -BaseProperty* FixedPortsModel::addNodeData(QUuid id,int type,QString name) +BaseProperty* FixedPortsModel::addNodeData(QUuid id,int type,QString name,QString modelName) { if(_nodeData.contains(id)) return nullptr; - BaseProperty* item = nullptr; - if(type == GIT_itemTri) - { - item = new ElectricSvgItemTriangle_Property(this); + modelStateInfo modelInfo; + for(auto &model:_modelStateInfo){ //找到对象对应的工程模 + if(model.modelName == modelName){ + modelInfo = model; + break; + } } - else if(type == GIT_itemRect) + + VariableProperty* item = new VariableProperty(this); + QMap& propertyGroup = item->getMapGroup(); + for(auto &groupInfo:modelInfo.groupInfo) { - item = new ElectricSvgItemRect_Property(this); - } - else if(type == GIT_bus) - { - item = new ElectricSvgItemBus_Property(this); + VariableMap map; + for(auto &pro:groupInfo.info) + { + map.insert(pro.name,pro.defaultValue); //添加属性信息 + } + propertyGroup.insert(groupInfo.groupName,map); } + if(item) { item->setUuid(id); + item->setModelName(modelName); item->setType(type); item->setTag(name); item->setName(name); @@ -166,7 +175,7 @@ void FixedPortsModel::loadNodeDataFromDataBase() QList lst= DataBase::GetInstance()->getAllComponents(); for(auto &info:lst) { - BaseProperty* pData = addNodeData(info.uuid,info.type,info.name); + BaseProperty* pData = addNodeData(info.uuid,info.type,info.name,info.modelName); pData->setPage(info.page_id); pData->setTag(info.tag); pData->setName(info.name); @@ -182,6 +191,28 @@ void FixedPortsModel::loadNodeDataFromDataBase() pData->setStation(info.station); pData->setDataChanged(false); + VariableProperty* pPro = dynamic_cast(pData); + if(pPro) + { + QMap& mapVariableGroup = pPro->getMapGroup(); + + QMap mapGroup = _modleDataInfo[info.modelName].groupInfo; //取得该模型下的所有属性组 + QMap::Iterator iter; + for(iter = mapGroup.begin();iter != mapGroup.end();++iter) + { + VariableMap varMap; + + PropertyValueInfo valueInfo = iter->mapInfo[info.uuid]; + PropertyValueInfo::Iterator it; + for(it = valueInfo.begin(); it != valueInfo.end();++it) + { + varMap.insert(it.key(),it->defaultValue); + } + + mapVariableGroup.insert(iter.key(),varMap); + } + } + if(info.type == GIT_itemTri) { @@ -451,7 +482,7 @@ void FixedPortsModel::saveNode(int nPageId) } else { - DataBase::GetInstance()->insertComponent(pData->uuid(),pData->path(),pData->tag(),pData->name(),pData->description(),pData->grid(),pData->zone(),pData->station(),pData->type(),true,pData->state(),pData->connectedBus(),pData->label(),pData->context(),nPageId,1); + DataBase::GetInstance()->insertComponent(pData->uuid(),pData->modelName(),pData->path(),pData->tag(),pData->name(),pData->description(),pData->grid(),pData->zone(),pData->station(),pData->type(),true,pData->state(),pData->connectedBus(),pData->label(),pData->context(),nPageId,1); int type = pData->type(); if(type == GIT_itemRect) { @@ -512,7 +543,7 @@ void FixedPortsModel::onSignal_ifExits(QUuid id,const QString& str,int type,Grap } else //创建新data并绑定 { - BaseProperty* pItem = addNodeData(id,type,str); + BaseProperty* pItem = addNodeData(id,type,str,pitem->getModelName()); if(pItem) { pitem->setProperty(pItem); @@ -569,3 +600,101 @@ QWidget* FixedPortsModel::getTopWidget() return dynamic_cast(_widget); } +void FixedPortsModel::addModelProperty(modelStateInfo info) +{ + if(!_modelStateInfo.contains(info.modelName)) + { + _modelStateInfo.insert(info.modelName,info); + } +} + +void FixedPortsModel::getModelInfo() +{ + QMap model = DataBase::GetInstance()->getAllProjectModel(); + + QMap::Iterator iter; + for(iter = model.begin();iter != model.end(); ++iter) //遍历模型 + { + modelStateInfo modelInfo; + modelInfo.modelType = iter.value(); //模型类型 + + groupStateInfo groupInfo; + QMap mapState = DataBase::GetInstance()->getModelInfo(iter.key()); + + QMap::Iterator it; + for(it = mapState.begin();it != mapState.end();++it) //遍历模型属性组 + { + groupInfo.groupName = it.key(); + groupInfo.tableName = it->tableName; + QJsonArray nodesJsonArray = it->propertyState["checkState"].toArray(); + + for (QJsonValueRef nodeJson : nodesJsonArray) //每个属性的状态信息 + { + propertyStateInfo propertyInfo; + + QJsonObject node = nodeJson.toObject(); + QString propertyName = node["name"].toString(); + int nState = node["checked"].toInt(); + QString dataType = node["type"].toString(); + QString defaultValue = node["defaultValue"].toString(); + + if(nState) + { + //todo:别名赋值 + propertyInfo.name = propertyName; + propertyInfo.type = dataType; + propertyInfo.defaultValue = defaultValue; + + groupInfo.info.insert(propertyName,propertyInfo); + } + } + modelInfo.groupInfo.insert(it.key(),groupInfo); + } + _modelStateInfo.insert(iter.key(),modelInfo); + } +} + +void FixedPortsModel::getModelData() +{ + QMap model = DataBase::GetInstance()->getAllProjectModel(); + + QMap::Iterator iter; + for(iter = model.begin();iter != model.end(); ++iter) //遍历模型 + { + modelDataInfo modelInfo; + modelInfo.modelType = iter.value(); //模型类型 + + QMap mapState = DataBase::GetInstance()->getModelInfo(iter.key()); + + QMap::Iterator it; + for(it = mapState.begin();it != mapState.end();++it) //遍历模型属性组 + { + groupStateValue groupValue; + groupValue.groupName = it.key(); + QJsonArray nodesJsonArray = it->propertyState["checkState"].toArray(); + + QStringList lstParam; //需检索的属性组中属性名列表 + + for (QJsonValueRef nodeJson : nodesJsonArray) //每个属性的状态信息 + { + propertyStateInfo propertyInfo; + + QJsonObject node = nodeJson.toObject(); + QString propertyName = node["name"].toString(); + int nState = node["checked"].toInt(); + QString dataType = node["type"].toString(); + QString defaultValue = node["defaultValue"].toString(); + + if(nState) + { + lstParam.append(propertyName); + } + } + lstParam.append("global_uuid"); //全局id未添加到属性状态中,手动选择 + groupValue.mapInfo = DataBase::GetInstance()->selectGroupProperty(it->tableName,lstParam); //返回表中属性值 + + modelInfo.groupInfo.insert(it.key(),groupValue); + } + _modleDataInfo.insert(iter.key(),modelInfo); + } +} diff --git a/diagramCavas/source/graphicsItem/graphicsBaseItem.cpp b/diagramCavas/source/graphicsItem/graphicsBaseItem.cpp index fd8e221..d2652a5 100644 --- a/diagramCavas/source/graphicsItem/graphicsBaseItem.cpp +++ b/diagramCavas/source/graphicsItem/graphicsBaseItem.cpp @@ -321,3 +321,16 @@ BaseProperty::~BaseProperty() { } + +/*************************属性变量*************************/ + +VariableProperty::VariableProperty(QObject* parent) + :BaseProperty(parent) +{ + +} + +VariableProperty::~VariableProperty() +{ + +} diff --git a/diagramCavas/source/util/creatingSelector.cpp b/diagramCavas/source/util/creatingSelector.cpp index 2e9eb58..a2a12ed 100644 --- a/diagramCavas/source/util/creatingSelector.cpp +++ b/diagramCavas/source/util/creatingSelector.cpp @@ -34,7 +34,7 @@ void CreatingSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, Designer { scene->clearSelection(); - switch (m_creatingItemType) + switch (m_creatingItemInfo.modelType) { case GIT_rect: { @@ -111,7 +111,9 @@ void CreatingSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, Designer m_pCreatingItem->addPoint(ms_ptMouseDown); ms_nDragHandle = m_pCreatingItem->handleCount(); //m_graphicsItem[sceneName()].insert(QString::number(m_pCreatingItem->itemId()),m_pCreatingItem); //插入数据到总表 + m_pCreatingItem->setModelName(m_creatingItemInfo.modelName); _model->addNodeItem(m_pCreatingItem->itemId(),m_pCreatingItem); + _model->addModelProperty(m_creatingItemInfo); //添加当前模型状态 m_pCreatingItem = nullptr; //先舍弃多次点击创建对象241124 by } } diff --git a/diagramCavas/source/util/selectorManager.cpp b/diagramCavas/source/util/selectorManager.cpp index e77da59..520bc60 100644 --- a/diagramCavas/source/util/selectorManager.cpp +++ b/diagramCavas/source/util/selectorManager.cpp @@ -66,14 +66,14 @@ BaseSelector* SelectorManager::getWorkingSelector() return nullptr; } -void SelectorManager::setDrawGraphicsItem(GraphicsItemType item) +void SelectorManager::setDrawGraphicsItem(modelStateInfo& info) { for(auto it = m_vecSelectors.begin(); it != m_vecSelectors.end(); it++) { if((*it)->getSelectorType()==ST_cerating) { CreatingSelector* creatingSelector = dynamic_cast(*it); - creatingSelector->setCreatingItem(item); + creatingSelector->setCreatingItem(info); } } } diff --git a/diagramUtils/CMakeLists.txt b/diagramUtils/CMakeLists.txt index c1106a4..aa643b0 100644 --- a/diagramUtils/CMakeLists.txt +++ b/diagramUtils/CMakeLists.txt @@ -11,6 +11,7 @@ set(DIAGRAMUTILS_HEADER_FILES set(DIAGRAMUTILS_SOURCE_FILES source/logger.cpp source/dataBase.cpp + ../common/source/global.cpp ) diff --git a/diagramUtils/include/dataBase.h b/diagramUtils/include/dataBase.h index 8db58c2..efed935 100644 --- a/diagramUtils/include/dataBase.h +++ b/diagramUtils/include/dataBase.h @@ -37,7 +37,7 @@ public: busStability getBusStabilityById(int componentId); /*********************************************************************************/ bool updateComponent(QUuid uuid,QString tag,QString name,QJsonObject context); - bool insertComponent(QUuid uuid,QString nspath,QString tag,QString name,QString description,QString grid,QString zone,QString station,int type,bool inService,int state,QJsonObject connected_bus,QJsonObject label,QJsonObject context,int page_id,int op); + bool insertComponent(QUuid uuid,QString modelName,QString nspath,QString tag,QString name,QString description,QString grid,QString zone,QString station,int type,bool inService,int state,QJsonObject connected_bus,QJsonObject label,QJsonObject context,int page_id,int op); componentInfo getComponentInfoByUuid(QString uuid); QList getAllComponents(); bool componentExist(QString uuid); @@ -85,7 +85,9 @@ public: bool modifyProjectTable(QString sTable,QMap mOld,QMap mNew); //**********使用工程模 QMap getAllProjectModel(); //获取所有工程模<名称,图元类型> + QMap getModelInfo(const QString&); //获取模型信息 QMap getProjectModelGroupInfo(const QString&); //获取指定工程模所有属性组信息<属性组名,属性信息> + QMap selectGroupProperty(const QString& tableName,const QStringList& paramList); //返回属性组表中的信息 private: QMap _attributeGroup; //属性组的组 QMap _dataType; //数据类型组 diff --git a/diagramUtils/source/dataBase.cpp b/diagramUtils/source/dataBase.cpp index 8e3ff78..9058345 100644 --- a/diagramUtils/source/dataBase.cpp +++ b/diagramUtils/source/dataBase.cpp @@ -225,51 +225,28 @@ QSqlQuery DataBase::executeBatchSQL(const QStringList& sqlStatements, bool creat } -bool DataBase::insertComponent(QUuid uuid,QString nspath,QString tag,QString name,QString description,QString grid,QString zone,QString station,int type,bool inService,int state,QJsonObject connected_bus,QJsonObject label,QJsonObject context,int page_id,int op) +bool DataBase::insertComponent(QUuid uuid,QString modelName,QString nspath,QString tag,QString name,QString description,QString grid,QString zone,QString station,int type,bool inService,int state,QJsonObject connected_bus,QJsonObject label,QJsonObject context,int page_id,int op) { if(db.open()) { QSqlQuery qry(db); - /*QJsonDocument busDoc(connected_bus); - QString strBus = busDoc.toJson(QJsonDocument::Compact); - - QJsonDocument labelDoc(label); - QString strLabel = labelDoc.toJson(QJsonDocument::Compact);*/ - QJsonDocument contextDoc(context); QString strCon = contextDoc.toJson(QJsonDocument::Compact); - /*qry.prepare("INSERT INTO component(global_uuid, nspath, tag, name, description, grid, zone, station, type, in_service, state, connected_bus, label, context, page_id, op, ts) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + qry.prepare("INSERT INTO component(global_uuid, model_name,tag, name, grid, zone, station, type, context, page_id, op, ts) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); qry.bindValue(0,uuid); - qry.bindValue(1,nspath); + qry.bindValue(1,modelName); qry.bindValue(2,tag); qry.bindValue(3,name); - qry.bindValue(4,description); - qry.bindValue(5,grid); - qry.bindValue(6,zone); - qry.bindValue(7,station); - qry.bindValue(8,type); - qry.bindValue(9,inService); - qry.bindValue(10,state); - qry.bindValue(11,strBus); - qry.bindValue(12,strLabel); - qry.bindValue(13,strCon); - qry.bindValue(14,page_id); - qry.bindValue(15,op); - qry.bindValue(16,QDateTime::currentDateTime());*/ - qry.prepare("INSERT INTO component(global_uuid, tag, name, grid, zone, station, type, context, page_id, op, ts) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); - qry.bindValue(0,uuid); - qry.bindValue(1,tag); - qry.bindValue(2,name); - qry.bindValue(3,grid); - qry.bindValue(4,zone); - qry.bindValue(5,station); - qry.bindValue(6,type); - qry.bindValue(7,strCon); - qry.bindValue(8,page_id); - qry.bindValue(9,op); - qry.bindValue(10,QDateTime::currentDateTime()); + qry.bindValue(4,grid); + qry.bindValue(5,zone); + qry.bindValue(6,station); + qry.bindValue(7,type); + qry.bindValue(8,strCon); + qry.bindValue(9,page_id); + qry.bindValue(10,op); + qry.bindValue(11,QDateTime::currentDateTime()); bool res = qry.exec(); QString str = qry.lastQuery(); const QVariantList list = qry.boundValues(); @@ -557,7 +534,7 @@ componentInfo DataBase::getComponentInfoByUuid(QString uuid) QSqlQuery qry(db); //qry.prepare("SELECT * FROM component WHERE global_uuid = ?"); - qry.prepare("SELECT id, global_uuid, tag, name, grid, zone, station, type, context, page_id, op FROM component WHERE global_uuid = ?"); + qry.prepare("SELECT id, global_uuid, model_name, tag, name, grid, zone, station, type, context, page_id, op FROM component WHERE global_uuid = ?"); qry.bindValue(0,uuid); bool res = qry.exec(); QString str = qry.lastQuery(); @@ -572,16 +549,17 @@ componentInfo DataBase::getComponentInfoByUuid(QString uuid) { inf.id = qry.value(0).toInt(); inf.uuid = QUuid(qry.value(1).toString()); - inf.tag = qry.value(2).toString(); - inf.name = qry.value(3).toString(); - inf.grid = qry.value(4).toString(); - inf.zone = qry.value(5).toString(); - inf.station = qry.value(6).toString(); - inf.type = qry.value(7).toInt(); - QString str = qry.value(8).toString(); + inf.modelName = qry.value(2).toString(); + inf.tag = qry.value(3).toString(); + inf.name = qry.value(4).toString(); + inf.grid = qry.value(5).toString(); + inf.zone = qry.value(6).toString(); + inf.station = qry.value(7).toString(); + inf.type = qry.value(8).toInt(); + QString str = qry.value(9).toString(); inf.context = QstringToJson(str); - inf.page_id = qry.value(9).toInt(); - inf.op = qry.value(10).toInt(); + inf.page_id = qry.value(10).toInt(); + inf.op = qry.value(11).toInt(); qry.clear(); } } @@ -1367,6 +1345,33 @@ QMap DataBase::getAllProjectModel() } } +QMap DataBase::getModelInfo(const QString& sProject) +{ + QMap map; + QString strSQL = "SELECT group_name,name,check_state FROM project_manager WHERE tag = ?"; + QVariantList params; + params.append(sProject); + + try + { + QSqlQuery query = executeSQL(strSQL,false,params); + while (query.next()) + { + propertyGroupState sta; + sta.groupName = query.value(0).toString(); + sta.tableName = query.value(1).toString(); + sta.propertyState = QstringToJson(query.value(2).toString()); + map.insert(sta.groupName,sta); + } + query.clear(); + return map; + } + catch (const std::exception& e) + { + return map; + } +} + QMap DataBase::getProjectModelGroupInfo(const QString& sTable) { QMap map; @@ -1401,6 +1406,40 @@ QMap DataBase::getProjectModelGroupInfo(const QString& s } } +QMap DataBase::selectGroupProperty(const QString& tableName,const QStringList& paramList) +{ + QString strSQL = QString("SELECT %1 FROM %2").arg(paramList.join(", ")).arg(tableName); + QMap map; + PropertyValueInfo info; + + try + { + QSqlQuery query = executeSQL(strSQL); + while (query.next()) + { + QUuid uuid; + for(auto ¶m:paramList) + { + propertyStateInfo pro; + if(param == "global_uuid") + { + uuid = QUuid(query.value(param).toString()); + continue; + } + pro.defaultValue = query.value(param).toString(); + info.insert(param,pro); + } + map.insert(uuid,info); + } + query.clear(); + return map; + } + catch (const std::exception& e) + { + return map; + } +} + bool DataBase::createDynamicTable(const QString &tableName, const QStringList &fields) { QString strSQL = "CREATE TABLE IF NOT EXISTS " + tableName + " ("; diff --git a/include/electricElementsBox.h b/include/electricElementsBox.h index 1e68dd7..d68ab06 100644 --- a/include/electricElementsBox.h +++ b/include/electricElementsBox.h @@ -18,15 +18,18 @@ public: public: void initial(); + void addPanelItems(const QString& sPanel); //添加面板图元 ToolBox* getToolBox() const; - void updateProjectModelItemList(); //更新工程模对象列表 + void getModelInfo(); //获取模型信息 + void updateModelList(); //更新工程模对象列表 signals: - void addEletricItem(GraphicsItemType&); + void addEletricItem(modelStateInfo&); public slots: - void onSignal_addEletricItem(GraphicsItemType&); + void onSignal_addEletricItem(modelStateInfo&); private: ToolBox* m_pToolBox; QMap m_mapPanels; + QMap _modelInfo; //模型信息 }; #endif diff --git a/include/electricElementsPanel.h b/include/electricElementsPanel.h index 6c88aa3..f69c070 100644 --- a/include/electricElementsPanel.h +++ b/include/electricElementsPanel.h @@ -16,16 +16,16 @@ public: ~ElectricElementsPanel(); signals: - void addGraphicsItem(GraphicsItemType&); + void addGraphicsItem(modelStateInfo&); public: - void setData(const QMap&); + void setData(QMap); private: void initial(); public slots: void onItemClicked(QListWidgetItem*); private: ElectricElementsListwidget* m_pListWidget; - QMap m_mapEleData; + QMap m_mapEleData; }; #endif diff --git a/source/electricElementsBox.cpp b/source/electricElementsBox.cpp index 65d50ed..970384b 100644 --- a/source/electricElementsBox.cpp +++ b/source/electricElementsBox.cpp @@ -1,4 +1,5 @@ #include +#include #include "electricElementsPanel.h" #include "electricElementsBox.h" #include "toolBox.h" @@ -21,24 +22,23 @@ ElectricElementsBox::~ElectricElementsBox() void ElectricElementsBox::initial() { - ElectricElementsPanel* pPanel1 = new ElectricElementsPanel(); - QMap map1; - map1.insert(QString::fromWCharArray(L"三角"),GIT_rect); - map1.insert(QString::fromWCharArray(L"四边"),GIT_roundRect); - pPanel1->setData(map1); - m_mapPanels.insert("baseElements",pPanel1); - m_pToolBox->addWidget("baseElements",pPanel1); - connect(pPanel1,&ElectricElementsPanel::addGraphicsItem,this,&ElectricElementsBox::onSignal_addEletricItem); + addPanelItems("Items"); +} - ElectricElementsPanel* pPanel2 = new ElectricElementsPanel(); - QMap map2; - map2.insert(QString::fromWCharArray(L"总线"),GIT_bus); - map2.insert(QString::fromWCharArray(L"单线"),GIT_itemRect); - map2.insert(QString::fromWCharArray(L"双线"),GIT_itemTri); - pPanel2->setData(map2); - m_mapPanels.insert("eletricElements",pPanel2); - m_pToolBox->addWidget("eletricElements",pPanel2); - connect(pPanel2,&ElectricElementsPanel::addGraphicsItem,this,&ElectricElementsBox::onSignal_addEletricItem); +void ElectricElementsBox::addPanelItems(const QString& sPanel) +{ + ElectricElementsPanel* pPanel = new ElectricElementsPanel(); + + for(auto &model:_modelInfo) + { + GraphicsItemType localType = corresbondItem::linkType[(AbstractItemType)model.modelType]; + model.modelType = localType; //转换图元类别,从字典表转到内部类别 + } + + pPanel->setData(_modelInfo); + m_mapPanels.insert(sPanel,pPanel); + m_pToolBox->addWidget(sPanel,pPanel); + connect(pPanel,&ElectricElementsPanel::addGraphicsItem,this,&ElectricElementsBox::onSignal_addEletricItem); } ToolBox* ElectricElementsBox::getToolBox() const @@ -46,13 +46,62 @@ ToolBox* ElectricElementsBox::getToolBox() const return m_pToolBox; } -void ElectricElementsBox::updateProjectModelItemList() +void ElectricElementsBox::getModelInfo() { QMap model = DataBase::GetInstance()->getAllProjectModel(); + + QMap::Iterator iter; + for(iter = model.begin();iter != model.end(); ++iter) //遍历模型 + { + modelStateInfo modelInfo; + modelInfo.modelType = iter.value(); //模型类型 + + groupStateInfo groupInfo; + QMap mapState = DataBase::GetInstance()->getModelInfo(iter.key()); + + QMap::Iterator it; + for(it = mapState.begin();it != mapState.end();++it) //遍历模型属性组 + { + groupInfo.groupName = it.key(); + groupInfo.tableName = it->tableName; + QJsonArray nodesJsonArray = it->propertyState["checkState"].toArray(); + + for (QJsonValueRef nodeJson : nodesJsonArray) //每个属性的状态信息 + { + propertyStateInfo propertyInfo; + + QJsonObject node = nodeJson.toObject(); + QString propertyName = node["name"].toString(); + int nState = node["checked"].toInt(); + QString dataType = node["type"].toString(); + QString defaultValue = node["defaultValue"].toString(); + + if(nState) + { + //todo:别名赋值 + propertyInfo.name = propertyName; + propertyInfo.type = dataType; + propertyInfo.defaultValue = defaultValue; + + groupInfo.info.insert(propertyName,propertyInfo); + } + } + modelInfo.groupInfo.insert(it.key(),groupInfo); + } + _modelInfo.insert(iter.key(),modelInfo); + } } -void ElectricElementsBox::onSignal_addEletricItem(GraphicsItemType& type) +void ElectricElementsBox::updateModelList() { - emit addEletricItem(type); + for(auto &model:_modelInfo) + { + GraphicsItemType localType = corresbondItem::linkType[(AbstractItemType)model.modelType]; + } +} + +void ElectricElementsBox::onSignal_addEletricItem(modelStateInfo& info) +{ + emit addEletricItem(info); } diff --git a/source/electricElementsPanel.cpp b/source/electricElementsPanel.cpp index 456ad78..d2ad596 100644 --- a/source/electricElementsPanel.cpp +++ b/source/electricElementsPanel.cpp @@ -33,21 +33,18 @@ void ElectricElementsPanel::initial() QIcon icon(":/images/element/icons_triangle.png"); QListWidgetItem* pItem = new QListWidgetItem(icon,iter.key()); pItem->setSizeHint(QSize(50,50)); - pItem->setData(Qt::UserRole,iter.value()); m_pListWidget->addItem(pItem); } } -void ElectricElementsPanel::setData(const QMap& map) +void ElectricElementsPanel::setData(QMap map) { m_mapEleData = map; initial(); } - void ElectricElementsPanel::onItemClicked(QListWidgetItem* item) { item->setBackground(QBrush(QColor(135,206,235,220))); - GraphicsItemType itetType = (GraphicsItemType)item->data(Qt::UserRole).toInt(); - emit addGraphicsItem(itetType); + emit addGraphicsItem(m_mapEleData[item->text()]); } diff --git a/source/projectModelDlg.cpp b/source/projectModelDlg.cpp index 1a6135e..1db60f4 100644 --- a/source/projectModelDlg.cpp +++ b/source/projectModelDlg.cpp @@ -72,6 +72,7 @@ MapProperty projectModelDlg::addNewProject(const QString& sMeta,const QString& s QString propertyName = node["name"].toString(); int nState = node["checked"].toInt(); QString dataType = node["type"].toString(); + QString defaultValue = node["defaultValue"].toString(); QStandardItem* pItem = new QStandardItem(propertyName); setItemAttribute(propertyName,pItem); @@ -919,6 +920,7 @@ QJsonObject projectModelDlg::getSelectedState(MapProperty::Iterator iter) QString dataType = childItem->data(DataType).toString(); int lengthPrecision = childItem->data(LengthPrecision).toInt(); int scale = childItem->data(Scale).toInt(); + QString defaultValue = childItem->data(DefaultValue).toString(); QString dataTypePart = dataType; //拼接数据类型 if (lengthPrecision > 0) { @@ -933,6 +935,7 @@ QJsonObject projectModelDlg::getSelectedState(MapProperty::Iterator iter) node["name"] = childItem->text(); node["checked"] = 1; node["type"] = dataTypePart; + node["defaultValue"] = defaultValue; arrState.append(node); } } @@ -944,6 +947,7 @@ QJsonObject projectModelDlg::getSelectedState(MapProperty::Iterator iter) QString dataType = childItem->data(DataType).toString(); int lengthPrecision = childItem->data(LengthPrecision).toInt(); int scale = childItem->data(Scale).toInt(); + QString defaultValue = childItem->data(DefaultValue).toString(); QString dataTypePart = dataType; //拼接数据类型 if (lengthPrecision > 0) { @@ -958,6 +962,7 @@ QJsonObject projectModelDlg::getSelectedState(MapProperty::Iterator iter) node["name"] = childItem->text(); node["checked"] = 0; node["type"] = dataTypePart; + node["defaultValue"] = defaultValue; arrState.append(node); } }