add base bay to project bay

This commit is contained in:
baiYue 2025-10-21 18:46:51 +08:00
parent 61a1da4d17
commit 52e2efdfcf
16 changed files with 490 additions and 173 deletions

View File

@ -519,6 +519,8 @@ struct DiagramEditorBayInfo //组态编辑间隔信息
{ {
QString name; //间隔名 QString name; //间隔名
int nLayout; //布局 0纵向1横向 int nLayout; //布局 0纵向1横向
QList<QUuid> lstFrom; //起始
QList<QUuid> lstTo; //结束
QMap<QString,DiagramEditorRouteInfo> mapRoute; //线路信息 QMap<QString,DiagramEditorRouteInfo> mapRoute; //线路信息
QMap<QString,DiagramEditorComponentInfo> mapComponent; //设备信息 QMap<QString,DiagramEditorComponentInfo> mapComponent; //设备信息
}; };
@ -843,6 +845,7 @@ struct bayInfo
{ {
QUuid uuid; QUuid uuid;
QString name; QString name;
QString tag;
QString type; QString type;
double unom; double unom;
double fla; double fla;
@ -871,6 +874,7 @@ struct itemPageInfo //page中保存的item信息(大小位置etc)
QPointF pos; QPointF pos;
double dWidth = 0.0; double dWidth = 0.0;
double dHeight = 0.0; double dHeight = 0.0;
double dRotate = 0.0;
}; };
/*struct busStability /*struct busStability

View File

@ -14,6 +14,7 @@ class PowerEntity;
class DiagramEditorWizard; class DiagramEditorWizard;
class EditPanel; class EditPanel;
class GraphicsBaseModelItem; class GraphicsBaseModelItem;
class EditBaseItem;
class DIAGRAM_DESIGNER_PUBLIC DiagramCavas : public QMdiArea class DIAGRAM_DESIGNER_PUBLIC DiagramCavas : public QMdiArea
{ {
@ -54,12 +55,11 @@ public slots:
void onSignal_createEditPanel(QString); void onSignal_createEditPanel(QString);
EditPanel* onSignal_addEditPanel(QString); EditPanel* onSignal_addEditPanel(QString);
void onSignal_addEditWizard(QString); void onSignal_addEditWizard(QString);
void onSignal_wizardFinished(QString,QMap<QUuid,GraphicsBaseModelItem*>); void onSignal_wizardFinished(QString,QMap<QUuid,GraphicsBaseModelItem*>,QList<EditBaseItem*>);
/*********************************间隔**************************************/ /*********************************间隔**************************************/
void onSignl_openCurrentBay(); void onSignl_openCurrentBay();
private: private:
void removePanel(PowerEntity*); void removePanel(PowerEntity*);
void autoSetModelName(GraphicsBaseModelItem*); //如果此页的工程模已被设置将projectName更新到item
private: private:
QMap<QString,QPair<DrawingPanel*,QMdiSubWindow*>> m_mapDrawPanel; QMap<QString,QPair<DrawingPanel*,QMdiSubWindow*>> m_mapDrawPanel;
int _pageIndex; int _pageIndex;

View File

@ -20,7 +20,7 @@ public:
virtual void setType(EditorItemType tpe) {nType = tpe;} virtual void setType(EditorItemType tpe) {nType = tpe;}
virtual EditorItemType getType(){return nType;} virtual EditorItemType getType(){return nType;}
virtual void setBoundingRect(QRectF rec) {m_boundingRect = rec;} virtual void setBoundingRect(QRectF rec) {m_boundingRect = rec;}
virtual QRectF boundingRect() const {return m_boundingRect;} virtual QRectF boundingRect() const override {return m_boundingRect;}
virtual void setBlockData(QPointer<DiagramEditorBaseBlock> p){_pBlock = p;} virtual void setBlockData(QPointer<DiagramEditorBaseBlock> p){_pBlock = p;}
virtual QPointer<DiagramEditorBaseBlock> getBlockData(){return _pBlock;} virtual QPointer<DiagramEditorBaseBlock> getBlockData(){return _pBlock;}
virtual QString getShowType(){return QString();} //获取显示类别 virtual QString getShowType(){return QString();} //获取显示类别

View File

@ -12,6 +12,7 @@ class DiagramEditorTransformerBlock;
class EditPanel; class EditPanel;
class DiagramEditorWizard; class DiagramEditorWizard;
class DiagramCavas; class DiagramCavas;
class EditBaseItem;
int const g_nHorizontalBlockSpacing = 100; //间隔横向间距 int const g_nHorizontalBlockSpacing = 100; //间隔横向间距
@ -58,13 +59,13 @@ public:
void generateItemByModel(QStandardItemModel* pModel,int nFrom = 0,QPoint delta = QPoint(0,0)); //0间隔1变压器 void generateItemByModel(QStandardItemModel* pModel,int nFrom = 0,QPoint delta = QPoint(0,0)); //0间隔1变压器
QList<DiagramEditorComponentInfo> generateItemByInfo(QMap<QString,DiagramEditorRouteInfo> mapRoute,QMap<QString,DiagramEditorComponentInfo> mapCompo,QPointF delta = QPointF(0,0)); //根据data生成item QList<DiagramEditorComponentInfo> generateItemByInfo(QMap<QString,DiagramEditorRouteInfo> mapRoute,QMap<QString,DiagramEditorComponentInfo> mapCompo,QPointF delta = QPointF(0,0)); //根据data生成item
void generateOutConnection(QList<DiagramEditorComponentInfo>,int nTypeTransCon,int nPos = 0); //生成外部连接手动bind的连接 nTypeTransCon变压器连线类型,1中性点连接2外部连接,nPos中性点连接时的位置 QMultiMap<int,QUuid> generateOutConnection(QList<DiagramEditorComponentInfo>,int nTypeTransCon,int nPos = 0); //生成外部连接手动bind的连接 nTypeTransCon变压器连线类型,1中性点连接2外部连接,nPos中性点连接时的位置
QRectF updateTarget(QMap<QString,DiagramEditorRouteInfo>&,QMap<QString,DiagramEditorComponentInfo>&,int nLayout,int nSource,bool saveToModel = true); //更新位置 nLayout主次朝向:8421,8421 上下左右,上下左右 nSource:0间隔1变压器 regenerate重新生成标志 saveToModel:生成到模型或map QRectF updateTarget(QMap<QString,DiagramEditorRouteInfo>&,QMap<QString,DiagramEditorComponentInfo>&,int nLayout,int nSource,bool saveToModel = true); //更新位置 nLayout主次朝向:8421,8421 上下左右,上下左右 nSource:0间隔1变压器 regenerate重新生成标志 saveToModel:生成到模型或map
void clearCompoDir(QMap<QString,DiagramEditorRouteInfo>&,QMap<QString,DiagramEditorComponentInfo>&,int nSource); //清空component中的dir(updateTarget前调用) void clearCompoDir(QMap<QString,DiagramEditorRouteInfo>&,QMap<QString,DiagramEditorComponentInfo>&,int nSource); //清空component中的dir(updateTarget前调用)
QList<DiagramEditorComponentInfo> getRouteItemInfoList(QMap<QString,DiagramEditorComponentInfo>,QMap<QString,DiagramEditorRouteInfo>); //返回线路中包含的设备信息列表
private: private:
void bulidAndLinkComponent(QList<DiagramEditorComponentInfo>,QMap<QString,DiagramEditorComponentInfo>); //生成并连接线路上的设备 lstmapComponents(从map中获取正确数据) void bulidAndLinkComponent(QList<DiagramEditorComponentInfo>,QMap<QString,DiagramEditorComponentInfo>); //生成并连接线路上的设备 lstmapComponents(从map中获取正确数据)
//DiagramEditorComponentInfo getCompoDataFromName(const QString&,QMap<QString,DiagramEditorComponentInfo>); //根据名称获取数据
QList<DiagramEditorComponentInfo> getRouteItemInfoList(QMap<QString,DiagramEditorComponentInfo>,QMap<QString,DiagramEditorRouteInfo>); //返回线路中包含的设备信息列表
private: private:
QMap<QUuid,GraphicsBaseModelItem*> _tempItem; //临时预览对象 QMap<QUuid,GraphicsBaseModelItem*> _tempItem; //临时预览对象
QMap<QUuid,GraphicsBaseModelItem*> _previewItem; //预览对象 QMap<QUuid,GraphicsBaseModelItem*> _previewItem; //预览对象

View File

@ -29,6 +29,7 @@ class BayProperty;
class BayManagerDlg; class BayManagerDlg;
class ModelProperty; class ModelProperty;
struct itemPageInfo; struct itemPageInfo;
class EditBaseItem;
class FixedPortsModel : public BaseModel, public Serializable class FixedPortsModel : public BaseModel, public Serializable
{ {
@ -42,7 +43,7 @@ public:
QVector<ModelProperty*> allConnectionProperty(); QVector<ModelProperty*> allConnectionProperty();
QMap<QUuid,GraphicsProjectModelItem*>& allItems(); QMap<QUuid,GraphicsProjectModelItem*>& allItems();
bool addNodeItem(QUuid uuid,GraphicsProjectModelItem*); bool addNodeItem(QUuid uuid,GraphicsProjectModelItem*);
void addNodeItem(QUuid id,QPointF pos,double width = 0,double height = 0); void addNodeItem(QUuid id,QPointF pos,double width = 0,double height = 0,double rotate = 0);
GraphicsProjectModelItem* nodeItem(QUuid uuid); GraphicsProjectModelItem* nodeItem(QUuid uuid);
BaseProperty* addNodeData(QUuid id,int type,QString name,QString modelName); //对应component数据一个data可对应多个itemid,类型,名称,工程模名) BaseProperty* addNodeData(QUuid id,int type,QString name,QString modelName); //对应component数据一个data可对应多个itemid,类型,名称,工程模名)
void loadNodeDataFromDataBase(); //从数据库加载数据 void loadNodeDataFromDataBase(); //从数据库加载数据
@ -78,17 +79,18 @@ public:
void showProjectModelSettingDlg(GraphicsBaseModelItem*); //在基模拓扑图上打开工程模设置对话框 void showProjectModelSettingDlg(GraphicsBaseModelItem*); //在基模拓扑图上打开工程模设置对话框
void generateProjectModel(const QString&,QList<GraphicsBaseModelItem*>,QList<GraphicsNonStandardItem*>); //由基模生成工程模 void generateProjectModel(const QString&,QList<GraphicsBaseModelItem*>,QList<GraphicsNonStandardItem*>); //由基模生成工程模
void addProjectItemByBaseData(DrawingPanel*,GraphicsBaseModelItem*,BaseProperty*); //从基模item生成工程模item void addProjectItemByBaseData(DrawingPanel*,GraphicsBaseModelItem*,BaseProperty*); //从基模item生成工程模item
void onWizardFinished(QMap<QUuid,GraphicsBaseModelItem*> mapItem,QList<EditBaseItem*> mapBay); //editor结束生成基模
/*************************间隔*****************************/ /*************************间隔*****************************/
void addBayItem(QUuid); void addBayItem(QUuid,ModelFunctionType = ModelFunctionType::ProjectModel);
bool addBayItem(QUuid,ElectricBayItem*); bool addBayItem(QUuid,ElectricBayItem*,ModelFunctionType = ModelFunctionType::ProjectModel);
void addItemsToBay(QList<GraphicsBaseItem*>,ElectricBayItem*); //将对象添加到间隔 void addItemsToBay(QList<GraphicsBaseItem*>,ElectricBayItem*); //将对象添加到间隔
BayProperty* addBayData(QUuid uuid); BayProperty* addBayData(QUuid uuid,ModelFunctionType = ModelFunctionType::ProjectModel);
QMap<QUuid,ElectricBayItem*>& allBayItem(); //返回所有间隔对象 QMap<QUuid,ElectricBayItem*>& allBayItem(); //返回所有间隔对象
BayProperty* generateBayData(BayProperty*,QList<BaseProperty*>); //生成新间隔数据(间隔数据结构相同)<baseBay,projectData> BayProperty* generateBayData(BayProperty*,QList<BaseProperty*>); //生成新间隔数据(间隔数据结构相同)<baseBay,projectData>
QList<QUuid> getCorrespondId(QList<QUuid>,QList<BaseProperty*>); //获取基模id对应的工程模id QList<QUuid> getCorrespondId(QList<QUuid>,QList<BaseProperty*>); //获取基模id对应的工程模id
QRectF calculateItemsBoundingRect(QList<GraphicsBaseItem*> items); //返回包含所有item的rect QRectF calculateItemsBoundingRect(QList<GraphicsBaseItem*> items); //返回包含所有item的rect
void addBayByData(BayProperty*); //基模bay生成工程模bay void addBayByData(BayProperty*,ModelFunctionType = ModelFunctionType::ProjectModel); //data生成bay
void addTestData(); //生成测试基模 void addTestData(); //生成测试基模
QJsonObject turnListToJson(QList<QUuid> lst,QString sInerTag,QString sOutTag); //将list转换为QJsonObject,<lst,内部标签,外部标签> QJsonObject turnListToJson(QList<QUuid> lst,QString sInerTag,QString sOutTag); //将list转换为QJsonObject,<lst,内部标签,外部标签>
@ -109,10 +111,12 @@ public Q_SLOTS:
void onSignal_openBayManager(); void onSignal_openBayManager();
private: private:
void addPortsToItem_json(PortState,QJsonArray,GraphicsProjectModelItem*); //将json格式的port添加到item void addPortsToItem_json(PortState,QJsonArray,GraphicsProjectModelItem*); //将json格式的port添加到item
void autoSetModelName(GraphicsBaseModelItem*); //如果此页的工程模已被设置将projectName更新到item
private: private:
QMap<QUuid,GraphicsProjectModelItem*> _nodeItem; //工程模对象 QMap<QUuid,GraphicsProjectModelItem*> _nodeItem; //工程模对象
QMap<QUuid,GraphicsBaseModelItem*> _baseItem; //基模对象 QMap<QUuid,GraphicsBaseModelItem*> _baseItem; //基模对象
QMap<QUuid,ElectricBayItem*> _baseBayItem; //基模间隔对象
QMap<QUuid,ElectricBayItem*> _bayItem; //间隔对象 QMap<QUuid,ElectricBayItem*> _bayItem; //间隔对象
QString _pageName; QString _pageName;

View File

@ -82,6 +82,25 @@ void BayManagerContentDlg::updateByProperty()
ui->tw_zhuangTai->setRowCount(0); ui->tw_zhuangTai->setRowCount(0);
ui->tw_qiTa->setRowCount(0); ui->tw_qiTa->setRowCount(0);
ui->le_index->setText(_pData->uuid().toString());
ui->le_type->setText(_pData->getType());
QStringList lstFrom;
for(auto uid:_pData->getLstFrom()){
lstFrom.append(uid.toString());
}
ui->le_from->setText(lstFrom.join(" "));
QStringList lstTo;
for(auto uid:_pData->getLstTo()){
lstTo.append(uid.toString());
}
ui->le_to->setText(lstTo.join(" "));
ui->le_voltage->setText(QString::number(_pData->getVoltage()));
ui->le_fla->setText(QString::number(_pData->getFla()));
ui->le_capacity->setText(QString::number(_pData->getCapacity()));
QList<BaseProperty*> lstPro; QList<BaseProperty*> lstPro;
QList<QUuid> lstId = _pData->getLstComponent(); QList<QUuid> lstId = _pData->getLstComponent();
QList<QUuid> lstProtectId = _pData->getLstProtect(); //综合保护 QList<QUuid> lstProtectId = _pData->getLstProtect(); //综合保护

View File

@ -348,21 +348,6 @@ void DiagramCavas::removePanel(PowerEntity* pEntity)
} }
} }
void DiagramCavas::autoSetModelName(GraphicsBaseModelItem* pItem)
{
ModelProperty* p = pItem->getProperty();
BaseModelProperty* pro = dynamic_cast<BaseModelProperty*>(p);
if(pro){
QString sMeta = pro->metaModelName();
QString sModel = sMeta+"_"+_curPage;
bool exist = ProjectModelManager::instance().getData()[sMeta].contains(sModel);
if(exist){
pro->setModelName(sModel);
pro->getModelProperty().modelSetting.modelName = sModel;
}
}
}
void DiagramCavas::onCreateTestBaseModelDiagram() void DiagramCavas::onCreateTestBaseModelDiagram()
{ {
PowerEntity* pEntity; PowerEntity* pEntity;
@ -415,7 +400,7 @@ void DiagramCavas::onSignal_addEditWizard(QString name)
_pEditorWizard->show(); _pEditorWizard->show();
} }
void DiagramCavas::onSignal_wizardFinished(QString sName,QMap<QUuid,GraphicsBaseModelItem*> mapItem) void DiagramCavas::onSignal_wizardFinished(QString sName,QMap<QUuid,GraphicsBaseModelItem*> mapItem,QList<EditBaseItem*> mapBay)
{ {
PowerEntity* pEntity; PowerEntity* pEntity;
QUuid id = QUuid::createUuid(); QUuid id = QUuid::createUuid();
@ -427,60 +412,19 @@ void DiagramCavas::onSignal_wizardFinished(QString sName,QMap<QUuid,GraphicsBase
onSignal_addDrawingPanel(pEntity,DM_baseModel); onSignal_addDrawingPanel(pEntity,DM_baseModel);
DrawingPanel* pPanel = getPanel(pEntity->name()); DrawingPanel* pPanel = getPanel(pEntity->name());
TopologyManager::instance().cloneEditorToBase(); //拷贝拓扑结构 TopologyManager::instance().cloneEditorToBase(); //拷贝拓扑结构
auto pModel = pPanel->getModelController();
QMap<QUuid,DiagramEditorItemProperty*> mapEditor = BasePropertyManager::instance().getEditorData(); if(pModel){
for(auto& pro:mapEditor){ pModel->onWizardFinished(mapItem,mapBay);
if(BasePropertyManager::instance().findBaseEntityData(pro->uuid()) == nullptr){ //拷贝editor数据到basemodel中
auto pPro = pPanel->getModelController()->addBaseNodeData(pro->uuid(),pro->type(),pro->name(),pro->metaModelName(),pro->getBlock());
pPro->setConnection(pro->getConnection());
pPro->setGraphicsType(pro->graphicsType());
}
} }
//pPanel->getModelController()->addTestData();
for(auto pItem:mapItem){
auto cloneItem = pItem->clone();
BaseModelProperty* pPro = BasePropertyManager::instance().findBaseEntityData(cloneItem->itemId());
if(pPro){
cloneItem->setProperty(pPro);
pPanel->getScene()->addItem(cloneItem);
cloneItem->setPos(pItem->pos());
pPanel->getModelController()->addBaseItem(cloneItem->itemId(),cloneItem);
pPro->setDataChanged(true);
autoSetModelName(cloneItem);
if(pPro->type() != 8){
PowerEntity* pEntity = TopologyManager::instance().findEntity(pPro->uuid().toString(),ModelFunctionType::BaseModel);
if(pEntity)
cloneItem->setEntity(pEntity);
}
else
{
}
}
}
QList<QGraphicsItem*> items = pPanel->getScene()->items();
if (items.isEmpty()) {
return; // 没有 items 时返回
}
// 计算所有 items 的联合包围盒
QRectF totalBoundingRect;
foreach (QGraphicsItem *item, items) {
totalBoundingRect |= item->sceneBoundingRect();
}
// 计算中心点
QPointF center = totalBoundingRect.center();
pPanel->getView()->centerOn(center);
} }
} }
/*******************bay************************/ /*******************bay************************/
void DiagramCavas::onSignl_openCurrentBay() void DiagramCavas::onSignl_openCurrentBay()
{ {
QWidget* pWindow= currentSubWindow()->widget(); QWidget* pWindow= currentSubWindow()->widget();
if(pWindow == nullptr){
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"当前无打开的工程模"));
}
DrawingPanel* pPanel = dynamic_cast<DrawingPanel*>(pWindow); DrawingPanel* pPanel = dynamic_cast<DrawingPanel*>(pWindow);
if(pPanel) if(pPanel)
{ {

View File

@ -373,7 +373,11 @@ void EditPanel::showConfirmDlg()
connect(_confirmEditor,&ConfirmEditorDlg::onConfirmEditor,this,[&](QString sAuthor,QString sTime){ connect(_confirmEditor,&ConfirmEditorDlg::onConfirmEditor,this,[&](QString sAuthor,QString sTime){
auto pCavas = _pModel->getCavas(); auto pCavas = _pModel->getCavas();
if(pCavas){ if(pCavas){
pCavas->onSignal_wizardFinished(_projectName,_pModel->getPreviewItem());
//QList<DiagramEditorBayBlock*> lstBocks;
QList<EditBaseItem*> pBays = getBlockItems(EditorItemType::bay);
pCavas->onSignal_wizardFinished(_projectName,_pModel->getPreviewItem(),pBays);
} }
}); });
} }

View File

@ -193,6 +193,7 @@ QJsonObject DrawingPanel::getDiagramInfo() const
node["y"] = iter.value().pos.y(); node["y"] = iter.value().pos.y();
node["width"] = iter.value().dWidth; node["width"] = iter.value().dWidth;
node["height"] = iter.value().dHeight; node["height"] = iter.value().dHeight;
node["rotate"] = iter.value().dRotate;
arr.append(node); arr.append(node);
} }
obj["nodes"] = arr; obj["nodes"] = arr;
@ -240,11 +241,12 @@ void DrawingPanel::loadNodes(QJsonObject obj)
double dY = node["y"].toDouble(); double dY = node["y"].toDouble();
double dWidth = node["width"].toDouble(); double dWidth = node["width"].toDouble();
double dHeight = node["height"].toDouble(); double dHeight = node["height"].toDouble();
double dRotate = node["rotate"].toDouble();
//componentInfo info =DataBase::GetInstance()->getComponentInfoByUuid(uuid); //componentInfo info =DataBase::GetInstance()->getComponentInfoByUuid(uuid);
if(_pModel) if(_pModel)
{ {
_pModel->addNodeItem(QUuid(uuid)/*,info.type*/,QPointF(dX,dY),dWidth,dHeight); _pModel->addNodeItem(QUuid(uuid)/*,info.type*/,QPointF(dX,dY),dWidth,dHeight,dRotate);
} }
} }

View File

@ -557,8 +557,86 @@ void DiagramEditorModel::generatePreview()
} }
} }
for(auto &lst:baysCompo){ for(auto iter = baysCompo.begin();iter != baysCompo.end();++iter){
generateOutConnection(lst,2); QMultiMap<int,QUuid> mapId = generateOutConnection(iter.value(),2);
QList<QUuid> lstFrom; //处理进出链接
QList<QUuid> lstTo;
for(auto item:lst){
if(item->getType() == EditorItemType::bay){
auto p = item->getBlockData(); //获取blockitem对应的data
DiagramEditorBayBlock* pBay = dynamic_cast<DiagramEditorBayBlock*>(p.data());
if(pBay){
if(pBay->getName() == iter.key()){ //相同间隔
switch (pBay->getBayType()) {
case BayType::busSectionBay:{
QList<QUuid> values = mapId.values(1);
if (!values.isEmpty()) {
// 第一个值放入lstFrom
lstFrom.append(values.first());
// 如果有第二个值放入lstTo
if (values.size() > 1) {
lstTo.append(values.at(1));
}
}
}
break;
case BayType::busCouplerBay:{
QList<QUuid> values = mapId.values(1);
if (!values.isEmpty()) {
// 第一个值放入lstFrom
lstFrom.append(values.first());
// 如果有第二个值放入lstTo
if (values.size() > 1) {
lstTo.append(values.at(1));
}
}
}
break;
case BayType::ptBay:{
QList<QUuid> values = mapId.values(1);
if (!values.isEmpty()) {
// 第一个值放入lstTo
lstTo.append(values.first());
}
}
break;
case BayType::incomingBay:{
for (auto it = mapId.begin(); it != mapId.end(); ++it) {
if (it.key() == 1) {
lstTo.append(it.value()); // 连接母线,放入 lstTo
} else {
lstFrom.append(it.value()); // 其他,放入 lstFrom
}
}
}
break;
case BayType::outcomingBay:{
for (auto it = mapId.begin(); it != mapId.end(); ++it) {
if (it.key() != 1) {
lstTo.append(it.value()); // 不连接母线,放入 lstTo
} else {
lstFrom.append(it.value()); // 连接母线,放入 lstFrom
}
}
}
break;
default:
break;
}
pBay->getBayInfo().lstFrom = lstFrom;
pBay->getBayInfo().lstTo = lstTo;
}
}
}
}
} }
for(auto &map:transCompo){ for(auto &map:transCompo){
@ -1015,14 +1093,17 @@ QList<DiagramEditorComponentInfo> DiagramEditorModel::generateItemByInfo(QMap<QS
return lstBind; return lstBind;
} }
void DiagramEditorModel::generateOutConnection(QList<DiagramEditorComponentInfo> lstBind,int nTypeTransCon,int nPos) QMultiMap<int,QUuid> DiagramEditorModel::generateOutConnection(QList<DiagramEditorComponentInfo> lstBind,int nTypeTransCon,int nPos)
{ {
QMultiMap<int,QUuid> bindId; //返回关联的对象id<类型id>
for(auto& compo:lstBind){ //遍历关联外部的item进行连线 for(auto& compo:lstBind){ //遍历关联外部的item进行连线
if(compo.nBindType == 1){ //关联的是母线 母线没有数据获取绘制的母线item if(compo.nBindType == 1){ //关联的是母线 母线没有数据获取绘制的母线item
for(auto& pItem:_previewItem){ for(auto& pItem:_previewItem){
auto pro = pItem->getProperty(); auto pro = pItem->getProperty();
if(pro){ if(pro){
QString sName = pro->name(); QString sName = pro->name();
QUuid uId = pro->uuid();
int nType = pro->type();
if(sName == compo.sBindObj){ if(sName == compo.sBindObj){
GraphicsBaseModelItem* pSrc = _previewItem.value(compo.uid); GraphicsBaseModelItem* pSrc = _previewItem.value(compo.uid);
GraphicsBaseModelItem* pTarget = pItem; GraphicsBaseModelItem* pTarget = pItem;
@ -1041,6 +1122,7 @@ void DiagramEditorModel::generateOutConnection(QList<DiagramEditorComponentInfo>
if(pLine) if(pLine)
establishConnection(pSrc,pTarget,pLine,ModelFunctionType::EditorModel); establishConnection(pSrc,pTarget,pLine,ModelFunctionType::EditorModel);
} }
bindId.insert(nType,uId);
} }
} }
} }
@ -1050,6 +1132,8 @@ void DiagramEditorModel::generateOutConnection(QList<DiagramEditorComponentInfo>
auto pro = pItem->getProperty(); auto pro = pItem->getProperty();
if(pro){ if(pro){
QString sName = pro->name(); QString sName = pro->name();
QUuid uId = pro->uuid();
int nType = pro->type();
if(sName == compo.sBindParent){ //判断变压器名 if(sName == compo.sBindParent){ //判断变压器名
GraphicsBaseModelItem* pSrc = _previewItem.value(compo.uid); GraphicsBaseModelItem* pSrc = _previewItem.value(compo.uid);
GraphicsBaseModelItem* pTarget = pItem; GraphicsBaseModelItem* pTarget = pItem;
@ -1076,11 +1160,13 @@ void DiagramEditorModel::generateOutConnection(QList<DiagramEditorComponentInfo>
establishConnection(pSrc,pTarget,pLine,ModelFunctionType::EditorModel,nTypeTransCon,nPos); establishConnection(pSrc,pTarget,pLine,ModelFunctionType::EditorModel,nTypeTransCon,nPos);
} }
} }
bindId.insert(nType,uId);
} }
} }
} }
} }
} }
return bindId;
} }
void DiagramEditorModel::clearCompoDir(QMap<QString,DiagramEditorRouteInfo>& data,QMap<QString,DiagramEditorComponentInfo>& compos,int nSource) void DiagramEditorModel::clearCompoDir(QMap<QString,DiagramEditorRouteInfo>& data,QMap<QString,DiagramEditorComponentInfo>& compos,int nSource)

View File

@ -22,6 +22,9 @@
#include "baseModelItem/electricBaseModelSvgBus.h" #include "baseModelItem/electricBaseModelSvgBus.h"
#include "baseModelItem/electricBaseModelLineItem.h" #include "baseModelItem/electricBaseModelLineItem.h"
#include "graphicsItem/electricBayItem.h" #include "graphicsItem/electricBayItem.h"
#include "diagramEditor/diagramEditorBaseBlock.h"
#include "graphicsItem/electricBayItem.h"
#include "diagramEditor/editItems.h"
#include "graphicsItem/itemPort.h" #include "graphicsItem/itemPort.h"
#include "designerScene.h" #include "designerScene.h"
#include "dataBase.h" #include "dataBase.h"
@ -83,6 +86,7 @@ QMap<QUuid,itemPageInfo> FixedPortsModel::allNodePos() const
info.pos = pItem->scenePos()/*+QPointF(dWidth*0.5,dHeight*0.5)*/; info.pos = pItem->scenePos()/*+QPointF(dWidth*0.5,dHeight*0.5)*/;
info.dWidth = dWidth; info.dWidth = dWidth;
info.dHeight = dHeight; info.dHeight = dHeight;
info.dRotate = pItem->rotation();
map.insert(pItem->itemId(),info); map.insert(pItem->itemId(),info);
} }
} }
@ -132,7 +136,7 @@ bool FixedPortsModel::addNodeItem(QUuid uuid,GraphicsProjectModelItem* pItem)
} }
} }
void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width,double height) void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width,double height,double rotate)
{ {
//todo:load图形时必有拓扑实体关联到对应的entity //todo:load图形时必有拓扑实体关联到对应的entity
BaseProperty* pro = nullptr; BaseProperty* pro = nullptr;
@ -535,6 +539,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
item->setItemId(id); item->setItemId(id);
item->editShape(0, pos); item->editShape(0, pos);
item->setPos(pos); item->setPos(pos);
item->setRotation(rotate);
//item->setSelected(true); //item->setSelected(true);
_scene->addItem(item); _scene->addItem(item);
item->addPoint(pos); item->addPoint(pos);
@ -773,7 +778,7 @@ void FixedPortsModel::saveNode(int nPageId)
QJsonObject objIns= turnListToJson(pBay->getLstInstruct(),"id","ids"); QJsonObject objIns= turnListToJson(pBay->getLstInstruct(),"id","ids");
QJsonObject objEtc= turnListToJson(pBay->getLstEtc(),"id","ids"); QJsonObject objEtc= turnListToJson(pBay->getLstEtc(),"id","ids");
DataBase::GetInstance()->insertBay(pBay->uuid(),pBay->name(),pBay->getType(),pBay->getVoltage(),pBay->getFla(),pBay->getCapacity(),"1",pBay->getInService(),0,"1","1","1",QJsonObject(),objFrom,objTo,objProtec,objFalRec,objStatus,objDynSen,objIns,objEtc,pBay->getLstComponent(),QJsonObject()); DataBase::GetInstance()->insertBay(pBay->uuid(),pBay->name(),pBay->tag(),pBay->getType(),pBay->getVoltage(),pBay->getFla(),pBay->getCapacity(),"1",pBay->getInService(),0,"1","1","1",QJsonObject(),objFrom,objTo,objProtec,objFalRec,objStatus,objDynSen,objIns,objEtc,pBay->getLstComponent(),QJsonObject());
} }
else{ else{
QJsonObject objFrom = turnListToJson(pBay->getLstFrom(),"id","ids"); QJsonObject objFrom = turnListToJson(pBay->getLstFrom(),"id","ids");
@ -785,7 +790,7 @@ void FixedPortsModel::saveNode(int nPageId)
QJsonObject objIns= turnListToJson(pBay->getLstInstruct(),"id","ids"); QJsonObject objIns= turnListToJson(pBay->getLstInstruct(),"id","ids");
QJsonObject objEtc= turnListToJson(pBay->getLstEtc(),"id","ids"); QJsonObject objEtc= turnListToJson(pBay->getLstEtc(),"id","ids");
DataBase::GetInstance()->updateBay(pBay->uuid(),pBay->name(),pBay->getVoltage(),pBay->getFla(),pBay->getCapacity(),"",pBay->getInService(),0,QJsonObject(),objFrom,objTo,objProtec,objFalRec,objStatus,objDynSen,objIns,objEtc,pBay->getLstComponent(),QJsonObject()); DataBase::GetInstance()->updateBay(pBay->uuid(),pBay->name(),pBay->tag(),pBay->getVoltage(),pBay->getFla(),pBay->getCapacity(),"",pBay->getInService(),0,QJsonObject(),objFrom,objTo,objProtec,objFalRec,objStatus,objDynSen,objIns,objEtc,pBay->getLstComponent(),QJsonObject());
} }
} }
} }
@ -1037,7 +1042,7 @@ void FixedPortsModel::onSignal_generateDiagram(const QString& sName)
} }
QList<GraphicsNonStandardItem*> lstBay; QList<GraphicsNonStandardItem*> lstBay;
for(auto& item:_bayItem) for(auto& item:_baseBayItem)
{ {
lstBay.append(item); lstBay.append(item);
} }
@ -1081,6 +1086,22 @@ void FixedPortsModel::addPortsToItem_json(PortState sta,QJsonArray jArr,Graphics
} }
} }
void FixedPortsModel::autoSetModelName(GraphicsBaseModelItem* pItem)
{
ModelProperty* p = pItem->getProperty();
BaseModelProperty* pro = dynamic_cast<BaseModelProperty*>(p);
if(pro){
QString sMeta = pro->metaModelName();
QString sModel = sMeta+"_"+_pageName;
bool exist = ProjectModelManager::instance().getData()[sMeta].contains(sModel);
if(exist){
pro->setModelName(sModel);
pro->getModelProperty().modelSetting.modelName = sModel;
}
}
}
QWidget* FixedPortsModel::getTopWidget() QWidget* FixedPortsModel::getTopWidget()
{ {
return dynamic_cast<QWidget*>(_widget); return dynamic_cast<QWidget*>(_widget);
@ -1378,6 +1399,140 @@ void FixedPortsModel::generateProjectModel(const QString& sPageName,QList<Graphi
} }
} }
void FixedPortsModel::onWizardFinished(QMap<QUuid,GraphicsBaseModelItem*> mapItem,QList<EditBaseItem*> mapBay)
{
QMap<QUuid,DiagramEditorItemProperty*> mapEditor = BasePropertyManager::instance().getEditorData();
for(auto& pro:mapEditor){
if(BasePropertyManager::instance().findBaseEntityData(pro->uuid()) == nullptr){ //拷贝editor数据到basemodel中
auto pPro = _widget->getModelController()->addBaseNodeData(pro->uuid(),pro->type(),pro->name(),pro->metaModelName(),pro->getBlock());
pPro->setConnection(pro->getConnection());
pPro->setGraphicsType(pro->graphicsType());
}
}
//pPanel->getModelController()->addTestData();
for(auto pItem:mapItem){
auto cloneItem = pItem->clone();
BaseModelProperty* pPro = BasePropertyManager::instance().findBaseEntityData(cloneItem->itemId());
if(pPro){
cloneItem->setProperty(pPro);
_scene->addItem(cloneItem);
cloneItem->setPos(pItem->pos());
addBaseItem(cloneItem->itemId(),cloneItem);
pPro->setDataChanged(true);
autoSetModelName(cloneItem);
if(pPro->type() != 8){
PowerEntity* pEntity = TopologyManager::instance().findEntity(pPro->uuid().toString(),ModelFunctionType::BaseModel);
if(pEntity)
cloneItem->setEntity(pEntity);
}
else
{
}
}
}
QList<QGraphicsItem*> items = _scene->items();
if (items.isEmpty()) {
return; // 没有 items 时返回
}
// 计算所有 items 的联合包围盒
QRectF totalBoundingRect;
foreach (QGraphicsItem *item, items) {
totalBoundingRect |= item->sceneBoundingRect();
}
// 计算中心点
QPointF center = totalBoundingRect.center();
//_widget->getView()->centerOn(center);
//**************间隔*************
for(auto item:mapBay){
auto p = item->getBlockData(); //获取blockitem对应的data
DiagramEditorBayBlock* pBay = dynamic_cast<DiagramEditorBayBlock*>(p.data());
if(pBay){
QString sBay = pBay->getName();
auto bayInfo = pBay->getBayInfo();
auto mapRoute = bayInfo.mapRoute;
auto mapCompo = bayInfo.mapComponent;
QList<DiagramEditorComponentInfo> lstInfo;
for(auto& route:mapRoute){ //获取路线中使用的设备
for(auto& compo:route.lstCompo){
auto info = mapCompo.value(compo.sName);
bool exist = false;
for(auto& inf:lstInfo){
if(inf == info){
exist = true;
break;
}
}
if(!exist){
lstInfo.append(info);
}
}
}
QList<GraphicsBaseItem*> lst;
for(auto &inf:lstInfo){
if(_baseItem.contains(inf.uid))
lst.append(_baseItem.value(inf.uid));
}
QRectF rec = calculateItemsBoundingRect(lst);
ElectricBayItem* pNew = new ElectricBayItem(rec);
pNew->setItemType(GIT_bay);
pNew->setText(sBay);
QString sType;
switch (pBay->getBayType()) {
case BayType::busSectionBay:
sType = QString("分段间隔");
break;
case BayType::busCouplerBay:
sType = QString("母联间隔");
break;
case BayType::ptBay:
sType = QString("PT间隔");
break;
case BayType::incomingBay:
sType = QString("进线间隔");
break;
case BayType::outcomingBay:
sType = QString("出线间隔");
break;
case BayType::compensationBay:
sType = QString("无功补偿间隔");
break;
case BayType::bypassBay:
sType = QString("旁路间隔");
break;
default:
break;
}
QUuid bayId = pBay->getId();
BayProperty* pBayData = addBayData(bayId,ModelFunctionType::BaseModel);
pNew->setProperty(pBayData);
pBayData->setName(sBay);
pBayData->setTag(sBay);
pBayData->setType(sType);
pBayData->setLstFrom(pBay->getBayInfo().lstFrom);
pBayData->setLstTo(pBay->getBayInfo().lstTo);
for(auto &info:lstInfo){
pBayData->getLstComponent().append(info.uid);
}
addBayItem(bayId,pNew,ModelFunctionType::BaseModel);
//pModel->addItemsToBay(lst,pNew);
_scene->addItem(pNew);
}
}
}
void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBaseModelItem* pItem,BaseProperty* pPro) void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBaseModelItem* pItem,BaseProperty* pPro)
{ {
BaseModelProperty* pBase = dynamic_cast<BaseModelProperty*>(pItem->getProperty()); BaseModelProperty* pBase = dynamic_cast<BaseModelProperty*>(pItem->getProperty());
@ -1810,28 +1965,55 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase
} }
} }
void FixedPortsModel::addBayItem(QUuid id) void FixedPortsModel::addBayItem(QUuid id,ModelFunctionType tpe)
{ {
QMap<QUuid,BayProperty*> mapData = BasePropertyManager::instance().getBayData(); //加载的图形必定关联component(todo:完善判断条件,如判断拓扑节点) if(tpe == ModelFunctionType::BaseModel){
if(mapData.contains(id)) QMap<QUuid,BayProperty*> mapData = BasePropertyManager::instance().getBaseBayData(); //加载的图形必定关联component(todo:完善判断条件,如判断拓扑节点)
{ if(mapData.contains(id))
BayProperty* pro = mapData.value(id);
if(pro)
{ {
addBayByData(pro); BayProperty* pro = mapData.value(id);
if(pro)
{
addBayByData(pro,tpe);
}
} }
} }
else if(tpe == ModelFunctionType::ProjectModel)
{
QMap<QUuid,BayProperty*> mapData = BasePropertyManager::instance().getBayData(); //加载的图形必定关联component(todo:完善判断条件,如判断拓扑节点)
if(mapData.contains(id))
{
BayProperty* pro = mapData.value(id);
if(pro)
{
addBayByData(pro);
}
}
}
} }
bool FixedPortsModel::addBayItem(QUuid id,ElectricBayItem* pBay) bool FixedPortsModel::addBayItem(QUuid id,ElectricBayItem* pBay,ModelFunctionType typ)
{ {
if(_bayItem.contains(id)) if(typ == ModelFunctionType::BaseModel){
return false; if(_baseBayItem.contains(id))
else return false;
{ else
_bayItem.insert(id,pBay); {
return true; _baseBayItem.insert(id,pBay);
return true;
}
} }
else if(typ == ModelFunctionType::ProjectModel){
if(_bayItem.contains(id))
return false;
else
{
_bayItem.insert(id,pBay);
return true;
}
}
return false;
} }
void FixedPortsModel::addItemsToBay(QList<GraphicsBaseItem*> lstItem,ElectricBayItem* pBay) void FixedPortsModel::addItemsToBay(QList<GraphicsBaseItem*> lstItem,ElectricBayItem* pBay)
@ -1852,20 +2034,37 @@ void FixedPortsModel::addItemsToBay(QList<GraphicsBaseItem*> lstItem,ElectricBay
} }
} }
BayProperty* FixedPortsModel::addBayData(QUuid uuid) BayProperty* FixedPortsModel::addBayData(QUuid uuid,ModelFunctionType typ)
{ {
BayProperty* pData = BasePropertyManager::instance().findBayData(uuid); //已存在不不创建 if(typ == ModelFunctionType::BaseModel){
if(pData != nullptr) BayProperty* pData = BasePropertyManager::instance().findBaseBayData(uuid); //已存在不不创建
return pData; if(pData != nullptr)
return pData;
BayProperty* item = new BayProperty(); BayProperty* item = new BayProperty();
if(item) if(item)
{ {
item->setUuid(uuid); item->setUuid(uuid);
BasePropertyManager::instance().insertBayData(uuid,item); BasePropertyManager::instance().insertBaseBayData(uuid,item);
}
return item;
} }
return item; else if(typ == ModelFunctionType::ProjectModel){
BayProperty* pData = BasePropertyManager::instance().findBayData(uuid); //已存在不不创建
if(pData != nullptr)
return pData;
BayProperty* item = new BayProperty();
if(item)
{
item->setUuid(uuid);
BasePropertyManager::instance().insertBayData(uuid,item);
}
return item;
}
return nullptr;
} }
QMap<QUuid,ElectricBayItem*>& FixedPortsModel::allBayItem() QMap<QUuid,ElectricBayItem*>& FixedPortsModel::allBayItem()
@ -1875,8 +2074,7 @@ QMap<QUuid,ElectricBayItem*>& FixedPortsModel::allBayItem()
BayProperty* FixedPortsModel::generateBayData(BayProperty* pData,QList<BaseProperty*> lst) BayProperty* FixedPortsModel::generateBayData(BayProperty* pData,QList<BaseProperty*> lst)
{ {
QUuid id = QUuid::createUuid(); BayProperty* p = addBayData(pData->uuid());
BayProperty* p = addBayData(id);
p->setTag(pData->tag()); p->setTag(pData->tag());
p->setName(pData->name()); p->setName(pData->name());
p->setType(pData->getType()); p->setType(pData->getType());
@ -1957,23 +2155,42 @@ QRectF FixedPortsModel::calculateItemsBoundingRect(QList<GraphicsBaseItem*> item
return boundingRect.adjusted(-10,-10,10,10); return boundingRect.adjusted(-10,-10,10,10);
} }
void FixedPortsModel::addBayByData(BayProperty* pData) void FixedPortsModel::addBayByData(BayProperty* pData,ModelFunctionType typ)
{ {
QList<GraphicsBaseItem*> items; if(typ == ModelFunctionType::BaseModel){
QList<QUuid> lstCompo = pData->getLstComponent(); QList<GraphicsBaseItem*> items;
for(auto& id:lstCompo){ QList<QUuid> lstCompo = pData->getLstComponent();
if(_nodeItem.contains(id)){ for(auto& id:lstCompo){
items.append(_nodeItem.value(id)); if(_baseItem.contains(id)){
items.append(_baseItem.value(id));
}
} }
}
QRectF rec = calculateItemsBoundingRect(items); QRectF rec = calculateItemsBoundingRect(items);
auto pBay = new ElectricBayItem(rec); auto pBay = new ElectricBayItem(rec);
pBay->setItemType(GIT_bay); pBay->setItemType(GIT_bay);
pBay->setProperty(pData); pBay->setProperty(pData);
pBay->setText(pData->name()); pBay->setText(pData->name());
addBayItem(pData->uuid(),pBay); addBayItem(pData->uuid(),pBay,typ);
getScene()->addItem(pBay); getScene()->addItem(pBay);
}
else if(typ == ModelFunctionType::ProjectModel){
QList<GraphicsBaseItem*> items;
QList<QUuid> lstCompo = pData->getLstComponent();
for(auto& id:lstCompo){
if(_nodeItem.contains(id)){
items.append(_nodeItem.value(id));
}
}
QRectF rec = calculateItemsBoundingRect(items);
auto pBay = new ElectricBayItem(rec);
pBay->setItemType(GIT_bay);
pBay->setProperty(pData);
pBay->setText(pData->name());
addBayItem(pData->uuid(),pBay);
getScene()->addItem(pBay);
}
} }
void FixedPortsModel::addTestData() void FixedPortsModel::addTestData()

View File

@ -7,6 +7,7 @@ ElectricBayItem::ElectricBayItem(const QRectF &rect,QGraphicsItem *parent)
: GraphicsNonStandardItem(parent) : GraphicsNonStandardItem(parent)
{ {
m_showRect = rect; m_showRect = rect;
//m_boundingRect = rect;
m_dWidth = rect.width(); m_dWidth = rect.width();
m_dHeight = rect.height(); m_dHeight = rect.height();
m_font.setPointSize(12); m_font.setPointSize(12);
@ -48,6 +49,7 @@ void ElectricBayItem::updateTextShape()
QFontMetricsF metrics(m_font); QFontMetricsF metrics(m_font);
QRectF recText = metrics.boundingRect(m_text); QRectF recText = metrics.boundingRect(m_text);
//_recLabel = recText.translated(g_offsetX,g_offsetY); //_recLabel = recText.translated(g_offsetX,g_offsetY);
recText.moveTo(m_showRect.topLeft()-QPointF(recText.width(),recText.height()));
_recLabel = recText; _recLabel = recText;
shape(); shape();
} }

View File

@ -32,6 +32,11 @@ public:
void deleteBaseEntityData(QUuid); void deleteBaseEntityData(QUuid);
QMap<QUuid,BaseModelProperty*> getBaseEntityData() const; QMap<QUuid,BaseModelProperty*> getBaseEntityData() const;
void insertBaseBayData(QUuid,BayProperty*); //基模间隔
BayProperty* findBaseBayData(QUuid);
void deleteBaseBayData(QUuid);
QMap<QUuid,BayProperty*> getBaseBayData() const;
void insertBayData(QUuid,BayProperty*); void insertBayData(QUuid,BayProperty*);
BayProperty* findBayData(QUuid); BayProperty* findBayData(QUuid);
void deleteBayData(QUuid); void deleteBayData(QUuid);
@ -54,6 +59,7 @@ public slots:
private: private:
QMap<QUuid,BaseProperty*> m_entityData; //工程模实例化元件的唯一数据 QMap<QUuid,BaseProperty*> m_entityData; //工程模实例化元件的唯一数据
QMap<QUuid,BaseModelProperty*> m_baseEntityData; //基模实例元件数据 QMap<QUuid,BaseModelProperty*> m_baseEntityData; //基模实例元件数据
QMap<QUuid,BayProperty*> m_baseBayData; //基模间隔数据
QMap<QUuid,BayProperty*> m_bayData; //间隔数据 QMap<QUuid,BayProperty*> m_bayData; //间隔数据
QMap<QUuid,DiagramEditorItemProperty*> m_editorTempData; //编辑时临时预览对象 QMap<QUuid,DiagramEditorItemProperty*> m_editorTempData; //编辑时临时预览对象
QMap<QUuid,DiagramEditorItemProperty*> m_editorData; //编辑时预览对象 QMap<QUuid,DiagramEditorItemProperty*> m_editorData; //编辑时预览对象

View File

@ -61,8 +61,8 @@ public:
QJsonObject getPageContextByName(QString name); QJsonObject getPageContextByName(QString name);
QList<pageInfo> getAllPage(); QList<pageInfo> getAllPage();
/*********************************************************************************/ /*********************************************************************************/
bool insertBay(QUuid uuid,QString name,QString type,double unom,double fla,double capacity,QString description,bool inService,int nState,QString grid,QString zone,QString station,QJsonObject business,QJsonObject fromUuid,QJsonObject toUuid,QJsonObject protect,QJsonObject faultRec,QJsonObject status,QJsonObject dynSense,QJsonObject instruct,QJsonObject etc,QList<QUuid> components,QJsonObject context); bool insertBay(QUuid uuid,QString name,QString tag,QString type,double unom,double fla,double capacity,QString description,bool inService,int nState,QString grid,QString zone,QString station,QJsonObject business,QJsonObject fromUuid,QJsonObject toUuid,QJsonObject protect,QJsonObject faultRec,QJsonObject status,QJsonObject dynSense,QJsonObject instruct,QJsonObject etc,QList<QUuid> components,QJsonObject context);
bool updateBay(QUuid uuid,QString name,double unom,double fla,double capacity,QString description,bool inService,int nState,QJsonObject business,QJsonObject fromUuid,QJsonObject toUuid,QJsonObject protect,QJsonObject faultRec,QJsonObject status,QJsonObject dynSense,QJsonObject instruct,QJsonObject etc,QList<QUuid> components,QJsonObject context); bool updateBay(QUuid uuid,QString name,QString tag,double unom,double fla,double capacity,QString description,bool inService,int nState,QJsonObject business,QJsonObject fromUuid,QJsonObject toUuid,QJsonObject protect,QJsonObject faultRec,QJsonObject status,QJsonObject dynSense,QJsonObject instruct,QJsonObject etc,QList<QUuid> components,QJsonObject context);
bayInfo getBay(QUuid uuid); bayInfo getBay(QUuid uuid);
QList<bayInfo> getAllBay(); QList<bayInfo> getAllBay();
bool ifBayExist(QUuid uuid); bool ifBayExist(QUuid uuid);

View File

@ -71,6 +71,30 @@ QMap<QUuid,BaseModelProperty*> BasePropertyManager::getBaseEntityData() const
return m_baseEntityData; return m_baseEntityData;
} }
/*****************************基模间隔数据*******************************/
void BasePropertyManager::insertBaseBayData(QUuid id,BayProperty* p)
{
if(!m_baseBayData.contains(id))
m_baseBayData.insert(id,p);
}
BayProperty* BasePropertyManager::findBaseBayData(QUuid id)
{
return m_baseBayData.value(id,nullptr);
}
void BasePropertyManager::deleteBaseBayData(QUuid id)
{
BayProperty* pData = m_baseBayData.value(id,nullptr);
if(pData)
delete pData;
}
QMap<QUuid,BayProperty*> BasePropertyManager::getBaseBayData() const
{
return m_baseBayData;
}
/*****************************间隔数据*******************************/ /*****************************间隔数据*******************************/
void BasePropertyManager::insertBayData(QUuid id,BayProperty* p) void BasePropertyManager::insertBayData(QUuid id,BayProperty* p)
{ {

View File

@ -1057,7 +1057,7 @@ bool DataBase::deleteComponentById(int id)
} }
/*****************************************************************************/ /*****************************************************************************/
bool DataBase::insertBay(QUuid uuid,QString name,QString type,double unom,double fla,double capacity,QString description,bool inService,int nState,QString grid,QString zone, bool DataBase::insertBay(QUuid uuid,QString name,QString tag,QString type,double unom,double fla,double capacity,QString description,bool inService,int nState,QString grid,QString zone,
QString station,QJsonObject business,QJsonObject fromUuid,QJsonObject toUuid,QJsonObject protect,QJsonObject faultRec,QJsonObject status,QJsonObject dynSense, QString station,QJsonObject business,QJsonObject fromUuid,QJsonObject toUuid,QJsonObject protect,QJsonObject faultRec,QJsonObject status,QJsonObject dynSense,
QJsonObject instruct,QJsonObject etc,QList<QUuid> components,QJsonObject context) QJsonObject instruct,QJsonObject etc,QList<QUuid> components,QJsonObject context)
{ {
@ -1091,7 +1091,7 @@ bool DataBase::insertBay(QUuid uuid,QString name,QString type,double unom,double
QJsonDocument contextDoc(etc); QJsonDocument contextDoc(etc);
QString strContext = contextDoc.toJson(QJsonDocument::Compact); QString strContext = contextDoc.toJson(QJsonDocument::Compact);
QString strSQL = "INSERT INTO bay(bay_uuid, name, type, unom, fla, capacity, description, in_service, state, grid, zone, station, business, from_uuids, to_uuids, dev_protect, dev_fault_record, dev_status, dev_dyn_sense, dev_instruct, dev_etc, components, context) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; QString strSQL = "INSERT INTO bay(bay_uuid, name, tag, type, unom, fla, capacity, description, in_service, state, grid, zone, station, business, from_uuids, to_uuids, dev_protect, dev_fault_record, dev_status, dev_dyn_sense, dev_instruct, dev_etc, components, context) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
QStringList uuidStrings; QStringList uuidStrings;
for (const QUuid &uuid : components) { for (const QUuid &uuid : components) {
@ -1103,6 +1103,7 @@ bool DataBase::insertBay(QUuid uuid,QString name,QString type,double unom,double
QVariantList params; QVariantList params;
params.append(uuid.toString()); params.append(uuid.toString());
params.append(name); params.append(name);
params.append(tag);
params.append(type); params.append(type);
params.append(unom); params.append(unom);
params.append(fla); params.append(fla);
@ -1137,7 +1138,7 @@ bool DataBase::insertBay(QUuid uuid,QString name,QString type,double unom,double
} }
} }
bool DataBase::updateBay(QUuid uuid,QString name,double unom,double fla,double capacity,QString description,bool inService,int nState,QJsonObject business, bool DataBase::updateBay(QUuid uuid,QString name,QString tag,double unom,double fla,double capacity,QString description,bool inService,int nState,QJsonObject business,
QJsonObject fromUuid,QJsonObject toUuid,QJsonObject protect,QJsonObject faultRec,QJsonObject status,QJsonObject dynSense,QJsonObject instruct, QJsonObject fromUuid,QJsonObject toUuid,QJsonObject protect,QJsonObject faultRec,QJsonObject status,QJsonObject dynSense,QJsonObject instruct,
QJsonObject etc,QList<QUuid> components,QJsonObject context) QJsonObject etc,QList<QUuid> components,QJsonObject context)
{ {
@ -1178,9 +1179,10 @@ bool DataBase::updateBay(QUuid uuid,QString name,double unom,double fla,double c
} }
QString arrayUuid = "{" + uuidStrings.join(",") + "}"; QString arrayUuid = "{" + uuidStrings.join(",") + "}";
QString strSQL = "UPDATE bay SET name = ?,unom = ?,fla = ?,capacity = ?,description = ?,in_service = ?, state = ?, business = ?,from_uuids = ?,to_uuids = ?,dev_protect = ?,dev_fault_record = ?, dev_status = ?,dev_dyn_sense = ?,dev_instruct = ?,dev_etc = ?,components = ?,context = ? WHERE bay_uuid = ?"; QString strSQL = "UPDATE bay SET name = ?,tag = ?,unom = ?,fla = ?,capacity = ?,description = ?,in_service = ?, state = ?, business = ?,from_uuids = ?,to_uuids = ?,dev_protect = ?,dev_fault_record = ?, dev_status = ?,dev_dyn_sense = ?,dev_instruct = ?,dev_etc = ?,components = ?,context = ? WHERE bay_uuid = ?";
QVariantList params; QVariantList params;
params.append(name); params.append(name);
params.append(tag);
params.append(unom); params.append(unom);
params.append(fla); params.append(fla);
params.append(capacity); params.append(capacity);
@ -1215,7 +1217,7 @@ bool DataBase::updateBay(QUuid uuid,QString name,double unom,double fla,double c
bayInfo DataBase::getBay(QUuid uuid) bayInfo DataBase::getBay(QUuid uuid)
{ {
bayInfo info; bayInfo info;
QString strSQL = "SELECT bay_uuid, name, type, unom, fla, capacity, description, in_service, state, grid, zone, station, business, from_uuids, to_uuids, dev_protect, dev_fault_record, dev_status, dev_dyn_sense, dev_instruct, dev_etc, components, context FROM bay WHERE bay_uuid = ?"; QString strSQL = "SELECT bay_uuid, name, tag, type, unom, fla, capacity, description, in_service, state, grid, zone, station, business, from_uuids, to_uuids, dev_protect, dev_fault_record, dev_status, dev_dyn_sense, dev_instruct, dev_etc, components, context FROM bay WHERE bay_uuid = ?";
QVariantList params; QVariantList params;
params.append(uuid); params.append(uuid);
@ -1226,37 +1228,38 @@ bayInfo DataBase::getBay(QUuid uuid)
{ {
info.uuid = QUuid(query.value(0).toString()); info.uuid = QUuid(query.value(0).toString());
info.name = query.value(1).toString(); info.name = query.value(1).toString();
info.type = query.value(2).toString(); info.tag = query.value(2).toString();
info.unom = query.value(3).toDouble(); info.type = query.value(3).toString();
info.fla = query.value(4).toDouble(); info.unom = query.value(4).toDouble();
info.capacity = query.value(5).toDouble(); info.fla = query.value(5).toDouble();
info.description = query.value(6).toString(); info.capacity = query.value(6).toDouble();
info.inService = query.value(7).toBool(); info.description = query.value(7).toString();
info.nState = query.value(8).toInt(); info.inService = query.value(8).toBool();
info.grid = query.value(9).toString(); info.nState = query.value(9).toInt();
info.zone = query.value(10).toString(); info.grid = query.value(10).toString();
info.station = query.value(11).toString(); info.zone = query.value(11).toString();
QString strBusi = query.value(12).toString(); info.station = query.value(12).toString();
QString strBusi = query.value(13).toString();
info.business = QstringToJson(strBusi); info.business = QstringToJson(strBusi);
QString strFrom = query.value(13).toString(); QString strFrom = query.value(14).toString();
info.fromUuid = QstringToJson(strFrom); info.fromUuid = QstringToJson(strFrom);
QString strTo = query.value(14).toString(); QString strTo = query.value(15).toString();
info.toUuid = QstringToJson(strTo); info.toUuid = QstringToJson(strTo);
QString strProtect = query.value(15).toString(); QString strProtect = query.value(16).toString();
info.protect = QstringToJson(strProtect); info.protect = QstringToJson(strProtect);
QString strFaultRec= query.value(16).toString(); QString strFaultRec= query.value(17).toString();
info.faultRec = QstringToJson(strFaultRec); info.faultRec = QstringToJson(strFaultRec);
QString strStatus= query.value(17).toString(); QString strStatus= query.value(18).toString();
info.status = QstringToJson(strStatus); info.status = QstringToJson(strStatus);
QString strDynSense= query.value(18).toString(); QString strDynSense= query.value(19).toString();
info.dynSense = QstringToJson(strDynSense); info.dynSense = QstringToJson(strDynSense);
QString strInstructe= query.value(19).toString(); QString strInstructe= query.value(20).toString();
info.instruct = QstringToJson(strInstructe); info.instruct = QstringToJson(strInstructe);
QString strEtc= query.value(20).toString(); QString strEtc= query.value(21).toString();
info.etc = QstringToJson(strEtc); info.etc = QstringToJson(strEtc);
QString rawData = query.value(21).toString(); QString rawData = query.value(22).toString();
info.components = parseUuidArray(rawData); info.components = parseUuidArray(rawData);
QString strContext= query.value(22).toString(); QString strContext= query.value(23).toString();
info.context = QstringToJson(strContext); info.context = QstringToJson(strContext);
} }
query.clear(); query.clear();
@ -1271,7 +1274,7 @@ bayInfo DataBase::getBay(QUuid uuid)
QList<bayInfo> DataBase::getAllBay() QList<bayInfo> DataBase::getAllBay()
{ {
QList<bayInfo> lstInfo; QList<bayInfo> lstInfo;
QString strSQL = "SELECT bay_uuid, name, type, unom, fla, capacity, description, in_service, state, grid, zone, station, business, from_uuids, to_uuids, dev_protect, dev_fault_record, dev_status, dev_dyn_sense, dev_instruct, dev_etc, components, context FROM bay"; QString strSQL = "SELECT bay_uuid, name, tag, type, unom, fla, capacity, description, in_service, state, grid, zone, station, business, from_uuids, to_uuids, dev_protect, dev_fault_record, dev_status, dev_dyn_sense, dev_instruct, dev_etc, components, context FROM bay";
try try
{ {
@ -1281,37 +1284,38 @@ QList<bayInfo> DataBase::getAllBay()
bayInfo info; bayInfo info;
info.uuid = QUuid(query.value(0).toString()); info.uuid = QUuid(query.value(0).toString());
info.name = query.value(1).toString(); info.name = query.value(1).toString();
info.type = query.value(2).toString(); info.tag = query.value(2).toString();
info.unom = query.value(3).toDouble(); info.type = query.value(3).toString();
info.fla = query.value(4).toDouble(); info.unom = query.value(4).toDouble();
info.capacity = query.value(5).toDouble(); info.fla = query.value(5).toDouble();
info.description = query.value(6).toString(); info.capacity = query.value(6).toDouble();
info.inService = query.value(7).toBool(); info.description = query.value(7).toString();
info.nState = query.value(8).toInt(); info.inService = query.value(8).toBool();
info.grid = query.value(9).toString(); info.nState = query.value(9).toInt();
info.zone = query.value(10).toString(); info.grid = query.value(10).toString();
info.station = query.value(11).toString(); info.zone = query.value(11).toString();
QString strBusi = query.value(12).toString(); info.station = query.value(12).toString();
QString strBusi = query.value(13).toString();
info.business = QstringToJson(strBusi); info.business = QstringToJson(strBusi);
QString strFrom = query.value(13).toString(); QString strFrom = query.value(14).toString();
info.fromUuid = QstringToJson(strFrom); info.fromUuid = QstringToJson(strFrom);
QString strTo = query.value(14).toString(); QString strTo = query.value(15).toString();
info.toUuid = QstringToJson(strTo); info.toUuid = QstringToJson(strTo);
QString strProtect = query.value(15).toString(); QString strProtect = query.value(16).toString();
info.protect = QstringToJson(strProtect); info.protect = QstringToJson(strProtect);
QString strFaultRec= query.value(16).toString(); QString strFaultRec= query.value(17).toString();
info.faultRec = QstringToJson(strFaultRec); info.faultRec = QstringToJson(strFaultRec);
QString strStatus= query.value(17).toString(); QString strStatus= query.value(18).toString();
info.status = QstringToJson(strStatus); info.status = QstringToJson(strStatus);
QString strDynSense= query.value(18).toString(); QString strDynSense= query.value(19).toString();
info.dynSense = QstringToJson(strDynSense); info.dynSense = QstringToJson(strDynSense);
QString strInstructe= query.value(19).toString(); QString strInstructe= query.value(20).toString();
info.instruct = QstringToJson(strInstructe); info.instruct = QstringToJson(strInstructe);
QString strEtc= query.value(20).toString(); QString strEtc= query.value(21).toString();
info.etc = QstringToJson(strEtc); info.etc = QstringToJson(strEtc);
QString rawData = query.value(21).toString(); QString rawData = query.value(22).toString();
info.components = parseUuidArray(rawData); info.components = parseUuidArray(rawData);
QString strContext= query.value(22).toString(); QString strContext= query.value(23).toString();
info.context = QstringToJson(strContext); info.context = QstringToJson(strContext);
lstInfo.append(info); lstInfo.append(info);
} }