#include "structDataSource.h" #include "global.h" StructDataSource::StructDataSource(QObject* parent) : QObject(parent) { } // 根据code获取属性 ExtraProperty* StructDataSource::getPropertyByCode(const QString& code) { auto it = allProperties.find(code); if (it != allProperties.end()) { return &it.value(); } return nullptr; } // 根据tag获取属性 ExtraProperty* StructDataSource::getPropertyByTag(const QString& tag) { for (auto it = allProperties.begin(); it != allProperties.end(); ++it) { if (it.value().tag == tag) { return &it.value(); } } return nullptr; } // 根据group获取属性列表 QVector StructDataSource::getPropertiesByGroup(const QString& groupTag, const QString& modelName) { QVector result; for (auto it = allProperties.begin(); it != allProperties.end(); ++it) { const ExtraProperty& prop = it.value(); if (prop.group_tag == groupTag && (modelName.isEmpty() || prop.sourceConfig.value("modelName").toString() == modelName)) { result.append(prop); } } return result; } // 根据sourceType获取属性列表 QVector StructDataSource::getPropertiesBySourceType(const QString& sourceType) { QVector result; for (auto it = allProperties.begin(); it != allProperties.end(); ++it) { if (it.value().sourceType == sourceType) { result.append(it.value()); } } return result; } // 添加或更新属性 bool StructDataSource::addOrUpdateProperty(const ExtraProperty& prop) { if (prop.code.isEmpty()) { qWarning() << "Property code is empty"; return false; } bool isNew = !allProperties.contains(prop.code); allProperties[prop.code] = prop; emit propertyUpdated(prop, isNew); return true; } // 更新单个属性 bool StructDataSource::updateProperty(const ExtraProperty& updatedProp) { if (updatedProp.code.isEmpty()) { qWarning() << "Property code is empty"; return false; } if (!allProperties.contains(updatedProp.code)) { qWarning() << "Property not found:" << updatedProp.code; return false; } allProperties[updatedProp.code] = updatedProp; emit propertyUpdated(updatedProp, false); return true; } // 更新connect_para bool StructDataSource::updateConnectPara(const QString& code, const QString& newConnectPara) { auto it = allProperties.find(code); if (it != allProperties.end()) { it.value().connect_para = newConnectPara; emit propertyUpdated(it.value(), false); return true; } return false; } // 批量更新 void StructDataSource::updateProperties(const QVector& updatedProps) { for (const auto& prop : updatedProps) { updateProperty(prop); } } // 删除属性 bool StructDataSource::removeProperty(const QString& code) { if (allProperties.contains(code)) { ExtraProperty removedProp = allProperties[code]; allProperties.remove(code); emit propertyRemoved(removedProp); return true; } return false; } // 批量删除 int StructDataSource::removeProperties(const QVector& codes) { int count = 0; for (const QString& code : codes) { if (removeProperty(code)) { count++; } } return count; } // 保存到文件 void StructDataSource::saveAll() { } // 加载数据 // 获取所有属性的code列表 QStringList StructDataSource::getAllCodes() const { return allProperties.keys(); } // 获取所有属性 QVector StructDataSource::getAllProperties() const { return allProperties.values(); } // 获取property数据 propertyStateInfo* StructDataSource::getPropertyData(const ExtraProperty& prop) { QString modelName = prop.sourceConfig.value("modelName").toString(); QString groupTag = prop.group_tag; QUuid componentUuid = prop.component_uuid; QString propertyTag = prop.tag; auto itModel = m_propertyData.find(modelName); if (itModel == m_propertyData.end()) return nullptr; auto itGroup = itModel->groupInfo.find(groupTag); if (itGroup == itModel->groupInfo.end()) return nullptr; auto itComponent = itGroup->mapInfo.find(componentUuid); if (itComponent == itGroup->mapInfo.end()) return nullptr; auto itProperty = itComponent->find(propertyTag); if (itProperty == itComponent->end()) return nullptr; return &itProperty.value(); } // 获取measurement数据 MeasurementInfo* StructDataSource::getMeasurementData(const ExtraProperty& prop) { auto it = m_measurementData.find(prop.tag); if (it != m_measurementData.end()) { return &it.value(); } return nullptr; } // 验证数据 bool StructDataSource::validateProperty(const ExtraProperty& prop) { if (prop.code.isEmpty()) { qWarning() << "Property code is empty"; return false; } if (prop.name.isEmpty()) { qWarning() << "Property name is empty:" << prop.code; return false; } if (prop.tag.isEmpty()) { qWarning() << "Property tag is empty:" << prop.code; return false; } if (prop.sourceType.isEmpty()) { qWarning() << "Property sourceType is empty:" << prop.code; return false; } if (prop.sourceType != "property" && prop.sourceType != "measurement") { qWarning() << "Invalid sourceType:" << prop.sourceType << "for property:" << prop.code; return false; } return true; } void StructDataSource::loadExtrapro(QMap vec) { allProperties = vec; } void StructDataSource::loadPropertyData(QMap map) { m_propertyData = map; } void StructDataSource::loadMeasurementData(QMap map) { m_measurementData = map; }