feat:完成请求历史数据并加载显示到历史数据对话框的全流程
This commit is contained in:
parent
7d1e06bda9
commit
64007be44a
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -32,14 +32,6 @@ public:
|
|||
QVector<QVariant> 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<EventData>& events);
|
||||
void onHistoricalQueryError(const QString&);
|
||||
|
||||
private:
|
||||
void iniHeaderData();
|
||||
|
|
|
|||
|
|
@ -11,6 +11,14 @@ enum AlarmDataMode
|
|||
Historical
|
||||
};
|
||||
|
||||
struct PaginationInfo
|
||||
{
|
||||
int totalEntries;
|
||||
int entriesPerPage;
|
||||
int totalPages;
|
||||
int currentPage;
|
||||
};
|
||||
|
||||
struct EventData
|
||||
{
|
||||
QString id;
|
||||
|
|
|
|||
|
|
@ -28,6 +28,9 @@ signals:
|
|||
protected:
|
||||
void showEvent(QShowEvent* event) override;
|
||||
|
||||
private slots:
|
||||
void onSyncDataStatus(const PaginationInfo&);
|
||||
|
||||
public slots:
|
||||
void onBtnClicked_close();
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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<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)
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
|||
<string notr="true">font: 10pt "黑体";</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>共100条记录</string>
|
||||
<string>共0条记录</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter</set>
|
||||
|
|
@ -948,7 +948,7 @@ border:1px solid rgb(100,100,100);
|
|||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLineEdit" name="lineEdit">
|
||||
<widget class="QLineEdit" name="lineEditPage">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>60</x>
|
||||
|
|
|
|||
Loading…
Reference in New Issue