Ver Fonte

fix and add c++ formatter

Yao há 2 semanas atrás
pai
commit
b37241af23

+ 3 - 0
.gitignore

@@ -1,3 +1,6 @@
+.vscode
+.vscode/*
+
 # 忽略构建文件
 build/
 *.o

+ 37 - 0
blastRecord/.clang-format.yaml

@@ -0,0 +1,37 @@
+# .clang-format
+# 这是一个尝试接近 Qt 风格的配置。
+# Qt 的风格比较独特,可能需要结合 Clang-Format 的其他选项和手动调整。
+
+BasedOnStyle: Google # Google 风格的控制流大括号是同行的,作为起点。
+# 也可以尝试 BasedOnStyle: LLVM
+
+IndentWidth: 4
+UseTab: Never
+ColumnLimit: 100 # 建议行宽
+
+# Qt 类和函数的大括号在新行,控制流语句的大括号同行。
+# Clang-Format 的 BreakBeforeBraces 选项很难完美匹配这种混合风格。
+# AttachStyle: 用于控制流语句的大括号行为,通常与 K&R 风格(同行)一致。
+# 对于类和函数,你可能需要更复杂的 Clang-Format 配置,或者接受一点偏差。
+# 默认的 BasedOnStyle: Google 或 LLVM 已经把控制流语句的大括号放在同行了。
+
+BreakBeforeBraces: Attach # 用于 if/for/while 等控制流语句,使其大括号与语句同行
+
+# 对于类、函数、命名空间等大括号的控制:
+# Qt 风格中,类、函数、命名空间的大括号是新一行的。
+# Clang-Format 没有一个直接的 BreakBeforeBraces 选项来完美匹配这种组合。
+# Default/Custom 会根据情况进行调整。
+# 通常,当你设置 BreakBeforeBraces: Attach 时,类和函数的大括号会默认在新行。
+# 这是一个需要你测试和验证的部分。
+
+AlignTrailingComments: true # 尾随注释的对齐
+
+# 指针/引用符
+PointerAndReferenceBindsToType: false # * 和 & 紧贴变量名 (e.g., int *x)
+# 或 true 如果你喜欢紧贴类型 (e.g., int* x),Qt 官方更常用前者,但后者也常见。
+# 注意:Qt 官方指南里是这样写的:`char *ptr;` 但实际代码中 `char* ptr;` 也大量存在。
+
+# 其他常见的 Q_PROPERTY 相关的对齐
+AllowShortBlocksOnASingleLine: Empty # {} 可以放在一行
+
+# 确保在项目中安装了 Clang-Format VS Code 扩展,并设置为保存时格式化。

+ 4 - 4
blastRecord/hblastrecord.cpp

@@ -224,7 +224,7 @@ void HBlastRecord::setUpdateBy(qint64 newUpdateBy)
     updateBy = newUpdateBy;
 }
 
-QByteArray HBlastRecord::BlastRecordToJson(const HBlastRecord& record)
+QByteArray HBlastRecord::BlastRecordToJson(const HBlastRecord &record)
 {
     QJsonObject json;
     json["id"] = record.getId();
@@ -238,12 +238,12 @@ QByteArray HBlastRecord::BlastRecordToJson(const HBlastRecord& record)
     json["equipment_sn"] = record.getEquipmentSn();
     json["company_code"] = record.getCompanyCode();
     json["app_version"] = record.getAppVersion();
-    json["longitude"] = record.getLongitude();
-    json["latitude"] = record.getLatitude();
+    json["blast_lontitude"] = record.getLongitude();
+    json["blast_latitude"] = record.getLatitude();
     json["equipment_count"] = record.getEquipmentCount();
     json["reg_det_count"] = record.getRegDetCount();
     json["error_det_count"] = record.getErrorDetCount();
-    json["blast_at"] = record.getBlastAt().toString(Qt::ISODateWithMs);
+    json["blast_time"] = record.getBlastAt().toString(Qt::ISODateWithMs);
     json["created_at"] = record.getCreatedAt().toString(Qt::ISODateWithMs);
     json["updated_at"] = record.getUpdatedAt().toString(Qt::ISODateWithMs);
     json["deleted_at"] = record.getDeletedAt().toString(Qt::ISODateWithMs);

+ 29 - 20
blastRecord/hblastrecorddao.cpp

@@ -1,8 +1,7 @@
 #include "hblastrecorddao.h"
 
-HBlastRecordDao::HBlastRecordDao(QSqlDatabase db):database(db)
+HBlastRecordDao::HBlastRecordDao(QSqlDatabase db) : database(db)
 {
-
 }
 
 PaginatedHBlastRecordResult HBlastRecordDao::getAllHRecords(int page, int pageSize)
@@ -13,24 +12,28 @@ PaginatedHBlastRecordResult HBlastRecordDao::getAllHRecords(int page, int pageSi
     query.prepare("SELECT * FROM h_blast_record ORDER BY created_at LIMIT :pageSize OFFSET :offset");
     query.bindValue(":pageSize", pageSize);
     query.bindValue(":offset", offset);
-    if (query.exec()) {
-        while (query.next()) {
+    if (query.exec())
+    {
+        while (query.next())
+        {
             BlastRecords.append(recordToBlastRecord(query.record()));
         }
-    } else {
+    }
+    else
+    {
         qWarning() << "Query execution failed: " << query.lastError().text();
     }
 
     query.prepare("SELECT COUNT(*) FROM h_blast_record");
     int totalCount = 0;
-    if (query.exec() && query.next()) {
+    if (query.exec() && query.next())
+    {
         totalCount = query.value(0).toInt();
     }
-    return { BlastRecords, totalCount };
+    return {BlastRecords, totalCount};
 }
-bool HBlastRecordDao::addHBlastRecord(const HBlastRecord& record)
+bool HBlastRecordDao::addHBlastRecord(const HBlastRecord &record)
 {
-
     QSqlQuery query;
     query.prepare("INSERT INTO h_blast_record (uuid, project_name, project_htid, project_xmbh, operator_name, phone, operator_identity, equipment_sn, company_code, app_version, longitude, latitude, equipment_count, reg_det_count, error_det_count, blast_at, created_at, updated_at, deleted_at, create_by, update_by) "
                   "VALUES (:uuid, :project_name, :project_htid, :project_xmbh, :operator_name, :phone, :operator_identity, :equipment_sn, :company_code, :app_version, :longitude, :latitude, :equipment_count, :reg_det_count, :error_det_count, :blast_at, :created_at, :updated_at, :deleted_at, :create_by, :update_by)");
@@ -53,11 +56,12 @@ bool HBlastRecordDao::addHBlastRecord(const HBlastRecord& record)
     query.bindValue(":created_at", record.getCreatedAt().toString(Qt::ISODateWithMs));
     query.bindValue(":create_by", record.getCreateBy());
     qDebug() << "created_at:" << record.getCreatedAt();
-    if (query.exec()) {
+    if (query.exec())
+    {
         return true;
-
-    } else {
-
+    }
+    else
+    {
         return false;
     }
 }
@@ -101,7 +105,7 @@ bool HBlastRecordDao::addHBlastRecord(const HBlastRecord& record)
 //     return record;
 // }
 
-bool HBlastRecordDao::updateHBlastRecord(const HBlastRecord& record)
+bool HBlastRecordDao::updateHBlastRecord(const HBlastRecord &record)
 {
 
     QSqlQuery query;
@@ -150,23 +154,29 @@ bool HBlastRecordDao::updateHBlastRecord(const HBlastRecord& record)
     query.bindValue(":create_by", record.getCreateBy());
     query.bindValue(":update_by", record.getUpdateBy());
 
-    if (query.exec()) {
+    if (query.exec())
+    {
         return true;
-    } else {
+    }
+    else
+    {
         qDebug() << "Failed to update record:" << query.lastError().text();
         return false;
     }
 }
 
-bool HBlastRecordDao::deleteHBlastRecord(const HBlastRecord& record)
+bool HBlastRecordDao::deleteHBlastRecord(const HBlastRecord &record)
 {
     QSqlQuery query;
     query.prepare("DELETE FROM h_blast_record WHERE id = :id");
     query.bindValue(":id", record.getId());
 
-    if (query.exec()) {
+    if (query.exec())
+    {
         return true;
-    } else {
+    }
+    else
+    {
         qDebug() << "Failed to delete record:" << query.lastError().text();
         return false;
     }
@@ -198,5 +208,4 @@ QSharedPointer<HBlastRecord> HBlastRecordDao::recordToBlastRecord(const QSqlReco
     blastRecord->setCreateBy(record.value("create_by").toLongLong());
     blastRecord->setUpdateBy(record.value("update_by").toLongLong());
     return blastRecord;
-
 }

+ 1 - 1
blastRecord/hblastrecorddet.cpp

@@ -165,7 +165,7 @@ void HBlastRecordDet::setUpdateBy(qint64 newUpdateBy)
     updateBy = newUpdateBy;
 }
 
-QByteArray HBlastRecordDet::BlastRecordDetToJson(const HBlastRecordDet& recordDet)
+QByteArray HBlastRecordDet::BlastRecordDetToJson(const HBlastRecordDet &recordDet)
 {
     QJsonObject jsonObject;
     jsonObject["id"] = recordDet.getId();

+ 1 - 2
blastRegRecord/hblastregrecord.cpp

@@ -4,7 +4,6 @@ HBlastRegRecord::HBlastRegRecord(QObject *parent) : QObject(parent)
 {
 }
 
-
 qint64 HBlastRegRecord::getId() const
 {
     return id;
@@ -195,7 +194,7 @@ void HBlastRegRecord::setUpdateBy(qint64 newUpdateBy)
     updateBy = newUpdateBy;
 }
 
-QByteArray HBlastRegRecord::RecordToJson(const HBlastRegRecord& record)
+QByteArray HBlastRegRecord::RecordToJson(const HBlastRegRecord &record)
 {
     QJsonObject json;
     json["id"] = record.getId();

+ 415 - 316
fireWidget/firingwidget.cpp

@@ -18,53 +18,51 @@
 #define ANSI_COLOR_GREEN "\x1B[32m"
 #define ANSI_COLOR_RESET "\x1B[0m"
 
-firingWidget::firingWidget(const int& row,const bool& select,const QString& uuid,QWidget *parent) :
-    QWidget(parent),
-    ui(new Ui::firingWidget),
-    m_uuid(uuid),
-    m_row(row),
-    m_select(select),
-    dao(DatabaseManager::getInstance().getDatabase()),
-    daoDet(DatabaseManager::getInstance().getDatabase()),
-    daoReg(DatabaseManager::getInstance().getDatabase())
+firingWidget::firingWidget(const int &row, const bool &select, const QString &uuid, QWidget *parent) : QWidget(parent),
+                                                                                                       ui(new Ui::firingWidget),
+                                                                                                       m_uuid(uuid),
+                                                                                                       m_row(row),
+                                                                                                       m_select(select),
+                                                                                                       dao(DatabaseManager::getInstance().getDatabase()),
+                                                                                                       daoDet(DatabaseManager::getInstance().getDatabase()),
+                                                                                                       daoReg(DatabaseManager::getInstance().getDatabase())
 {
     ui->setupUi(this);
 
     ui->pushButton_2->setText("立即测试");
     ui->textEdit->setStyleSheet("border: none;background: transparent;");
     ui->frame_2->setStyleSheet("border: none;background: transparent;");
-    QFrame *frame = ui->frame_2;  // 使用你为 QFrame 设置的对象名称
+    QFrame *frame = ui->frame_2; // 使用你为 QFrame 设置的对象名称
     navProgress = new NavProgress(frame);
     ui->verticalLayout->setContentsMargins(0, 30, 0, 0);
     ui->scrollArea->setStyleSheet("background: rgba(0, 0, 0, 22); border-radius: 20px;");
     ui->verticalLayout->addWidget(navProgress);
     mqttThread = new MqttThread(this);
-    QStringList topics = {"hxgc/"+uuid+"/B"};
-    mqttThread->setConnectionInfo("114.55.233.194", 1883, "hxgc", "hxgc123456", "P"+uuid, topics);
+    QStringList topics = {"hxgc/" + uuid + "/B"};
+    mqttThread->setConnectionInfo("114.55.233.194", 1883, "hxgc", "hxgc123456", "P" + uuid, topics);
     connect(mqttThread, &MqttThread::mqttConnected, this, &firingWidget::onMqttConnected);
     mqttThread->start();
     connect(mqttThread, &MqttThread::messageAndTopicReceived, this, &firingWidget::handleMessageAndTopic);
 
     connect(this, &firingWidget::lastStageChanged, this, &firingWidget::onLastStageChanged);
-    connect(this, &firingWidget::updateData, this, &firingWidget::saveProjDataAndUpload);
+    connect(this, &firingWidget::updateData, this, &firingWidget::onBlastSucess);
     startBlasting();
 }
 
-
-
 firingWidget::~firingWidget()
 {
     delete ui;
 }
 
-
-
-void firingWidget::sendMqttMessage(const QString& topic, const QByteArray& message)
+void firingWidget::sendMqttMessage(const QString &topic, const QByteArray &message)
 {
 
-    if (mqttThread  && m_isMqttConnected) {
+    if (mqttThread && m_isMqttConnected)
+    {
         emit mqttThread->sendMessageRequested(topic, message);
-    } else {
+    }
+    else
+    {
         qDebug() << "MQTT 未连接,无法发送消息";
     }
 }
@@ -72,59 +70,58 @@ void firingWidget::sendMqttMessage(const QString& topic, const QByteArray& messa
 void firingWidget::startBlasting()
 {
     // TODO 检测起爆器是否在线
-     QTimer::singleShot(1000, this, [this]() {
+    QTimer::singleShot(1000, this, [this]()
+                       {
          lastStage=0;
-         emit lastStageChanged(0);
-     });
-
+         emit lastStageChanged(0); });
 }
 
-
-
-void firingWidget::on_pushButton_2_clicked(){
-    emit countdown(m_uuid,topic,"message");
+void firingWidget::on_pushButton_2_clicked()
+{
+    emit countdown(m_uuid, topic, "message");
 }
 
+bool firingWidget::uploadToDanLing(const QJsonObject &jsonObj)
+{
 
-
-bool firingWidget::uploadToDanLing(const QJsonObject& jsonObj){
-
-   QString htid = jsonObj["project_htid"].toString();
-   QString htm = ""; //
-   QString xmbh = jsonObj["project_xmbh"].toString();
-   QString sbbh = jsonObj["equipment_sn"].toString();
-   QString bprysfz = jsonObj["operator_identity"].toString();
-   QString dwdm = jsonObj["company_code"].toString();
-   QString xtm = ""; //
-   QString jd = jsonObj["blast_longitude"].toString();
-   QString bpsj = jsonObj["blast_time"].toString();
-   QString wd = jsonObj["blast_latitude"].toString();
-   QStringList uidList;
-   QJsonArray regs = jsonObj["regs"].toArray();
-   for (const auto& reg : regs) {
-       QJsonObject regObj = reg.toObject();
-       QJsonArray dets = regObj["dets"].toArray();
-       for (const auto& det : dets) {
-           QJsonObject detObj = det.toObject();
-           uidList.append(detObj["uid"].toString());
-       }
-   }
-   QString uid = uidList.join(",");
-
-   QString plainText = QString("{\"htid\":\"%1\",\"htm\":\"%2\",\"xmbh\":\"%3\",\"sbbh\":\"%4\","
-                             "\"bprysfz\":\"%5\",\"dwdm\":\"%6\",\"xtm\":\"%7\",\"jd\":\"%8\","
-                             "\"bpsj\":\"%9\",\"wd\":\"%10\",\"uid\":\"%11\"}")
-                     .arg(htid)
-                     .arg(htm)
-                     .arg(xmbh)
-                     .arg(sbbh)
-                     .arg(bprysfz)
-                     .arg(dwdm)
-                     .arg(xtm)
-                     .arg(jd)
-                     .arg(bpsj)
-                     .arg(wd)
-                     .arg(uid);
+    QString htid = jsonObj["project_htid"].toString();
+    QString htm = ""; //
+    QString xmbh = jsonObj["project_xmbh"].toString();
+    QString sbbh = jsonObj["equipment_sn"].toString();
+    QString bprysfz = jsonObj["operator_identity"].toString();
+    QString dwdm = jsonObj["company_code"].toString();
+    QString xtm = ""; //
+    QString jd = jsonObj["blast_longitude"].toString();
+    QString bpsj = jsonObj["blast_time"].toString();
+    QString wd = jsonObj["blast_latitude"].toString();
+    QStringList uidList;
+    QJsonArray regs = jsonObj["regs"].toArray();
+    for (const auto &reg : regs)
+    {
+        QJsonObject regObj = reg.toObject();
+        QJsonArray dets = regObj["dets"].toArray();
+        for (const auto &det : dets)
+        {
+            QJsonObject detObj = det.toObject();
+            uidList.append(detObj["uid"].toString());
+        }
+    }
+    QString uid = uidList.join(",");
+
+    QString plainText = QString("{\"htid\":\"%1\",\"htm\":\"%2\",\"xmbh\":\"%3\",\"sbbh\":\"%4\","
+                                "\"bprysfz\":\"%5\",\"dwdm\":\"%6\",\"xtm\":\"%7\",\"jd\":\"%8\","
+                                "\"bpsj\":\"%9\",\"wd\":\"%10\",\"uid\":\"%11\"}")
+                            .arg(htid)
+                            .arg(htm)
+                            .arg(xmbh)
+                            .arg(sbbh)
+                            .arg(bprysfz)
+                            .arg(dwdm)
+                            .arg(xtm)
+                            .arg(jd)
+                            .arg(bpsj)
+                            .arg(wd)
+                            .arg(uid);
     Des3Encryption des3;
     QByteArray key = "jadl12345678912345678912";
     QByteArray encryptedData = des3.des3Encrypt(plainText.toUtf8(), key);
@@ -140,23 +137,28 @@ bool firingWidget::uploadToDanLing(const QJsonObject& jsonObj){
     QNetworkRequest request(url);
     request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
     QByteArray postData;
-    QNetworkReply *reply = manager.post(request,postData);
+    QNetworkReply *reply = manager.post(request, postData);
     QEventLoop loop;
     QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
     loop.exec();
-    if (reply->error() == QNetworkReply::NoError) {
+    if (reply->error() == QNetworkReply::NoError)
+    {
         QByteArray responseData = reply->readAll();
         qDebug() << "Response:" << QString(responseData);
-    } else {
+    }
+    else
+    {
         qDebug() << "Error:" << reply->errorString();
     }
     reply->deleteLater();
     return true;
 }
 
-bool firingWidget::addRegRecords(const QJsonObject& jsonObj) {
+bool firingWidget::recordBlastReg(const QJsonObject &jsonObj)
+{
     QJsonArray regsArray = jsonObj["regs"].toArray();
-    for (const auto& regValue : regsArray) {
+    for (const auto &regValue : regsArray)
+    {
         QJsonObject regObj = regValue.toObject();
         HBlastRegRecord recordReg;
         reg_uuid = QUuid::createUuid().toString(QUuid::WithoutBraces).remove(QRegularExpression("-"));
@@ -175,39 +177,9 @@ bool firingWidget::addRegRecords(const QJsonObject& jsonObj) {
         recordReg.setRecordUuid(blast_uuid);
         recordReg.setCreatedAt(QDateTime::currentDateTime());
         // 插入数据到数据库
-        if (!daoReg.saveHBlastRegRecord(recordReg)) {
+        if (!daoReg.saveHBlastRegRecord(recordReg))
+        {
             return false;
-        } else {
-        }
-    }
-    return true;
-}
-
-bool firingWidget::handleBlastFinishedMsg(const QJsonObject& jsonObj) {
-    QJsonArray regsArray = jsonObj["regs"].toArray();
-    for (const auto& regValue : regsArray) {
-        QJsonObject regObj = regValue.toObject();
-        QJsonArray detsArray = regObj["dets"].toArray();
-        for (const auto& detValue : detsArray) {
-            QJsonObject detObj = detValue.toObject();
-            HBlastRecordDet recordDet;
-
-            recordDet.setId(0);
-            recordDet.setUuid(QUuid::createUuid().toString(QUuid::WithoutBraces).remove(QRegularExpression("-")));
-            recordDet.setOutCode(detObj["out_code"].toString());
-            recordDet.setInnerCode(detObj["in_code"].toString());
-            recordDet.setUid(detObj["uid"].toString());
-            recordDet.setStatus(detObj["status"].toString());
-            recordDet.setFreq(detObj["freq"].toString());
-            recordDet.setDelayTime(detObj["delay_time"].toString());
-            recordDet.setTag(detObj["tag"].toString());
-            recordDet.setCreatedAt(QDateTime::currentDateTime());
-            recordDet.setBlastRecordId(blast_uuid);
-            recordDet.setRegId(reg_uuid);
-            recordDet.setCreatedAt(QDateTime::currentDateTime());
-            if (!daoDet.addHBlastRecordDet(recordDet)) {
-                return false;
-            }
         }
     }
     return true;
@@ -217,100 +189,107 @@ void firingWidget::handleMessageAndTopic(const QByteArray &message, const QMqttT
 {
 
     QString msgText = QString("Topic: %1, Message: %2").arg(topic.name(), QString(message));
-    QTextEdit *textEdit = ui->scrollAreaWidgetContents->findChild<QTextEdit*>("textEdit");
-    if (textEdit) {
+    QTextEdit *textEdit = ui->scrollAreaWidgetContents->findChild<QTextEdit *>("textEdit");
+    if (textEdit)
+    {
         textEdit->append(msgText);
     }
     int stage = 0;
     QJsonDocument jsonDoc = QJsonDocument::fromJson(message);
-    if (!jsonDoc.isNull() && jsonDoc.isObject()) {
+    if (!jsonDoc.isNull() && jsonDoc.isObject())
+    {
         QJsonObject jsonObj = jsonDoc.object();
-        if (jsonObj.contains("type") && jsonObj["type"].toInt() == 1) {
-            if (jsonObj.contains("data") && jsonObj["data"].isObject()) {
+        if (jsonObj.contains("type") && jsonObj["type"].toInt() == 1)
+        {
+            if (jsonObj.contains("data") && jsonObj["data"].isObject())
+            {
                 QJsonObject dataObject = jsonObj["data"].toObject();
                 stage = dataObject["stage"].toInt();
-                if (stage != lastStage) {
+                if (stage != lastStage)
+                {
                     lastStage = stage;
-                    switch (stage) {
-                        case 0:
-                            navProgress->setState(0);
-                            ui->pushButton_2->setText("立即测试");
-                            ui->pushButton_2->setEnabled(false);
-                            break;
-                        case 1:
-                            navProgress->setState(1);
-                            emit progressChanged(1,m_row);
-                            emit updateBlastStatus(1,m_row);
-                            ui->pushButton_2->setText("立即测试");
-                            ui->pushButton_2->setEnabled(false);
-                            break;
-                        case 2:
-                            ui->pushButton_2->setEnabled(true);
-                            emit progressChanged(2,m_row);
-                            emit updateBlastStatus(2,m_row);
-                            qDebug() << "stage:" << stage;
-                            ui->pushButton_2->setText("充电");
-                            navProgress->setState(2);
-                            break;
-                        case 3:
-                            ui->pushButton_2->setEnabled(false);
-                            emit progressChanged(3,m_row);
-                            emit updateBlastStatus(3,m_row);
-                            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("起爆");
-                            navProgress->setState(4);
-                            break;
-                        case 5:
-                            ui->pushButton_2->setEnabled(false);
-                            emit progressChanged(5,m_row);
-                            emit updateBlastStatus(5,m_row);
-                            emit updateButton(5,m_row);
-                            ui->pushButton_2->setText("起爆");
-                            navProgress->setState(5);
-                            break;
-                        case 6:
-                            ui->pushButton_2->setEnabled(false);
-                            emit progressChanged(6,m_row);
-                            emit updateBlastStatus(6,m_row);
-                            emit updateProjectStatus(m_uuid);
-                            ui->pushButton_2->setText("已完成起爆");
-                            navProgress->setState(6);
-                            break;
-                        case 7:
-                            qDebug() << "status:" << stage;
-                            ui->pushButton_2->setEnabled(false);
-                            emit progressChanged(0,m_row); // 发送进度值
-                            emit updateBlastStatus(0,m_row);//正在测试
-                            ui->pushButton_2->setText("已完成起爆");
-                            navProgress->setState(6);
-                            break;
-                        default:
-                            break;
+                    switch (stage)
+                    {
+                    case 0:
+                        navProgress->setState(0);
+                        ui->pushButton_2->setText("立即测试");
+                        ui->pushButton_2->setEnabled(false);
+                        break;
+                    case 1:
+                        navProgress->setState(1);
+                        emit progressChanged(1, m_row);
+                        emit updateBlastStatus(1, m_row);
+                        ui->pushButton_2->setText("立即测试");
+                        ui->pushButton_2->setEnabled(false);
+                        break;
+                    case 2:
+                        ui->pushButton_2->setEnabled(true);
+                        emit progressChanged(2, m_row);
+                        emit updateBlastStatus(2, m_row);
+                        qDebug() << "stage:" << stage;
+                        ui->pushButton_2->setText("充电");
+                        navProgress->setState(2);
+                        break;
+                    case 3:
+                        ui->pushButton_2->setEnabled(false);
+                        emit progressChanged(3, m_row);
+                        emit updateBlastStatus(3, m_row);
+                        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("起爆");
+                        navProgress->setState(4);
+                        break;
+                    case 5:
+                        ui->pushButton_2->setEnabled(false);
+                        emit progressChanged(5, m_row);
+                        emit updateBlastStatus(5, m_row);
+                        emit updateButton(5, m_row);
+                        ui->pushButton_2->setText("起爆");
+                        navProgress->setState(5);
+                        break;
+                    case 6:
+                        ui->pushButton_2->setEnabled(false);
+                        emit progressChanged(6, m_row);
+                        emit updateBlastStatus(6, m_row);
+                        emit updateProjectStatus(m_uuid);
+                        ui->pushButton_2->setText("已完成起爆");
+                        navProgress->setState(6);
+                        break;
+                    case 7:
+                        qDebug() << "status:" << stage;
+                        ui->pushButton_2->setEnabled(false);
+                        emit progressChanged(0, m_row);   // 发送进度值
+                        emit updateBlastStatus(0, m_row); // 正在测试
+                        ui->pushButton_2->setText("已完成起爆");
+                        navProgress->setState(6);
+                        break;
+                    default:
+                        break;
                     }
                     emit lastStageChanged(lastStage);
                 }
             }
         }
-        if (jsonObj.contains("type") && jsonObj["type"].toInt() == 2){
-            if (jsonObj.contains("data") && jsonObj["data"].isObject()) {
+        if (jsonObj.contains("type") && jsonObj["type"].toInt() == 2)
+        {
+            if (jsonObj.contains("data") && jsonObj["data"].isObject())
+            {
                 QJsonObject dataObject = jsonObj["data"].toObject();
                 emit updateData(dataObject);
                 emit closeFiring(m_uuid);
             }
         }
-
     }
 }
 
-void firingWidget::onCountdownFinished(const QString &topic,const QString &message){
+void firingWidget::onCountdownFinished(const QString &topic, const QString &message)
+{
     sendMqttMessage(topic, message.toUtf8());
-
 }
 
 void firingWidget::onMqttConnected()
@@ -318,101 +297,115 @@ void firingWidget::onMqttConnected()
     m_isMqttConnected = true;
 }
 
-void firingWidget::onButtonPressedReceived(const QString &topic,const QString &message)
+void firingWidget::onButtonPressedReceived(const QString &topic, const QString &message)
 {
     QByteArray data = "\r\nDISABLE_BUTTON\r\n";
     // 调用发送数据的方法
     bool success = serialTool->sendData(data);
-    if (success) {
+    if (success)
+    {
         qDebug() << "Data sent successfully";
-    } else {
+    }
+    else
+    {
         qDebug() << "Failed to send data";
     }
-    emit countdown(m_uuid,topic,message);
-
-
+    emit countdown(m_uuid, topic, message);
 }
 
 // 状态改变
 void firingWidget::onLastStageChanged(int newStage)
 {
-     QString topic = "hxgc/"+m_uuid+"/P";
-      QString message;
-      QString buttonText;
-      switch (lastStage) {
-        case 0:
-            message = "起爆测试";
-            buttonText = "立即测试";
-            sendMqttMessage(topic, message.toUtf8());
-            break;
-        case 2:
-            message = "开始充电";
-            buttonText = "充电";
-            sendMqttMessage(topic, message.toUtf8());
-            break;
-        case 4:
-            message = "起爆";
-            buttonText = "起爆";
-            break;
-        case 5:
-            if(!m_select){
-                if (connection) {
-                    disconnect(connection);
-                    qDebug() << "Connection disconnected.";
-                }
-                if (connectionPress) {
-                    disconnect(connectionPress);
-                    qDebug() << "connectionPress disconnected.";
-                }
-                serialTool->releaseInstance();
+    QString topic = "hxgc/" + m_uuid + "/P";
+    QString message;
+    QString buttonText;
+    switch (lastStage)
+    {
+    case 0:
+        message = "起爆测试";
+        buttonText = "立即测试";
+        sendMqttMessage(topic, message.toUtf8());
+        break;
+    case 2:
+        message = "开始充电";
+        buttonText = "充电";
+        sendMqttMessage(topic, message.toUtf8());
+        break;
+    case 4:
+        message = "起爆";
+        buttonText = "起爆";
+        break;
+    case 5:
+        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;
+        qDebug() << ANSI_COLOR_GREEN << "释放按键 5" << ANSI_COLOR_RESET;
 
-          break;
-        default:
+        break;
+    default:
 
-            return;
-     }
+        return;
+    }
 
-     if (!message.isEmpty()) {
-         if(lastStage == 4 && !m_select){
+    if (!message.isEmpty())
+    {
+        if (lastStage == 4 && !m_select)
+        {
             bool success2;
             serialTool = SerialTool::getInstance(nullptr, &success2);
-            if(serialTool){
+            if (serialTool)
+            {
                 QByteArray data = "\r\nENABLE_BUTTON\r\n";
                 bool success = serialTool->sendData(data);
-                if (success) {
+                if (success)
+                {
                     qDebug() << "Data sent successfully";
-                } else {
+                }
+                else
+                {
                     qDebug() << "Failed to send data";
                 }
-                connection =connect(serialTool, &SerialTool::enableButtonReceived, [this]() {
-                    emit updateBlastStatus(10,m_row);
-                });
-                connectionPress = connect(serialTool, &SerialTool::buttonPressedReceived,[this, topic, message]() {
-                    this->onButtonPressedReceived(topic, message);
-                });
-
-            }else {
+                connection = connect(serialTool, &SerialTool::enableButtonReceived, [this]()
+                                     { emit updateBlastStatus(10, m_row); });
+                connectionPress = connect(serialTool, &SerialTool::buttonPressedReceived, [this, topic, message]()
+                                          { this->onButtonPressedReceived(topic, message); });
+            }
+            else
+            {
                 qDebug() << "serialTool Not fond.";
-                //在准备起爆状态下 但是没有获取串口
+                // 在准备起爆状态下 但是没有获取串口
                 lastStage = 10;
             }
-        }else if(lastStage == 4&&m_select){
-             qDebug() << "多台起爆:待起爆状态";
-             emit selectSignal(m_uuid);
-         }else{//????
-                qDebug() << "Stage 值变为: " << newStage<<"发送消息"<<message.toUtf8();
-         }
-      }
-
+        }
+        else if (lastStage == 4 && m_select)
+        {
+            qDebug() << "多台起爆:待起爆状态";
+            emit selectSignal(m_uuid);
+        }
+        else
+        { //????
+            qDebug() << "Stage 值变为: " << newStage << "发送消息" << message.toUtf8();
+        }
+    }
 }
 
 void firingWidget::cancelBlasting()
 {
     QString message = "取消流程";
-    if (!message.isEmpty()) {
+    if (!message.isEmpty())
+    {
         sendMqttMessage(topic, message.toUtf8());
     }
 }
@@ -427,7 +420,8 @@ void firingWidget::on_sendTest_4_clicked()
     lat = labLat;
     lon = labLon;
     QSqlDatabase db = DatabaseManager::getInstance().getDatabase();
-    if (!db.transaction()) {
+    if (!db.transaction())
+    {
         qDebug() << "Failed to start transaction:" << db.lastError().text();
         // return false;
     }
@@ -488,7 +482,7 @@ void firingWidget::on_sendTest_4_clicked()
 
     QJsonDocument doc = QJsonDocument::fromJson(jsonData.toUtf8());
     QJsonObject jsonObj = doc.object();
-     // 创建 HBlastRecord 对象
+    // 创建 HBlastRecord 对象
     HBlastRecord record;
     record.setProjectName(jsonObj["project_name"].toString());
     record.setProjectHtid(jsonObj["project_htid"].toString());
@@ -509,7 +503,7 @@ void firingWidget::on_sendTest_4_clicked()
     record.setErrorDetCount(jsonObj["error_deto_count"].toInt());
     record.setBlastAt(QDateTime::fromString(jsonObj["blast_time"].toString(), "yyyy-MM-dd hh:mm:ss"));
     record.setCreatedAt(QDateTime::currentDateTime());
-    qDebug() << "currentDateTime."<<QDateTime::currentDateTime();
+    qDebug() << "currentDateTime." << QDateTime::currentDateTime();
 
     record.setUuid(QUuid::createUuid().toString(QUuid::WithoutBraces).remove(QRegularExpression("-")));
 
@@ -536,26 +530,37 @@ void firingWidget::on_sendTest_4_clicked()
 
     // db.commit();
 
-
-    if(lat=="定位失败"&&lat=="未知"&&lon=="定位失败"&&lon=="未知"){
+    if (lat == "定位失败" && lat == "未知" && lon == "定位失败" && lon == "未知")
+    {
         // 数据出本地 不传丹灵
-        if (dao.addHBlastRecord(record)) {
+        if (dao.addHBlastRecord(record))
+        {
             qDebug() << "Record inserted successfully.";
-        }else{
+        }
+        else
+        {
             qDebug() << "Failed to insert record.";
         }
-        if (!handleBlastFinishedMsg(jsonObj)) {
+        if (!recordDetsData(jsonObj))
+        {
             qDebug() << "Insert failed for UID:"; // 假设 record 有 uid 成员
-            if (db.rollback()) {
+            if (db.rollback())
+            {
                 qDebug() << "Transaction rolled back successfully.";
-            } else {
+            }
+            else
+            {
                 qDebug() << "Failed to roll back transaction:" << db.lastError().text();
             }
         }
-        if (!addRegRecords(jsonObj)) {
-            if (db.rollback()) {
+        if (!recordBlastReg(jsonObj))
+        {
+            if (db.rollback())
+            {
                 qDebug() << "Transaction rolled back successfully.";
-            } else {
+            }
+            else
+            {
                 qDebug() << "Failed to roll back transaction:" << db.lastError().text();
             }
         }
@@ -570,80 +575,174 @@ void firingWidget::on_sendTest_4_clicked()
     //   }
 }
 
-void firingWidget::saveProjDataAndUpload(const QJsonObject& jsonObj){
-    blast_uuid =QUuid::createUuid().toString(QUuid::WithoutBraces).remove(QRegularExpression("-"));
+// 处理爆破成功,安全验证装置通过MQTT传回的数据
+void firingWidget::onBlastSucess(const QJsonObject &jsonObj)
+{
+    Logger::getInstance().info(QString("收到爆破完成回传记录. data: %1").arg(QJsonDocument(jsonObj).toJson(QJsonDocument::Indented)));
+    blast_uuid = QUuid::createUuid().toString(QUuid::WithoutBraces).remove(QRegularExpression("-"));
     lat = labLat;
     lon = labLon;
-    qDebug() << "爆破记录"<< QJsonDocument( jsonObj).toJson(QJsonDocument::Indented);
-    Logger::getInstance().info("收到爆破完成回传记录");
 
     saveDataToLocalDB(jsonObj);
+    uploadToServer(jsonObj);
 
-   if(lat=="定位失败"&&lat=="未知"&&lon=="定位失败"&&lon=="未知"){
-       // 数据出本地 不传丹灵
+    if (lat == "定位失败" && lat == "未知" && lon == "定位失败" && lon == "未知"){
+        QMessageBox::critical(nullptr, "错误", "未获取有效定位数据,数据将暂不上传丹灵");
+        // 数据:存本地 不传丹灵
+    }
+    // TODO location数据如果错误,不提交丹灵
+    // danUpload(jsonObj);
+    // if (db.commit()) {
+    //       qDebug() << "Transaction committed successfully.";
+    //   } else {
+    //       qDebug() << "Failed to commit transaction:" << db.lastError().text();
+    //   }
+}
 
-   }
-   // danUpload(jsonObj);
-   // if (db.commit()) {
-   //       qDebug() << "Transaction committed successfully.";
-   //   } else {
-   //       qDebug() << "Failed to commit transaction:" << db.lastError().text();
-   //   }
+/* 
+	Id               int                              `json:"-" comment:"主键编码"` // 主键编码
+	Uuid             string                           `json:"uuid" comment:""`
+	ProjectName      string                           `json:"project_name" comment:"工程名称"`
+	ProjectHtid      string                           `json:"project_htid" comment:"合同编号"`
+	ProjectXmbh      string                           `json:"project_xmbh" comment:"项目编号"`
+	OperatorName     string                           `json:"operator_name" comment:"操作员"`
+	Phone            string                           `json:"phone" comment:"操作员电话"`
+	OperatorIdentity string                           `json:"operator_identity" comment:"操作员身份证"`
+	EquipmentSn      string                           `json:"equipment_sn" comment:"设备序列号"`
+	CompanyCode      string                           `json:"company_code" comment:"公司代码"`
+	AppVersion       string                           `json:"app_version" comment:"app版本"`
+	Longitude        string                           `json:"blast_longitude" comment:"经度"`
+	Latitude         string                           `json:"blast_latitude" comment:"纬度"`
+	EquipmentCount   string                           `json:"equipment_count" comment:"设备数量"`
+	RegDetCount      string                           `json:"reg_deto_count" comment:"注册雷管数量"`
+	ErrorDetCount    string                           `json:"error_deto_count" comment:"异常雷管数量"`
+	BlastAt          string                           `json:"blast_time" comment:"爆破时间"`
+	Regs             []HBlastRecordEquipmentInsertReq `json:"regs"`
+	WBlasterId       string                           `json:"w_blaster_id"`
+*/
+void firingWidget::uploadToServer(const QJsonObject &jsonObj)
+{
+    // upload blast project
+    // upload blast reg dets
+    // upload blast dets data
 }
 
-void saveDataToLocalDB(const QJsonObject jsonObj) {
+void firingWidget::saveDataToLocalDB(const QJsonObject &jsonObj)
+{
     QSqlDatabase db = DatabaseManager::getInstance().getDatabase();
-    if (!db.transaction()) {
-        qDebug() << "Failed to start transaction:" << db.lastError().text();
+    if (!db.transaction())
+    {
+        Logger::getInstance().critical(QString("Failed to start DB trasaction. Error: %1").arg(db.lastError().text()));
+        return;
     }
 
-   HBlastRecord record;
-   record.setProjectName(jsonObj["project_name"].toString());
-   record.setProjectHtid(jsonObj["project_htid"].toString());
-   record.setProjectXmbh(jsonObj["project_xmbh"].toString());
-   record.setOperatorName(jsonObj["operator_name"].toString());
-   record.setPhone(jsonObj["phone"].toString());
-   record.setOperatorIdentity(jsonObj["operator_identity"].toString());
-   record.setEquipmentSn(jsonObj["equipment_sn"].toString());
-   record.setCompanyCode(jsonObj["company_code"].toString());
-   record.setAppVersion(jsonObj["app_version"].toString());
-
-   record.setLongitude(jsonObj["blast_longitude"].toString());
-   record.setLatitude(jsonObj["blast_latitude"].toString());
-
-   //record.setLongitude(lat);
-   //record.setLatitude(lon);
-   record.setRegDetCount(jsonObj["reg_deto_count"].toString().toInt());
-   record.setErrorDetCount(jsonObj["error_deto_count"].toString().toInt());
-   QDateTime blastTime = QDateTime::fromString(jsonObj["blast_time"].toString(), "yyyy-MM-dd hh:mm:ss +08:00");
-   blastTime.setTimeZone(QTimeZone(QByteArrayLiteral("Asia/Shanghai")));
-   record.setBlastAt(blastTime);
-   record.setCreatedAt(QDateTime::currentDateTime());
-   qDebug() << "currentDateTime."<<QDateTime::currentDateTime();
-   record.setUuid(blast_uuid);
-
-   if (dao.addHBlastRecord(record)) {
-       qDebug() << "Record inserted successfully.";
-   }else{
-       qDebug() << "Failed to insert record.";
-   }
-
-   if (!addRegRecords(jsonObj)) {
-       if (db.rollback()) {
-           qDebug() << "Transaction rolled back successfully.";
-       } else {
-           qDebug() << "Failed to roll back transaction:" << db.lastError().text();
-       }
-   }
-   if (!recordDetUsages(jsonObj)) {
-       qDebug() << "Insert failed for UID:"; // 假设 record 有 uid 成员
-       if (db.rollback()) {
-           qDebug() << "Transaction rolled back successfully.";
-       } else {
-           qDebug() << "Failed to roll back transaction:" << db.lastError().text();
-       }
-   }
-
-   db.commit();
+    if (!recordBlastData(jsonObj))
+    {
+        if (db.rollback())
+        {
+            qDebug() << "Transaction rolled back successfully.";
+        }
+        else
+        {
+            qDebug() << "Failed to roll back transaction:" << db.lastError().text();
+        }
+    }
+    if (!recordBlastReg(jsonObj))
+    {
+        if (db.rollback())
+        {
+            qDebug() << "Transaction rolled back successfully.";
+        }
+        else
+        {
+            qDebug() << "Failed to roll back transaction:" << db.lastError().text();
+        }
+    }
+    if (!recordDetsData(jsonObj))
+    {
+        qDebug() << "Insert failed for UID:"; // 假设 record 有 uid 成员
+        if (db.rollback())
+        {
+            qDebug() << "Transaction rolled back successfully.";
+        }
+        else
+        {
+            qDebug() << "Failed to roll back transaction:" << db.lastError().text();
+        }
+    }
+
+    db.commit();
+}
 
+HBlastRecord* firingWidget::recordBlastData(const QJsonObject &jsonObj)
+{
+    HBlastRecord record;
+    record.setProjectName(jsonObj["project_name"].toString());
+    record.setProjectHtid(jsonObj["project_htid"].toString());
+    record.setProjectXmbh(jsonObj["project_xmbh"].toString());
+    record.setOperatorName(jsonObj["operator_name"].toString());
+    record.setPhone(jsonObj["phone"].toString());
+    record.setOperatorIdentity(jsonObj["operator_identity"].toString());
+    record.setEquipmentSn(jsonObj["equipment_sn"].toString());
+    record.setCompanyCode(jsonObj["company_code"].toString());
+    record.setAppVersion(jsonObj["app_version"].toString());
+
+    record.setLongitude(jsonObj["blast_longitude"].toString());
+    record.setLatitude(jsonObj["blast_latitude"].toString());
+
+    // record.setLongitude(lat);
+    // record.setLatitude(lon);
+    record.setRegDetCount(jsonObj["reg_deto_count"].toString().toInt());
+    record.setErrorDetCount(jsonObj["error_deto_count"].toString().toInt());
+    QDateTime blastTime = QDateTime::fromString(jsonObj["blast_time"].toString(), "yyyy-MM-dd hh:mm:ss +08:00");
+    blastTime.setTimeZone(QTimeZone(QByteArrayLiteral("Asia/Shanghai")));
+    record.setBlastAt(blastTime);
+    record.setCreatedAt(QDateTime::currentDateTime());
+    qDebug() << "currentDateTime." << QDateTime::currentDateTime();
+    record.setUuid(blast_uuid);
+
+    if (dao.addHBlastRecord(record))
+    {
+        qDebug() << "Record inserted successfully.";
+        return &record;
+    }
+    else
+    {
+        qDebug() << "Failed to insert record.";
+        return nullptr;
+    }
+}
+
+bool firingWidget::recordDetsData(const QJsonObject &jsonObj)
+{
+    QJsonArray regsArray = jsonObj["regs"].toArray();
+    for (const auto &regValue : regsArray)
+    {
+        QJsonObject regObj = regValue.toObject();
+        QJsonArray detsArray = regObj["dets"].toArray();
+        for (const auto &detValue : detsArray)
+        {
+            QJsonObject detObj = detValue.toObject();
+            HBlastRecordDet recordDet;
+
+            recordDet.setId(0);
+            recordDet.setUuid(QUuid::createUuid().toString(QUuid::WithoutBraces).remove(QRegularExpression("-")));
+            recordDet.setOutCode(detObj["out_code"].toString());
+            recordDet.setInnerCode(detObj["in_code"].toString());
+            recordDet.setUid(detObj["uid"].toString());
+            recordDet.setStatus(detObj["status"].toString());
+            recordDet.setFreq(detObj["freq"].toString());
+            recordDet.setDelayTime(detObj["delay_time"].toString());
+            recordDet.setTag(detObj["tag"].toString());
+            recordDet.setCreatedAt(QDateTime::currentDateTime());
+            recordDet.setBlastRecordId(blast_uuid);
+            recordDet.setRegId(reg_uuid);
+            recordDet.setCreatedAt(QDateTime::currentDateTime());
+            if (!daoDet.addHBlastRecordDet(recordDet))
+            {
+                return false;
+            }
+        }
+    }
+    return true;
 }

+ 22 - 19
fireWidget/firingwidget.h

@@ -14,8 +14,9 @@
 #include "../mqttthread.h"
 #include "../serial/serialtool.h"
 
-namespace Ui {
-class firingWidget;
+namespace Ui
+{
+    class firingWidget;
 }
 
 class firingWidget : public QWidget
@@ -23,7 +24,7 @@ class firingWidget : public QWidget
     Q_OBJECT
 
 public:
-    explicit firingWidget(const int& row ,const bool& select ,const QString& uuid = "",QWidget *parent = nullptr);
+    explicit firingWidget(const int &row, const bool &select, const QString &uuid = "", QWidget *parent = nullptr);
     ~firingWidget();
     void cancelBlasting();
 
@@ -35,27 +36,30 @@ private slots:
     void handleMessageAndTopic(const QByteArray &message, const QMqttTopicName &topic);
 
 signals:
-    void progressChanged(int value,int row);
+    void progressChanged(int value, int row);
     void lastStageChanged(int newStage);
-    void updateBlastStatus(int status,int row);
+    void updateBlastStatus(int status, int row);
     void selectSignal(QString uuid);
-    void updateButton(int status,int row);
+    void updateButton(int status, int row);
     void updateProjectStatus(QString uuid);
     void updateData(const QJsonObject &jsonObj);
-    void countdown(QString uuid,const QString &topic,const QString &message);
+    void countdown(QString uuid, const QString &topic, const QString &message);
     void closeFiring(QString uuid);
 private slots:
     // 处理 MQTT 连接成功的槽函数
     void onMqttConnected();
-    //双键按下
-    void onButtonPressedReceived(const QString &topic,const QString &message);
+    // 双键按下
+    void onButtonPressedReceived(const QString &topic, const QString &message);
     void onLastStageChanged(int newStage);
-    void saveProjDataAndUpload(const QJsonObject &data);
+    void onBlastSucess(const QJsonObject &data);
+
 private:
-    bool addRegRecords(const QJsonObject &jsonObj);
-    bool handleBlastFinishedMsg(const QJsonObject &jsonObj);
+    bool recordBlastReg(const QJsonObject &jsonObj);
+    bool recordDetsData(const QJsonObject &jsonObj);
     bool uploadToDanLing(const QJsonObject &jsonObj);
-    void saveDataToLocalD(const QJsonObject &jsonObj);
+    HBlastRecord* recordBlastData(const QJsonObject &jsonObj);
+    void saveDataToLocalDB(const QJsonObject &jsonObj);
+    void uploadToServer(const QJsonObject &jsonObj);
     void sendMqttMessage(const QString &topic, const QByteArray &message);
     void startBlasting();
 
@@ -66,21 +70,20 @@ private:
     HBlastRecordDetDao daoDet;
     HBlastRegRecordDao daoReg;
     NavProgress *navProgress;
-    MqttThread* mqttThread;
-    SerialTool* serialTool=nullptr;
-    QString m_uuid; // 用于存储 uuid
-    QString reg_uuid; // 用于存储 uuid
+    MqttThread *mqttThread;
+    SerialTool *serialTool = nullptr;
+    QString m_uuid;     // 用于存储 uuid
+    QString reg_uuid;   // 用于存储 uuid
     QString blast_uuid; // 用于存储 uuid
     QString topic;
     int m_row;
-    int lastStage = -1;  // 用于记录上一次的 stage 状态
+    int lastStage = -1; // 用于记录上一次的 stage 状态
     bool m_isMqttConnected = false;
     bool m_select;
     QMetaObject::Connection connection; // 声明 connection 变量
     QMetaObject::Connection connectionPress;
     QString lat;
     QString lon;
-
 };
 
 #endif // FIRINGWIDGET_H