浏览代码

dev: add force cancel blast

Yao 1 月之前
父节点
当前提交
7cbb21ea04
共有 7 个文件被更改,包括 51 次插入33 次删除
  1. 2 0
      blastProject/projectdialog.cpp
  2. 24 15
      blastopepage.cpp
  3. 3 2
      blastopepage.h
  4. 18 14
      fireWidget/firingwidget.cpp
  5. 1 1
      fireWidget/firingwidget.h
  6. 1 0
      global.h
  7. 2 1
      mainwindow.cpp

+ 2 - 0
blastProject/projectdialog.cpp

@@ -131,6 +131,8 @@ void ProjectDialog::clearFormData() {
     for (QComboBox *comboBox : comboBoxes) {
         comboBox->setCurrentIndex(-1);
     }
+    // for if view the data, will hide the accept button
+    ui->buttonBox->button(QDialogButtonBox::Ok)->setVisible(true);
 }
 
 void ProjectDialog::on_comboBoxAddr_currentIndexChanged(int index) {

+ 24 - 15
blastopepage.cpp

@@ -238,13 +238,12 @@ void BlastOpePage::initPagination() {
     connect(pageWidget->getComboBox(), QOverload<int>::of(&QComboBox::currentIndexChanged), this,
             &BlastOpePage::onComboBoxIndexChanged);
     ui->verticalLayout_4->addWidget(pageWidget);
-    ;
-    pageSize = 10;
-    currentPage = 1;
+    m_pageSize = 10;
+    m_currentPage = 1;
     RefreshData();
 }
 
-void BlastOpePage::RefreshData() { loadDataAndDrawTable(currentPage, pageSize); }
+void BlastOpePage::RefreshData() { loadDataAndDrawTable(m_currentPage, m_pageSize); }
 
 void BlastOpePage::loadDataAndDrawTable(int currentPage, int pageSize) {
     PaginatedHProjectResult result = dao.getAllHProjectsByOpera(currentPage, pageSize);
@@ -322,6 +321,7 @@ void BlastOpePage::loadDataAndDrawTable(int currentPage, int pageSize) {
     connectionItem =
         QObject::connect(model, &QStandardItemModel::itemChanged, this, &BlastOpePage::onItemCheckboxChanged);
     ui->tableView->setColumnWidth(0, 30);
+    ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);  // 禁止编辑
     for (int i = 1; i < headerCount; ++i) {
         if (i == 8) {  // Column: 进度
             ui->tableView->horizontalHeader()->setSectionResizeMode(i, QHeaderView::Custom);
@@ -420,16 +420,16 @@ void BlastOpePage::loadDataAndDrawTable(int currentPage, int pageSize) {
 
 // 切换页数
 void BlastOpePage::PageChanged(int page) {
-    currentPage = page;
-    loadDataAndDrawTable(currentPage, pageSize);
+    m_currentPage = page;
+    loadDataAndDrawTable(m_currentPage, m_pageSize);
 }
 
 void BlastOpePage::onComboBoxIndexChanged(int index) {
     QVariant variant = pageWidget->getComboBox()->itemData(index);
     int value = variant.toInt();
-    pageSize = value;
-    currentPage = 1;
-    loadDataAndDrawTable(currentPage, pageSize);
+    m_pageSize = value;
+    m_currentPage = 1;
+    loadDataAndDrawTable(m_currentPage, m_pageSize);
 }
 
 void BlastOpePage::updateProgressBar(int firingStage, int row) {
@@ -474,6 +474,9 @@ void BlastOpePage::updateProgressBar(int firingStage, int row) {
                 progressBar3->setValue(100);
                 break;
             default:
+                progressBar1->setValue(0);
+                progressBar2->setValue(0);
+                progressBar3->setValue(0);
                 break;
         }
     }
@@ -488,6 +491,7 @@ void BlastOpePage::onFiringStageUpdated(int stage, int row) {
         QColor customColor;
         QFont boldFont;
         boldFont.setBold(true);
+        qDebug() << "opage::onFiringStageUpdated: stage = " << stage << ", row = " << row;
         switch (stage) {
             case FiringStages::Starting:
                 model->setData(firingStatusItem, "待起爆");
@@ -531,6 +535,11 @@ void BlastOpePage::onFiringStageUpdated(int stage, int row) {
                 customColor = QColor("#8e620");
                 model->setData(firingStatusItem, customColor, Qt::ForegroundRole);
                 break;
+            case FiringStages::ForceCanceled:
+                model->setData(firingStatusItem, "已强制取消");
+                customColor = QColor("#ff0000");
+                model->setData(firingStatusItem, customColor, Qt::ForegroundRole);
+                break;
             default:
                 break;
         }
@@ -561,7 +570,7 @@ void BlastOpePage::handleSingleBlastButtonClicked(int row, QPushButton *button)
         button->setMinimumWidth(80);
         button->setText(stopBlastButtonTxt);
         firingWidget *widget = new firingWidget(row, false, uuid);
-        connect(widget, &firingWidget::updateBlastStatus, this, &BlastOpePage::onFiringStageUpdated);
+        connect(widget, &firingWidget::updatefiringStage, this, &BlastOpePage::onFiringStageUpdated);
         connect(widget, &firingWidget::countdown, this, &BlastOpePage::showCountDownWidget);
         connect(widget, &firingWidget::updateProjectStatus, this, &BlastOpePage::handlerUpdateProjectStatus);
         connect(widget, &firingWidget::closeFiring, this, &BlastOpePage::destroyFiringWidget);
@@ -656,6 +665,10 @@ void BlastOpePage::handleUpdateOpButton(int stage, int row) {
             button->setIcon(QIcon(":/icons/icons/svg/blast.svg"));
             button->setIconSize(QSize(32, 32));
             break;
+        case FiringStages::ForceCanceled:
+            button->setDisabled(true);
+            button->setText(reStartButtonTxt);
+            break;
         default:
             button->setEnabled(true);
             break;
@@ -674,7 +687,6 @@ void BlastOpePage::destroyFiringWidget(const QString &uuid, int row) {
         widget->disconnect();             // 断开信号连接
         firingWidgetByUuid.remove(uuid);  // 从映射中移除
     }
-    RefreshData();
 }
 
 // 槽函数,当 item 状态改变时触发
@@ -730,7 +742,7 @@ void BlastOpePage::on_btnSelect_clicked() {
         }
 
         // 信号连接
-        connect(widgetSelect, &firingWidget::updateBlastStatus, this, &BlastOpePage::onFiringStageUpdated);
+        connect(widgetSelect, &firingWidget::updatefiringStage, this, &BlastOpePage::onFiringStageUpdated);
         connect(widgetSelect, &firingWidget::batchFiringSignal, this, &BlastOpePage::setBatchBlastTrigger);
         connect(widgetSelect, &firingWidget::updateProjectStatus, this, &BlastOpePage::handlerUpdateProjectStatus);
         connect(widgetSelect, &firingWidget::closeFiring, this, &BlastOpePage::destroyBatchFiringWidget);
@@ -765,7 +777,6 @@ void BlastOpePage::setBatchBlastTrigger(QString uuid) {
                 serialTool, &SerialTool::enableButtonReceived, this,
                 [this]() {
                     for (const auto &row : uuidMap.keys()) {
-                        qDebug() << "Key:" << row;
                         onFiringStageUpdated(10, row);
                     }
                 },
@@ -839,6 +850,4 @@ void BlastOpePage::destroyBatchFiringWidget(const QString &uuid, int row) {
             item->setFlags(flags);
         }
     }
-
-    RefreshData();
 }

+ 3 - 2
blastopepage.h

@@ -88,11 +88,12 @@ class BlastOpePage : public QWidget {
     SerialTool *serialTool;
     QSet<QString> selectedUuids;
     QMetaObject::Connection connectionItem;
-    int pageSize;     // 每页显示的记录数量
-    int currentPage;  // 当前页面
+    int m_pageSize;     // 每页显示的记录数量
+    int m_currentPage;  // 当前页面
     int totalCount;
     QString stopBlastButtonTxt = "取消起爆";
     QString startBlastButtonTxt = "开启起爆";
+    QString reStartButtonTxt = "返回授权";
 };
 
 #endif  // BLASTOPEPAGE_H

+ 18 - 14
fireWidget/firingwidget.cpp

@@ -105,8 +105,7 @@ void firingWidget::checkBlasterConnection() {
                 "border-radius: 4px; }");
             msgBox.exec();
             if (msgBox.clickedButton() == noButton) {
-                sendCancelFiringMsg();
-                emit closeFiring(m_curProjUuid, m_row);
+                emit lastStageChanged(FiringStages::ForceCanceled);
                 return;
             }
             m_connectionCheckTimer->start(1000);
@@ -222,7 +221,7 @@ void firingWidget::handleProjectFiringMqttMessage(const QMqttMessage &message) {
                             break;
                         case FiringStages::QuickTesting:
                             navProgress->setState(FiringStages::QuickTesting);
-                            emit updateBlastStatus(FiringStages::QuickTesting, m_row);
+                            emit updatefiringStage(FiringStages::QuickTesting, m_row);
                             ui->pushButton_2->setText("立即测试");
                             ui->pushButton_2->setEnabled(false);
                             break;
@@ -255,12 +254,12 @@ void firingWidget::handleProjectFiringMqttMessage(const QMqttMessage &message) {
                             navProgress->setState(FiringStages::QuickTestFinished);
 
                             emit progressChanged(FiringStages::QuickTestFinished, m_row);
-                            emit updateBlastStatus(FiringStages::QuickTestFinished, m_row);
+                            emit updatefiringStage(FiringStages::QuickTestFinished, m_row);
                             break;
                         case FiringStages::NetCharging:
                             ui->pushButton_2->setEnabled(false);
                             emit progressChanged(FiringStages::NetCharging, m_row);
-                            emit updateBlastStatus(FiringStages::NetCharging, m_row);
+                            emit updatefiringStage(FiringStages::NetCharging, m_row);
                             ui->pushButton_2->setText("充电");
                             navProgress->setState(FiringStages::NetCharging);
                             break;
@@ -269,19 +268,19 @@ void firingWidget::handleProjectFiringMqttMessage(const QMqttMessage &message) {
                             ui->pushButton_2->setText("起爆");
                             navProgress->setState(FiringStages::NetChargingFinished);
                             emit progressChanged(FiringStages::NetChargingFinished, m_row);
-                            emit updateBlastStatus(FiringStages::NetChargingFinished, m_row);
+                            emit updatefiringStage(FiringStages::NetChargingFinished, m_row);
                             break;
                         case FiringStages::Blasting:
                             ui->pushButton_2->setEnabled(false);
                             emit progressChanged(FiringStages::Blasting, m_row);
-                            emit updateBlastStatus(FiringStages::Blasting, m_row);
+                            emit updatefiringStage(FiringStages::Blasting, m_row);
                             ui->pushButton_2->setText("起爆");
                             navProgress->setState(FiringStages::Blasting);
                             break;
                         case FiringStages::BlastFinished:
                             ui->pushButton_2->setEnabled(false);
                             emit progressChanged(FiringStages::BlastFinished, m_row);
-                            emit updateBlastStatus(FiringStages::BlastFinished, m_row);
+                            emit updatefiringStage(FiringStages::BlastFinished, m_row);
                             emit updateProjectStatus(m_curProjUuid, BlastStatus::Blasted);
                             ui->pushButton_2->setText("已完成起爆");
                             navProgress->setState(FiringStages::BlastFinished);
@@ -293,10 +292,9 @@ void firingWidget::handleProjectFiringMqttMessage(const QMqttMessage &message) {
                             ui->pushButton_2->setText("已确认取消");
 
                             emit progressChanged(FiringStages::Starting, m_row);
-                            emit updateBlastStatus(FiringStages::Starting, m_row);
+                            emit updatefiringStage(FiringStages::Starting, m_row);
                             emit updateProjectStatus(m_curProjUuid, BlastStatus::Created);
                             emit closeFiring(m_curProjUuid, m_row);
-
                             break;
                         default:
                             break;
@@ -354,17 +352,16 @@ void firingWidget::onSafeChecked(const QString projectUuid) {
 
 // 状态改变
 void firingWidget::handleFiringStageChanged(int newStage) {
-    qDebug() << ANSI_COLOR_GREEN << "Stage 值变为: " << newStage << ANSI_COLOR_RESET;
+    qDebug() << ANSI_COLOR_GREEN << "handleFiringStageChanged: " << newStage << ANSI_COLOR_RESET;
     QString topic = "hxgc/" + m_curProjUuid + "/P";
     QString message;
     QString buttonText;
-    qDebug() << ANSI_COLOR_GREEN << "Stage 值变为: i1" << newStage << ANSI_COLOR_RESET;
     switch (newStage) {
         case FiringStages::Starting:
             message = "起爆测试";
             buttonText = "立即测试";
             sendMqttMessage(topic, message.toUtf8());
-            emit updateBlastStatus(FiringStages::Starting, m_row);
+            emit updatefiringStage(FiringStages::Starting, m_row);
             break;
         case FiringStages::QuickTestFinished:
             message = "开始充电";
@@ -391,6 +388,13 @@ void firingWidget::handleFiringStageChanged(int newStage) {
             qDebug() << ANSI_COLOR_GREEN << "释放按键 5" << ANSI_COLOR_RESET;
 
             break;
+        case FiringStages::ForceCanceled:
+            // 强制取消
+            sendCancelFiringMsg();
+            emit updateProjectStatus(m_curProjUuid, BlastStatus::Created);
+            emit updatefiringStage(FiringStages::ForceCanceled, m_row);
+            emit closeFiring(m_curProjUuid, m_row);
+            break;
         default:
 
             return;
@@ -410,7 +414,7 @@ void firingWidget::handleFiringStageChanged(int newStage) {
                     qDebug() << "Failed to send data";
                 }
                 connection = connect(serialTool, &SerialTool::enableButtonReceived,
-                                     [this]() { emit updateBlastStatus(10, m_row); });
+                                     [this]() { emit updatefiringStage(10, m_row); });
                 connectionPress = connect(serialTool, &SerialTool::buttonPressedReceived,
                                           [this, topic, message]() { this->onButtonPressedReceived(topic, message); });
 

+ 1 - 1
fireWidget/firingwidget.h

@@ -63,7 +63,7 @@ class firingWidget : public QWidget {
     void progressChanged(int value, int row);
     void lastStageChanged(int newStage);
     void projSafeCheckSuccess(QString projectUuid);
-    void updateBlastStatus(int status, int row);
+    void updatefiringStage(int status, int row);
     void batchFiringSignal(QString uuid);
     void updateProjectStatus(QString uuid, QString status);
     void updateData(const QJsonObject &jsonObj);

+ 1 - 0
global.h

@@ -105,6 +105,7 @@ const static int Blasting = 5;                    // 爆破中
 const static int BlastFinished = 6;               // 爆破完成
 const static int CancelConfirmed = 7;             // 确认取消
 const static int PendingTriggerButtonClick = 10;  // 待触发按钮触发起爆
+const static int ForceCanceled = 11;              // 强制取消
 }  // namespace FiringStages
 // namespace FiringStages
 

+ 2 - 1
mainwindow.cpp

@@ -197,7 +197,8 @@ void MainWindow::handleMqttProjectsMessage(const QMqttMessage &message) {
                 dao.updateBlastStatusByUuid(project->getUuid(), BlastStatus::SafeChecked);
             }
             if (!pendingCheckProjects.isEmpty()) {
-                QMessageBox::information(nullptr, "安全员确认信息", QString("收到工程被安全员确认,请查看爆破列表"));
+                QMessageBox::information(nullptr, "安全员确认信息",
+                                         QString("收到工程被安全员确认,请刷新查看爆破作业列表"));
                 emit refreshPage();
                 return;
             }