firingwidget.h 3.1 KB

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