blastrecord.cpp 5.3 KB

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