detinfopage.cpp 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. #include "detinfopage.h"
  2. #include <QTimer>
  3. #include "QMessageBox"
  4. #include "ui_detinfopage.h"
  5. DetInfoPage::DetInfoPage(QWidget* parent) : QWidget(parent), ui(new Ui::DetInfoPage) {
  6. ui->setupUi(this);
  7. m_pPageWidget = new PageWidget;
  8. connect(m_pPageWidget, &PageWidget::currentPageChanged, this, &DetInfoPage::PageChanged);
  9. connect(m_pPageWidget->getComboBox(), QOverload<int>::of(&QComboBox::currentIndexChanged), this,
  10. &DetInfoPage::onComboBoxIndexChanged);
  11. m_httpClient = new HttpClient(this);
  12. pageSize = 10;
  13. currentPage = 1;
  14. ui->verticalLayout_4->addWidget(m_pPageWidget);
  15. loadAndRefreshData();
  16. }
  17. void DetInfoPage::loadAndRefreshData() { loadDataFromSource(currentPage, pageSize); }
  18. void DetInfoPage::loadDataFromSource(int currentPage, int pageSize, const QString& equipmentSn) {
  19. QUrl localUrl("projectdet/pc");
  20. QUrlQuery query;
  21. query.addQueryItem("pageIndex", QString::number(currentPage));
  22. query.addQueryItem("pageSize", QString::number(pageSize));
  23. if (!equipmentSn.isEmpty()) {
  24. query.addQueryItem("equipmentSn", equipmentSn);
  25. }
  26. localUrl.setQuery(query);
  27. QUrl fullUrl = apiBackendUrl.resolved(localUrl);
  28. m_httpClient->sendHttpGetRequest(fullUrl);
  29. connect(m_httpClient, &HttpClient::httpGetFinished, [this](const QJsonDocument& data) { this->dataTable(data); });
  30. }
  31. void DetInfoPage::PageChanged(int page) {
  32. currentPage = page;
  33. loadDataFromSource(currentPage, pageSize);
  34. }
  35. void DetInfoPage::onComboBoxIndexChanged(int index) {
  36. QVariant variant = m_pPageWidget->getComboBox()->itemData(index);
  37. int value = variant.toInt();
  38. pageSize = value;
  39. loadDataFromSource(currentPage, pageSize);
  40. }
  41. void DetInfoPage::dataTable(const QJsonDocument& jsonDoc) {
  42. parseJsonString(jsonDoc);
  43. model = new QStandardItemModel(this);
  44. model->setHorizontalHeaderLabels({"管码", "uid码", "创建时间"});
  45. for (const QJsonValue& jsonValue : dataArray) {
  46. QJsonObject jsonObj = jsonValue.toObject();
  47. QList<QStandardItem*> items = jsonToItem(jsonObj);
  48. model->appendRow(items);
  49. }
  50. ui->tableView->setModel(model);
  51. ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
  52. ui->tableView->setAlternatingRowColors(true);
  53. }
  54. QList<QStandardItem*> DetInfoPage::jsonToItem(const QJsonObject& jsonObj) {
  55. // QStandardItem* nameItem = new QStandardItem(jsonObj["name"].toString());
  56. // nameItem->setTextAlignment(Qt::AlignCenter);
  57. QStandardItem* fbhItem = new QStandardItem(jsonObj["fbh"].toString());
  58. QStandardItem* uidItem = new QStandardItem(jsonObj["uid"].toString());
  59. QStandardItem* gzmItem = new QStandardItem(jsonObj["gzm"].toString());
  60. QString yxqStr = jsonObj["yxq"].toString();
  61. QDateTime yxq = QDateTime::fromString(yxqStr, Qt::ISODateWithMs);
  62. QString formattedYxq = yxq.toString("yyyy-MM-dd HH:mm:ss");
  63. QStandardItem* yxqItem = new QStandardItem(formattedYxq);
  64. QStandardItem* isUseItem = new QStandardItem(jsonObj["isUse"].toInt());
  65. QString createdAtStr = jsonObj["createdAt"].toString();
  66. QDateTime createdAt = QDateTime::fromString(createdAtStr, Qt::ISODateWithMs);
  67. QString formattedCreatedAt = createdAt.toString("yyyy-MM-dd HH:mm:ss");
  68. QStandardItem* createdItem = new QStandardItem(formattedCreatedAt);
  69. return QList<QStandardItem*>() << fbhItem << uidItem << createdItem;
  70. }
  71. void DetInfoPage::parseJsonString(const QJsonDocument& jsonDoc) {
  72. QJsonObject jsonObj = jsonDoc.object();
  73. QJsonObject dataObj = jsonObj["data"].toObject();
  74. dataArray = dataObj["list"].toArray();
  75. totalCount = dataObj["count"].toInt();
  76. m_pPageWidget->setMaxPage(ceil(static_cast<double>(totalCount) / pageSize));
  77. }
  78. DetInfoPage::~DetInfoPage() { delete ui; }
  79. void DetInfoPage::on_pushButton_clicked() {
  80. dialog = new DetDialog;
  81. dialog->setModal(false);
  82. connect(dialog, &DetDialog::createDets, this, &DetInfoPage::insertDet);
  83. int ref = dialog->exec();
  84. if (ref == QDialog::Accepted) {};
  85. }
  86. void DetInfoPage::insertDet(const QJsonDocument& jsonDoc) {
  87. QNetworkAccessManager manager;
  88. QUrl localUrl("det");
  89. QUrl fullUrl = apiBackendUrl.resolved(localUrl);
  90. QJsonObject postData;
  91. if (!jsonDoc.isNull() && jsonDoc.isObject()) {
  92. QJsonObject obj = jsonDoc.object();
  93. for (const QString& key : obj.keys()) {
  94. QJsonValue value = obj.value(key);
  95. if (value.isString()) {
  96. postData[key] = value.toString();
  97. }
  98. }
  99. postData["xmbh"] = DET_PARAM_XMBH;
  100. postData["dwdm"] = DET_PARAM_DWDM;
  101. postData["htid"] = DET_PARAM_HTID;
  102. postData["sbbh"] = DET_PARAM_SBBH;
  103. }
  104. QNetworkRequest request(fullUrl);
  105. request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
  106. request.setRawHeader("Authorization", globalAuthority.toUtf8());
  107. QJsonDocument jsonDocument(postData);
  108. QByteArray jsonData = jsonDocument.toJson();
  109. QNetworkReply* reply = manager.post(request, jsonData);
  110. // 使用事件循环等待请求完成
  111. QEventLoop loop;
  112. QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
  113. loop.exec();
  114. // 检查请求是否成功
  115. if (reply->error() == QNetworkReply::NoError) {
  116. // 获取响应数据
  117. QByteArray responseData = reply->readAll();
  118. QJsonDocument respData = QJsonDocument::fromJson(responseData);
  119. QJsonObject responseObject = respData.object();
  120. if (responseObject.contains("code") && responseObject["code"].toInt() == 200) {
  121. // 处理成功响应
  122. QMessageBox::information(nullptr, "雷管密文下发",
  123. "密文下发已经成功申请,由于请求较慢,请2分钟后刷新确认下发成功");
  124. loadAndRefreshData();
  125. } else {
  126. // 处理错误响应
  127. QMessageBox::information(nullptr, "雷管密文下发",
  128. QString("密文下发申请失败: %1").arg(responseObject.value("msg").toString()));
  129. Logger::getInstance().error(
  130. QString("请求创建雷管报错. Error: %1\n\t response: %2").arg(reply->errorString()).arg(responseData));
  131. }
  132. } else {
  133. // 处理请求错误
  134. Logger::getInstance().error(
  135. QString("请求创建雷管报错. Error: %1\n\t query: %2").arg(reply->errorString()).arg(jsonData));
  136. }
  137. // 释放资源
  138. reply->deleteLater();
  139. }