firingwidget.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #ifndef FIRINGWIDGET_H
  2. #define FIRINGWIDGET_H
  3. #include <QJsonDocument>
  4. #include <QJsonObject>
  5. #include <QMqttSubscription>
  6. #include <QWidget>
  7. #include "../backendapimanager.h"
  8. #include "../blastRecord/hblastrecord.h"
  9. #include "../blastRecord/hblastrecorddao.h"
  10. #include "../blastRecordDet/hblastrecorddetdao.h"
  11. #include "../blastRegRecord/hblastregrecorddao.h"
  12. #include "../databasemanager.h"
  13. #include "../des3encryption.h"
  14. #include "../logger.h"
  15. #include "../mqtt/mqttclient.h"
  16. #include "../serial/serialtool.h"
  17. #include "navprogress.h"
  18. /* ref: 起爆器端协议
  19. public class Reply{
  20. private int status=0;
  21. private String msg = "”;
  22. private int regcount = 0;
  23. private int errorCount =0;
  24. private int busVoltage = 0;
  25. private int buscurrent =0;
  26. private int stage = 1;//起爆检测中,起爆检测完成,充电中,充电完成, 起爆中,起爆完成
  27. }
  28. */
  29. namespace Ui {
  30. class firingWidget;
  31. }
  32. // Error status codes for device and bus issues
  33. class firingWidget : public QWidget {
  34. Q_OBJECT
  35. public:
  36. explicit firingWidget(const int &row, const bool &select, const QString &uuid = "", QWidget *parent = nullptr);
  37. ~firingWidget();
  38. void sendCancelFiringMsg();
  39. void testOnBlastSuccess(const QJsonObject &data);
  40. void startBlasting();
  41. public slots:
  42. void onCountdownFinished(const QString &topic, const QString &message);
  43. private slots:
  44. void on_pushButton_2_clicked();
  45. void on_sendTest_4_clicked();
  46. void handleProjectFiringMqttMessage(const QMqttMessage &qmessage);
  47. void onMqttConnected();
  48. void onMqttDisconnected();
  49. // 双键按下
  50. void onButtonPressedReceived(const QString &topic, const QString &message);
  51. void handleFiringStageChanged(int newStage);
  52. void onBlastSuccess(const QJsonObject &data);
  53. signals:
  54. void progressChanged(int value, int row);
  55. void lastStageChanged(int newStage);
  56. void projSafeCheckSuccess(QString projectUuid);
  57. void updateBlastStatus(int status, int row);
  58. void batchFiringSignal(QString uuid);
  59. void updateProjectStatus(QString uuid, QString status);
  60. void updateData(const QJsonObject &jsonObj);
  61. void safeChecked(const QJsonObject &jsonObj);
  62. void countdown(QString uuid, const QString &topic, const QString &message);
  63. void closeFiring(QString uuid, int row);
  64. private:
  65. void checkBlasterConnection();
  66. void uploadBlastRecordToServer(HBlastRecord *blastRecord);
  67. HBlastRecord *recordBlastProject(const QJsonObject &jsonObj);
  68. HBlastEquipmentRecord *recordBlastEquipment(const QString blastProjectUUID, const QJsonObject &regObj);
  69. QList<HBlastRecordDet *> recordBlastProjectDets(const QString projectUUID, const QString equipmentUUID,
  70. const QJsonArray regsArray);
  71. bool uploadToDanLing(const QJsonObject &jsonObj);
  72. void saveAndUploadRecord(const QJsonObject &jsonObj);
  73. void sendMqttMessage(const QString &topic, const QByteArray &message);
  74. void onSafeChecked(const QString projectUuid);
  75. private:
  76. Ui::firingWidget *ui;
  77. MqttClient *pcPorjectBC;
  78. HBlastRecordDao daoProj;
  79. HBlastRecordDetDao daoDet;
  80. HBlastRegRecordDao daoReg;
  81. NavProgress *navProgress;
  82. SerialTool *serialTool = nullptr;
  83. QString m_curProjUuid;
  84. QString m_topic; // firingwidget对应的 MQTT 主题
  85. int m_row;
  86. int m_lastStage = -1; // 用于记录上一次的 stage 状态
  87. bool m_select;
  88. QMetaObject::Connection connection; // 声明 connection 变量
  89. QMetaObject::Connection connectionPress;
  90. QString m_latitude;
  91. QString m_longitude;
  92. QDateTime m_lastMsgTime;
  93. QTimer *m_connectionCheckTimer;
  94. QMqttSubscription *m_subscription; // 用于订阅 MQTT 消息
  95. bool m_isDestroying = false; // Flag to prevent operations during destruction
  96. };
  97. #endif // FIRINGWIDGET_H