diff --git a/include/alarmEventDataService.h b/include/alarmEventDataService.h index 98c3b11..92bd770 100644 --- a/include/alarmEventDataService.h +++ b/include/alarmEventDataService.h @@ -36,7 +36,7 @@ private slots: void onRabbitMQConnected(); void onRabbitMQDisconnected(); void onRabbitMQError(QAMQP::Error error); - void onRabbitMQSocketErrot(QAbstractSocket::SocketError error); + void onRabbitMQSocketError(QAbstractSocket::SocketError error); void onAmqpQueueOpend(); void onMessageReceived(); void onReconnectTimeout(); diff --git a/include/alarmEventDataView.h b/include/alarmEventDataView.h index 87113a5..9e55b19 100644 --- a/include/alarmEventDataView.h +++ b/include/alarmEventDataView.h @@ -32,14 +32,6 @@ public: QVector values; }; - struct PaginationInfo - { - int totalEntries; - int entriesPerPage; - int totalPages; - int currentPage; - }; - struct SectionData { int width = -1; @@ -79,12 +71,15 @@ public: void lastPage(); signals: - void receivedNewAlarm(const EventData& even); + void receivedNewAlarm(const EventData& event); + void loadDataError(const QString& error); + void syncDataStatus(const PaginationInfo&); private slots: void onTimeoutSimulateData(); void onRealTimeEventReceived(const EventData& event); void onHistoricalEventsReceived(const QList& events); + void onHistoricalQueryError(const QString&); private: void iniHeaderData(); diff --git a/include/alarmEventGlobal.h b/include/alarmEventGlobal.h index 891620c..11872e2 100644 --- a/include/alarmEventGlobal.h +++ b/include/alarmEventGlobal.h @@ -11,6 +11,14 @@ enum AlarmDataMode Historical }; +struct PaginationInfo +{ + int totalEntries; + int entriesPerPage; + int totalPages; + int currentPage; +}; + struct EventData { QString id; diff --git a/include/alarmEventMainDialog.h b/include/alarmEventMainDialog.h index 3cadded..3184670 100644 --- a/include/alarmEventMainDialog.h +++ b/include/alarmEventMainDialog.h @@ -28,6 +28,9 @@ signals: protected: void showEvent(QShowEvent* event) override; +private slots: + void onSyncDataStatus(const PaginationInfo&); + public slots: void onBtnClicked_close(); diff --git a/include/alarmEventUtils.h b/include/alarmEventUtils.h index 73abda7..e9016f6 100644 --- a/include/alarmEventUtils.h +++ b/include/alarmEventUtils.h @@ -212,7 +212,9 @@ class AlarmEventDataFilter public: AlarmEventDataFilter(); - void setTimeRange(const QDateTime& start, const QDateTime& end) {m_startTime = start; m_endTime = end;} + void setTimeRange(const QDateTime& start, const QDateTime& end) {m_beginTime = start; m_endTime = end;} + QDateTime beginTime() {return m_beginTime;} + QDateTime endTime() {return m_endTime;} void setStationFilter(const QString& station) {m_station = station;} void setBayFilter(const QString& bay) {m_bay = bay;} void setTypeFilter(int type) {m_type = type;} @@ -228,7 +230,7 @@ private: void reset(); bool isEmpty(); - QDateTime m_startTime; + QDateTime m_beginTime; QDateTime m_endTime; QString m_station; QString m_bay; diff --git a/source/alarmEventDataService.cpp b/source/alarmEventDataService.cpp index 7b0af69..ee8378d 100644 --- a/source/alarmEventDataService.cpp +++ b/source/alarmEventDataService.cpp @@ -98,6 +98,7 @@ void AlarmEventDataService::stop() void AlarmEventDataService::queryHistoricalEvents(const QDateTime& startTime, const QDateTime& endTime) { QUrl url = bulidHistoricalQueryUrl(startTime, endTime); + //QUrl url = m_config.historicalConfig.baseUrl; if(!url.isValid()) return; @@ -123,7 +124,7 @@ void AlarmEventDataService::startRealTimeDataService() connect(m_amqpClient, SIGNAL(connected()), this, SLOT(onRabbitMQConnected())); connect(m_amqpClient, SIGNAL(disconnected()), this, SLOT(onRabbitMQDisconnected())); connect(m_amqpClient, SIGNAL(error(QAMQP::Error)), this, SLOT(onRabbitMQError(QAMQP::Error))); - connect(m_amqpClient, SIGNAL(socketErrorOccurred(QAbstractSocket::SocketError)), this, SLOT(onRabbitMQSocketErrot(QAbstractSocket::SocketError))); + connect(m_amqpClient, SIGNAL(socketErrorOccurred(QAbstractSocket::SocketError)), this, SLOT(onRabbitMQSocketError(QAbstractSocket::SocketError))); m_amqpClient->setHost(m_config.rabbitMQConfig.host); m_amqpClient->setPort(m_config.rabbitMQConfig.port); @@ -229,7 +230,7 @@ QUrl AlarmEventDataService::bulidHistoricalQueryUrl(const QDateTime& startTime, QUrl url = m_config.historicalConfig.baseUrl; QUrlQuery query; query.addQueryItem("begin", QString::number(startTime.toMSecsSinceEpoch())); - query.addQueryItem("end", QString::number(startTime.toMSecsSinceEpoch())); + query.addQueryItem("end", QString::number(endTime.toMSecsSinceEpoch())); url.setQuery(query); return url; } @@ -303,7 +304,7 @@ void AlarmEventDataService::onRabbitMQError(QAMQP::Error error) scheduleReconnect(); } -void AlarmEventDataService::onRabbitMQSocketErrot(QAbstractSocket::SocketError error) +void AlarmEventDataService::onRabbitMQSocketError(QAbstractSocket::SocketError error) { qWarning() << "RabbitMQ connection socket error: " << error; m_serviceStatus = ServiceStatus::Error; diff --git a/source/alarmEventDataView.cpp b/source/alarmEventDataView.cpp index a61dadb..9402219 100644 --- a/source/alarmEventDataView.cpp +++ b/source/alarmEventDataView.cpp @@ -14,17 +14,6 @@ AlarmEventDataModel::AlarmEventDataModel(AlarmDataMode mode, QObject* parent) , m_dataMode(mode) , m_maxRealTimeEvents(5) { - if(m_dataMode == RealTime) //创建几个“空事件”来初始化表格 - { - for(int i = 0; i < m_maxRealTimeEvents; ++i) - { - EventData event; - event.id = ""; //空事件 - event.timestamp = 0; //给一个初始值,后续的实际事件会根据时间排名,不给初始值的话这个时间值不确定 - m_displayEvents.append(event); - } - } - m_paginationInfo.entriesPerPage = 100; m_paginationInfo.currentPage = 1; m_paginationInfo.totalEntries = 0; @@ -32,8 +21,20 @@ AlarmEventDataModel::AlarmEventDataModel(AlarmDataMode mode, QObject* parent) connect(AlarmEventDataService::instance(), &AlarmEventDataService::realTimeEventReceived, this, &AlarmEventDataModel::onRealTimeEventReceived); connect(AlarmEventDataService::instance(), &AlarmEventDataService::historicalQueryData, this, &AlarmEventDataModel::onHistoricalEventsReceived); - AlarmEventDataService::instance()->start(); + connect(AlarmEventDataService::instance(), &AlarmEventDataService::historicalQueryError, this, &AlarmEventDataModel::onHistoricalQueryError); + if(m_dataMode == RealTime) + { + for(int i = 0; i < m_maxRealTimeEvents; ++i)//创建几个“空事件”来初始化表格 + { + EventData event; + event.id = ""; //空事件 + event.timestamp = 0; //给一个初始值,后续的实际事件会根据时间排名,不给初始值的话这个时间值不确定 + m_displayEvents.append(event); + } + + AlarmEventDataService::instance()->start(); + } //实时数据测试 m_simulatedDataTimer = new QTimer(this); @@ -220,6 +221,9 @@ void AlarmEventDataModel::setMaxRealTimeEvents(int count) void AlarmEventDataModel::setFilter(const AlarmEventDataFilter& filter) { + if(m_dataMode != Historical) + return; + m_currentFilter = filter; refresh(); } @@ -234,15 +238,8 @@ void AlarmEventDataModel::applyFilter() void AlarmEventDataModel::refresh() { - m_allEvents.clear(); - //1.通过服务获取当前时间段的所有事件-m_allEvents - - //2.过滤事件(时间区间作为服务请求参数,其它过滤在本地完成)-m_filteredEvents - applyFilter(); - //3.更新页码数据 - updatePaginationInfo(); - //4.根据页码刷新当前页面数据()-m_displayEvents - updateCurPageData(); + //通过服务获取当前时间段的所有事件-m_allEvents + AlarmEventDataService::instance()->queryHistoricalEvents(m_currentFilter.beginTime(), m_currentFilter.endTime()); } void AlarmEventDataModel::updatePaginationInfo() @@ -358,7 +355,22 @@ void AlarmEventDataModel::onRealTimeEventReceived(const EventData& event) void AlarmEventDataModel::onHistoricalEventsReceived(const QList& events) { + m_allEvents.clear(); + m_allEvents = events; + //过滤事件(时间区间作为服务请求参数,其它过滤在本地完成)-m_filteredEvents + applyFilter(); + //更新页码数据 + updatePaginationInfo(); + //根据页码刷新当前页面数据()-m_displayEvents + updateCurPageData(); + + emit syncDataStatus(m_paginationInfo); +} + +void AlarmEventDataModel::onHistoricalQueryError(const QString& error) +{ + emit loadDataError(error); } bool AlarmEventDataModel::setCurrentPage(int page) diff --git a/source/alarmEventMainDialog.cpp b/source/alarmEventMainDialog.cpp index 10279d2..813ea9c 100644 --- a/source/alarmEventMainDialog.cpp +++ b/source/alarmEventMainDialog.cpp @@ -11,8 +11,17 @@ AlarmEventMainDialog::AlarmEventMainDialog(QWidget *parent) setWindowFlags(Qt::FramelessWindowHint); setAttribute(Qt::WA_TranslucentBackground); + //时间范围初始化 + QDateTime endTime = QDateTime::currentDateTime(); + QDateTime beginTime = QDateTime::currentDateTime().addDays(-15); + ui->endTime->setDateTime(endTime); + ui->beginTime->setDateTime(beginTime); + m_eventFilter.setTimeRange(beginTime, endTime); + m_tableView = new AlarmEventDataView(Historical, this); + m_tableView->model()->setFilter(m_eventFilter); ui->tableLayout->addWidget(m_tableView); + connect(m_tableView->model(), &AlarmEventDataModel::syncDataStatus, this, &AlarmEventMainDialog::onSyncDataStatus); connect(ui->btnClose, &QPushButton::clicked, this, &AlarmEventMainDialog::onBtnClicked_close); } @@ -43,6 +52,13 @@ void AlarmEventMainDialog::setMode(AlarmDataMode mode) m_mode = mode; } +void AlarmEventMainDialog::onSyncDataStatus(const PaginationInfo& paginationInfo) +{ + QString recordInfo = QString::fromWCharArray(L"共 %1 条记录").arg(paginationInfo.totalEntries); + ui->recordInfo->setText(recordInfo); + ui->lineEditPage->setText(QString::number(paginationInfo.currentPage)); +} + void AlarmEventMainDialog::onBtnClicked_close() { //reject(); diff --git a/source/alarmEventUtils.cpp b/source/alarmEventUtils.cpp index f31fe82..5052f5c 100644 --- a/source/alarmEventUtils.cpp +++ b/source/alarmEventUtils.cpp @@ -8,7 +8,7 @@ AlarmEventDataFilter::AlarmEventDataFilter() void AlarmEventDataFilter::reset() { - m_startTime = QDateTime(); + m_beginTime = QDateTime(); m_endTime = QDateTime(); m_station.clear(); m_bay.clear(); @@ -20,7 +20,7 @@ void AlarmEventDataFilter::reset() bool AlarmEventDataFilter::isEmpty() { - return !m_startTime.isValid() && + return !m_beginTime.isValid() && !m_endTime.isValid() && m_station.isEmpty() && m_bay.isEmpty() && @@ -33,7 +33,7 @@ bool AlarmEventDataFilter::isEmpty() bool AlarmEventDataFilter::matches(const EventData& event) { QDateTime eventTime = QDateTime::fromMSecsSinceEpoch(event.timestamp); - if(m_startTime.isValid() && eventTime < m_startTime) + if(m_beginTime.isValid() && eventTime < m_beginTime) return false; if(m_endTime.isValid() && eventTime > m_endTime) return false; @@ -44,7 +44,7 @@ bool AlarmEventDataFilter::matches(const EventData& event) if(!m_bay.isEmpty() && event.bayName != m_bay) return false; - if(event.type != m_type) + if(m_type != -1 && event.type != m_type) return false; if(!m_severity.isEmpty() && event.severity != m_severity) @@ -53,7 +53,7 @@ bool AlarmEventDataFilter::matches(const EventData& event) if(!m_description.isEmpty() && event.description != m_description) return false; - if(event.status != m_status) + if(m_status != -1 && event.status != m_status) return false; return true; diff --git a/ui/alarmEventMainDialog.ui b/ui/alarmEventMainDialog.ui index 3d19009..a7ee1dd 100644 --- a/ui/alarmEventMainDialog.ui +++ b/ui/alarmEventMainDialog.ui @@ -62,7 +62,7 @@ font: 12pt "黑体"; color: rgb(250, 250, 250); background-color: rgb(24, 32, 38); border:1px solid rgb(200,200,200); -padding-right:25px; +padding-right:25px; /*给按钮留出空间,否则自定义样式时比如border会干扰按钮的点击*/ } QDateTimeEdit:focus { @@ -810,7 +810,7 @@ border:1px solid rgb(100,100,100); font: 10pt "黑体"; - 共100条记录 + 共0条记录 Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter @@ -948,7 +948,7 @@ border:1px solid rgb(100,100,100); - + 60