feat:完成请求历史数据并加载显示到历史数据对话框的全流程

This commit is contained in:
duanshengchao 2025-11-18 14:26:29 +08:00
parent 7d1e06bda9
commit 64007be44a
10 changed files with 81 additions and 44 deletions

View File

@ -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();

View File

@ -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();

View File

@ -11,6 +11,14 @@ enum AlarmDataMode
Historical
};
struct PaginationInfo
{
int totalEntries;
int entriesPerPage;
int totalPages;
int currentPage;
};
struct EventData
{
QString id;

View File

@ -28,6 +28,9 @@ signals:
protected:
void showEvent(QShowEvent* event) override;
private slots:
void onSyncDataStatus(const PaginationInfo&);
public slots:
void onBtnClicked_close();

View File

@ -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;

View File

@ -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;

View File

@ -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)

View File

@ -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();

View File

@ -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;

View File

@ -62,7 +62,7 @@ font: 12pt &quot;黑体&quot;;
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 &quot;黑体&quot;;</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>