Selaa lähdekoodia

handle blaster offline when try to firing

Yao 1 kuukausi sitten
vanhempi
commit
cc056956bc

+ 1 - 1
blastProject/blastprojectpage.cpp

@@ -231,7 +231,7 @@ void BlastProjectPage::publishAllPendingBlastProjects() {
     QJsonDocument jsonDoc(jsonArray);
     QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Indented);
 
-    mainMqttClient->sendMessage(MQTT_TOPIC_COMPANY_PROJECTS, jsonData, 2, true);
+    mainMqttClient->sendMessage(MQTT_TOPIC_COMPANY_PROJECTS_PUBLISH, jsonData, 2, true);
 };
 
 void BlastProjectPage::updateButtonClicked(const HProject &project) {

+ 18 - 18
blastopepage.cpp

@@ -438,6 +438,11 @@ void BlastOpePage::updateProgressBar(int firingStage, int row) {
         QProgressBar *progressBar2 = progressBars[row].bar2;
         QProgressBar *progressBar3 = progressBars[row].bar3;
         switch (firingStage) {
+            case FiringStages::Starting:
+                progressBar1->setValue(0);
+                progressBar2->setValue(0);
+                progressBar3->setValue(0);
+                break;
             case FiringStages::QuickTesting:
                 // 起爆检测状态
                 progressBar1->setRange(0, 0);  // 设置范围为0到100
@@ -455,7 +460,6 @@ void BlastOpePage::updateProgressBar(int firingStage, int row) {
                 break;
             case FiringStages::NetChargingFinished:
                 // 充电完成
-                progressBar2->setRange(0, 100);  // 设置范围为0到100
                 progressBar2->setValue(100);
                 break;
             case FiringStages::Blasting:
@@ -465,27 +469,19 @@ void BlastOpePage::updateProgressBar(int firingStage, int row) {
                 break;
             case FiringStages::BlastFinished:
                 // 充电完成
-                progressBar3->setRange(0, 100);  // 设置范围为0到100
                 progressBar3->setValue(100);
                 break;
-            case FiringStages::Starting:
-                progressBar1->setRange(0, 100);
-                progressBar1->setValue(0);
-                progressBar2->setRange(0, 100);
-                progressBar2->setValue(0);
-                progressBar3->setRange(0, 100);
-                progressBar3->setValue(0);
-                break;
             default:
                 break;
         }
     }
+    qDebug() << "3333updateProgressBar: firingStage = " << firingStage << ", row = " << row;
 }
 
 // update tableView's fields about firing stage
 void BlastOpePage::onFiringStageUpdated(int stage, int row) {
     // update blast status item
-    QModelIndex firingStatusItem = model->index(row, 7);
+    QModelIndex firingStatusItem = model->index(row, ColIndexBlastStatus);
     if (firingStatusItem.isValid()) {
         QColor customColor;
         QFont boldFont;
@@ -604,7 +600,6 @@ void BlastOpePage::handleUpdateOpButton(int stage, int row) {
     QModelIndex index = model->index(row, ColIndexOpBtn);
     if (!index.isValid()) {
         Logger::getInstance().error(QString("can not get updateOpBtnStage index %1").arg(row));
-        RefreshData();
         return;
     }
     QWidget *widget = ui->tableView->indexWidget(index);
@@ -615,6 +610,10 @@ void BlastOpePage::handleUpdateOpButton(int stage, int row) {
     }
 
     switch (stage) {
+        case FiringStages::CancelConfirmed:
+            button->setEnabled(true);
+            button->setText(startBlastButtonTxt);
+            break;
         case FiringStages::Starting:
             button->setDisabled(true);
             break;
@@ -656,7 +655,7 @@ void BlastOpePage::handleUpdateOpButton(int stage, int row) {
             button->setIconSize(QSize(32, 32));
             break;
         default:
-            button->setEnabled(false);
+            button->setEnabled(true);
             break;
     }
 }
@@ -665,8 +664,7 @@ void BlastOpePage::handlerUpdateProjectStatus(QString uuid, const QString &newSt
     dao.updateBlastStatusByUuid(uuid, newStatus);
 }
 
-void BlastOpePage::destroyFiringWidget(const QString &uuid) {
-    qDebug() << "Destroying firingWidget with uuid:" << uuid;
+void BlastOpePage::destroyFiringWidget(const QString &uuid, int row) {
     firingWidget *widget = firingWidgetByUuid.value(uuid);
     if (widget) {
         widget->close();                  // 关闭窗口
@@ -674,7 +672,7 @@ void BlastOpePage::destroyFiringWidget(const QString &uuid) {
         widget->disconnect();             // 断开信号连接
         firingWidgetByUuid.remove(uuid);  // 从映射中移除
     }
-    RefreshData();
+    handleUpdateOpButton(FiringStages::CancelConfirmed, row);
 }
 
 // 槽函数,当 item 状态改变时触发
@@ -821,13 +819,16 @@ void BlastOpePage::triggerBatchFiringBlast() {
     }
 }
 
-void BlastOpePage::destroyBatchFiringWidget(const QString &uuid) {
+void BlastOpePage::destroyBatchFiringWidget(const QString &uuid, int row) {
     firingWidget *widget = uuidWidgetSMap.value(uuid);
     if (widget) {
         widget->close();
         widget->deleteLater();
         uuidWidgetSMap.remove(uuid);
     }
+    handleUpdateOpButton(FiringStages::CancelConfirmed, row);
+    // reset the table's row by row index
+
     for (int row = 0; row < model->rowCount(); ++row) {
         // 恢复 checkbox 可选
         QStandardItem *item = model->item(row, 0);
@@ -837,5 +838,4 @@ void BlastOpePage::destroyBatchFiringWidget(const QString &uuid) {
             item->setFlags(flags);
         }
     }
-    RefreshData();
 }

+ 2 - 2
blastopepage.h

@@ -49,13 +49,13 @@ class BlastOpePage : public QWidget {
     void handleUpdateOpButton(int status, int row);
     void showCountDownWidget(QString uuid, const QString &topic, const QString &message);
     void handlerUpdateProjectStatus(QString uuid, const QString &status);
-    void destroyFiringWidget(const QString &uuid);
+    void destroyFiringWidget(const QString &uuid, int row);
     void on_btnSelect_clicked();
     void onItemCheckboxChanged(QStandardItem *item);
     void setBatchBlastTrigger(QString uuid);
     void showCountDownForBatchBlast();
     void triggerBatchFiringBlast();
-    void destroyBatchFiringWidget(const QString &uuid);
+    void destroyBatchFiringWidget(const QString &uuid, int row);
 
    private:
     void handleFeaturePermission(QWebEnginePage *page, const QUrl &securityOrigin, QWebEnginePage::Feature feature);

+ 19 - 8
fireWidget/firingwidget.cpp

@@ -60,18 +60,23 @@ firingWidget::~firingWidget() {
 }
 
 void firingWidget::sendMqttMessage(const QString &topic, const QByteArray &message) {
+    qDebug() << ANSI_COLOR_GREEN << "XXX Sending MQTT message to topic:" << topic << "with message:" << message
+             << ANSI_COLOR_RESET;
     if (mainMqttClient->isConnected()) {
         mainMqttClient->sendMessage(topic, message, quint8(2), false);
     } else {
         QMessageBox::warning(nullptr, "MQTT未连接", "MQTT未连接, 无法发送消息: " + topic + ", " + message);
         Logger::getInstance().error("MQTT未连接, 无法发送消息" + topic + ", " + message);
     }
+    qDebug() << ANSI_COLOR_GREEN << "XXXy Sending MQTT message to topic:" << topic << "with message:" << message;
 }
 
 void firingWidget::startBlasting() {
     // 等待3s mqtt连接后再发送mqtt消息
     m_lastStage = FiringStages::Starting;
+    qDebug() << ANSI_COLOR_GREEN << "Firing widget started with topic: 1" << m_topic << ANSI_COLOR_RESET;
     emit lastStageChanged(FiringStages::Starting);
+    qDebug() << ANSI_COLOR_GREEN << "Firing widget started with topic: 2" << m_topic << ANSI_COLOR_RESET;
     checkBlasterConnection();
 }
 
@@ -86,6 +91,7 @@ void firingWidget::checkBlasterConnection() {
             return;
         }
         if (m_lastMsgTime.secsTo(QDateTime::currentDateTime()) > 3) {
+            m_connectionCheckTimer->stop();
             QMessageBox msgBox;
             msgBox.setWindowTitle("起爆检测测试错误");
             msgBox.setText("超时未收到爆破器消息,是否继续等待");
@@ -99,15 +105,17 @@ void firingWidget::checkBlasterConnection() {
                 "border-radius: 4px; }");
             msgBox.exec();
             if (msgBox.clickedButton() == noButton) {
-                m_connectionCheckTimer->stop();
                 sendCancelFiringMsg();
-                emit closeFiring(m_curProjUuid);
+                emit closeFiring(m_curProjUuid, m_row);
                 return;
             }
+            m_connectionCheckTimer->start(1000);
         }
     });
 
-    m_connectionCheckTimer->start(5000);
+    qDebug() << ANSI_COLOR_GREEN << "Firing widget initialized with topic: 6" << m_connectionCheckTimer
+             << ANSI_COLOR_RESET;
+    m_connectionCheckTimer->start(1000);
 }
 void firingWidget::on_pushButton_2_clicked() { emit countdown(m_curProjUuid, m_topic, "message"); }
 
@@ -275,7 +283,7 @@ void firingWidget::handleProjectFiringMqttMessage(const QMqttMessage &message) {
                             emit updateProjectStatus(m_curProjUuid, BlastStatus::Blasted);
                             ui->pushButton_2->setText("已完成起爆");
                             navProgress->setState(FiringStages::BlastFinished);
-                            emit closeFiring(m_curProjUuid);
+                            emit closeFiring(m_curProjUuid, m_row);
                             break;
                         case FiringStages::CancelConfirmed:
                             navProgress->setState(FiringStages::BlastFinished);
@@ -285,7 +293,7 @@ void firingWidget::handleProjectFiringMqttMessage(const QMqttMessage &message) {
                             emit progressChanged(FiringStages::Starting, m_row);
                             emit updateBlastStatus(FiringStages::Starting, m_row);
                             emit updateProjectStatus(m_curProjUuid, BlastStatus::Created);
-                            emit closeFiring(m_curProjUuid);
+                            emit closeFiring(m_curProjUuid, m_row);
 
                             break;
                         default:
@@ -300,7 +308,7 @@ void firingWidget::handleProjectFiringMqttMessage(const QMqttMessage &message) {
             if (jsonObj.contains("data") && jsonObj["data"].isObject()) {
                 QJsonObject dataObject = jsonObj["data"].toObject();
                 emit updateData(dataObject);
-                emit closeFiring(m_curProjUuid);
+                emit closeFiring(m_curProjUuid, m_row);
             }
         }
     }
@@ -344,9 +352,11 @@ void firingWidget::onSafeChecked(const QString projectUuid) {
 
 // 状态改变
 void firingWidget::handleFiringStageChanged(int newStage) {
+    qDebug() << ANSI_COLOR_GREEN << "Stage 值变为: " << 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 = "起爆测试";
@@ -383,6 +393,7 @@ void firingWidget::handleFiringStageChanged(int newStage) {
 
             return;
     }
+    qDebug() << ANSI_COLOR_GREEN << "Stage 值变为: i2" << newStage << ANSI_COLOR_RESET;
 
     if (!message.isEmpty()) {
         if (m_lastStage == FiringStages::NetChargingFinished && !m_select) {
@@ -402,9 +413,9 @@ void firingWidget::handleFiringStageChanged(int newStage) {
                                           [this, topic, message]() { this->onButtonPressedReceived(topic, message); });
 
             } else {
-                qDebug() << "serialTool Not fond.";
+                qDebug() << "serialTool Not found.";
                 // 在准备起爆状态下 但是没有获取串口
-                m_lastStage = 10;
+                m_lastStage = FiringStages::PendingTriggerButtonClick;
             }
         } else if (m_lastStage == FiringStages::NetChargingFinished && m_select) {
             qDebug() << "多台起爆:待起爆状态";

+ 1 - 1
fireWidget/firingwidget.h

@@ -69,7 +69,7 @@ class firingWidget : public QWidget {
     void updateData(const QJsonObject &jsonObj);
     void safeChecked(const QJsonObject &jsonObj);
     void countdown(QString uuid, const QString &topic, const QString &message);
-    void closeFiring(QString uuid);
+    void closeFiring(QString uuid, int row);
 
    private:
     void checkBlasterConnection();

+ 0 - 1
fireWidget/navprogress.cpp

@@ -14,7 +14,6 @@ NavProgress::NavProgress(QWidget *parent) : QWidget(parent), navStyle(NavStyle_J
     connect(blinkTimer, &QTimer::timeout, this, &NavProgress::toggleBlinkColors);
     blinkColor = Qt::red;
     secondBlinkColor = Qt::red;
-    qDebug() << "width" << this->width();
 }
 void NavProgress::setNavStyle(NavStyle style) {
     navStyle = style;

+ 3 - 1
global.cpp

@@ -12,7 +12,8 @@ QString firewidgetPort;  // 4 for dev; 1: 爆破装置
 QString gpsPort;
 QString databaseHost;
 QString mqttClientId;
-QString MQTT_TOPIC_COMPANY_PROJECTS;
+QString MQTT_TOPIC_COMPANY_PROJECTS;          // 接受爆破器的topic
+QString MQTT_TOPIC_COMPANY_PROJECTS_PUBLISH;  // 发布工程的topic
 QString COMPANY_CODE;
 QString DET_PARAM_XMBH;
 QString DET_PARAM_DWDM;
@@ -30,6 +31,7 @@ void loadConfig() {
     databaseHost = settings.value("Database/host", "127.0.0.1").toString();
     mqttClientId = settings.value("MQTT/client_id", "mqttclient_PC").toString();
     MQTT_TOPIC_COMPANY_PROJECTS = settings.value("MQTT/topic", "hxgc/companycode/pro/P").toString();
+    MQTT_TOPIC_COMPANY_PROJECTS_PUBLISH = settings.value("MQTT/publish_topic", "hxgc/companycode/pro/B").toString();
     COMPANY_CODE = settings.value("Company/code", "cc_hxgc").toString();
     isShowTriggeringWidget = settings.value("UI/show_triggering_widget", false).toBool();
 

+ 7 - 6
global.h

@@ -11,12 +11,13 @@
 extern MqttClient* mainMqttClient;
 
 /* global variables which can configured in config file */
-extern QUrl apiBackendUrl;                   // 声明全局变量
-extern QString firewidgetPort;               // 点火装置串口号
-extern QString gpsPort;                      // gps串口号
-extern QString databaseHost;                 // pc数据库地址
-extern QString mqttClientId;                 // mqtt客户端ID
-extern QString MQTT_TOPIC_COMPANY_PROJECTS;  // 每个部署点(公司)唯一地址
+extern QUrl apiBackendUrl;                           // 声明全局变量
+extern QString firewidgetPort;                       // 点火装置串口号
+extern QString gpsPort;                              // gps串口号
+extern QString databaseHost;                         // pc数据库地址
+extern QString mqttClientId;                         // mqtt客户端ID
+extern QString MQTT_TOPIC_COMPANY_PROJECTS;          // 每个部署点(公司)唯一地址
+extern QString MQTT_TOPIC_COMPANY_PROJECTS_PUBLISH;  // 发布工程的topic
 extern QString COMPANY_CODE;
 extern bool isShowTriggeringWidget;  // 是否显示点火装置触发中调试组件
 // 用来获取雷管参数