feat:完成请求历史数据并加载显示到历史数据对话框的全流程
This commit is contained in:
parent
7d1e06bda9
commit
64007be44a
|
|
@ -36,7 +36,7 @@ private slots:
|
||||||
void onRabbitMQConnected();
|
void onRabbitMQConnected();
|
||||||
void onRabbitMQDisconnected();
|
void onRabbitMQDisconnected();
|
||||||
void onRabbitMQError(QAMQP::Error error);
|
void onRabbitMQError(QAMQP::Error error);
|
||||||
void onRabbitMQSocketErrot(QAbstractSocket::SocketError error);
|
void onRabbitMQSocketError(QAbstractSocket::SocketError error);
|
||||||
void onAmqpQueueOpend();
|
void onAmqpQueueOpend();
|
||||||
void onMessageReceived();
|
void onMessageReceived();
|
||||||
void onReconnectTimeout();
|
void onReconnectTimeout();
|
||||||
|
|
|
||||||
|
|
@ -32,14 +32,6 @@ public:
|
||||||
QVector<QVariant> values;
|
QVector<QVariant> values;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PaginationInfo
|
|
||||||
{
|
|
||||||
int totalEntries;
|
|
||||||
int entriesPerPage;
|
|
||||||
int totalPages;
|
|
||||||
int currentPage;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct SectionData
|
struct SectionData
|
||||||
{
|
{
|
||||||
int width = -1;
|
int width = -1;
|
||||||
|
|
@ -79,12 +71,15 @@ public:
|
||||||
void lastPage();
|
void lastPage();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void receivedNewAlarm(const EventData& even);
|
void receivedNewAlarm(const EventData& event);
|
||||||
|
void loadDataError(const QString& error);
|
||||||
|
void syncDataStatus(const PaginationInfo&);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onTimeoutSimulateData();
|
void onTimeoutSimulateData();
|
||||||
void onRealTimeEventReceived(const EventData& event);
|
void onRealTimeEventReceived(const EventData& event);
|
||||||
void onHistoricalEventsReceived(const QList<EventData>& events);
|
void onHistoricalEventsReceived(const QList<EventData>& events);
|
||||||
|
void onHistoricalQueryError(const QString&);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void iniHeaderData();
|
void iniHeaderData();
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,14 @@ enum AlarmDataMode
|
||||||
Historical
|
Historical
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct PaginationInfo
|
||||||
|
{
|
||||||
|
int totalEntries;
|
||||||
|
int entriesPerPage;
|
||||||
|
int totalPages;
|
||||||
|
int currentPage;
|
||||||
|
};
|
||||||
|
|
||||||
struct EventData
|
struct EventData
|
||||||
{
|
{
|
||||||
QString id;
|
QString id;
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,9 @@ signals:
|
||||||
protected:
|
protected:
|
||||||
void showEvent(QShowEvent* event) override;
|
void showEvent(QShowEvent* event) override;
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void onSyncDataStatus(const PaginationInfo&);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void onBtnClicked_close();
|
void onBtnClicked_close();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -212,7 +212,9 @@ class AlarmEventDataFilter
|
||||||
public:
|
public:
|
||||||
AlarmEventDataFilter();
|
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 setStationFilter(const QString& station) {m_station = station;}
|
||||||
void setBayFilter(const QString& bay) {m_bay = bay;}
|
void setBayFilter(const QString& bay) {m_bay = bay;}
|
||||||
void setTypeFilter(int type) {m_type = type;}
|
void setTypeFilter(int type) {m_type = type;}
|
||||||
|
|
@ -228,7 +230,7 @@ private:
|
||||||
void reset();
|
void reset();
|
||||||
bool isEmpty();
|
bool isEmpty();
|
||||||
|
|
||||||
QDateTime m_startTime;
|
QDateTime m_beginTime;
|
||||||
QDateTime m_endTime;
|
QDateTime m_endTime;
|
||||||
QString m_station;
|
QString m_station;
|
||||||
QString m_bay;
|
QString m_bay;
|
||||||
|
|
|
||||||
|
|
@ -98,6 +98,7 @@ void AlarmEventDataService::stop()
|
||||||
void AlarmEventDataService::queryHistoricalEvents(const QDateTime& startTime, const QDateTime& endTime)
|
void AlarmEventDataService::queryHistoricalEvents(const QDateTime& startTime, const QDateTime& endTime)
|
||||||
{
|
{
|
||||||
QUrl url = bulidHistoricalQueryUrl(startTime, endTime);
|
QUrl url = bulidHistoricalQueryUrl(startTime, endTime);
|
||||||
|
//QUrl url = m_config.historicalConfig.baseUrl;
|
||||||
if(!url.isValid())
|
if(!url.isValid())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
@ -123,7 +124,7 @@ void AlarmEventDataService::startRealTimeDataService()
|
||||||
connect(m_amqpClient, SIGNAL(connected()), this, SLOT(onRabbitMQConnected()));
|
connect(m_amqpClient, SIGNAL(connected()), this, SLOT(onRabbitMQConnected()));
|
||||||
connect(m_amqpClient, SIGNAL(disconnected()), this, SLOT(onRabbitMQDisconnected()));
|
connect(m_amqpClient, SIGNAL(disconnected()), this, SLOT(onRabbitMQDisconnected()));
|
||||||
connect(m_amqpClient, SIGNAL(error(QAMQP::Error)), this, SLOT(onRabbitMQError(QAMQP::Error)));
|
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->setHost(m_config.rabbitMQConfig.host);
|
||||||
m_amqpClient->setPort(m_config.rabbitMQConfig.port);
|
m_amqpClient->setPort(m_config.rabbitMQConfig.port);
|
||||||
|
|
@ -229,7 +230,7 @@ QUrl AlarmEventDataService::bulidHistoricalQueryUrl(const QDateTime& startTime,
|
||||||
QUrl url = m_config.historicalConfig.baseUrl;
|
QUrl url = m_config.historicalConfig.baseUrl;
|
||||||
QUrlQuery query;
|
QUrlQuery query;
|
||||||
query.addQueryItem("begin", QString::number(startTime.toMSecsSinceEpoch()));
|
query.addQueryItem("begin", QString::number(startTime.toMSecsSinceEpoch()));
|
||||||
query.addQueryItem("end", QString::number(startTime.toMSecsSinceEpoch()));
|
query.addQueryItem("end", QString::number(endTime.toMSecsSinceEpoch()));
|
||||||
url.setQuery(query);
|
url.setQuery(query);
|
||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
|
|
@ -303,7 +304,7 @@ void AlarmEventDataService::onRabbitMQError(QAMQP::Error error)
|
||||||
scheduleReconnect();
|
scheduleReconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AlarmEventDataService::onRabbitMQSocketErrot(QAbstractSocket::SocketError error)
|
void AlarmEventDataService::onRabbitMQSocketError(QAbstractSocket::SocketError error)
|
||||||
{
|
{
|
||||||
qWarning() << "RabbitMQ connection socket error: " << error;
|
qWarning() << "RabbitMQ connection socket error: " << error;
|
||||||
m_serviceStatus = ServiceStatus::Error;
|
m_serviceStatus = ServiceStatus::Error;
|
||||||
|
|
|
||||||
|
|
@ -14,17 +14,6 @@ AlarmEventDataModel::AlarmEventDataModel(AlarmDataMode mode, QObject* parent)
|
||||||
, m_dataMode(mode)
|
, m_dataMode(mode)
|
||||||
, m_maxRealTimeEvents(5)
|
, 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.entriesPerPage = 100;
|
||||||
m_paginationInfo.currentPage = 1;
|
m_paginationInfo.currentPage = 1;
|
||||||
m_paginationInfo.totalEntries = 0;
|
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::realTimeEventReceived, this, &AlarmEventDataModel::onRealTimeEventReceived);
|
||||||
connect(AlarmEventDataService::instance(), &AlarmEventDataService::historicalQueryData, this, &AlarmEventDataModel::onHistoricalEventsReceived);
|
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);
|
m_simulatedDataTimer = new QTimer(this);
|
||||||
|
|
@ -220,6 +221,9 @@ void AlarmEventDataModel::setMaxRealTimeEvents(int count)
|
||||||
|
|
||||||
void AlarmEventDataModel::setFilter(const AlarmEventDataFilter& filter)
|
void AlarmEventDataModel::setFilter(const AlarmEventDataFilter& filter)
|
||||||
{
|
{
|
||||||
|
if(m_dataMode != Historical)
|
||||||
|
return;
|
||||||
|
|
||||||
m_currentFilter = filter;
|
m_currentFilter = filter;
|
||||||
refresh();
|
refresh();
|
||||||
}
|
}
|
||||||
|
|
@ -234,15 +238,8 @@ void AlarmEventDataModel::applyFilter()
|
||||||
|
|
||||||
void AlarmEventDataModel::refresh()
|
void AlarmEventDataModel::refresh()
|
||||||
{
|
{
|
||||||
m_allEvents.clear();
|
//通过服务获取当前时间段的所有事件-m_allEvents
|
||||||
//1.通过服务获取当前时间段的所有事件-m_allEvents
|
AlarmEventDataService::instance()->queryHistoricalEvents(m_currentFilter.beginTime(), m_currentFilter.endTime());
|
||||||
|
|
||||||
//2.过滤事件(时间区间作为服务请求参数,其它过滤在本地完成)-m_filteredEvents
|
|
||||||
applyFilter();
|
|
||||||
//3.更新页码数据
|
|
||||||
updatePaginationInfo();
|
|
||||||
//4.根据页码刷新当前页面数据()-m_displayEvents
|
|
||||||
updateCurPageData();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AlarmEventDataModel::updatePaginationInfo()
|
void AlarmEventDataModel::updatePaginationInfo()
|
||||||
|
|
@ -358,7 +355,22 @@ void AlarmEventDataModel::onRealTimeEventReceived(const EventData& event)
|
||||||
|
|
||||||
void AlarmEventDataModel::onHistoricalEventsReceived(const QList<EventData>& events)
|
void AlarmEventDataModel::onHistoricalEventsReceived(const QList<EventData>& 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)
|
bool AlarmEventDataModel::setCurrentPage(int page)
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,17 @@ AlarmEventMainDialog::AlarmEventMainDialog(QWidget *parent)
|
||||||
setWindowFlags(Qt::FramelessWindowHint);
|
setWindowFlags(Qt::FramelessWindowHint);
|
||||||
setAttribute(Qt::WA_TranslucentBackground);
|
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 = new AlarmEventDataView(Historical, this);
|
||||||
|
m_tableView->model()->setFilter(m_eventFilter);
|
||||||
ui->tableLayout->addWidget(m_tableView);
|
ui->tableLayout->addWidget(m_tableView);
|
||||||
|
connect(m_tableView->model(), &AlarmEventDataModel::syncDataStatus, this, &AlarmEventMainDialog::onSyncDataStatus);
|
||||||
|
|
||||||
connect(ui->btnClose, &QPushButton::clicked, this, &AlarmEventMainDialog::onBtnClicked_close);
|
connect(ui->btnClose, &QPushButton::clicked, this, &AlarmEventMainDialog::onBtnClicked_close);
|
||||||
}
|
}
|
||||||
|
|
@ -43,6 +52,13 @@ void AlarmEventMainDialog::setMode(AlarmDataMode mode)
|
||||||
m_mode = 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()
|
void AlarmEventMainDialog::onBtnClicked_close()
|
||||||
{
|
{
|
||||||
//reject();
|
//reject();
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ AlarmEventDataFilter::AlarmEventDataFilter()
|
||||||
|
|
||||||
void AlarmEventDataFilter::reset()
|
void AlarmEventDataFilter::reset()
|
||||||
{
|
{
|
||||||
m_startTime = QDateTime();
|
m_beginTime = QDateTime();
|
||||||
m_endTime = QDateTime();
|
m_endTime = QDateTime();
|
||||||
m_station.clear();
|
m_station.clear();
|
||||||
m_bay.clear();
|
m_bay.clear();
|
||||||
|
|
@ -20,7 +20,7 @@ void AlarmEventDataFilter::reset()
|
||||||
|
|
||||||
bool AlarmEventDataFilter::isEmpty()
|
bool AlarmEventDataFilter::isEmpty()
|
||||||
{
|
{
|
||||||
return !m_startTime.isValid() &&
|
return !m_beginTime.isValid() &&
|
||||||
!m_endTime.isValid() &&
|
!m_endTime.isValid() &&
|
||||||
m_station.isEmpty() &&
|
m_station.isEmpty() &&
|
||||||
m_bay.isEmpty() &&
|
m_bay.isEmpty() &&
|
||||||
|
|
@ -33,7 +33,7 @@ bool AlarmEventDataFilter::isEmpty()
|
||||||
bool AlarmEventDataFilter::matches(const EventData& event)
|
bool AlarmEventDataFilter::matches(const EventData& event)
|
||||||
{
|
{
|
||||||
QDateTime eventTime = QDateTime::fromMSecsSinceEpoch(event.timestamp);
|
QDateTime eventTime = QDateTime::fromMSecsSinceEpoch(event.timestamp);
|
||||||
if(m_startTime.isValid() && eventTime < m_startTime)
|
if(m_beginTime.isValid() && eventTime < m_beginTime)
|
||||||
return false;
|
return false;
|
||||||
if(m_endTime.isValid() && eventTime > m_endTime)
|
if(m_endTime.isValid() && eventTime > m_endTime)
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -44,7 +44,7 @@ bool AlarmEventDataFilter::matches(const EventData& event)
|
||||||
if(!m_bay.isEmpty() && event.bayName != m_bay)
|
if(!m_bay.isEmpty() && event.bayName != m_bay)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if(event.type != m_type)
|
if(m_type != -1 && event.type != m_type)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if(!m_severity.isEmpty() && event.severity != m_severity)
|
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)
|
if(!m_description.isEmpty() && event.description != m_description)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if(event.status != m_status)
|
if(m_status != -1 && event.status != m_status)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ font: 12pt "黑体";
|
||||||
color: rgb(250, 250, 250);
|
color: rgb(250, 250, 250);
|
||||||
background-color: rgb(24, 32, 38);
|
background-color: rgb(24, 32, 38);
|
||||||
border:1px solid rgb(200,200,200);
|
border:1px solid rgb(200,200,200);
|
||||||
padding-right:25px;
|
padding-right:25px; /*给按钮留出空间,否则自定义样式时比如border会干扰按钮的点击*/
|
||||||
}
|
}
|
||||||
QDateTimeEdit:focus
|
QDateTimeEdit:focus
|
||||||
{
|
{
|
||||||
|
|
@ -810,7 +810,7 @@ border:1px solid rgb(100,100,100);
|
||||||
<string notr="true">font: 10pt "黑体";</string>
|
<string notr="true">font: 10pt "黑体";</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>共100条记录</string>
|
<string>共0条记录</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter</set>
|
<set>Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter</set>
|
||||||
|
|
@ -948,7 +948,7 @@ border:1px solid rgb(100,100,100);
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QLineEdit" name="lineEdit">
|
<widget class="QLineEdit" name="lineEditPage">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>60</x>
|
<x>60</x>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue