浏览代码

debuged det distribute; add project fields;

Yao 1 月之前
父节点
当前提交
1b22a733c1

+ 24 - 16
blastProject/blastprojectpage.cpp

@@ -193,6 +193,7 @@ void BlastProjectPage::on_pushButton_clicked() {
 }
 
 void BlastProjectPage::insertPlan(const QMap<QString, QString> &data) {
+    qDebug() << "insertPlan called with data:" << data;
     HProject project;
     project.setName(data.value("name"));
     project.setDetSum(data.value("detNum"));
@@ -206,28 +207,33 @@ void BlastProjectPage::insertPlan(const QMap<QString, QString> &data) {
     project.setLoraSn(data.value("loraSn"));
     project.setBlastCount(data.value("blastCount"));
     project.setBlastStatus("1");
-    // 生成 32 位的 UUID
-    QString uuidString = QUuid::createUuid().toString(QUuid::WithoutBraces).remove(QRegularExpression("-"));
-    project.setUuid(uuidString);
+    project.setCompanyCode(COMPANY_CODE);
+    project.setXmbh(data.value("xmbh"));
+    project.setHtid(data.value("htid"));
+    project.setUuid(QUuid::createUuid().toString(QUuid::WithoutBraces).remove(QRegularExpression("-")));
     project.setCreatedAt(QDateTime::currentDateTime());
     if (dao.addHProject(project)) {
         RefreshData();
-        QJsonArray jsonArray;
-        QList<QSharedPointer<HProject>> projectsReg = dao.getAllHProjectsReg();
-        for (const auto &projectPtr : projectsReg) {
-            if (projectPtr) {
-                QByteArray projectJson = projectPtr->ProjectToJson(*projectPtr);
-                QJsonDocument doc = QJsonDocument::fromJson(projectJson);
-                jsonArray.append(doc.object());
-            }
+        publishAllPendingBlastProjects();
+    }
+}
+
+void BlastProjectPage::publishAllPendingBlastProjects() {
+    QJsonArray jsonArray;
+    QList<QSharedPointer<HProject>> projectsReg = dao.getAllHProjectsReg();
+    for (const auto &projectPtr : projectsReg) {
+        if (projectPtr) {
+            QByteArray projectJson = projectPtr->ProjectToJson(*projectPtr);
+            QJsonDocument doc = QJsonDocument::fromJson(projectJson);
+            jsonArray.append(doc.object());
         }
+    }
 
-        QJsonDocument jsonDoc(jsonArray);
-        QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Indented);
+    QJsonDocument jsonDoc(jsonArray);
+    QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Indented);
 
-        mqttClient->sendMessage("hxgc/companycode/pro/B", jsonData, 2, true);
-    }
-}
+    mqttClient->sendMessage("hxgc/companycode/pro/B", jsonData, 2, true);
+};
 
 void BlastProjectPage::updateButtonClicked(const HProject &project) {
     dialog->setModal(false);
@@ -250,11 +256,13 @@ void BlastProjectPage::updateProject(const QMap<QString, QString> &data) {
     project.setUpdatedAt(QDateTime::currentDateTime());
     if (dao.updateHProject(project)) {
         RefreshData();
+        publishAllPendingBlastProjects();
     }
 }
 void BlastProjectPage::deleteButtonClicked(const HProject &project) {
     if (dao.deleteHProject(project)) {
         RefreshData();
+        publishAllPendingBlastProjects();
     }
 }
 

+ 1 - 0
blastProject/blastprojectpage.h

@@ -43,6 +43,7 @@ class BlastProjectPage : public QWidget {
     void updateProject(const QMap<QString, QString> &data);
     void deleteButtonClicked(const HProject &project);
     void extractNames(const QJsonArray &array, QStringList &names);
+    void publishAllPendingBlastProjects();
 
    private:
     Ui::BlastProjectPage *ui;

+ 3 - 0
blastProject/hproject.cpp

@@ -107,6 +107,9 @@ QByteArray HProject::ProjectToJson(const HProject &project) {
     QJsonObject jsonObject;
     jsonObject["name"] = project.getName();
     jsonObject["uuid"] = project.getUuid();
+    jsonObject["xmbh"] = project.getXmbh();
+    jsonObject["htid"] = project.getHtid();
+    jsonObject["companyCode"] = project.getCompanyCode();
     jsonObject["detSum"] = project.getDetSum();
     jsonObject["blasterName"] = project.getBlasterName();
     jsonObject["operatorName"] = project.getOperatorName();

+ 4 - 1
blastProject/projectdialog.cpp

@@ -166,6 +166,8 @@ void ProjectDialog::validateAndSaveProject() {
     QString l2AddressName = ui->comboBoxAddr_2->currentText().trimmed();
     QString l3AddressName = ui->comboBoxAddr_3->currentText().trimmed();
     QString loraAddress = ui->comboBoxLora->currentText().trimmed();
+    QString xmbh = ui->editXMBH->text().trimmed();
+    QString htid = ui->editHTID->text().trimmed();
 
     if (detNum.isEmpty() || !ui->editDetNum->hasAcceptableInput()) {
         QMessageBox::warning(nullptr, "输入错误", "请输入0-10000的数字!");
@@ -175,6 +177,8 @@ void ProjectDialog::validateAndSaveProject() {
     QMap<QString, QString> data;
     data["detNum"] = detNum;
     data["name"] = projectName;
+    data["xmbh"] = xmbh;
+    data["htid"] = htid;
     data["operatorName"] = operatorName;
     data["blasterName"] = blastName;
     // 选择level最低的uui:w
@@ -229,7 +233,6 @@ void ProjectDialog::setFormData(const HProject &Project) {
         }
         QStringList addressParts = Project.getAddressPath().split("/");
         int numAddresses = addressParts.size();
-        qDebug() << "numAddresses " << numAddresses;
         QVector<QString> addressVariables;
         for (int i = 0; i < numAddresses; ++i) {
             QString part = addressParts[i];

+ 1 - 0
blastopepage.cpp

@@ -638,6 +638,7 @@ void BlastOpePage::handlerUpdateProjectStatus(QString uuid, const QString &newSt
 }
 
 void BlastOpePage::destroyFiringWidget(const QString &uuid) {
+    qDebug() << "Destroying firingWidget with uuid:" << uuid;
     firingWidget *widget = firingWidgetByUuid.value(uuid);
     if (widget) {
         widget->close();                  // 关闭窗口

+ 1 - 2
detInfo/detdialog.cpp

@@ -58,8 +58,7 @@ void DetDialog::validateInput() {
     QJsonDocument jsonDoc(jsonObject);
     qDebug() << jsonDoc;
 
-    emit validateDetNum(jsonDoc);
-    clearFormData();  // 清除表单数据
+    emit createDets(jsonDoc);
     // this->accept();
 }
 

+ 1 - 1
detInfo/detdialog.h

@@ -16,7 +16,7 @@ class DetDialog : public QDialog {
     explicit DetDialog(QWidget *parent = nullptr);
     ~DetDialog();
    signals:
-    void validateDetNum(const QJsonDocument &jsonDoc);
+    void createDets(const QJsonDocument &jsonDoc);
    private slots:
     void onComboTypeIndexChanged(int index);
     void validateInput();

+ 30 - 12
detInfo/detinfopage.cpp

@@ -2,6 +2,7 @@
 
 #include <QTimer>
 
+#include "QMessageBox"
 #include "ui_detinfopage.h"
 
 DetInfoPage::DetInfoPage(QWidget* parent) : QWidget(parent), ui(new Ui::DetInfoPage) {
@@ -92,7 +93,7 @@ DetInfoPage::~DetInfoPage() { delete ui; }
 void DetInfoPage::on_pushButton_clicked() {
     dialog = new DetDialog;
     dialog->setModal(false);
-    connect(dialog, &DetDialog::validateDetNum, this, &DetInfoPage::insertDet);
+    connect(dialog, &DetDialog::createDets, this, &DetInfoPage::insertDet);
     int ref = dialog->exec();
     if (ref == QDialog::Accepted) {};
 }
@@ -101,23 +102,27 @@ void DetInfoPage::insertDet(const QJsonDocument& jsonDoc) {
     QNetworkAccessManager manager;
     QUrl localUrl("det");
     QUrl fullUrl = apiBackendUrl.resolved(localUrl);
-    qDebug() << "-----insert Det" << fullUrl;
-    QUrlQuery query;
+
+    QJsonObject postData;
     if (!jsonDoc.isNull() && jsonDoc.isObject()) {
         QJsonObject obj = jsonDoc.object();
         for (const QString& key : obj.keys()) {
             QJsonValue value = obj.value(key);
             if (value.isString()) {
-                query.addQueryItem(key, value.toString());
+                postData[key] = value.toString();
             }
         }
+        postData["xmbh"] = DET_PARAM_XMBH;
+        postData["dwdm"] = DET_PARAM_DWDM;
+        postData["htid"] = DET_PARAM_HTID;
+        postData["sbbh"] = DET_PARAM_SBBH;
     }
-
-    fullUrl.setQuery(query);
     QNetworkRequest request(fullUrl);
-
+    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
     request.setRawHeader("Authorization", globalAuthority.toUtf8());
-    QNetworkReply* reply = manager.get(request);
+    QJsonDocument jsonDocument(postData);
+    QByteArray jsonData = jsonDocument.toJson();
+    QNetworkReply* reply = manager.post(request, jsonData);
     // 使用事件循环等待请求完成
     QEventLoop loop;
     QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
@@ -126,12 +131,25 @@ void DetInfoPage::insertDet(const QJsonDocument& jsonDoc) {
     if (reply->error() == QNetworkReply::NoError) {
         // 获取响应数据
         QByteArray responseData = reply->readAll();
-        QString responseString = QString::fromUtf8(responseData);
-        qDebug() << "Response:" << responseString;
-        loadAndRefreshData();
+        QJsonDocument respData = QJsonDocument::fromJson(responseData);
+        QJsonObject responseObject = respData.object();
+        if (responseObject.contains("code") && responseObject["code"].toInt() == 200) {
+            // 处理成功响应
+            QMessageBox::information(nullptr, "雷管密文下发",
+                                     "密文下发已经成功申请,由于请求较慢,请2分钟后刷新确认下发成功");
+            loadAndRefreshData();
+        } else {
+            // 处理错误响应
+            QMessageBox::information(nullptr, "雷管密文下发",
+                                     QString("密文下发申请失败: %1").arg(responseObject.value("msg").toString()));
+            Logger::getInstance().error(
+                QString("请求创建雷管报错. Error: %1\n\t response:  %2").arg(reply->errorString()).arg(responseData));
+        }
+
     } else {
         // 处理请求错误
-        qDebug() << "Error:" << reply->errorString();
+        Logger::getInstance().error(
+            QString("请求创建雷管报错. Error: %1\n\t query: %2").arg(reply->errorString()).arg(jsonData));
     }
     // 释放资源
     reply->deleteLater();

+ 18 - 1
global.cpp

@@ -13,6 +13,11 @@ QString gpsPort;
 QString databaseHost;
 QString mqttClientId;
 QString MQTT_TOPIC_COMPANY_PROJECTS;
+QString COMPANY_CODE;
+QString DET_PARAM_XMBH;
+QString DET_PARAM_DWDM;
+QString DET_PARAM_HTID;
+QString DET_PARAM_SBBH;
 bool isShowTriggeringWidget;
 
 void loadConfig() {
@@ -25,5 +30,17 @@ void loadConfig() {
     databaseHost = settings.value("Database/host", "127.0.0.1").toString();
     mqttClientId = settings.value("MQTT/client_id", "mqttclient_PC").toString();
     MQTT_TOPIC_COMPANY_PROJECTS = settings.value("MQTT/topic", "hxgc/companycode/pro/P").toString();
+    COMPANY_CODE = settings.value("Company/code", "cc_hxgc").toString();
     isShowTriggeringWidget = settings.value("UI/show_triggering_widget", false).toBool();
-}
+
+    // Load det parameters
+    DET_PARAM_XMBH = settings.value("DetParams/xmbh", "").toString();
+    DET_PARAM_DWDM = settings.value("DetParams/dwdm", "").toString();
+    DET_PARAM_HTID = settings.value("DetParams/htid", "").toString();
+    DET_PARAM_SBBH = settings.value("DetParams/sbbh", "").toString();
+
+    qDebug() << "Loaded configuration:" << "detparams" << DET_PARAM_XMBH << DET_PARAM_DWDM << DET_PARAM_HTID
+             << DET_PARAM_SBBH;
+}
+
+QMutex globalMutex;  // 全局操作锁

+ 10 - 2
global.h

@@ -7,14 +7,22 @@
 
 #include "logger.h"
 
+/* global variables which can configured in config file */
 extern QUrl apiBackendUrl;                   // 声明全局变量
 extern QString firewidgetPort;               // 点火装置串口号
 extern QString gpsPort;                      // gps串口号
 extern QString databaseHost;                 // pc数据库地址
 extern QString mqttClientId;                 // mqtt客户端ID
 extern QString MQTT_TOPIC_COMPANY_PROJECTS;  // 每个部署点(公司)唯一地址
-extern bool isShowTriggeringWidget;          // 是否显示点火装置触发中调试组件
-extern void loadConfig();                    // 声明全局函数
+extern QString COMPANY_CODE;
+extern bool isShowTriggeringWidget;  // 是否显示点火装置触发中调试组件
+// 用来获取雷管参数
+extern QString DET_PARAM_XMBH;  // 项目编号
+extern QString DET_PARAM_DWDM;  // 单位代码
+extern QString DET_PARAM_HTID;  // 合同ID
+extern QString DET_PARAM_SBBH;  // 设备编号
+
+extern void loadConfig();  // 声明全局函数
 
 extern QString globalAuthority;
 extern QString labLat;  // 新增的全局变量声明

+ 3 - 0
hproject.cpp

@@ -93,6 +93,9 @@ QByteArray HProject::ProjectToJson(const HProject &project) {
     jsonObject["detSum"] = project.getDetSum();
     jsonObject["blasterName"] = project.getBlasterName();
     jsonObject["operatorName"] = project.getOperatorName();
+    jsonObject["xmbh"] = project.getXmbh();
+    jsonObject["htid"] = project.getHtid();
+    jsonObject["companyCode"] = project.getCompanyCode();
     jsonObject["address"] = project.getAddressUuid();
     jsonObject["blasterIdentity"] = project.getBlasterIdentity();
     jsonObject["operatorIdentity"] = project.getOperatorIdentity();