3 Commits 223f87b7d5 ... 7096283fd2

Auteur SHA1 Message Date
  leslie 7096283fd2 1.多台起爆 il y a 3 semaines
  leslie 7478271ff7 1.爆破工程下发所有未注册的工程 il y a 3 semaines
  leslie a0e32b3c35 1.更新串口命令 il y a 3 semaines

+ 1 - 0
blastProject/HProjectDao.h

@@ -26,6 +26,7 @@ public:
     HProject getHProjectById(qint64 id);
     PaginatedHProjectResult getAllHProjects(int page, int pageSize);
     PaginatedHProjectResult getAllHProjectsByOpera(int page, int pageSize);
+    QList<QSharedPointer<HProject> > getAllHProjectsReg();
 
 private:
     QSqlDatabase database;

+ 15 - 2
blastProject/blastprojectpage.cpp

@@ -260,8 +260,21 @@ void BlastProjectPage::insertPlan(const QMap<QString, QString> &data)
     project.setCreatedAt(QDateTime::currentDateTime());
     if(dao.addHProject(project)){
         RefreshData();
-        QByteArray jsonData  = project.ProjectToJson(project);
-        client->sendMessage("hxgc/companycode", jsonData);
+        QJsonArray jsonArray;
+        QList<QSharedPointer<HProject>> projectsReg = dao.getAllHProjectsReg();
+        for (const auto& projectPtr : projectsReg) {
+            if (projectPtr) {
+                QByteArray projectJson = projectPtr->ProjectToJson(*projectPtr);
+                QJsonDocument doc = QJsonDocument::fromJson(projectJson);
+                jsonArray.append(doc.object());
+            }
+        }
+
+        QJsonDocument jsonDoc(jsonArray);
+        QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Indented);
+
+        client->sendMessage("hxgc/companycode/pro/B", jsonData);
+        qDebug() <<"mqtt单例:"<< client;
     }
 
 }

+ 15 - 0
blastProject/hprojectdao.cpp

@@ -169,6 +169,21 @@ PaginatedHProjectResult HProjectDao::getAllHProjectsByOpera(int page, int pageSi
     return { projects, totalCount };
 }
 
+QList<QSharedPointer<HProject>> HProjectDao::getAllHProjectsReg()
+{
+    QList<QSharedPointer<HProject>> projects;
+    QSqlQuery query(database);
+    query.prepare("SELECT * FROM h_project WHERE blast_status =1 ORDER BY created_at ");
+    // 执行查询并打印SQL
+    if (query.exec()) {
+        while (query.next()) {
+            projects.append(recordToProject(query.record()));
+        }
+    } else {
+        qWarning() << "Query execution failed: " << query.lastError().text();
+    }
+    return projects;
+}
 
 //更改状态
 bool HProjectDao::updateBlastStatusByUuid(const QString &uuid, const QString &blastStatus)

+ 110 - 5
blastopepage.cpp

@@ -342,7 +342,7 @@ void BlastOpePage::loadDataFromSource(int currentPage, int pageSize)
         progressBarLayout->addWidget(progressBar3);
         progressBarLayout->setAlignment(Qt::AlignCenter);
         progressBarLayout->setContentsMargins(0, 0, 0, 0);
-
+        progressBarLayout->setSpacing(0); // 设置进度条之间的间距为0
         QWidget *progressBarContainer = new QWidget(ui->tableView);
         progressBarContainer->setLayout(progressBarLayout);
         QModelIndex progressIndex = model->index(row, progressCol);
@@ -462,7 +462,7 @@ void BlastOpePage::updateProgressBar(int value, int row)
 
 void BlastOpePage::onUpdateBlastStatus(int status ,int row)
 {
-    QModelIndex index = model->index(row, 6);
+    QModelIndex index = model->index(row, 9);
         if (index.isValid()) {
             QColor customColor;
             QFont boldFont;
@@ -637,7 +637,7 @@ void BlastOpePage::on_btnSelect_clicked()
     for (auto it = uuidMap.begin(); it != uuidMap.end(); ++it) {
         int row = it.key();
         QString uuid = it.value();
-        firingWidget *widget = new firingWidget(row,true,uuid);
+        firingWidget *widgetSelect = new firingWidget(row,true,uuid);
         QModelIndex index = model->index(row, 9);
         if (index.isValid()) {
             QWidget *widgetButton = ui->tableView->indexWidget(index);
@@ -648,12 +648,117 @@ void BlastOpePage::on_btnSelect_clicked()
             }
 
         // 信号连接
-        connect(widget, &firingWidget::progressChanged, this, &BlastOpePage::updateProgressBar);
-        connect(widget, &firingWidget::updateBlastStatus, this, &BlastOpePage::onUpdateBlastStatus);
+        connect(widgetSelect, &firingWidget::progressChanged, this, &BlastOpePage::updateProgressBar);
+        connect(widgetSelect, &firingWidget::updateBlastStatus, this, &BlastOpePage::onUpdateBlastStatus);
+        connect(widgetSelect, &firingWidget::selectSignal, this, &BlastOpePage::handleSelect);
+        connect(widgetSelect, &firingWidget::updateButton, this, &BlastOpePage::changeButByMqtt);
+        connect(widgetSelect, &firingWidget::updateProjectStatus, this, &BlastOpePage::updateProject);
+        connect(widgetSelect, &firingWidget::closeFiring, this, &BlastOpePage::destroyFiringWidgetSelect);
         widget->show();
         widget->setAttribute(Qt::WA_DeleteOnClose);
+        uuidWidgetSMap.insert(uuid, widgetSelect);
+    }
+
+}
+
+
+//完成充电
+void BlastOpePage::handleSelect(QString uuid){
+    selectedUuids.insert(uuid);
+    bool isSame = checkUuidsSame();
+    if (isSame) {
+        bool successSelect;
+        serialTool = SerialTool::getInstance(nullptr, &successSelect);
+        connect(serialTool, &SerialTool::buttonPressedReceived,this,&BlastOpePage::showDownWidgetSelect, Qt::SingleShotConnection);
+        if(serialTool){
+            QByteArray data = "\r\nENABLE_BUTTON\r\n";
+            bool success = serialTool->sendData(data);
+            if (success) {
+
+                qDebug() << "Data sent successfully";
+            } else {
+                qDebug() << "Failed to send data";
+            }
+            connect(serialTool, &SerialTool::enableButtonReceived,this, [this]() {
+
+                for (const auto& row : uuidMap.keys()) {
+                    qDebug() << "Key:" << row;
+                    onUpdateBlastStatus(10,row);
+                }
+            }, Qt::SingleShotConnection);
+
+        }else {
+            qDebug() << "serialTool Not fond.";
+
+        }
+    } else {
+        qDebug() << "The uuids in selectedUuids and uuidMap are different.";
     }
 
+
 }
 
 
+// 检查 selectedUuids 和 uuidMap 中的 uuid 是否相同
+bool BlastOpePage::checkUuidsSame() {
+    QSet<QString> mapUuids;
+    for (const auto& value : uuidMap) {
+        qDebug()<<"value"<<value;
+        mapUuids.insert(value);
+    }
+    return selectedUuids == mapUuids;
+}
+
+
+
+void BlastOpePage::showDownWidgetSelect()
+{
+    QByteArray data = "\r\nDISABLE_BUTTON\r\n";
+    bool success = serialTool->sendData(data);
+    if (success) {
+        qDebug() << "Data sent successfully";
+    } else {
+        qDebug() << "Failed to send data";
+    }
+    serialTool->releaseInstance();
+    CountdownWidget *countdownWidgetSelect = new CountdownWidget(this);
+    countdownWidgetSelect->resize(200, 200);
+    int x = (this->width() - countdownWidgetSelect->width()) / 2;
+    int y = (this->height() - countdownWidgetSelect->height()) / 2;
+
+    countdownWidgetSelect->move(x, y);
+    countdownWidgetSelect->show();
+
+    connect(countdownWidgetSelect, &CountdownWidget::countdownFinished, this,&BlastOpePage::selectBlasting,Qt::SingleShotConnection);
+
+}
+
+void BlastOpePage::selectBlasting(){
+    for (auto it = uuidWidgetSMap.begin(); it != uuidWidgetSMap.end(); ++it) {
+        QString uuid = it.key();
+        firingWidget* widget = it.value();
+        QString topic = "hxgc/"+uuid+"/P";
+        QString message = "起爆";
+        widget->onCountdownFinished(topic,message);
+    }
+}
+
+
+void BlastOpePage::destroyFiringWidgetSelect(const QString& uuid)
+{
+    firingWidget *widget = uuidWidgetSMap.value(uuid);
+    if (widget) {
+        widget->close();
+        widget->deleteLater();
+        uuidWidgetSMap.remove(uuid);
+    }
+    for (int row = 0; row < model->rowCount(); ++row) {
+        QStandardItem *item = model->item(row, 0);
+        if (item) {
+            Qt::ItemFlags flags = item->flags();
+            flags &= ~Qt::ItemIsEnabled; // 去除 ItemIsEnabled 标志位
+            item->setFlags(flags);
+        }
+    }
+}
+

+ 12 - 5
blastopepage.h

@@ -4,10 +4,10 @@
 #include <QWidget>
 #include <QPushButton>
 #include <QLayout>
-#include <QWebEnginePage>
+// #include <QWebEnginePage>
 #include <QNetworkAccessManager>
 #include <QNetworkReply>
-#include <QWebEngineView>
+// #include <QWebEngineView>
 #include <QJsonObject>
 #include <QJsonDocument>
 #include <QJsonArray>
@@ -15,10 +15,12 @@
 #include <QProgressBar>
 #include <QLayout>
 #include <QStandardItemModel>
+#include <QSet>
 #include "PageWidget.h"
 #include "hprojectdao.h"
 #include "fireWidget/firingwidget.h"  // 包含 firingWidget 头文件
 #include "countdownwidget.h"
+#include "./serial/serialtool.h"
 
 // 自定义结构体
 struct ProgressBarTriple {
@@ -52,8 +54,11 @@ private slots:
     void updateProject(QString uuid);
     void destroyFiringWidget(const QString &uuid);
     void on_btnSelect_clicked();
-
     void onItemChanged(QStandardItem *item);
+    void handleSelect(QString uuid);
+    void showDownWidgetSelect();
+    void selectBlasting();
+    void destroyFiringWidgetSelect(const QString &uuid);
 private:
     void handleFeaturePermission(QWebEnginePage *page, const QUrl &securityOrigin, QWebEnginePage::Feature feature);
     void RefreshData();
@@ -66,6 +71,7 @@ private:
     QJsonObject sendPostRequest(const QUrl &url, const QJsonObject &data);
     QJsonObject getMetaInfo();
     void handleButtonClick(int row,QPushButton *button);
+    bool checkUuidsSame();
 
 
 private:
@@ -74,8 +80,6 @@ private:
     QStandardItemModel *model;
     QMap<QString, firingWidget*> uuidWidgetMap;
     QWebEngineView *view;
-    QList<QWidget*> originalWidgets; // 用于保存原始的 UI 控件
-    QWidget *overlayWidget;
     QVBoxLayout *layout;
     QString certifyId;
     PageWidget *pageWidget;
@@ -83,6 +87,9 @@ private:
     HProjectDao dao;
     QVector<ProgressBarTriple> progressBars; // 用于保存每行的两个进度条指针
     QMap<int, QString> uuidMap; // 用于存储行号和对应的 uuid
+    QMap<QString, firingWidget*> uuidWidgetSMap;
+    SerialTool* serialTool;
+    QSet<QString> selectedUuids;
     QMetaObject::Connection connectionItem;
     int pageSize;  //每页显示的记录数量
     int currentPage;      //当前页面

+ 19 - 17
fireWidget/firingwidget.cpp

@@ -43,7 +43,7 @@ firingWidget::firingWidget(const int& row,const bool& select,const QString& uuid
     connect(mqttThread, &MqttThread::messageAndTopicReceived, this, &firingWidget::handleMessageAndTopic);
 
     connect(this, &firingWidget::lastStageChanged, this, &firingWidget::onLastStageChanged);
-
+    connect(this, &firingWidget::updateData, this, &firingWidget::updateWebData);
     startBlasting();
 }
 
@@ -228,7 +228,6 @@ void firingWidget::handleMessageAndTopic(const QByteArray &message, const QMqttT
                 stage = dataObject["stage"].toInt();
                 if (stage != lastStage) {
                     lastStage = stage;
-                    emit lastStageChanged(lastStage);
                     switch (stage) {
                         case 0:
                             navProgress->setState(0);
@@ -261,9 +260,6 @@ void firingWidget::handleMessageAndTopic(const QByteArray &message, const QMqttT
                             ui->pushButton_2->setEnabled(true);
                             emit progressChanged(4,m_row);
                             emit updateBlastStatus(4,m_row);
-                            if(serialTool){
-                                emit updateBlastStatus(10,m_row);
-                                };
                             ui->pushButton_2->setText("起爆");
                             navProgress->setState(4);
                             break;
@@ -294,6 +290,7 @@ void firingWidget::handleMessageAndTopic(const QByteArray &message, const QMqttT
                         default:
                             break;
                     }
+                    emit lastStageChanged(lastStage);
                 }
             }
         }
@@ -356,14 +353,19 @@ void firingWidget::onLastStageChanged(int newStage)
             buttonText = "起爆";
             break;
         case 5:
-            if (connection) {
-                           disconnect(connection);
-                       }
-            if (connectionPress) {
-                           disconnect(connectionPress);
-                       }
-            serialTool->releaseInstance();
-            qDebug() << ANSI_COLOR_GREEN << "释放按键" << ANSI_COLOR_RESET;
+            if(!m_select){
+                if (connection) {
+                    disconnect(connection);
+                    qDebug() << "Connection disconnected.";
+                }
+                if (connectionPress) {
+                    disconnect(connectionPress);
+                    qDebug() << "connectionPress disconnected.";
+                }
+                serialTool->releaseInstance();
+            }
+
+              qDebug() << ANSI_COLOR_GREEN << "释放按键 5" << ANSI_COLOR_RESET;
 
           break;
         default:
@@ -390,15 +392,15 @@ void firingWidget::onLastStageChanged(int newStage)
                     this->onButtonPressedReceived(topic, message);
                 });
 
-            }else if(lastStage == 4&&!m_select){
-                    qDebug() << "多台起爆:待起爆状态";
             }else {
                 qDebug() << "serialTool Not fond.";
                 //在准备起爆状态下 但是没有获取串口
                 lastStage = 10;
-                qDebug() << lastStage;
             }
-        }else{//????
+        }else if(lastStage == 4&&m_select){
+             qDebug() << "多台起爆:待起爆状态";
+             emit selectSignal(m_uuid);
+         }else{//????
                 qDebug() << "Stage 值变为: " << newStage<<"发送消息"<<message.toUtf8();
          }
       }

+ 2 - 1
fireWidget/firingwidget.h

@@ -38,6 +38,7 @@ signals:
     void progressChanged(int value,int row);
     void lastStageChanged(int newStage);
     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);
@@ -65,7 +66,7 @@ private:
     HBlastRegRecordDao daoReg;
     NavProgress *navProgress;
     MqttThread* mqttThread;
-    SerialTool* serialTool;
+    SerialTool* serialTool=nullptr;
     QString m_uuid; // 用于存储 uuid
     QString reg_uuid; // 用于存储 uuid
     QString blast_uuid; // 用于存储 uuid

+ 3 - 3
serial/serialtool.cpp

@@ -31,7 +31,7 @@ SerialTool* SerialTool::getInstance(QObject *parent, bool* success)
     if (success) {
         *success = true;
     }
-    globalMutex.unlock();
+//    globalMutex.unlock();
     return instance;
 }
 // 打开串口的函数
@@ -90,11 +90,11 @@ void SerialTool::readData()
             QByteArray command = buffer.mid(startIndex + 2, endIndex - startIndex - 2);
             emit dataReceived(newData);
             // 根据 command 的值发射相应的信号
-                if (command == "DISABLE_BUTTON") {
+                if (command == "BUTTON_DISABLED") {
                     emit disableButtonReceived();
                 } else if (command == "BUTTON_PRESSED") {
                         emit buttonPressedReceived();
-                } else if (command == "ENABLE_BUTTON") {
+                } else if (command == "BUTTON_ENABLE") {
                         emit enableButtonReceived();
                 }