From 8e3239fe71f5901dd798812b63d3e704b29ac6da Mon Sep 17 00:00:00 2001 From: duanshengchao <519970194@qq.com> Date: Tue, 9 Dec 2025 10:30:05 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=AE=8C=E6=88=90=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=E7=A1=AE=E8=AE=A4=E7=9A=84=E6=93=8D=E4=BD=9C=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/alarmEventDataService.h | 2 +- include/alarmEventDataView.h | 6 ++++- include/alarmEventMainDialog.h | 1 + include/logger.h | 2 +- source/alarmEventDataService.cpp | 32 +++++++++++++++------- source/alarmEventDataView.cpp | 44 ++++++++++++++++++++++++++++--- source/alarmEventMainDialog.cpp | 6 +++++ source/alarmEventRealTimeDock.cpp | 1 + source/logger.cpp | 4 +-- 9 files changed, 81 insertions(+), 17 deletions(-) diff --git a/include/alarmEventDataService.h b/include/alarmEventDataService.h index fe89e0c..dabd216 100644 --- a/include/alarmEventDataService.h +++ b/include/alarmEventDataService.h @@ -32,7 +32,7 @@ signals: void realTimeEventReceived(const EventData& event); void historicalQueryError(const QString& msg); void historicalQueryData(const QList& events); - void confirmEventsResult(bool success, const QString& mesg); + void confirmEventsResult(bool success, const QString& mesg, const QStringList& successUuids); private slots: void onRabbitMQConnected(); diff --git a/include/alarmEventDataView.h b/include/alarmEventDataView.h index c292f45..73135c0 100644 --- a/include/alarmEventDataView.h +++ b/include/alarmEventDataView.h @@ -63,6 +63,8 @@ public: const int getMaxRealTimeEvents() const {return m_maxRealTimeEvents;} void setFilter(const AlarmEventDataFilter& filter); void refresh(); + void confirmEvent(const QModelIndex); + void confirmCurPageEvents(); bool setCurrentPage(int); int currentPage() const; @@ -81,7 +83,7 @@ private slots: void onRealTimeEventReceived(const EventData& event); void onHistoricalEventsReceived(const QList& events); void onHistoricalQueryError(const QString&); - void onConfirmEventsResult(bool success, const QString& mesg); + void onConfirmEventsResult(bool success, const QString& mesg, const QStringList& successUuids); private: void iniHeaderData(); @@ -102,6 +104,8 @@ private: AlarmDataMode m_dataMode; AlarmEventDataFilter m_currentFilter; int m_maxRealTimeEvents; + + //QMap> m_confirmedEvents; }; class AlarmEventDataDelegate : public QStyledItemDelegate diff --git a/include/alarmEventMainDialog.h b/include/alarmEventMainDialog.h index 7b90bb6..673b489 100644 --- a/include/alarmEventMainDialog.h +++ b/include/alarmEventMainDialog.h @@ -45,6 +45,7 @@ private slots: public slots: void onBtnClicked_close(); + void onBtnClicked_confirmAll(); void onBtnClicked_firstPage(); void onBtnClicked_previousPage(); diff --git a/include/logger.h b/include/logger.h index c312340..09e7b6d 100644 --- a/include/logger.h +++ b/include/logger.h @@ -46,7 +46,7 @@ private: void writeToFile(const QString&); void rollLogFiles(); //当文件大小超过设置上线时会触发'滚动' - QString formatLogMessage(LogLevel, const QString&, const QString&); + QString fromatLogMessage(LogLevel, const QString&, const QString&); struct LogEntry { diff --git a/source/alarmEventDataService.cpp b/source/alarmEventDataService.cpp index 8866324..3d2560b 100644 --- a/source/alarmEventDataService.cpp +++ b/source/alarmEventDataService.cpp @@ -116,7 +116,7 @@ void AlarmEventDataService::queryHistoricalEvents(const QDateTime& startTime, co void AlarmEventDataService::confirmEvents(const QStringList& uuids) { QUrl url = buildConfirmEventsUrl(); - if(url.isValid()) + if(!url.isValid()) return; //创建网络请求 @@ -404,6 +404,7 @@ void AlarmEventDataService::onHistoricalRequestFinished(QNetworkReply* reply) void AlarmEventDataService::onConfirmEventsRequestFinished(QNetworkReply* reply) { + QStringList successUuids; if(reply->error() == QNetworkReply::NoError) { QByteArray data = reply->readAll(); @@ -413,20 +414,33 @@ void AlarmEventDataService::onConfirmEventsRequestFinished(QNetworkReply* reply) if(parseError.error == QJsonParseError::NoError && doc.isObject()) { QJsonObject docObj = doc.object(); - int code = docObj.value("code").toInt(); - if(code == 0) - emit confirmEventsResult(true, ""); - else - emit confirmEventsResult(false, QString("确认事件失败, error code = %1").arg(QString::number(code))); + QJsonValue dataValue = docObj.value("data"); + if(dataValue.isObject()) + { + QJsonObject dataObj = dataValue.toObject(); + QJsonValue uuidValue = dataObj.value("success_uuids"); + if(uuidValue.isArray()) + { + QJsonArray uuidArray = uuidValue.toArray(); + for(const QJsonValue& value : uuidArray) + { + if(value.isString()) + successUuids.append(value.toString()); + } + + emit confirmEventsResult(true, "", successUuids); + return; + } + } } - else - emit confirmEventsResult(false, QString("确认事件失败(Json错误)")); + + emit confirmEventsResult(false, QString("确认事件失败(Json错误)"), successUuids); } else { QString errorMsg = QString("ConfirmEvents error: %1").arg(reply->errorString()); LOG_ERROR("Http", errorMsg); - emit confirmEventsResult(false, QString("确认事件失败(%1)").arg(errorMsg)); + emit confirmEventsResult(false, QString("确认事件失败(%1)").arg(errorMsg), successUuids); } reply->deleteLater(); diff --git a/source/alarmEventDataView.cpp b/source/alarmEventDataView.cpp index edaa30b..5811542 100644 --- a/source/alarmEventDataView.cpp +++ b/source/alarmEventDataView.cpp @@ -282,6 +282,23 @@ void AlarmEventDataModel::updateEventData(int index, const EventData& updatedEve emit dataChanged(modelIndex, modelIndex); } +void AlarmEventDataModel::confirmEvent(const QModelIndex index) +{ + int row = index.row(); + QString uuid = m_displayEvents.at(row).id; + QStringList uuids; + uuids.append(uuid); + AlarmEventDataService::instance()->confirmEvents(uuids); +} + +void AlarmEventDataModel::confirmCurPageEvents() +{ + QStringList uuids; + for(const EventData& event : m_displayEvents) + uuids.append(event.id); + AlarmEventDataService::instance()->confirmEvents(uuids); +} + void AlarmEventDataModel::updateCurPageData() { m_displayEvents.clear(); @@ -420,13 +437,33 @@ void AlarmEventDataModel::onHistoricalQueryError(const QString& error) emit loadDataError(error); } -void AlarmEventDataModel::onConfirmEventsResult(bool success, const QString& mesg) +void AlarmEventDataModel::onConfirmEventsResult(bool success, const QString& mesg, const QStringList& successUuids) { if(!success) { return; } - //从列表中进行删除 + + if(m_dataMode == RealTime) + { + beginResetModel(); + + for(const QString& uuid : successUuids) + { + for(EventData& event : m_displayEvents) + { + if(event.id == uuid) + { + event.status = 3; + break; + } + } + } + + endResetModel(); + } + else + refresh(); } bool AlarmEventDataModel::setCurrentPage(int page) @@ -697,7 +734,8 @@ AlarmEventDataView::~AlarmEventDataView() void AlarmEventDataView::onBtnClicked_Confirm(const QModelIndex& index) { - qDebug() << QString("confirmBtnClicked, row: %1").arg(index.row()); + //qDebug() << QString("confirmBtnClicked, row: %1").arg(index.row()); + m_tableModel->confirmEvent(index); } void AlarmEventDataView::onBtnClicked_Replay(const QModelIndex& index) diff --git a/source/alarmEventMainDialog.cpp b/source/alarmEventMainDialog.cpp index 5fcb631..159ca77 100644 --- a/source/alarmEventMainDialog.cpp +++ b/source/alarmEventMainDialog.cpp @@ -40,6 +40,7 @@ AlarmEventMainDialog::AlarmEventMainDialog(QWidget *parent) connect(m_tableView->model(), &AlarmEventDataModel::loadDataError, this, &AlarmEventMainDialog::onLoadDataError); connect(ui->btnClose, &QPushButton::clicked, this, &AlarmEventMainDialog::onBtnClicked_close); + connect(ui->btnConfirmAll, &QPushButton::clicked, this, &AlarmEventMainDialog::onBtnClicked_confirmAll); connect(ui->btnFirstPage, &QPushButton::clicked, this, &AlarmEventMainDialog::onBtnClicked_firstPage); connect(ui->btnPreviousPage, &QPushButton::clicked, this, &AlarmEventMainDialog::onBtnClicked_previousPage); @@ -231,6 +232,11 @@ void AlarmEventMainDialog::onBtnClicked_close() emit sgl_hide(); } +void AlarmEventMainDialog::onBtnClicked_confirmAll() +{ + m_tableView->model()->confirmCurPageEvents(); +} + void AlarmEventMainDialog::onBtnClicked_firstPage() { m_tableView->model()->firstPage(); diff --git a/source/alarmEventRealTimeDock.cpp b/source/alarmEventRealTimeDock.cpp index 933a50e..07a0382 100644 --- a/source/alarmEventRealTimeDock.cpp +++ b/source/alarmEventRealTimeDock.cpp @@ -190,6 +190,7 @@ void AlarmEventRealTimeDock::onBtnClicked_close() void AlarmEventRealTimeDock::onBtnClicked_confirmAll() { //stopAlarmAlert(); + m_tableView->model()->confirmCurPageEvents(); } void AlarmEventRealTimeDock::onBtnClicked_checkAll() diff --git a/source/logger.cpp b/source/logger.cpp index 7b42b69..cf9c28c 100644 --- a/source/logger.cpp +++ b/source/logger.cpp @@ -141,7 +141,7 @@ void Logger::rollLogFiles() qWarning() << "Failed to open new log file after rolling:" << m_logFile.errorString(); } -QString Logger::formatLogMessage(LogLevel level, const QString& context, const QString& message) +QString Logger::fromatLogMessage(LogLevel level, const QString& context, const QString& message) { static const char* levelStrings[] = {"FATAL", "ERROR", "WARNING", "INFO", "DEBUG"}; return QString("[%1] [%2] [%3] %4") @@ -156,7 +156,7 @@ void Logger::log(LogLevel level, const QString& context, const QString& message) if(level > m_logLevel) return; - QString formatMessage = formatLogMessage(level, context, message); + QString formatMessage = fromatLogMessage(level, context, message); if(m_outputToConsole) QTextStream(stderr) << formatMessage << Qt::endl; if(m_outputOtFile)