Parcourir la source

dev: 添加安全员逻辑

Yao il y a 1 mois
Parent
commit
7298e8561a
5 fichiers modifiés avec 31 ajouts et 15 suppressions
  1. 2 0
      CMakeLists.txt
  2. 3 3
      blastopepage.cpp
  3. 17 7
      fireWidget/firingwidget.cpp
  4. 5 0
      fireWidget/firingwidget.h
  5. 4 5
      mainwindow.cpp

+ 2 - 0
CMakeLists.txt

@@ -9,6 +9,8 @@ set(CMAKE_AUTORCC ON)
 # 设置 C++ 标准
 set(CMAKE_CXX_STANDARD 17)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_PREFIX_PATH "/opt/homebrew/Cellar/qt/6.9.0")
+
 
 # # 设置 OpenSSL 安装路径
  set(OPENSSL_ROOT_DIR "C:/Qt/Tools/OpenSSLv3/Win_x64")

+ 3 - 3
blastopepage.cpp

@@ -311,7 +311,7 @@ void BlastOpePage::loadDataFromSource(int currentPage, int pageSize) {
                         item = new QStandardItem(statusText);
                         item->setForeground(QColor("#f3a361"));
                     } else if (value.toString() == BlastStatus::SafeChecked) {
-                        statusText = "已安全确认";
+                        statusText = "待起爆";
                         item = new QStandardItem(statusText);
                         item->setForeground(QColor("#f3a3k'k1"));
                     } else if (value.toString() == BlastStatus::Blasted) {
@@ -419,7 +419,7 @@ void BlastOpePage::loadDataFromSource(int currentPage, int pageSize) {
                     "    border: none;"
                     "    background-color: transparent;"
                     "}");
-            } else if (blastStatus == "已安全确认") {
+            } else if (blastStatus == "待起爆") {
                 button->setText(startBlastButtonTxt);
                 button->setEnabled(true);
             } else {
@@ -514,7 +514,7 @@ void BlastOpePage::onUpdateBlastStatus(int status, int row) {
         boldFont.setBold(true);
         switch (status) {
             case 0:
-                model->setData(index, "已安全确认");
+                model->setData(index, "待起爆");
                 customColor = QColor("#44035b");
                 model->setData(index, customColor, Qt::ForegroundRole);
                 model->setData(index, boldFont, Qt::FontRole);

+ 17 - 7
fireWidget/firingwidget.cpp

@@ -186,18 +186,17 @@ void firingWidget::handleProjectFiringMqttMessage(const QByteArray &message,
                             ui->pushButton_2->setEnabled(false);
                             emit progressChanged(3, m_row);
                             emit updateBlastStatus(3, m_row);
-                            ui->pushButton_2->setText("充电");
+                            ui->pushButton_2->setText("待确认");
                             navProgress->setState(3);
                             break;
                         case 4:
-                            ui->pushButton_2->setEnabled(true);
-                            emit progressChanged(4, m_row);
-                            emit updateBlastStatus(4, m_row);
-                            ui->pushButton_2->setText("起爆");
+                            ui->pushButton_2->setEnabled(false);
+                            ui->pushButton_2->setText("待确认");
                             navProgress->setState(4);
+                            emit updateBlastStatus(4, m_row);
                             break;
                         case 5:
-                            ui->pushButton_2->setEnabled(false);
+                            ui->pushButton_2->setEnabled(true);
                             emit progressChanged(5, m_row);
                             emit updateBlastStatus(5, m_row);
                             emit updateButton(5, m_row);
@@ -256,6 +255,17 @@ void firingWidget::onButtonPressedReceived(const QString &topic, const QString &
     qDebug() << "Data sent successfully";
 }
 
+void firingWidget::onSafeChecked(const QString projectUuid) {
+    if (projectUuid == m_uuid) {
+        lastStage = 3;  // 设置为待安全确认状态
+        emit projSafeChckSuccess(m_uuid);
+        emit lastStageChanged(lastStage);
+        qDebug() << ANSI_COLOR_GREEN << "安全确认成功,进入待起爆状态" << ANSI_COLOR_RESET;
+    } else {
+        qDebug() << "Project UUID mismatch, expected: " << m_uuid << ", got: " << projectUuid;
+    }
+}
+
 // 状态改变
 void firingWidget::onLastStageChanged(int newStage) {
     QString topic = "hxgc/" + m_uuid + "/P";
@@ -304,7 +314,7 @@ void firingWidget::onLastStageChanged(int newStage) {
     Logger::getInstance().info(
         QString("Stage changed to: %1, sending message: %2").arg(newStage).arg(message));
     if (!message.isEmpty()) {
-        if (lastStage == 4 && !m_select) {
+        if (lastStage == 3 && !m_select) {
             bool success2;
             serialTool = SerialTool::getInstance(nullptr, &success2);
             if (serialTool) {

+ 5 - 0
fireWidget/firingwidget.h

@@ -4,12 +4,14 @@
 #include <QJsonObject>
 #include <QWidget>
 
+#include "../backendapimanager.h"
 #include "../blastRecord/hblastrecord.h"
 #include "../blastRecord/hblastrecorddao.h"
 #include "../blastRecordDet/hblastrecorddetdao.h"
 #include "../blastRegRecord/hblastregrecorddao.h"
 #include "../databasemanager.h"
 #include "../des3encryption.h"
+#include "../logger.h"
 #include "../mqtt/mqttclient.h"
 #include "../mqttthread.h"
 #include "../serial/serialtool.h"
@@ -46,11 +48,13 @@ class firingWidget : public QWidget {
    signals:
     void progressChanged(int value, int row);
     void lastStageChanged(int newStage);
+    void projSafeChckSuccess(QString projectUuid);
     void updateBlastStatus(int status, int row);
     void selectSignal(QString uuid);
     void updateButton(int status, int row);
     void updateProjectStatus(QString uuid);
     void updateData(const QJsonObject &jsonObj);
+    void safeChecked(const QJsonObject &jsonObj);
     void countdown(QString uuid, const QString &topic, const QString &message);
     void closeFiring(QString uuid);
 
@@ -66,6 +70,7 @@ class firingWidget : public QWidget {
     void saveAndUploadRecord(const QJsonObject &jsonObj);
     void sendMqttMessage(const QString &topic, const QByteArray &message);
     void startBlasting();
+    void onSafeChecked(const QString projectUuid);
 
    private:
     Ui::firingWidget *ui;

+ 4 - 5
mainwindow.cpp

@@ -1,5 +1,8 @@
 #include "mainwindow.h"
 
+#include <QtCore/qlist.h>
+#include <QtCore/qobject.h>
+
 #include <QDebug>
 #include <QPushButton>
 #include <QWidget>
@@ -151,18 +154,16 @@ void MainWindow::handleMqttProjectsMessage(const QByteArray &message, const QMqt
                 } else {
                     QString uuid = uuidValue.toString();
                     HProjectDao dao = HProjectDao(DatabaseManager::getInstance().getDatabase());
-                    dao.updateBlastStatusByUuid(uuid, BlastStatus::Registered);
+                    dao.updateBlastStatusByUuid(uuid, "2");
                 }
             }
         } else if (jsonObj.contains("msgType") && jsonObj["msgType"].toString() == "safeCheck") {
-            qDebug() << "收到安全验证消息: " << jsonObj;
             // 处理安全验证消息
             if (jsonObj["status"] != "ok") {
                 QMessageBox::warning(this, "安全验证失败",
                                      QString("安全验证未通过,练习安全员确认"));
                 return;
             }
-            qDebug() << "安全验证通过,开始注册项目";
 
             const QString addressUuid = jsonObj["addressUuid"].toString();
             QJsonArray addressList = backendAPIManager::getHAddresses();
@@ -172,11 +173,9 @@ void MainWindow::handleMqttProjectsMessage(const QByteArray &message, const QMqt
 
             QList<QSharedPointer<HProject>> projects =
                 dao.getRegistedProjectByAddressUuid(subAddressUuids);
-            MqttClient *pcMqttClient = MqttClient::getInstance();
             for (const auto &project : projects) {
                 dao.updateBlastStatusByUuid(project->getUuid(), BlastStatus::SafeChecked);
             }
-            // TODO if  have updated project, trigger refresh the project list page
         }
     }
 }