浏览代码

feat: blast record data upload

Yao 1 周之前
父节点
当前提交
66a48edb12

+ 36 - 79
backendapimanager.cpp

@@ -1,64 +1,51 @@
 #include "backendapimanager.h"
+
 #include <QEventLoop>
 
 backendAPIManager *backendAPIManager::s_instance = nullptr;
 
-void backendAPIManager::initialize(const QString &backendUrl)
-{
-    if (!s_instance)
-    {
+void backendAPIManager::initialize(const QString &backendUrl) {
+    if (!s_instance) {
         s_instance = new backendAPIManager(backendUrl);
     }
 }
 
-void backendAPIManager::cleanup()
-{
-    if (s_instance)
-    {
+void backendAPIManager::cleanup() {
+    if (s_instance) {
         delete s_instance;
         s_instance = nullptr;
     }
 }
 
-void backendAPIManager::setAuthToken(const QString &token)
-{
-    qDebug() << "Setting auth token:" << token << s_instance;
-    if (s_instance)
-    {
+void backendAPIManager::setAuthToken(const QString &token) {
+    if (s_instance) {
         s_instance->authToken = token;
     }
 }
 
 backendAPIManager::backendAPIManager(const QString &backendUrl, QObject *parent)
-    : QObject(parent), backendUrl(backendUrl), requestSuccess(false)
-{
+    : QObject(parent), backendUrl(backendUrl), requestSuccess(false) {
     networkManager = new QNetworkAccessManager(this);
 }
 
-backendAPIManager::~backendAPIManager()
-{
-    if (networkManager)
-    {
+backendAPIManager::~backendAPIManager() {
+    if (networkManager) {
         delete networkManager;
         networkManager = nullptr;
     }
 }
 
-void backendAPIManager::setupRequest(QNetworkRequest &request, const QString &endpoint)
-{
+void backendAPIManager::setupRequest(QNetworkRequest &request, const QString &endpoint) {
     request.setUrl(QUrl(backendUrl + endpoint));
     request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
 
-    if (!s_instance->authToken.isEmpty())
-    {
+    if (!s_instance->authToken.isEmpty()) {
         request.setRawHeader("Authorization", s_instance->authToken.toUtf8());
     }
 }
 
-QNetworkReply *backendAPIManager::sendRequest(const QString &endpoint,
-                                              const QJsonObject &data,
-                                              const QString &method)
-{
+QNetworkReply *backendAPIManager::sendRequest(const QString &endpoint, const QJsonObject &data,
+                                              const QString &method) {
     QNetworkRequest request;
     setupRequest(request, endpoint);
 
@@ -66,30 +53,21 @@ QNetworkReply *backendAPIManager::sendRequest(const QString &endpoint,
     QByteArray jsonData = doc.toJson();
 
     QNetworkReply *reply = nullptr;
-    if (method == "GET")
-    {
+    if (method == "GET") {
         reply = networkManager->get(request);
-    }
-    else if (method == "POST")
-    {
+    } else if (method == "POST") {
         reply = networkManager->post(request, jsonData);
-    }
-    else if (method == "PUT")
-    {
+    } else if (method == "PUT") {
         reply = networkManager->put(request, jsonData);
-    }
-    else if (method == "DELETE")
-    {
+    } else if (method == "DELETE") {
         reply = networkManager->deleteResource(request);
     }
 
     return reply;
 }
 
-bool backendAPIManager::uploadBlastProject(const QJsonObject &projectData)
-{
-    if (!s_instance)
-        return false;
+bool backendAPIManager::uploadBlastProject(const QJsonObject &projectData) {
+    if (!s_instance) return false;
 
     s_instance->requestSuccess = false;
     QNetworkReply *reply = s_instance->sendRequest("blastrecord/pc", projectData, "POST");
@@ -99,43 +77,32 @@ bool backendAPIManager::uploadBlastProject(const QJsonObject &projectData)
     QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
     loop.exec();
 
-    if (reply->error() == QNetworkReply::NoError)
-    {
+    if (reply->error() == QNetworkReply::NoError) {
         QJsonDocument response = QJsonDocument::fromJson(reply->readAll());
-        qDebug() << "Upload response:" << response;
         s_instance->handleUploadFinished(response, reply->url());
-    }
-    else
-    {
-        qDebug() << "Upload error:" << reply->errorString();
+    } else {
         s_instance->handleUploadError(reply->errorString());
     }
 
     reply->deleteLater();
-    qDebug() << "Uploading blast project data:" << projectData << "result" << s_instance->requestSuccess;
     return s_instance->requestSuccess;
 }
 
-bool backendAPIManager::uploadBlastDet(const QJsonObject &detsData)
-{
-    if (!s_instance)
-        return false;
+bool backendAPIManager::uploadBlastProjectDets(const QJsonObject &detsData) {
+    if (!s_instance) return false;
 
     s_instance->requestSuccess = false;
-    QNetworkReply *reply = s_instance->sendRequest("/blastrecorddet", detsData, "POST");
+    QNetworkReply *reply = s_instance->sendRequest("blastrecorddet/batch", detsData, "POST");
 
     // 使用事件循环等待响应
     QEventLoop loop;
     QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
     loop.exec();
 
-    if (reply->error() == QNetworkReply::NoError)
-    {
+    if (reply->error() == QNetworkReply::NoError) {
         QJsonDocument response = QJsonDocument::fromJson(reply->readAll());
         s_instance->handleUploadFinished(response, reply->url());
-    }
-    else
-    {
+    } else {
         s_instance->handleUploadError(reply->errorString());
     }
 
@@ -143,26 +110,21 @@ bool backendAPIManager::uploadBlastDet(const QJsonObject &detsData)
     return s_instance->requestSuccess;
 }
 
-bool backendAPIManager::uploadBlastEquipments(const QJsonObject &regDetsData)
-{
-    if (!s_instance)
-        return false;
+bool backendAPIManager::uploadBlastEquipments(const QJsonObject &regDetsData) {
+    if (!s_instance) return false;
 
     s_instance->requestSuccess = false;
-    QNetworkReply *reply = s_instance->sendRequest("/blastrecorddet", regDetsData, "POST");
+    QNetworkReply *reply = s_instance->sendRequest("blastrecordequipment", regDetsData, "POST");
 
     // 使用事件循环等待响应
     QEventLoop loop;
     QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
     loop.exec();
 
-    if (reply->error() == QNetworkReply::NoError)
-    {
+    if (reply->error() == QNetworkReply::NoError) {
         QJsonDocument response = QJsonDocument::fromJson(reply->readAll());
         s_instance->handleUploadFinished(response, reply->url());
-    }
-    else
-    {
+    } else {
         s_instance->handleUploadError(reply->errorString());
     }
 
@@ -170,24 +132,19 @@ bool backendAPIManager::uploadBlastEquipments(const QJsonObject &regDetsData)
     return s_instance->requestSuccess;
 }
 
-void backendAPIManager::handleUploadFinished(const QJsonDocument &response, const QUrl &url)
-{
+void backendAPIManager::handleUploadFinished(const QJsonDocument &response, const QUrl &url) {
     // Check response status
-    if (response.object().contains("code"))
-    {
+    if (response.object().contains("code")) {
         int code = response.object()["code"].toInt();
         requestSuccess = (code == 200);
-    }
-    else
-    {
+    } else {
         requestSuccess = false;
     }
 
     emit uploadFinished(response);
 }
 
-void backendAPIManager::handleUploadError(const QString &error)
-{
+void backendAPIManager::handleUploadError(const QString &error) {
     requestSuccess = false;
     emit uploadError(error);
 }

+ 10 - 12
backendapimanager.h

@@ -1,37 +1,35 @@
 #ifndef BACKENDAPIMANAGER_H
 #define BACKENDAPIMANAGER_H
 
-#include <QObject>
-#include <QJsonObject>
 #include <QJsonDocument>
+#include <QJsonObject>
 #include <QNetworkAccessManager>
 #include <QNetworkReply>
 #include <QNetworkRequest>
+#include <QObject>
 
-class backendAPIManager : public QObject
-{
+class backendAPIManager : public QObject {
     Q_OBJECT
 
-public:
+   public:
     static void initialize(const QString &backendUrl);
     static void cleanup();
     static void setAuthToken(const QString &token);
 
     static bool uploadBlastProject(const QJsonObject &projectData);
-    static bool uploadBlastDet(const QJsonObject &detsData);
+    static bool uploadBlastProjectDets(const QJsonObject &detsData);
     static bool uploadBlastEquipments(const QJsonObject &regDetsData);
 
-signals:
+   signals:
     void uploadFinished(const QJsonDocument &response);
     void uploadError(const QString &errorString);
 
-private:
+   private:
     explicit backendAPIManager(const QString &backendUrl, QObject *parent = nullptr);
     ~backendAPIManager();
 
     // HTTP methods
-    QNetworkReply *sendRequest(const QString &endpoint,
-                               const QJsonObject &data,
+    QNetworkReply *sendRequest(const QString &endpoint, const QJsonObject &data,
                                const QString &method = "POST");
     void setupRequest(QNetworkRequest &request, const QString &endpoint);
     void handleNetworkReply(QNetworkReply *reply);
@@ -42,9 +40,9 @@ private:
     bool requestSuccess;
     QString authToken;
 
-private slots:
+   private slots:
     void handleUploadFinished(const QJsonDocument &response, const QUrl &url);
     void handleUploadError(const QString &error);
 };
 
-#endif // BACKENDAPIMANAGER_H
+#endif  // BACKENDAPIMANAGER_H

+ 7 - 8
blastRecordDet/HBlastRecordDet.h

@@ -1,13 +1,12 @@
 #ifndef HBLASTRECORDDET_H
 #define HBLASTRECORDDET_H
 
-#include <QString>
 #include <QDateTime>
-#include <QJsonObject>
 #include <QJsonDocument>
+#include <QJsonObject>
+#include <QString>
 #include <QUuid>
-class HBlastRecordDet : public QObject
-{
+class HBlastRecordDet : public QObject {
     Q_OBJECT
     // 定义属性
     Q_PROPERTY(qint64 id READ getId WRITE setId)
@@ -26,7 +25,7 @@ class HBlastRecordDet : public QObject
     Q_PROPERTY(QDateTime deletedAt READ getDeletedAt WRITE setDeletedAt)
     Q_PROPERTY(qint64 createBy READ getCreateBy WRITE setCreateBy)
     Q_PROPERTY(qint64 updateBy READ getUpdateBy WRITE setUpdateBy)
-public:
+   public:
     explicit HBlastRecordDet(QObject *parent = nullptr);
 
     // Getter and Setter methods
@@ -78,9 +77,9 @@ public:
     qint64 getUpdateBy() const;
     void setUpdateBy(qint64 newUpdateBy);
 
-    QJsonObject BlastRecordDetToJson();
+    QJsonObject ToJson();
 
-private:
+   private:
     qint64 id;
     QString uuid;
     QString outCode;
@@ -99,4 +98,4 @@ private:
     qint64 updateBy;
 };
 
-#endif // HBLASTRECORDDET_H
+#endif  // HBLASTRECORDDET_H

+ 37 - 133
blastRecordDet/hblastrecorddet.cpp

@@ -1,183 +1,87 @@
 #include "hblastrecorddet.h"
 
-HBlastRecordDet::HBlastRecordDet(QObject *parent) : QObject(parent)
-{
+HBlastRecordDet::HBlastRecordDet(QObject *parent) : QObject(parent) {
     // 可以在这里进行一些初始化操作
 }
 
-qint64 HBlastRecordDet::getId() const
-{
-    return id;
-}
+qint64 HBlastRecordDet::getId() const { return id; }
 
-void HBlastRecordDet::setId(qint64 newId)
-{
-    id = newId;
-}
+void HBlastRecordDet::setId(qint64 newId) { id = newId; }
 
-QString HBlastRecordDet::getUuid() const
-{
-    return uuid;
-}
+QString HBlastRecordDet::getUuid() const { return uuid; }
 
-void HBlastRecordDet::setUuid(const QString &newUuid)
-{
-    uuid = newUuid;
-}
+void HBlastRecordDet::setUuid(const QString &newUuid) { uuid = newUuid; }
 
-QString HBlastRecordDet::getOutCode() const
-{
-    return outCode;
-}
+QString HBlastRecordDet::getOutCode() const { return outCode; }
 
-void HBlastRecordDet::setOutCode(const QString &newOutCode)
-{
-    outCode = newOutCode;
-}
+void HBlastRecordDet::setOutCode(const QString &newOutCode) { outCode = newOutCode; }
 
-QString HBlastRecordDet::getInnerCode() const
-{
-    return innerCode;
-}
+QString HBlastRecordDet::getInnerCode() const { return innerCode; }
 
-void HBlastRecordDet::setInnerCode(const QString &newInnerCode)
-{
-    innerCode = newInnerCode;
-}
+void HBlastRecordDet::setInnerCode(const QString &newInnerCode) { innerCode = newInnerCode; }
 
-QString HBlastRecordDet::getUid() const
-{
-    return uid;
-}
+QString HBlastRecordDet::getUid() const { return uid; }
 
-void HBlastRecordDet::setUid(const QString &newUid)
-{
-    uid = newUid;
-}
+void HBlastRecordDet::setUid(const QString &newUid) { uid = newUid; }
 
-QString HBlastRecordDet::getStatus() const
-{
-    return status;
-}
+QString HBlastRecordDet::getStatus() const { return status; }
 
-void HBlastRecordDet::setStatus(const QString &newStatus)
-{
-    status = newStatus;
-}
+void HBlastRecordDet::setStatus(const QString &newStatus) { status = newStatus; }
 
-QString HBlastRecordDet::getFreq() const
-{
-    return freq;
-}
+QString HBlastRecordDet::getFreq() const { return freq; }
 
-void HBlastRecordDet::setFreq(const QString &newFreq)
-{
-    freq = newFreq;
-}
+void HBlastRecordDet::setFreq(const QString &newFreq) { freq = newFreq; }
 
-QString HBlastRecordDet::getDelayTime() const
-{
-    return delayTime;
-}
+QString HBlastRecordDet::getDelayTime() const { return delayTime; }
 
-void HBlastRecordDet::setDelayTime(const QString &newDelayTime)
-{
-    delayTime = newDelayTime;
-}
+void HBlastRecordDet::setDelayTime(const QString &newDelayTime) { delayTime = newDelayTime; }
 
-QString HBlastRecordDet::getTag() const
-{
-    return tag;
-}
+QString HBlastRecordDet::getTag() const { return tag; }
 
-void HBlastRecordDet::setTag(const QString &newTag)
-{
-    tag = newTag;
-}
+void HBlastRecordDet::setTag(const QString &newTag) { tag = newTag; }
 
-QString HBlastRecordDet::getBlastRecordId() const
-{
-    return blastRecordId;
-}
+QString HBlastRecordDet::getBlastRecordId() const { return blastRecordId; }
 
-void HBlastRecordDet::setBlastRecordId(QString newBlastRecordId)
-{
+void HBlastRecordDet::setBlastRecordId(QString newBlastRecordId) {
     blastRecordId = newBlastRecordId;
 }
 
-QString HBlastRecordDet::getRegId() const
-{
-    return regId;
-}
+QString HBlastRecordDet::getRegId() const { return regId; }
 
-void HBlastRecordDet::setRegId(QString newRegId)
-{
-    regId = newRegId;
-}
+void HBlastRecordDet::setRegId(QString newRegId) { regId = newRegId; }
 
-QDateTime HBlastRecordDet::getCreatedAt() const
-{
-    return createdAt;
-}
+QDateTime HBlastRecordDet::getCreatedAt() const { return createdAt; }
 
-void HBlastRecordDet::setCreatedAt(const QDateTime &newCreatedAt)
-{
-    createdAt = newCreatedAt;
-}
+void HBlastRecordDet::setCreatedAt(const QDateTime &newCreatedAt) { createdAt = newCreatedAt; }
 
-QDateTime HBlastRecordDet::getUpdatedAt() const
-{
-    return updatedAt;
-}
+QDateTime HBlastRecordDet::getUpdatedAt() const { return updatedAt; }
 
-void HBlastRecordDet::setUpdatedAt(const QDateTime &newUpdatedAt)
-{
-    updatedAt = newUpdatedAt;
-}
+void HBlastRecordDet::setUpdatedAt(const QDateTime &newUpdatedAt) { updatedAt = newUpdatedAt; }
 
-QDateTime HBlastRecordDet::getDeletedAt() const
-{
-    return deletedAt;
-}
+QDateTime HBlastRecordDet::getDeletedAt() const { return deletedAt; }
 
-void HBlastRecordDet::setDeletedAt(const QDateTime &newDeletedAt)
-{
-    deletedAt = newDeletedAt;
-}
+void HBlastRecordDet::setDeletedAt(const QDateTime &newDeletedAt) { deletedAt = newDeletedAt; }
 
-qint64 HBlastRecordDet::getCreateBy() const
-{
-    return createBy;
-}
+qint64 HBlastRecordDet::getCreateBy() const { return createBy; }
 
-void HBlastRecordDet::setCreateBy(qint64 newCreateBy)
-{
-    createBy = newCreateBy;
-}
+void HBlastRecordDet::setCreateBy(qint64 newCreateBy) { createBy = newCreateBy; }
 
-qint64 HBlastRecordDet::getUpdateBy() const
-{
-    return updateBy;
-}
+qint64 HBlastRecordDet::getUpdateBy() const { return updateBy; }
 
-void HBlastRecordDet::setUpdateBy(qint64 newUpdateBy)
-{
-    updateBy = newUpdateBy;
-}
+void HBlastRecordDet::setUpdateBy(qint64 newUpdateBy) { updateBy = newUpdateBy; }
 
-QJsonObject HBlastRecordDet::BlastRecordDetToJson()
-{
+QJsonObject HBlastRecordDet::ToJson() {
     QJsonObject jsonObject;
-    jsonObject["id"] = this->getId();
+    // jsonObject["id"] = this->getId();
     jsonObject["uuid"] = this->getUuid();
     jsonObject["out_code"] = this->getOutCode();
-    jsonObject["inner_code"] = this->getInnerCode();
+    jsonObject["in_code"] = this->getInnerCode();
     jsonObject["uid"] = this->getUid();
     jsonObject["status"] = this->getStatus();
     jsonObject["freq"] = this->getFreq();
     jsonObject["delay_time"] = this->getDelayTime();
     jsonObject["tag"] = this->getTag();
-    jsonObject["blast_record_id"] = this->getBlastRecordId();
+    jsonObject["blast_record_id"] = this->getBlastRecordId().toInt();
     jsonObject["reg_id"] = this->getRegId();
     jsonObject["created_at"] = this->getCreatedAt().toString(Qt::ISODateWithMs);
     jsonObject["updated_at"] = this->getUpdatedAt().toString(Qt::ISODateWithMs);

+ 61 - 153
blastRegRecord/hblastregrecord.cpp

@@ -1,222 +1,130 @@
 #include "hblastregrecord.h"
 
-HBlastRegRecord::HBlastRegRecord(QObject *parent) : QObject(parent)
-{
-}
+HBlastEquipmentRecord::HBlastEquipmentRecord(QObject *parent) : QObject(parent) {}
 
-qint64 HBlastRegRecord::getId() const
-{
-    return id;
-}
+qint64 HBlastEquipmentRecord::getId() const { return id; }
 
-void HBlastRegRecord::setId(qint64 newId)
-{
-    id = newId;
-}
+void HBlastEquipmentRecord::setId(qint64 newId) { id = newId; }
 
-QString HBlastRegRecord::getUuid() const
-{
-    return uuid;
-}
+QString HBlastEquipmentRecord::getUuid() const { return uuid; }
 
-void HBlastRegRecord::setUuid(const QString &newUuid)
-{
-    uuid = newUuid;
-}
+void HBlastEquipmentRecord::setUuid(const QString &newUuid) { uuid = newUuid; }
 
-QString HBlastRegRecord::getEquipSn() const
-{
-    return equipSn;
-}
+QString HBlastEquipmentRecord::getEquipSn() const { return equipSn; }
 
-void HBlastRegRecord::setEquipSn(const QString &newEquipSn)
-{
-    equipSn = newEquipSn;
-}
+void HBlastEquipmentRecord::setEquipSn(const QString &newEquipSn) { equipSn = newEquipSn; }
 
-QString HBlastRegRecord::getEquipVersion() const
-{
-    return equipVersion;
-}
+QString HBlastEquipmentRecord::getEquipVersion() const { return equipVersion; }
 
-void HBlastRegRecord::setEquipVersion(const QString &newEquipVersion)
-{
+void HBlastEquipmentRecord::setEquipVersion(const QString &newEquipVersion) {
     equipVersion = newEquipVersion;
 }
 
-int HBlastRegRecord::getRegDetoCount() const
-{
-    return regDetoCount;
-}
+int HBlastEquipmentRecord::getRegDetoCount() const { return regDetoCount; }
 
-void HBlastRegRecord::setRegDetoCount(int newRegDetoCount)
-{
-    regDetoCount = newRegDetoCount;
-}
+void HBlastEquipmentRecord::setRegDetoCount(int newRegDetoCount) { regDetoCount = newRegDetoCount; }
 
-int HBlastRegRecord::getErrorDetoCount() const
-{
-    return errorDetoCount;
-}
+int HBlastEquipmentRecord::getErrorDetoCount() const { return errorDetoCount; }
 
-void HBlastRegRecord::setErrorDetoCount(int newErrorDetoCount)
-{
+void HBlastEquipmentRecord::setErrorDetoCount(int newErrorDetoCount) {
     errorDetoCount = newErrorDetoCount;
 }
 
-QString HBlastRegRecord::getAfterTestBusV() const
-{
-    return afterTestBusV;
-}
+QString HBlastEquipmentRecord::getAfterTestBusV() const { return afterTestBusV; }
 
-void HBlastRegRecord::setAfterTestBusV(const QString &newAfterTestBusV)
-{
+void HBlastEquipmentRecord::setAfterTestBusV(const QString &newAfterTestBusV) {
     afterTestBusV = newAfterTestBusV;
 }
 
-QString HBlastRegRecord::getAfterTestBusI() const
-{
-    return afterTestBusI;
-}
+QString HBlastEquipmentRecord::getAfterTestBusI() const { return afterTestBusI; }
 
-void HBlastRegRecord::setAfterTestBusI(const QString &newAfterTestBusI)
-{
+void HBlastEquipmentRecord::setAfterTestBusI(const QString &newAfterTestBusI) {
     afterTestBusI = newAfterTestBusI;
 }
 
-QString HBlastRegRecord::getBusLeakageCurrentI() const
-{
-    return busLeakageCurrentI;
-}
+QString HBlastEquipmentRecord::getBusLeakageCurrentI() const { return busLeakageCurrentI; }
 
-void HBlastRegRecord::setBusLeakageCurrentI(const QString &newBusLeakageCurrentI)
-{
+void HBlastEquipmentRecord::setBusLeakageCurrentI(const QString &newBusLeakageCurrentI) {
     busLeakageCurrentI = newBusLeakageCurrentI;
 }
 
-QString HBlastRegRecord::getNetChargedV() const
-{
-    return netChargedV;
-}
+QString HBlastEquipmentRecord::getNetChargedV() const { return netChargedV; }
 
-void HBlastRegRecord::setNetChargedV(const QString &newNetChargedV)
-{
+void HBlastEquipmentRecord::setNetChargedV(const QString &newNetChargedV) {
     netChargedV = newNetChargedV;
 }
 
-QString HBlastRegRecord::getNetChargedI() const
-{
-    return netChargedI;
-}
+QString HBlastEquipmentRecord::getNetChargedI() const { return netChargedI; }
 
-void HBlastRegRecord::setNetChargedI(const QString &newNetChargedI)
-{
+void HBlastEquipmentRecord::setNetChargedI(const QString &newNetChargedI) {
     netChargedI = newNetChargedI;
 }
 
-QString HBlastRegRecord::getBeforeBlastingV() const
-{
-    return beforeBlastingV;
-}
+QString HBlastEquipmentRecord::getBeforeBlastingV() const { return beforeBlastingV; }
 
-void HBlastRegRecord::setBeforeBlastingV(const QString &newBeforeBlastingV)
-{
+void HBlastEquipmentRecord::setBeforeBlastingV(const QString &newBeforeBlastingV) {
     beforeBlastingV = newBeforeBlastingV;
 }
 
-QString HBlastRegRecord::getBeforeBlastingI() const
-{
-    return beforeBlastingI;
-}
+QString HBlastEquipmentRecord::getBeforeBlastingI() const { return beforeBlastingI; }
 
-void HBlastRegRecord::setBeforeBlastingI(const QString &newBeforeBlastingI)
-{
+void HBlastEquipmentRecord::setBeforeBlastingI(const QString &newBeforeBlastingI) {
     beforeBlastingI = newBeforeBlastingI;
 }
 
-QString HBlastRegRecord::getRecordUuid() const
-{
-    return recordUuid;
-}
+QString HBlastEquipmentRecord::getRecordUuid() const { return recordUuid; }
 
-void HBlastRegRecord::setRecordUuid(const QString &newRecordUuid)
-{
+void HBlastEquipmentRecord::setRecordUuid(const QString &newRecordUuid) {
     recordUuid = newRecordUuid;
 }
 
-QDateTime HBlastRegRecord::getCreatedAt() const
-{
-    return createdAt;
-}
+QDateTime HBlastEquipmentRecord::getCreatedAt() const { return createdAt; }
 
-void HBlastRegRecord::setCreatedAt(const QDateTime &newCreatedAt)
-{
+void HBlastEquipmentRecord::setCreatedAt(const QDateTime &newCreatedAt) {
     createdAt = newCreatedAt;
 }
 
-QDateTime HBlastRegRecord::getUpdatedAt() const
-{
-    return updatedAt;
-}
+QDateTime HBlastEquipmentRecord::getUpdatedAt() const { return updatedAt; }
 
-void HBlastRegRecord::setUpdatedAt(const QDateTime &newUpdatedAt)
-{
+void HBlastEquipmentRecord::setUpdatedAt(const QDateTime &newUpdatedAt) {
     updatedAt = newUpdatedAt;
 }
 
-QDateTime HBlastRegRecord::getDeletedAt() const
-{
-    return deletedAt;
-}
+QDateTime HBlastEquipmentRecord::getDeletedAt() const { return deletedAt; }
 
-void HBlastRegRecord::setDeletedAt(const QDateTime &newDeletedAt)
-{
+void HBlastEquipmentRecord::setDeletedAt(const QDateTime &newDeletedAt) {
     deletedAt = newDeletedAt;
 }
 
-qint64 HBlastRegRecord::getCreateBy() const
-{
-    return createBy;
-}
+qint64 HBlastEquipmentRecord::getCreateBy() const { return createBy; }
 
-void HBlastRegRecord::setCreateBy(qint64 newCreateBy)
-{
-    createBy = newCreateBy;
-}
+void HBlastEquipmentRecord::setCreateBy(qint64 newCreateBy) { createBy = newCreateBy; }
 
-qint64 HBlastRegRecord::getUpdateBy() const
-{
-    return updateBy;
-}
+qint64 HBlastEquipmentRecord::getUpdateBy() const { return updateBy; }
 
-void HBlastRegRecord::setUpdateBy(qint64 newUpdateBy)
-{
-    updateBy = newUpdateBy;
-}
+void HBlastEquipmentRecord::setUpdateBy(qint64 newUpdateBy) { updateBy = newUpdateBy; }
 
-QByteArray HBlastRegRecord::RecordToJson(const HBlastRegRecord &record)
-{
+QJsonObject HBlastEquipmentRecord::ToJson() {
     QJsonObject json;
-    json["id"] = record.getId();
-    json["uuid"] = record.getUuid();
-    json["equip_sn"] = record.getEquipSn();
-    json["equip_version"] = record.getEquipVersion();
-    json["reg_deto_count"] = record.getRegDetoCount();
-    json["error_deto_count"] = record.getErrorDetoCount();
-    json["after_test_bus_v"] = record.getAfterTestBusV();
-    json["after_test_bus_i"] = record.getAfterTestBusI();
-    json["bus_leakage_current_i"] = record.getBusLeakageCurrentI();
-    json["net_charged_v"] = record.getNetChargedV();
-    json["net_charged_i"] = record.getNetChargedI();
-    json["before_blasting_v"] = record.getBeforeBlastingV();
-    json["before_blasting_i"] = record.getBeforeBlastingI();
-    json["record_uuid"] = record.getRecordUuid();
-    json["created_at"] = record.getCreatedAt().toString(Qt::ISODateWithMs);
-    json["updated_at"] = record.getUpdatedAt().toString(Qt::ISODateWithMs);
-    json["deleted_at"] = record.getDeletedAt().toString(Qt::ISODateWithMs);
-    json["create_by"] = record.getCreateBy();
-    json["update_by"] = record.getUpdateBy();
-
-    QJsonDocument doc(json);
-    return doc.toJson();
+    // json["id"] = this->getId();
+    // json["uuid"] = this->getUuid();
+    json["equipment_sn"] = this->getEquipSn();
+    json["equipment_version"] = this->getEquipVersion();
+    json["reg_deto_count"] = QString::number(this->getRegDetoCount());
+    json["error_deto_count"] = QString::number(this->getErrorDetoCount());
+    json["after_test_bus_v"] = this->getAfterTestBusV();
+    json["after_test_bus_i"] = this->getAfterTestBusI();
+    json["bus_leakage_current_i"] = this->getBusLeakageCurrentI();
+    json["net_charged_v"] = this->getNetChargedV();
+    json["net_charged_i"] = this->getNetChargedI();
+    json["before_blasting_v"] = this->getBeforeBlastingV();
+    json["before_blasting_i"] = this->getBeforeBlastingI();
+    // json["record_uuid"] = this->getRecordUuid();
+    // json["created_at"] = this->getCreatedAt().toString(Qt::ISODateWithMs);
+    // json["updated_at"] = this->getUpdatedAt().toString(Qt::ISODateWithMs);
+    // json["deleted_at"] = this->getDeletedAt().toString(Qt::ISODateWithMs);
+    // json["create_by"] = this->getCreateBy();
+    // json["update_by"] = this->getUpdateBy();
+
+    return json;
 }

+ 28 - 29
blastRegRecord/hblastregrecord.h

@@ -1,37 +1,36 @@
 #ifndef HBLASTREGRECORD_H
 #define HBLASTREGRECORD_H
 
-#include <QString>
 #include <QDateTime>
-#include <QJsonObject>
 #include <QJsonDocument>
+#include <QJsonObject>
+#include <QString>
 #include <QUuid>
 
-class HBlastRegRecord : public QObject
-{
+class HBlastEquipmentRecord : public QObject {
     Q_OBJECT
-       // 定义属性
-       Q_PROPERTY(qint64 id READ getId WRITE setId)
-       Q_PROPERTY(QString uuid READ getUuid WRITE setUuid)
-       Q_PROPERTY(QString equipSn READ getEquipSn WRITE setEquipSn)
-       Q_PROPERTY(QString equipVersion READ getEquipVersion WRITE setEquipVersion)
-       Q_PROPERTY(int regDetoCount READ getRegDetoCount WRITE setRegDetoCount)
-       Q_PROPERTY(int errorDetoCount READ getErrorDetoCount WRITE setErrorDetoCount)
-       Q_PROPERTY(QString afterTestBusV READ getAfterTestBusV WRITE setAfterTestBusV)
-       Q_PROPERTY(QString afterTestBusI READ getAfterTestBusI WRITE setAfterTestBusI)
-       Q_PROPERTY(QString busLeakageCurrentI READ getBusLeakageCurrentI WRITE setBusLeakageCurrentI)
-       Q_PROPERTY(QString netChargedV READ getNetChargedV WRITE setNetChargedV)
-       Q_PROPERTY(QString netChargedI READ getNetChargedI WRITE setNetChargedI)
-       Q_PROPERTY(QString beforeBlastingV READ getBeforeBlastingV WRITE setBeforeBlastingV)
-       Q_PROPERTY(QString beforeBlastingI READ getBeforeBlastingI WRITE setBeforeBlastingI)
-       Q_PROPERTY(QString recordUuid READ getRecordUuid WRITE setRecordUuid)
-       Q_PROPERTY(QDateTime createdAt READ getCreatedAt WRITE setCreatedAt)
-       Q_PROPERTY(QDateTime updatedAt READ getUpdatedAt WRITE setUpdatedAt)
-       Q_PROPERTY(QDateTime deletedAt READ getDeletedAt WRITE setDeletedAt)
-       Q_PROPERTY(qint64 createBy READ getCreateBy WRITE setCreateBy)
-       Q_PROPERTY(qint64 updateBy READ getUpdateBy WRITE setUpdateBy)
-public:
-    explicit HBlastRegRecord(QObject *parent = nullptr);
+    // 定义属性
+    Q_PROPERTY(qint64 id READ getId WRITE setId)
+    Q_PROPERTY(QString uuid READ getUuid WRITE setUuid)
+    Q_PROPERTY(QString equipSn READ getEquipSn WRITE setEquipSn)
+    Q_PROPERTY(QString equipVersion READ getEquipVersion WRITE setEquipVersion)
+    Q_PROPERTY(int regDetoCount READ getRegDetoCount WRITE setRegDetoCount)
+    Q_PROPERTY(int errorDetoCount READ getErrorDetoCount WRITE setErrorDetoCount)
+    Q_PROPERTY(QString afterTestBusV READ getAfterTestBusV WRITE setAfterTestBusV)
+    Q_PROPERTY(QString afterTestBusI READ getAfterTestBusI WRITE setAfterTestBusI)
+    Q_PROPERTY(QString busLeakageCurrentI READ getBusLeakageCurrentI WRITE setBusLeakageCurrentI)
+    Q_PROPERTY(QString netChargedV READ getNetChargedV WRITE setNetChargedV)
+    Q_PROPERTY(QString netChargedI READ getNetChargedI WRITE setNetChargedI)
+    Q_PROPERTY(QString beforeBlastingV READ getBeforeBlastingV WRITE setBeforeBlastingV)
+    Q_PROPERTY(QString beforeBlastingI READ getBeforeBlastingI WRITE setBeforeBlastingI)
+    Q_PROPERTY(QString recordUuid READ getRecordUuid WRITE setRecordUuid)
+    Q_PROPERTY(QDateTime createdAt READ getCreatedAt WRITE setCreatedAt)
+    Q_PROPERTY(QDateTime updatedAt READ getUpdatedAt WRITE setUpdatedAt)
+    Q_PROPERTY(QDateTime deletedAt READ getDeletedAt WRITE setDeletedAt)
+    Q_PROPERTY(qint64 createBy READ getCreateBy WRITE setCreateBy)
+    Q_PROPERTY(qint64 updateBy READ getUpdateBy WRITE setUpdateBy)
+   public:
+    explicit HBlastEquipmentRecord(QObject *parent = nullptr);
 
     // Getter and Setter methods
     qint64 getId() const;
@@ -91,9 +90,9 @@ public:
     qint64 getUpdateBy() const;
     void setUpdateBy(qint64 newUpdateBy);
 
-    QByteArray RecordToJson(const HBlastRegRecord& record);
+    QJsonObject ToJson();
 
-private:
+   private:
     qint64 id;
     QString uuid;
     QString equipSn;
@@ -115,4 +114,4 @@ private:
     qint64 updateBy;
 };
 
-#endif // HBLASTREGRECORD_H
+#endif  // HBLASTREGRECORD_H

+ 27 - 25
blastRegRecord/hblastregrecorddao.cpp

@@ -2,11 +2,17 @@
 
 HBlastRegRecordDao::HBlastRegRecordDao(QSqlDatabase db) : database(db) {}
 
-bool HBlastRegRecordDao::saveHBlastRegRecord(const HBlastRegRecord &record)
-{
+bool HBlastRegRecordDao::saveHBlastRegRecord(const HBlastEquipmentRecord &record) {
     QSqlQuery query;
-    query.prepare("INSERT INTO h_blast_equipment_record (uuid, equip_sn, equip_version, reg_deto_count, error_deto_count, after_test_bus_v, after_test_bus_i, bus_leakage_current_i, net_charged_v, net_charged_i, before_blasting_v, before_blasting_i, record_uuid, created_at, updated_at, deleted_at, create_by, update_by) "
-                  "VALUES (:uuid, :equip_sn, :equip_version, :reg_deto_count, :error_deto_count, :after_test_bus_v, :after_test_bus_i, :bus_leakage_current_i, :net_charged_v, :net_charged_i, :before_blasting_v, :before_blasting_i, :record_uuid, :created_at, :updated_at, :deleted_at, :create_by, :update_by)");
+    query.prepare(
+        "INSERT INTO h_blast_equipment_record (uuid, equip_sn, equip_version, reg_deto_count, "
+        "error_deto_count, after_test_bus_v, after_test_bus_i, bus_leakage_current_i, "
+        "net_charged_v, net_charged_i, before_blasting_v, before_blasting_i, record_uuid, "
+        "created_at, updated_at, deleted_at, create_by, update_by) "
+        "VALUES (:uuid, :equip_sn, :equip_version, :reg_deto_count, :error_deto_count, "
+        ":after_test_bus_v, :after_test_bus_i, :bus_leakage_current_i, :net_charged_v, "
+        ":net_charged_i, :before_blasting_v, :before_blasting_i, :record_uuid, :created_at, "
+        ":updated_at, :deleted_at, :create_by, :update_by)");
     query.bindValue(":uuid", record.getUuid());
     query.bindValue(":equip_sn", record.getEquipSn());
     query.bindValue(":equip_version", record.getEquipVersion());
@@ -26,22 +32,25 @@ bool HBlastRegRecordDao::saveHBlastRegRecord(const HBlastRegRecord &record)
     query.bindValue(":create_by", record.getCreateBy());
     query.bindValue(":update_by", record.getUpdateBy());
 
-    if (query.exec())
-    {
+    if (query.exec()) {
         return true;
-    }
-    else
-    {
+    } else {
         qDebug() << "Insert failed:" << query.lastError().text();
         return false;
     }
 }
 
-bool HBlastRegRecordDao::updateHBlastEquipmentRecord(const HBlastRegRecord &record)
-{
+bool HBlastRegRecordDao::updateHBlastEquipmentRecord(const HBlastEquipmentRecord &record) {
     QSqlQuery query;
-    query.prepare("UPDATE h_blast_equipment_record SET uuid = :uuid, equip_sn = :equip_sn, equip_version = :equip_version, reg_deto_count = :reg_deto_count, error_deto_count = :error_deto_count, after_test_bus_v = :after_test_bus_v, after_test_bus_i = :after_test_bus_i, bus_leakage_current_i = :bus_leakage_current_i, net_charged_v = :net_charged_v, net_charged_i = :net_charged_i, before_blasting_v = :before_blasting_v, before_blasting_i = :before_blasting_i, record_uuid = :record_uuid, created_at = :created_at, updated_at = :updated_at, deleted_at = :deleted_at, create_by = :create_by, update_by = :update_by "
-                  "WHERE id = :id");
+    query.prepare(
+        "UPDATE h_blast_equipment_record SET uuid = :uuid, equip_sn = :equip_sn, equip_version = "
+        ":equip_version, reg_deto_count = :reg_deto_count, error_deto_count = :error_deto_count, "
+        "after_test_bus_v = :after_test_bus_v, after_test_bus_i = :after_test_bus_i, "
+        "bus_leakage_current_i = :bus_leakage_current_i, net_charged_v = :net_charged_v, "
+        "net_charged_i = :net_charged_i, before_blasting_v = :before_blasting_v, before_blasting_i "
+        "= :before_blasting_i, record_uuid = :record_uuid, created_at = :created_at, updated_at = "
+        ":updated_at, deleted_at = :deleted_at, create_by = :create_by, update_by = :update_by "
+        "WHERE id = :id");
     query.bindValue(":id", record.getId());
     query.bindValue(":uuid", record.getUuid());
     query.bindValue(":equip_sn", record.getEquipSn());
@@ -62,29 +71,22 @@ bool HBlastRegRecordDao::updateHBlastEquipmentRecord(const HBlastRegRecord &reco
     query.bindValue(":create_by", record.getCreateBy());
     query.bindValue(":update_by", record.getUpdateBy());
 
-    if (query.exec())
-    {
+    if (query.exec()) {
         return true;
-    }
-    else
-    {
+    } else {
         qDebug() << "Update failed:" << query.lastError().text();
         return false;
     }
 }
 
-bool HBlastRegRecordDao::deleteHBlastRegRecord(qint64 id)
-{
+bool HBlastRegRecordDao::deleteHBlastRegRecord(qint64 id) {
     QSqlQuery query;
     query.prepare("DELETE FROM h_blast_equipment_record WHERE id = :id");
     query.bindValue(":id", id);
 
-    if (query.exec())
-    {
+    if (query.exec()) {
         return true;
-    }
-    else
-    {
+    } else {
         qDebug() << "Delete failed:" << query.lastError().text();
         return false;
     }

+ 10 - 10
blastRegRecord/hblastregrecorddao.h

@@ -1,24 +1,24 @@
 #ifndef HBLASTREGRECORDDAO_H
 #define HBLASTREGRECORDDAO_H
 
-#include "hblastregrecord.h"
+#include <QDebug>
 #include <QSqlDatabase>
-#include <QSqlQuery>
 #include <QSqlError>
-#include <QDebug>
+#include <QSqlQuery>
+
+#include "hblastregrecord.h"
 
-class HBlastRegRecordDao
-{
-public:
+class HBlastRegRecordDao {
+   public:
     HBlastRegRecordDao(QSqlDatabase db);
 
-    bool saveHBlastRegRecord(const HBlastRegRecord &record);
-    bool updateHBlastEquipmentRecord(const HBlastRegRecord &record);
+    bool saveHBlastRegRecord(const HBlastEquipmentRecord &record);
+    bool updateHBlastEquipmentRecord(const HBlastEquipmentRecord &record);
     bool deleteHBlastRegRecord(qint64 id);
     // HBlastRegRecord getHBlastRegRecordById(qint64 id);
 
-private:
+   private:
     QSqlDatabase database;
 };
 
-#endif // HBLASTREGRECORDDAO_H
+#endif  // HBLASTREGRECORDDAO_H

+ 33 - 23
blastopepage.cpp

@@ -2,6 +2,7 @@
 
 #include <QFont>
 #include <QProcessEnvironment>
+#include <QWebEngineSettings>
 
 #include "countdownwidget.h"
 #include "global.h"
@@ -11,9 +12,14 @@
 
 BlastOpePage::BlastOpePage(QWidget *parent)
     : QWidget(parent), ui(new Ui::BlastOpePage), dao(DatabaseManager::getInstance().getDatabase()) {
-    InitFace();
-    // ui->setupUi(this);
-    // initPagination();
+    QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
+    QString useFaceVerify = env.value("UseFaceVerify", "true");
+    if (useFaceVerify.toLower() == "true") {
+        InitFace();
+    } else {
+        ui->setupUi(this);
+        initPagination();
+    }
 }
 
 void BlastOpePage::showDownWidget(QString uuid, const QString &topic, const QString &message) {
@@ -39,6 +45,7 @@ void BlastOpePage::showDownWidget(QString uuid, const QString &topic, const QStr
 void BlastOpePage::InitFace() {
     Logger::getInstance().info("start init face verification");
     LoadingWidget::showLoading(this, "请求创建人脸识别...");
+
     layout = new QVBoxLayout(this);
     view = new QWebEngineView(this);
     view->setAttribute(Qt::WA_OpaquePaintEvent);
@@ -69,6 +76,7 @@ void BlastOpePage::InitFace() {
             }
         }
     }
+    qDebug() << "certifyUrl: " << certifyUrl;
     if (!certifyUrl.isEmpty()) {
         view->load(QUrl(certifyUrl));
 
@@ -79,7 +87,6 @@ void BlastOpePage::InitFace() {
         QObject::connect(page, &QWebEnginePage::urlChanged, this, &BlastOpePage::onUrlChanged);
     } else {
         QMessageBox::information(nullptr, "提示", "人脸识别请求失败");
-        qDebug() << "Failed to get certifyUrl." << response;
         Logger::getInstance().error("FaceVerificationInit: Failed to get certifyUrl");
     }
     Logger::getInstance().info("FaceVerificationInit: successfully");
@@ -312,7 +319,7 @@ void BlastOpePage::loadDataFromSource(int currentPage, int pageSize) {
     ui->tableView->setModel(model);
 
     connectionItem = QObject::connect(model, &QStandardItemModel::itemChanged, this,
-                                      &BlastOpePage::onItemChanged);
+                                      &BlastOpePage::onItemCheckboxChanged);
     ui->tableView->setColumnWidth(0, 30);
     for (int i = 1; i < headerCount; ++i) {
         if (i == 8) {  // Column: 进度
@@ -398,7 +405,7 @@ void BlastOpePage::loadDataFromSource(int currentPage, int pageSize) {
                     "    background-color: transparent;"
                     "}");
             } else {
-                button->setText(startButtonTxt);
+                button->setText(startBlastButtonTxt);
             }
         }
         QHBoxLayout *layout = new QHBoxLayout(widget);
@@ -545,21 +552,24 @@ void BlastOpePage::handleButtonClick(int row, QPushButton *button) {
         }
     }
 
-    if (button->text() == startButtonTxt) {
+    if (button->text() == startBlastButtonTxt) {
         button->setMinimumWidth(120);
-        button->setText(stopButtonTxt);
-        // firingWidget *widget = new firingWidget(row, false, uuid);
-        // connect(widget, &firingWidget::progressChanged, this, &BlastOpePage::updateProgressBar);
-        // connect(widget, &firingWidget::updateBlastStatus, this,
-        // &BlastOpePage::onUpdateBlastStatus); connect(widget, &firingWidget::updateButton, this,
-        // &BlastOpePage::changeButByMqtt); connect(widget, &firingWidget::countdown, this,
-        // &BlastOpePage::showDownWidget); connect(widget, &firingWidget::updateProjectStatus, this,
-        // &BlastOpePage::updateProject); connect(widget, &firingWidget::closeFiring, this,
-        // &BlastOpePage::destroyFiringWidget); widget->show();
-        // widget->setAttribute(Qt::WA_DeleteOnClose);
-
-        // uuidWidgetMap.insert(uuid, widget);
-    } else if (button->text() == stopButtonTxt) {
+        button->setText(stopBlastButtonTxt);
+        firingWidget *widget = new firingWidget(row, false, uuid);
+        connect(widget, &firingWidget::progressChanged, this, &BlastOpePage::updateProgressBar);
+        connect(widget, &firingWidget::updateBlastStatus, this, &BlastOpePage::onUpdateBlastStatus);
+        connect(widget, &firingWidget::updateButton, this, &BlastOpePage::changeButByMqtt);
+        connect(widget, &firingWidget::countdown, this, &BlastOpePage::showDownWidget);
+        connect(widget, &firingWidget::updateProjectStatus, this, &BlastOpePage::updateProject);
+        connect(widget, &firingWidget::closeFiring, this, &BlastOpePage::destroyFiringWidget);
+        if (isShowTriggeringWidget) {
+            widget->show();
+        }
+
+        widget->setAttribute(Qt::WA_DeleteOnClose);
+        uuidWidgetMap.insert(uuid, widget);
+
+    } else if (button->text() == stopBlastButtonTxt) {
         firingWidget *widget = uuidWidgetMap.value(uuid);
         if (widget) {
             widget->cancelBlasting();
@@ -605,7 +615,7 @@ void BlastOpePage::destroyFiringWidget(const QString &uuid) {
 }
 
 // 槽函数,当 item 状态改变时触发
-void BlastOpePage::onItemChanged(QStandardItem *item) {
+void BlastOpePage::onItemCheckboxChanged(QStandardItem *item) {
     if (item->column() == 0) {  // 仅处理第一列的勾选状态改变
         if (item->checkState() == Qt::Checked) {
             QStandardItem *uuidItem = model->item(item->row(), 10);
@@ -738,10 +748,10 @@ void BlastOpePage::showDownWidgetSelect() {
     countdownWidgetSelect->show();
 
     connect(countdownWidgetSelect, &CountdownWidget::countdownFinished, this,
-            &BlastOpePage::selectBlasting, Qt::SingleShotConnection);
+            &BlastOpePage::triggerBlastSelected, Qt::SingleShotConnection);
 }
 
-void BlastOpePage::selectBlasting() {
+void BlastOpePage::triggerBlastSelected() {
     for (auto it = uuidWidgetSMap.begin(); it != uuidWidgetSMap.end(); ++it) {
         QString uuid = it.key();
         firingWidget *widget = it.value();

+ 4 - 4
blastopepage.h

@@ -52,10 +52,10 @@ class BlastOpePage : public QWidget {
     void updateProject(QString uuid);
     void destroyFiringWidget(const QString &uuid);
     void on_btnSelect_clicked();
-    void onItemChanged(QStandardItem *item);
+    void onItemCheckboxChanged(QStandardItem *item);
     void handleSelect(QString uuid);
     void showDownWidgetSelect();
-    void selectBlasting();
+    void triggerBlastSelected();
     void destroyFiringWidgetSelect(const QString &uuid);
 
    private:
@@ -93,8 +93,8 @@ class BlastOpePage : public QWidget {
     int pageSize;     // 每页显示的记录数量
     int currentPage;  // 当前页面
     int totalCount;
-    QString stopButtonTxt = "中止起爆流程";
-    QString startButtonTxt = "开启起爆流程";
+    QString stopBlastButtonTxt = "中止起爆流程";
+    QString startBlastButtonTxt = "开启起爆流程";
 };
 
 #endif  // BLASTOPEPAGE_H

+ 101 - 60
fireWidget/firingwidget.cpp

@@ -141,33 +141,38 @@ bool firingWidget::uploadToDanLing(const QJsonObject &jsonObj) {
     return true;
 }
 
-bool firingWidget::recordBlastEquipments(const QJsonObject &jsonObj) {
+QList<HBlastEquipmentRecord *> firingWidget::recordBlastEquipments(const QJsonObject &jsonObj) {
+    QList<HBlastEquipmentRecord *> savedRecords;
     QJsonArray regsArray = jsonObj["regs"].toArray();
     for (const auto &regValue : regsArray) {
         QJsonObject regObj = regValue.toObject();
-        HBlastRegRecord recordReg;
+        HBlastEquipmentRecord *recordReg = new HBlastEquipmentRecord();
         reg_uuid =
             QUuid::createUuid().toString(QUuid::WithoutBraces).remove(QRegularExpression("-"));
-        recordReg.setUuid(reg_uuid);
-        recordReg.setEquipSn(regObj["equipment_sn"].toString());
-        recordReg.setEquipVersion(regObj["equipment_version"].toString());
-        recordReg.setRegDetoCount(regObj["reg_deto_count"].toString().toInt());
-        recordReg.setErrorDetoCount(regObj["error_deto_count"].toString().toInt());
-        recordReg.setAfterTestBusV(regObj["after_test_bus_v"].toString());
-        recordReg.setAfterTestBusI(regObj["after_test_bus_i"].toString());
-        recordReg.setBusLeakageCurrentI(regObj["bus_leakage_current_i"].toString());
-        recordReg.setNetChargedV(regObj["net_charged_v"].toString());
-        recordReg.setNetChargedI(regObj["net_charged_i"].toString());
-        recordReg.setBeforeBlastingV(regObj["before_blasting_v"].toString());
-        recordReg.setBeforeBlastingI(regObj["before_blasting_i"].toString());
-        recordReg.setRecordUuid(blast_uuid);
-        recordReg.setCreatedAt(QDateTime::currentDateTime());
-        // 插入数据到数据库
-        if (!daoReg.saveHBlastRegRecord(recordReg)) {
-            return false;
+        recordReg->setUuid(reg_uuid);
+        recordReg->setEquipSn(regObj["equipment_sn"].toString());
+        recordReg->setEquipVersion(regObj["equipment_version"].toString());
+        recordReg->setRegDetoCount(regObj["reg_deto_count"].toString().toInt());
+        recordReg->setErrorDetoCount(regObj["error_deto_count"].toString().toInt());
+        recordReg->setAfterTestBusV(regObj["after_test_bus_v"].toString());
+        recordReg->setAfterTestBusI(regObj["after_test_bus_i"].toString());
+        recordReg->setBusLeakageCurrentI(regObj["bus_leakage_current_i"].toString());
+        recordReg->setNetChargedV(regObj["net_charged_v"].toString());
+        recordReg->setNetChargedI(regObj["net_charged_i"].toString());
+        recordReg->setBeforeBlastingV(regObj["before_blasting_v"].toString());
+        recordReg->setBeforeBlastingI(regObj["before_blasting_i"].toString());
+        recordReg->setRecordUuid(blast_uuid);
+        recordReg->setCreatedAt(QDateTime::currentDateTime());
+
+        if (daoReg.saveHBlastRegRecord(*recordReg)) {
+            savedRecords.append(recordReg);
+        } else {
+            Logger::getInstance().error(
+                QString("Failed to save HBlastRegRecord: %1").arg(recordReg->getEquipSn()));
+            delete recordReg;
         }
     }
-    return true;
+    return savedRecords;
 }
 
 void firingWidget::handleMessageAndTopic(const QByteArray &message, const QMqttTopicName &topic) {
@@ -369,8 +374,8 @@ void firingWidget::on_sendTest_4_clicked() {}
 void firingWidget::testonBlastSucess(const QJsonObject &jsonObj) { onBlastSucess(jsonObj); }
 // 处理爆破成功,安全验证装置通过MQTT传回的数据
 void firingWidget::onBlastSucess(const QJsonObject &jsonObj) {
-    Logger::getInstance().info(QString("收到爆破完成回传记录. data: %1")
-                                   .arg(QJsonDocument(jsonObj).toJson(QJsonDocument::Indented)));
+    Logger::getInstance("blastRecord.log")
+        .info(QJsonDocument(jsonObj).toJson(QJsonDocument::Indented));
     blast_uuid = QUuid::createUuid().toString(QUuid::WithoutBraces).remove(QRegularExpression("-"));
     lat = labLat;
     lon = labLon;
@@ -379,15 +384,65 @@ void firingWidget::onBlastSucess(const QJsonObject &jsonObj) {
 
     if (lat == "定位失败" && lat == "未知" && lon == "定位失败" && lon == "未知") {
         QMessageBox::critical(nullptr, "错误", "未获取有效定位数据,数据将暂不上传丹灵");
-        // 数据:存本地 不传丹灵
+    } else {
+        uploadToDanLing(jsonObj);
     }
-    uploadToDanLing(jsonObj);
 }
 
-void firingWidget::uploadToServer(const QJsonObject &jsonObj) {
+void firingWidget::uploadBlastRecordToServer(HBlastRecord *blastRecord,
+                                             const QList<HBlastEquipmentRecord *> &equipmentRecords,
+                                             const QList<HBlastRecordDet *> &detsRecords) {
     // upload blast project
-    // upload blast reg dets
-    // upload blast dets data
+    if (blastRecord == nullptr) {
+        return;
+    }
+    if (!backendAPIManager::uploadBlastProject(blastRecord->BlastRecordToJson())) {
+        Logger::getInstance().error(QString("Failed to upload blast project. data: %1")
+                                        .arg(QJsonDocument(blastRecord->BlastRecordToJson())
+                                                 .toJson(QJsonDocument::Indented)));
+    }
+    if (!equipmentRecords.isEmpty()) {
+        for (const auto &equipmentRecord : equipmentRecords) {
+            if (!backendAPIManager::uploadBlastEquipments(equipmentRecord->ToJson())) {
+                Logger::getInstance().error(QString("Failed to upload blast equipment. data: %1")
+                                                .arg(QJsonDocument(equipmentRecord->ToJson())
+                                                         .toJson(QJsonDocument::Indented)));
+            } else {
+                Logger::getInstance().info(
+                    QString("Successfully uploaded blast equipment. data: %1")
+                        .arg(QJsonDocument(equipmentRecord->ToJson())
+                                 .toJson(QJsonDocument::Indented)));
+            }
+        }
+    } else {
+        Logger::getInstance().warn("No equipment records to upload.");
+    }
+
+    // dets数量可能较多,切片最多50条分批次发送
+    if (!detsRecords.isEmpty()) {
+        int batchSize = 50;  // 每批次最多50条
+        for (int i = 0; i < detsRecords.size(); i += batchSize) {
+            QList<HBlastRecordDet *> batch = detsRecords.mid(i, batchSize);
+            QJsonArray detsArray;
+            for (const auto &det : batch) {
+                detsArray.append(det->ToJson());
+            }
+            QJsonObject detsJsonObject;
+            detsJsonObject["blast_record_dets"] = detsArray;
+
+            if (!backendAPIManager::uploadBlastProjectDets(detsJsonObject)) {
+                Logger::getInstance().error(
+                    QString("Failed to upload blast dets. data: %1")
+                        .arg(QString(QJsonDocument(detsArray).toJson(QJsonDocument::Indented))));
+            } else {
+                Logger::getInstance().info(
+                    QString("Successfully uploaded blast dets. data: %1")
+                        .arg(QString(QJsonDocument(detsArray).toJson(QJsonDocument::Indented))));
+            }
+        }
+    } else {
+        Logger::getInstance().warn("No det records to upload.");
+    }
 }
 
 void firingWidget::saveAndUploadRecord(const QJsonObject &jsonObj) {
@@ -401,40 +456,27 @@ void firingWidget::saveAndUploadRecord(const QJsonObject &jsonObj) {
     HBlastRecord *blastRecord = recordBlastProject(jsonObj);
     if (blastRecord == nullptr) {
         Logger::getInstance("error_blast_records.log")
-            .error(QString("Failed to create blast record. data: %1")
-                       .arg(QJsonDocument(jsonObj).toJson(QJsonDocument::Indented)));
-        Logger::getInstance().info(
-            QString("Failed to create blast record. try to rollback the transaction: %1")
-                .arg(db.rollback()));
-        return;
-    }
-    if (!recordBlastEquipments(jsonObj)) {
-        if (db.rollback()) {
-            qDebug() << "Transaction rolled back successfully for equiments.";
-        } else {
-            qDebug() << "Failed to roll back transaction:" << db.lastError().text();
-        }
-        return;
-    }
-    QList<HBlastRecordDet *> detsRecords = recordDetsData(jsonObj);
-    if (detsRecords.isEmpty()) {
-        if (db.rollback()) {
-            qDebug() << "Transaction rolled back successfully.";
-        } else {
-            qDebug() << "Failed to roll back transaction:" << db.lastError().text();
-        }
+            .error(QString("Failed to create blast record. projectName: %1, ProjectID: %2; "
+                           "rollback transaction: %3")
+                       .arg(jsonObj["project_name"].toString(), jsonObj["project_htid"].toString(),
+                            db.rollback() ? "success" : "failed"));
         return;
     }
 
-    db.commit();
+    QList<HBlastRecordDet *> detsRecords = recordBlastProjectDets(jsonObj);
+    QList<HBlastEquipmentRecord *> equipmentRecords = recordBlastEquipments(jsonObj);
 
-    if (blastRecord != nullptr) {
-        if (!backendAPIManager::uploadBlastProject(blastRecord->BlastRecordToJson())) {
-            Logger::getInstance().error(QString("Failed to upload blast project. data: %1")
-                                            .arg(QJsonDocument(blastRecord->BlastRecordToJson())
-                                                     .toJson(QJsonDocument::Indented)));
-        }
+    if (db.commit()) {
+        Logger::getInstance().info(
+            QString("Transaction committed successfully. blast_uuid: %1").arg(blast_uuid));
+    } else {
+        Logger::getInstance().error(
+            QString("Failed to commit transaction: %1. try to rollback: %2")
+                .arg(db.lastError().text(), db.rollback() ? "success" : "failed"));
+        return;
     }
+
+    uploadBlastRecordToServer(blastRecord, equipmentRecords, detsRecords);
 }
 
 HBlastRecord *firingWidget::recordBlastProject(const QJsonObject &jsonObj) {
@@ -449,7 +491,7 @@ HBlastRecord *firingWidget::recordBlastProject(const QJsonObject &jsonObj) {
     record->setCompanyCode(jsonObj["company_code"].toString());
     record->setAppVersion(jsonObj["app_version"].toString());
 
-    record->setLongitude(jsonObj["blast_longitude"].toString().left(10));
+    record->setLongitude(jsonObj["blast_longitude"].toString().left(10));  // TODO: 确认地址长度
     record->setLatitude(jsonObj["blast_latitude"].toString().left(10));
 
     // record->setLongitude(lat);
@@ -473,7 +515,7 @@ HBlastRecord *firingWidget::recordBlastProject(const QJsonObject &jsonObj) {
     }
 }
 
-QList<HBlastRecordDet *> firingWidget::recordDetsData(const QJsonObject &jsonObj) {
+QList<HBlastRecordDet *> firingWidget::recordBlastProjectDets(const QJsonObject &jsonObj) {
     QList<HBlastRecordDet *> recordDets;
     QJsonArray regsArray = jsonObj["regs"].toArray();
 
@@ -505,8 +547,7 @@ QList<HBlastRecordDet *> firingWidget::recordDetsData(const QJsonObject &jsonObj
             } else {
                 Logger::getInstance().error(
                     QString("Failed to insert record det. data %1")
-                        .arg(QJsonDocument(recordDet->BlastRecordDetToJson())
-                                 .toJson(QJsonDocument::Compact)));
+                        .arg(QJsonDocument(recordDet->ToJson()).toJson(QJsonDocument::Compact)));
                 delete recordDet;
                 continue;
             }

+ 12 - 10
fireWidget/firingwidget.h

@@ -31,11 +31,18 @@ class firingWidget : public QWidget {
 
    public slots:
     void onCountdownFinished(const QString &topic, const QString &message);
+
    private slots:
     void on_pushButton_2_clicked();
     void on_sendTest_4_clicked();
     void handleMessageAndTopic(const QByteArray &message, const QMqttTopicName &topic);
 
+    void onMqttConnected();
+    // 双键按下
+    void onButtonPressedReceived(const QString &topic, const QString &message);
+    void onLastStageChanged(int newStage);
+    void onBlastSucess(const QJsonObject &data);
+
    signals:
     void progressChanged(int value, int row);
     void lastStageChanged(int newStage);
@@ -46,21 +53,16 @@ class firingWidget : public QWidget {
     void updateData(const QJsonObject &jsonObj);
     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 onLastStageChanged(int newStage);
-    void onBlastSucess(const QJsonObject &data);
 
    private:
-    bool recordBlastEquipments(const QJsonObject &jsonObj);
-    QList<HBlastRecordDet *> recordDetsData(const QJsonObject &jsonObj);
+    void uploadBlastRecordToServer(HBlastRecord *blastRecord,
+                                   const QList<HBlastEquipmentRecord *> &equipmentRecords,
+                                   const QList<HBlastRecordDet *> &detsRecords);
+    QList<HBlastEquipmentRecord *> recordBlastEquipments(const QJsonObject &jsonObj);
+    QList<HBlastRecordDet *> recordBlastProjectDets(const QJsonObject &jsonObj);
     bool uploadToDanLing(const QJsonObject &jsonObj);
     HBlastRecord *recordBlastProject(const QJsonObject &jsonObj);
     void saveAndUploadRecord(const QJsonObject &jsonObj);
-    void uploadToServer(const QJsonObject &jsonObj);
     void sendMqttMessage(const QString &topic, const QByteArray &message);
     void startBlasting();
 

+ 3 - 2
global.cpp

@@ -1,10 +1,11 @@
 #include "global.h"
 
-QUrl apiBackendUrl("http://114.55.233.194:8088/api/v1/");  // 定义并初始化全局变量
+QUrl apiBackendUrl("http://localhost:8000/api/v1/");  // 定义并初始化全局变量
 QString labLat("未知");
 QString labLon("未知");
 QString globalAuthority;
 QString firewidgetPort("COM1");
 QString gpsPort("COM3");
 QString databaseHost("127.0.0.1");
-QString mqttClientId("mqttclientOnDevPC");
+QString mqttClientId("mqttclient_OnDevPC");
+bool isShowTriggeringWidget = true;

+ 5 - 4
global.h

@@ -11,9 +11,10 @@ extern QUrl apiBackendUrl;  // 声明全局变量
 extern QString labLat;      // 新增的全局变量声明
 extern QString labLon;      // 新增的全局变量声明
 extern QString globalAuthority;
-extern QString firewidgetPort;  // 点火装置串口号
-extern QString gpsPort;         // gps串口号
-extern QString databaseHost;    // pc数据库地址
-extern QString mqttClientId;    // mqtt客户端ID
+extern QString firewidgetPort;       // 点火装置串口号
+extern QString gpsPort;              // gps串口号
+extern QString databaseHost;         // pc数据库地址
+extern QString mqttClientId;         // mqtt客户端ID
+extern bool isShowTriggeringWidget;  // 是否显示点火装置触发中调试组件
 
 #endif  // GLOBAL_H

二进制
icons/loading.gif


+ 43 - 22
login/loginwindow.cpp

@@ -46,7 +46,7 @@ void LoginWindow::on_btnLogin_clicked() {
         // 发送 POST 请求
         QNetworkReply *reply = manager->post(request, data);
         // 处理响应
-        QObject::connect(reply, &QNetworkReply::finished, [reply, this, username, password]() {
+        auto handleLoginResponse = [this, username, password](QNetworkReply *reply) {
             try {
                 if (reply->error() == QNetworkReply::NoError) {
                     QByteArray responseData = reply->readAll();
@@ -62,25 +62,23 @@ void LoginWindow::on_btnLogin_clicked() {
                                 msgBox->setText("用户名或密码错误,请重试。");
                                 msgBox->setWindowFlags(msgBox->windowFlags() |
                                                        Qt::FramelessWindowHint);
-                                msgBox->setStandardButtons(
-                                    QMessageBox::NoButton);  // 不设置标准按钮
+                                msgBox->setStandardButtons(QMessageBox::NoButton);
 
                                 msgBox->setStyleSheet(
                                     "QMessageBox {"
-                                    "    border: none; /* 去除边框 */"
+                                    "    border: none;"
                                     "}"
                                     "QLabel {"
-                                    "    color: #a94442; /* 标签文字颜色 */"
-                                    "    background-color: transparent; /* 标签背景透明 */"
-                                    "    font-size: 20px; /* 设置字体大小,可根据需要调整 */"
+                                    "    color: #a94442;"
+                                    "    background-color: transparent;"
+                                    "    font-size: 20px;"
                                     "}"
                                     "QPushButton {"
-                                    "    visibility: hidden; /* 隐藏按钮 */"
+                                    "    visibility: hidden;"
                                     "}");
-                                // 使用 QTimer 在 3 秒后自动关闭消息框
                                 QTimer::singleShot(1500, msgBox, [msgBox]() {
                                     msgBox->close();
-                                    delete msgBox;  // 释放内存
+                                    delete msgBox;
                                 });
                                 msgBox->show();
                             } else if (code == 200) {
@@ -99,16 +97,38 @@ void LoginWindow::on_btnLogin_clicked() {
 
                                 /*TODO: delete test code
                                 QString jsonString =
-                                "{\"app_version\":\"1.52\",\"blast_latitude\":\"30.21122186731856\",\"blast_longitude\":\"120.22146062951883\",\"blast_time\":\"2025-06-03
-                                12:00:00\",\"company_code\":\"3701234300003\",\"equipment_sn\":\"F34A0000001\",\"error_deto_count\":\"0\",\"operator_identity\":\"330781198509079292\",\"operator_name\":\"栋工\",\"phone\":\"18611112222\",\"project_htid\":\"\",\"project_name\":\"sidf\",\"project_xmbh\":\"\",\"reg_deto_count\":\"2\",\"regs\":[{\"after_test_bus_i\":\"41\",\"after_test_bus_v\":\"8006\",\"before_blasting_i\":\"49\",\"before_blasting_v\":\"13492\",\"bus_leakage_current_i\":\"0\",\"dets\":[{\"delay_time\":\"0.0\",\"freq\":\"0\",\"in_code\":\"005AC8360A4C01A7\",\"out_code\":\"2411104F18000\",\"status\":\"0x00\",\"tag\":\"1-1-1\",\"uid\":\"24211104F18000\"},{\"delay_time\":\"80.0\",\"freq\":\"0\",\"in_code\":\"015AC8360A4C014E\",\"out_code\":\"2411104F18001\",\"status\":\"0x00\",\"tag\":\"1-2-1\",\"uid\":\"24211104F18001\"}],\"equipment_sn\":\"null\",\"equipment_version\":\"null\",\"error_deto_count\":\"0\",\"net_charged_i\":\"49\",\"net_charged_v\":\"13501\",\"reg_deto_count\":\"2\"}]}";
+                                    "{\"app_version\":\"1.52\",\"blast_latitude\":\"30."
+                                    "21122186731856\",\"blast_longitude\":\"120.22146062951883\","
+                                    "\"blast_time\":\"2025-06-03 "
+                                    "12:00:00\",\"company_code\":\"3701234300003\",\"equipment_"
+                                    "sn\":\"F34A0000001\",\"error_deto_count\":\"0\",\"operator_"
+                                    "identity\":\"330781198509079292\",\"operator_name\":\"栋工\","
+                                    "\"phone\":\"18611112222\",\"project_htid\":\"\",\"project_"
+                                    "name\":\"sidf\",\"project_xmbh\":\"\",\"reg_deto_count\":"
+                                    "\"2\",\"regs\":[{\"after_test_bus_i\":\"41\",\"after_test_bus_"
+                                    "v\":\"8006\",\"before_blasting_i\":\"49\",\"before_blasting_"
+                                    "v\":\"13492\",\"bus_leakage_current_i\":\"0\",\"dets\":[{"
+                                    "\"delay_time\":\"0.0\",\"freq\":\"0\",\"in_code\":"
+                                    "\"005AC8360A4C01A7\",\"out_code\":\"2411104F18000\","
+                                    "\"status\":\"0x00\",\"tag\":\"1-1-1\",\"uid\":"
+                                    "\"24211104F18000\"},{\"delay_time\":\"80.0\",\"freq\":\"0\","
+                                    "\"in_code\":\"015AC8360A4C014E\",\"out_code\":"
+                                    "\"2411104F18001\",\"status\":\"0x00\",\"tag\":\"1-2-1\","
+                                    "\"uid\":\"24211104F18001\"}],\"equipment_sn\":\"null\","
+                                    "\"equipment_version\":\"null\",\"error_deto_count\":\"0\","
+                                    "\"net_charged_i\":\"49\",\"net_charged_v\":\"13501\",\"reg_"
+                                    "deto_count\":\"2\"}]}";
                                 // 使用 QJsonDocument::fromJson 直接解析 QByteArray 并获取
-                                QJsonObject
-                                // 这是一个非常简洁的单行操作,假设你知道顶层是 JSON
-                                对象且不关心详细的错误信息 QJsonObject myJsonObject =
-                                QJsonDocument::fromJson(jsonString.toUtf8()).object(); qDebug() <<
-                                "debug" <<
-                                QDateTime::fromString(myJsonObject["blast_time"].toString(),
-                                "yyyy-MM-dd hh:mm:ss").toString(Qt::ISODateWithMs); int row = 1;
+                                // QJsonObject 这是一个非常简洁的单行操作,假设你知道顶层是 JSON
+                                // 对象且不关心详细的错误信息
+                                QJsonObject myJsonObject =
+                                    QJsonDocument::fromJson(jsonString.toUtf8()).object();
+                                qDebug()
+                                    << "debug"
+                                    << QDateTime::fromString(myJsonObject["blast_time"].toString(),
+                                                             "yyyy-MM-dd hh:mm:ss")
+                                           .toString(Qt::ISODateWithMs);
+                                int row = 1;
                                 firingWidget *wt = new firingWidget(row, false, "111");
                                 wt->testonBlastSucess(myJsonObject);
                                 //<< Delete
@@ -120,13 +140,11 @@ void LoginWindow::on_btnLogin_clicked() {
                                 int screenHeight = screenGeometry.height();
                                 mainWindow->resize(screenWidth * 1, screenHeight * 0.95);
 
-                                // 计算窗口居中时的左上角坐标
                                 int windowWidth = mainWindow->width();
                                 int windowHeight = mainWindow->height();
                                 int x = (screenWidth - windowWidth) / 2;
                                 int y = (screenHeight - windowHeight) / 2;
 
-                                // 移动窗口到居中位置
                                 mainWindow->move(x, y - 10);
                                 mainWindow->show();
                             }
@@ -142,7 +160,10 @@ void LoginWindow::on_btnLogin_clicked() {
                 qDebug() << "Exception in response handling: " << e.what();
             }
             reply->deleteLater();
-        });
+        };
+
+        QObject::connect(reply, &QNetworkReply::finished,
+                         [reply, handleLoginResponse]() { handleLoginResponse(reply); });
     } catch (const std::exception &e) {
         qDebug() << "Exception in request sending: " << e.what();
     }

+ 0 - 1
mainwindow.cpp

@@ -18,7 +18,6 @@
 
 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {
     try {
-        // 去除窗口边界,设置为无边框窗口
         this->setWindowFlags(Qt::FramelessWindowHint);
         // this->setWindowState(Qt::WindowMaximized);  // Maximizes the window
         this->setFixedSize(1024, 768);