diff --git a/diagramCavas/include/baseContentDlg.h b/diagramCavas/include/baseContentDlg.h index 156208d..e5b95e2 100644 --- a/diagramCavas/include/baseContentDlg.h +++ b/diagramCavas/include/baseContentDlg.h @@ -31,6 +31,7 @@ public: virtual void clearData(){}; QJsonObject parseCTWindingDefaultValue(const QVariant &value); //QVariant类型到QJsonObject转换(数据库读取的是var是QString) + QList getAttributeList(const QString& sMeta); //返回基模-bay属性组下所有属性 protected: QMap _mapPro; QFormLayout* createFormLayout(QWidget* parent); diff --git a/diagramCavas/source/baseContentDlg.cpp b/diagramCavas/source/baseContentDlg.cpp index 33ebbaa..2d68dfa 100644 --- a/diagramCavas/source/baseContentDlg.cpp +++ b/diagramCavas/source/baseContentDlg.cpp @@ -1,4 +1,5 @@ #include "baseContentDlg.h" +#include "projectModelManager.h" #include #include #include @@ -68,3 +69,8 @@ QJsonObject BaseContentDlg::parseCTWindingDefaultValue(const QVariant &value) << value.typeName(); return {}; } + +QList BaseContentDlg::getAttributeList(const QString& sMeta) +{ + return ProjectModelManager::instance().getAttributeLabelInfo(sMeta); +} diff --git a/diagramCavas/source/bayInfoDlg.cpp b/diagramCavas/source/bayInfoDlg.cpp index 1e67203..b1a1ce7 100644 --- a/diagramCavas/source/bayInfoDlg.cpp +++ b/diagramCavas/source/bayInfoDlg.cpp @@ -71,7 +71,9 @@ void BayInfoDlg::setPropertyValue(QVariant var) if(property) { _itemProperty = property; - QList lstType = DataBase::GetInstance()->getMeasureAttributeTypes(); + QString sMeta = property->metaModelName(); + QList lstType = getAttributeList(sMeta); + //QList lstType = DataBase::GetInstance()->getMeasureAttributeTypes(); _validType = lstType; diff --git a/diagramCavas/source/diagramCavas.cpp b/diagramCavas/source/diagramCavas.cpp index 8a25d4c..f4e7da5 100644 --- a/diagramCavas/source/diagramCavas.cpp +++ b/diagramCavas/source/diagramCavas.cpp @@ -411,7 +411,7 @@ void DiagramCavas::onSignal_panelDelete(const QString& name,int nType) this->removeSubWindow(pPanel); delete pPanel; } - calculateLauncherVisible(); + //calculateLauncherVisible(); emit clearTopology(); } diff --git a/diagramUtils/include/projectModelManager.h b/diagramUtils/include/projectModelManager.h index 6ff3427..5f8578a 100644 --- a/diagramUtils/include/projectModelManager.h +++ b/diagramUtils/include/projectModelManager.h @@ -30,7 +30,8 @@ public: QStringList getModelList() const; //获取元模型列表 QStringList getGroupList(const QString& model) const; //返回该元模下的属性组列表 QStringList getPublicGroupList() const; //返回公共属性组列表 - QStringList getAttributeList(const QString& model,const QString& group) const; //根据元模名和组名返回属性列表 + QStringList getAttributeList(const QString& model,const QString& group,bool bContainInvalid = false) const; //根据元模名和组名返回属性列表 bContainInvalid:包含不可用属性(visible = 2) + QList getAttributeLabelInfo(const QString& model,const QString& group = "bay") const; //返回属性列表标签信息 元模名,属性组名 QStringList getPublicAttributeList(const QString& group); //返回公共属性组的属性列表 void setItemAttribute(const QString&,QStandardItem*); //设置item的属性(数据库表字段名) QPair combinePropertySql(const QStandardItem*); //根据item属性生成sql @@ -46,6 +47,7 @@ private: QJsonObject getSelectedState(QList select,QList base); //返回json格式的选中状态 QString getItemDataType(const QStandardItem* pItem); //返回数据类型 ProjectModelSettingStruct getModelSetting(const QString& sMeta,const QString& sProject); //获取指定工程模的设定 + QList processSpecialAttribute(const QString&,const QString&) const; //处理特殊量测 QByteArray cleanHexData(const QByteArray& hexData); QByteArray fixHexLength(const QByteArray& hexData); diff --git a/diagramUtils/source/basePropertyManager.cpp b/diagramUtils/source/basePropertyManager.cpp index 9060305..b22bfa8 100644 --- a/diagramUtils/source/basePropertyManager.cpp +++ b/diagramUtils/source/basePropertyManager.cpp @@ -19,6 +19,8 @@ BasePropertyManager::~BasePropertyManager() { qDeleteAll(m_entityData); qDeleteAll(m_bayData); + m_entityData.clear(); + m_bayData.clear(); } void BasePropertyManager::insertEntityData(QUuid uid,BaseProperty* p) diff --git a/diagramUtils/source/projectModelManager.cpp b/diagramUtils/source/projectModelManager.cpp index d7cfb8c..5c1998e 100644 --- a/diagramUtils/source/projectModelManager.cpp +++ b/diagramUtils/source/projectModelManager.cpp @@ -394,7 +394,7 @@ QStringList ProjectModelManager::getPublicGroupList() const return groupList; } -QStringList ProjectModelManager::getAttributeList(const QString& sM,const QString& sG) const +QStringList ProjectModelManager::getAttributeList(const QString& sM,const QString& sG,bool bContainInvalid) const { QMap modelType = DataBase::GetInstance()->ModelType(); QMap groupMap = DataBase::GetInstance()->AttributeGroup(); @@ -426,7 +426,7 @@ QStringList ProjectModelManager::getAttributeList(const QString& sM,const QStrin { if(mt.modelTypeId == metaId && mt.attributeGroupId == groupId) { - if(attMap[mt.attributeId].isVisible == 2) //2为特殊属性,不加入选择 + if(!bContainInvalid && attMap[mt.attributeId].isVisible == 2) //2为特殊属性,不加入选择 continue; lst.append(attMap[mt.attributeId].attribute); } @@ -435,6 +435,58 @@ QStringList ProjectModelManager::getAttributeList(const QString& sM,const QStrin return lst; } +QList ProjectModelManager::getAttributeLabelInfo(const QString& sM,const QString& sG) const +{ + QMap modelType = DataBase::GetInstance()->ModelType(); + QMap groupMap = DataBase::GetInstance()->AttributeGroup(); + QMap modelAttMap = DataBase::GetInstance()->ModelAttribute(); + QMap attMap = DataBase::GetInstance()->Attribute(); + + int metaId = -1; + int baseType = -1; + for(auto &meta:modelType) + { + if(sM == meta.modelType) //查找元模对应的id + { + metaId = meta.id; + baseType = meta.graphicElement; + break; + } + } + + int groupId = -1; + for(auto &attGroup:groupMap) + { + if(attGroup.groupType == sG) //固定为bay + { + groupId = attGroup.id; + break; + } + } + + QList lst; + for(auto &mt:modelAttMap) + { + if(mt.modelTypeId == metaId && mt.attributeGroupId == groupId) + { + if(baseType == 4 || baseType == 5){ //pt和ct的情况,将visible为2的处理后加入量测列表 + if(attMap[mt.attributeId].isVisible == 2){ + auto tLst = processSpecialAttribute(attMap[mt.attributeId].attribute,attMap[mt.attributeId].attributeName); + lst += tLst; + } + } + else{ //其他元件直接添加到量测列表 + MeasureAttributeType info; + info.tag = attMap[mt.attributeId].attribute; + info.name = attMap[mt.attributeId].attributeName; + lst.append(info); + } + } + } + + return lst; +} + QStringList ProjectModelManager::getPublicAttributeList(const QString& group) { QMap modelAttPublic = DataBase::GetInstance()->ModelAttributePublic(); @@ -861,6 +913,128 @@ ProjectModelSettingStruct ProjectModelManager::getModelSetting(const QString& sM return setting; } +QList ProjectModelManager::processSpecialAttribute(const QString& attribute,const QString& attributeName) const +{ + QList lst; + QString attName = attribute; + QString attTag = attributeName; + + const QChar firstChar = attName.isEmpty() ? QChar() : attName.at(0); + const bool hasDollar = attName.contains("$"); + const bool hasUnderDollar = attName.contains("_$"); + const bool hasSn = attName.contains("sn"); + + /* ========== 规则 1:_$ ========== */ + if (hasUnderDollar) + { + QStringList underDollarValues; + + if (firstChar == 'I') + { + underDollarValues = QStringList{"a", "b", "c"}; + } + else // U + { + underDollarValues = QStringList{"ab", "bc", "ca"}; // ✅ 已修正 + } + + if (hasSn) + { + for (const QString& u : underDollarValues) + { + QString tmpName = attName; + QString tmpTag = attTag; + tmpName.replace("_$", u); + tmpTag.replace("_$", u); + + for (const QString& sn : {"s1","s2","s3"}) + { + MeasureAttributeType m; + m.tag = tmpName; + m.name = tmpTag; + m.tag.replace("sn", sn); + m.name.replace("sn", sn); + lst.append(m); + } + } + } + else + { + for (const QString& u : underDollarValues) + { + MeasureAttributeType m; + m.tag = attName; + m.name = attTag; + m.tag.replace("_$", u); + m.name.replace("_$", u); + lst.append(m); + } + } + } + /* ========== 规则 2:$ ========== */ + else if (hasDollar) + { + QStringList dollarValues = + (firstChar == 'I') ? QStringList{"A","B","C"} + : QStringList{"AB","BC","CA"}; + + if (hasSn) + { + for (const QString& d : dollarValues) + { + QString tmpName = attName; + QString tmpTag = attTag; + tmpName.replace("$", d); + tmpTag.replace("$", d); + + for (const QString& sn : {"s1","s2","s3"}) + { + MeasureAttributeType m; + m.tag = tmpName; + m.name = tmpTag; + m.tag.replace("sn", sn); + m.name.replace("sn", sn); + lst.append(m); + } + } + } + else + { + for (const QString& d : dollarValues) + { + MeasureAttributeType m; + m.tag = attName; + m.name = attTag; + m.tag.replace("$", d); + m.name.replace("$", d); + lst.append(m); + } + } + } + /* ========== 规则 3:仅 sn ========== */ + else if (hasSn) + { + for (const QString& sn : {"s1","s2","s3"}) + { + MeasureAttributeType m; + m.tag = attName; + m.name = attTag; + m.tag.replace("sn", sn); + m.name.replace("sn", sn); + lst.append(m); + } + } + /* ========== 规则 4:无占位符 ========== */ + else + { + MeasureAttributeType m; + m.tag = attName; + m.name = attTag; + lst.append(m); + } + return lst; +} + QByteArray ProjectModelManager::cleanHexData(const QByteArray& hexData) { QByteArray cleaned = hexData; // 移除空格、换行等空白字符