blastrecord.cpp 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. #include "blastrecord.h"
  2. #include "ui_blastrecord.h"
  3. BlastRecord::BlastRecord(QWidget* parent)
  4. : QWidget(parent), ui(new Ui::BlastRecord), dao(DatabaseManager::getInstance().getDatabase()) {
  5. ui->setupUi(this);
  6. m_pPageWidget = new PageWidget;
  7. connect(m_pPageWidget, &PageWidget::currentPageChanged, this, &BlastRecord::PageChanged);
  8. connect(m_pPageWidget->getComboBox(), QOverload<int>::of(&QComboBox::currentIndexChanged), this,
  9. &BlastRecord::onComboBoxIndexChanged);
  10. m_httpClient = new HttpClient(this);
  11. pageSize = 10;
  12. currentPage = 1;
  13. ui->verticalLayout_4->addWidget(m_pPageWidget);
  14. loadAndRefreshData();
  15. }
  16. void BlastRecord::loadAndRefreshData() { loadDataFromSource(currentPage, pageSize); }
  17. void BlastRecord::loadDataFromSource(int currentPage, int pageSize) {
  18. PaginatedHBlastRecordResult result = dao.getAllHRecords(currentPage, pageSize);
  19. QList<QSharedPointer<HBlastRecord>> blastRecordsList = result.BlastRecords;
  20. totalCount = result.totalCount;
  21. m_pPageWidget->setMaxPage(ceil(static_cast<double>(totalCount) / pageSize));
  22. QStandardItemModel* model;
  23. model = new QStandardItemModel(this);
  24. // 定义表头信息
  25. QList<HeaderInfo> headers = {
  26. {"工程名称", "projectName"}, {"是否离线", "isOfflineBlast"}, {"app版本", "appVersion"},
  27. {"起爆器编号", "equipmentSn"}, {"注册雷管", "regDetCount"}, {"起爆时间", "blastAt"},
  28. {"上报时间", "updatedAt"},
  29. };
  30. QStringList headerLabels;
  31. QMap<int, QString> propMap;
  32. for (int i = 0; i < headers.size(); ++i) {
  33. headerLabels << headers[i].label;
  34. propMap[i] = headers[i].prop;
  35. }
  36. model->setHorizontalHeaderLabels(headerLabels);
  37. for (int row = 0; row < blastRecordsList.size(); ++row) {
  38. HBlastRecord& HBlastRecord = *blastRecordsList.at(row).data();
  39. for (int col = 0; col < headers.size(); ++col) {
  40. QString prop = propMap[col];
  41. QStandardItem* item = nullptr;
  42. if (!prop.isEmpty()) {
  43. QMetaProperty metaProp = HBlastRecord.metaObject()->property(
  44. HBlastRecord.metaObject()->indexOfProperty(prop.toUtf8()));
  45. QVariant value = metaProp.read(&HBlastRecord);
  46. if (value.type() == QVariant::DateTime) {
  47. QDateTime dateTime = value.toDateTime();
  48. item = new QStandardItem(dateTime.toString("yyyy-MM-dd HH:mm:ss"));
  49. } else if (prop == "isOfflineBlast") {
  50. qDebug() << "isOfflineBlast value:" << HBlastRecord.getIsOfflineBlast()
  51. << prop.toUtf8() << value.toBool() << value;
  52. item = new QStandardItem(value.toBool() ? "离线爆破" : "线上爆破");
  53. } else {
  54. item = new QStandardItem(value.toString());
  55. }
  56. } else {
  57. item = new QStandardItem("操作");
  58. }
  59. if (item) {
  60. item->setTextAlignment(Qt::AlignCenter);
  61. model->setItem(row, col, item);
  62. }
  63. }
  64. }
  65. ui->tableView->setModel(model);
  66. ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
  67. ui->tableView->setAlternatingRowColors(true); // 启用交替行颜色
  68. ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
  69. }
  70. void BlastRecord::PageChanged(int page) {
  71. currentPage = page;
  72. loadDataFromSource(currentPage, pageSize);
  73. }
  74. void BlastRecord::onComboBoxIndexChanged(int index) {
  75. QVariant variant = m_pPageWidget->getComboBox()->itemData(index);
  76. int value = variant.toInt();
  77. pageSize = value;
  78. loadDataFromSource(currentPage, pageSize);
  79. }
  80. void BlastRecord::dataTable(const QJsonDocument& jsonDoc) {
  81. parseJsonString(jsonDoc);
  82. model = new QStandardItemModel(this);
  83. model->setHorizontalHeaderLabels(
  84. {"工程名称", "离线爆破", "app版本", "起爆器编号", "注册雷管", "起爆时间", "上报时间"});
  85. for (const QJsonValue& jsonValue : dataArray) {
  86. QJsonObject jsonObj = jsonValue.toObject();
  87. QList<QStandardItem*> items = jsonToItem(jsonObj);
  88. model->appendRow(items);
  89. }
  90. ui->tableView->setModel(model);
  91. ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
  92. ui->tableView->setAlternatingRowColors(true);
  93. }
  94. QList<QStandardItem*> BlastRecord::jsonToItem(const QJsonObject& jsonObj) {
  95. QStandardItem* nameItem = new QStandardItem(jsonObj["name"].toString());
  96. nameItem->setTextAlignment(Qt::AlignCenter);
  97. qDebug() << "jsonObj:" << jsonObj;
  98. QStandardItem* isOfflineBlastItem = new QStandardItem(jsonObj["isOfflineBlast"].toString());
  99. QStandardItem* equipItem = new QStandardItem(jsonObj["equipmentSn"].toString());
  100. QStandardItem* typeItem = new QStandardItem(jsonObj["equipmentTypeName"].toString());
  101. QStandardItem* statusItem = new QStandardItem(jsonObj["statusName"].toString());
  102. QStandardItem* onlineItem = new QStandardItem(jsonObj["onlineName"].toString());
  103. QString createdAtStr = jsonObj["createdAt"].toString();
  104. QDateTime createdAt = QDateTime::fromString(createdAtStr, Qt::ISODateWithMs);
  105. QString formattedCreatedAt = createdAt.toString("yyyy-MM-dd HH:mm:ss");
  106. QStandardItem* createdItem = new QStandardItem(formattedCreatedAt);
  107. return QList<QStandardItem*>() << nameItem << isOfflineBlastItem << equipItem << typeItem
  108. << statusItem << onlineItem << createdItem;
  109. }
  110. void BlastRecord::parseJsonString(const QJsonDocument& jsonDoc) {
  111. QJsonObject jsonObj = jsonDoc.object();
  112. QJsonObject dataObj = jsonObj["data"].toObject();
  113. dataArray = dataObj["list"].toArray();
  114. totalCount = dataObj["count"].toInt();
  115. m_pPageWidget->setMaxPage(ceil(static_cast<double>(totalCount) / pageSize));
  116. }
  117. BlastRecord::~BlastRecord() { delete ui; }