From 3e1ef913534a98375d8b46dc62c803b7ed89a3c6 Mon Sep 17 00:00:00 2001 From: duanshengchao <519970194@qq.com> Date: Fri, 16 Jan 2026 16:00:30 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=9C=8D=E5=8A=A1=E7=9A=84=E5=AF=B9=E5=A4=96?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E5=92=8C=E5=81=9C=E6=AD=A2=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=8C=E5=B9=B6=E4=B8=94=E5=86=85=E9=83=A8?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=BA=86=E5=AE=9E=E6=97=B6=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=9A=84=E5=8A=A8=E6=80=81=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/measurementDataManager.h | 6 ++-- source/measurementDataManager.cpp | 46 ++++++++++++++++++++++++++++--- 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/include/measurementDataManager.h b/include/measurementDataManager.h index e871633..7949e57 100644 --- a/include/measurementDataManager.h +++ b/include/measurementDataManager.h @@ -19,8 +19,8 @@ class MeasurementDataManager : public QObject public: static MeasurementDataManager* instance(); - void requestData(const QString& dataID, QObject* requester); - void cancelRequest(const QString& dataID, QObject* requester); + void requestData(const QStringList& measurements, QObject* requester); + void cancelRequest(const QStringList& measurements, QObject* requester); MeasurementDataPoint getLastestRealtimeData(const QString& dataID); void queryHistoricalEvents(const QString& dataID, const QDateTime& startTime, const QDateTime& endTime, const QString& step, const QString& type = "phasor"); @@ -97,7 +97,7 @@ private: QHash> m_dataCache; //请求记录 - QHash> m_dataRequesetRecord; + QHash> m_dataRequesetRecord; }; #endif diff --git a/source/measurementDataManager.cpp b/source/measurementDataManager.cpp index 3ade247..6290f71 100644 --- a/source/measurementDataManager.cpp +++ b/source/measurementDataManager.cpp @@ -298,13 +298,51 @@ void MeasurementDataManager::getSubscriptionRealtimeData() } } -void MeasurementDataManager::requestData(const QString& dataID, QObject* requester) +void MeasurementDataManager::requestData(const QStringList& measurements, QObject* requester) { - //if() + QStringList newRequestDatas; + for(const QString& dataID : measurements) + { + auto it = m_dataRequesetRecord.find(dataID); + if(it != m_dataRequesetRecord.end() && !it.value().contains(requester)) + it.value().insert(requester); + else + { + QSet requesters; + requesters.insert(requester); + m_dataRequesetRecord.insert(dataID, requesters); + newRequestDatas.push_back(dataID); + } + } + + if(!newRequestDatas.isEmpty()) + addSubscriptionData(newRequestDatas); } -void MeasurementDataManager::cancelRequest(const QString& dataID, QObject* requester) -{} +void MeasurementDataManager::cancelRequest(const QStringList& measurements, QObject* requester) +{ + QStringList removeRequestDatas; + for(const QString& dataID : measurements) + { + auto it = m_dataRequesetRecord.find(dataID); + if(it != m_dataRequesetRecord.end()) + { + it.value().remove(requester); + if(it.value().isEmpty()) + removeRequestDatas.push_back(dataID); + } + } + + if(!removeRequestDatas.isEmpty()) + { + removeSubscriptionData(removeRequestDatas); + for(const QString& dataID : std::as_const(removeRequestDatas)) + { + m_dataRequesetRecord.remove(dataID); + m_dataCache.remove(dataID); + } + } +} MeasurementDataPoint MeasurementDataManager::getLastestRealtimeData(const QString& dataID) {