feat:完成查看所有‘历史事件’和‘实时事件’的展示逻辑

This commit is contained in:
duanshengchao 2025-11-25 11:54:16 +08:00
parent 34b38b7f27
commit a01d290469
10 changed files with 59 additions and 33 deletions

View File

@ -25,7 +25,7 @@ public:
static AlarmEventDataService* instance(); static AlarmEventDataService* instance();
void start(); void start();
void stop(); void stop();
void queryHistoricalEvents(const QDateTime& startTime, const QDateTime& endTime); void queryHistoricalEvents(const QDateTime& startTime, const QDateTime& endTime, int confirmStatus = -1);
signals: signals:
void realTimeEventReceived(const EventData& event); void realTimeEventReceived(const EventData& event);
@ -58,7 +58,7 @@ private:
EventData parseEventFromMessage(const QByteArray& data, QString& errorString); EventData parseEventFromMessage(const QByteArray& data, QString& errorString);
bool validateEvent(const EventData& event); bool validateEvent(const EventData& event);
//历史数据处理 //历史数据处理
QUrl bulidHistoricalQueryUrl(const QDateTime& startTime, const QDateTime& endTime); QUrl bulidHistoricalQueryUrl(const QDateTime& startTime, const QDateTime& endTime, int confirmStatus);
void processHistoricalResponse(const QByteArray& data); void processHistoricalResponse(const QByteArray& data);
//QNetworkRequest createHistoricalRequest(const QUrl& url); //QNetworkRequest createHistoricalRequest(const QUrl& url);

View File

@ -58,7 +58,7 @@ public:
//自定义功能函数 //自定义功能函数
const QVector<SectionData> headerData() const {return m_headerData;} const QVector<SectionData> headerData() const {return m_headerData;}
//void setMode(AlarmDataMode mode); void setMode(AlarmDataMode mode);
void setMaxRealTimeEvents(int value); void setMaxRealTimeEvents(int value);
const int getMaxRealTimeEvents() const {return m_maxRealTimeEvents;} const int getMaxRealTimeEvents() const {return m_maxRealTimeEvents;}
void setFilter(const AlarmEventDataFilter& filter); void setFilter(const AlarmEventDataFilter& filter);

View File

@ -8,7 +8,8 @@
enum AlarmDataMode enum AlarmDataMode
{ {
RealTime = 0, RealTime = 0,
Historical Historical_All, //所有事件
Historical_Unconfirmed //未确认事件(查看所有实时报警事件时用)
}; };
struct PaginationInfo struct PaginationInfo

View File

@ -221,6 +221,7 @@ public:
void setSeverityFilter(const QString& severity) {m_severity = severity;} void setSeverityFilter(const QString& severity) {m_severity = severity;}
void setDescriptionFilter(const QString& description) {m_description = description;} void setDescriptionFilter(const QString& description) {m_description = description;}
void setConfirmStatusFilter(int status) {m_status = status;} void setConfirmStatusFilter(int status) {m_status = status;}
int confirmStatus() {return m_status;}
bool matches(const EventData& event); bool matches(const EventData& event);
void clear(); void clear();

View File

@ -95,9 +95,9 @@ void AlarmEventDataService::stop()
m_serviceStatus = ServiceStatus::Disconnected; m_serviceStatus = ServiceStatus::Disconnected;
} }
void AlarmEventDataService::queryHistoricalEvents(const QDateTime& startTime, const QDateTime& endTime) void AlarmEventDataService::queryHistoricalEvents(const QDateTime& startTime, const QDateTime& endTime, int confirmStatus)
{ {
QUrl url = bulidHistoricalQueryUrl(startTime, endTime); QUrl url = bulidHistoricalQueryUrl(startTime, endTime, confirmStatus);
//QUrl url = m_config.historicalConfig.baseUrl; //QUrl url = m_config.historicalConfig.baseUrl;
if(!url.isValid()) if(!url.isValid())
return; return;
@ -225,12 +225,16 @@ bool AlarmEventDataService::validateEvent(const EventData& event)
return true; return true;
} }
QUrl AlarmEventDataService::bulidHistoricalQueryUrl(const QDateTime& startTime, const QDateTime& endTime) QUrl AlarmEventDataService::bulidHistoricalQueryUrl(const QDateTime& startTime, const QDateTime& endTime, int confirmStatus)
{ {
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(endTime.toMSecsSinceEpoch())); query.addQueryItem("end", QString::number(endTime.toMSecsSinceEpoch()));
if(confirmStatus == 0) //未确认
query.addQueryItem("status", "0,1,2");
if(confirmStatus == 1) //已确认
query.addQueryItem("status", "3,4,5");
url.setQuery(query); url.setQuery(query);
return url; return url;
} }
@ -280,7 +284,7 @@ void AlarmEventDataService::processHistoricalResponse(const QByteArray& data)
// ==================== 槽函数 ==================== // ==================== 槽函数 ====================
void AlarmEventDataService::onRabbitMQConnected() void AlarmEventDataService::onRabbitMQConnected()
{ {
qInfo() << "RabbitMQ connectecd"; //qInfo() << "RabbitMQ connectecd";
m_serviceStatus = ServiceStatus::Connected; m_serviceStatus = ServiceStatus::Connected;
//Exchange //Exchange
m_amqpExchange = m_amqpClient->createExchange(m_config.rabbitMQConfig.exchangeName); m_amqpExchange = m_amqpClient->createExchange(m_config.rabbitMQConfig.exchangeName);
@ -313,7 +317,7 @@ void AlarmEventDataService::onRabbitMQSocketError(QAbstractSocket::SocketError e
void AlarmEventDataService::onAmqpQueueOpend() void AlarmEventDataService::onAmqpQueueOpend()
{ {
qInfo() << "AmqpQueue opend"; //qInfo() << "AmqpQueue opend";
m_amqpQueue->declare(QAmqpQueue::AutoDelete); m_amqpQueue->declare(QAmqpQueue::AutoDelete);
m_amqpQueue->bind(m_amqpExchange, m_config.rabbitMQConfig.routingKey); //对于广播类型的交换机消息会发送给所有与之绑定的队列所以此时routingKey无所谓 m_amqpQueue->bind(m_amqpExchange, m_config.rabbitMQConfig.routingKey); //对于广播类型的交换机消息会发送给所有与之绑定的队列所以此时routingKey无所谓
connect(m_amqpQueue, SIGNAL(messageReceived()), this, SLOT(onMessageReceived())); connect(m_amqpQueue, SIGNAL(messageReceived()), this, SLOT(onMessageReceived()));
@ -352,7 +356,7 @@ void AlarmEventDataService::onHistoricalRequestFinished(QNetworkReply* reply)
} }
else else
{ {
QString errorMsg = QString("Request HistoricalEvents error: %1").arg(reply->errorString()); QString errorMsg = QString("Request HistoricalData error: %1").arg(/*reply->request().url().toDisplayString(),*/ reply->errorString());
emit historicalQueryError(errorMsg); emit historicalQueryError(errorMsg);
} }

View File

@ -37,9 +37,9 @@ AlarmEventDataModel::AlarmEventDataModel(AlarmDataMode mode, QObject* parent)
} }
//实时数据测试 //实时数据测试
m_simulatedDataTimer = new QTimer(this); /*m_simulatedDataTimer = new QTimer(this);
connect(m_simulatedDataTimer, &QTimer::timeout, this, &AlarmEventDataModel::onTimeoutSimulateData); connect(m_simulatedDataTimer, &QTimer::timeout, this, &AlarmEventDataModel::onTimeoutSimulateData);
m_simulatedDataTimer->start(3000); m_simulatedDataTimer->start(3000);*/
} }
AlarmEventDataModel::~AlarmEventDataModel() AlarmEventDataModel::~AlarmEventDataModel()
@ -180,17 +180,17 @@ void AlarmEventDataModel::iniHeaderData()
m_headerData.emplace_back(SectionData("操作", 180, Operation)); m_headerData.emplace_back(SectionData("操作", 180, Operation));
} }
/*void AlarmEventDataModel::setMode(AlarmDataMode mode) void AlarmEventDataModel::setMode(AlarmDataMode mode)
{ {
if(m_dataMode == mode) if(m_dataMode == mode)
return; return;
m_dataMode = mode; m_dataMode = mode;
if(mode == Historical) /*if(mode == Historical_All)
{} {}
else else if(mode == Historical_Unconfirmed)
{} {}*/
}*/ }
void AlarmEventDataModel::setMaxRealTimeEvents(int count) void AlarmEventDataModel::setMaxRealTimeEvents(int count)
{ {
@ -221,7 +221,7 @@ void AlarmEventDataModel::setMaxRealTimeEvents(int count)
void AlarmEventDataModel::setFilter(const AlarmEventDataFilter& filter) void AlarmEventDataModel::setFilter(const AlarmEventDataFilter& filter)
{ {
if(m_dataMode != Historical) if(m_dataMode == RealTime)
return; return;
m_currentFilter = filter; m_currentFilter = filter;
@ -238,8 +238,11 @@ void AlarmEventDataModel::applyFilter()
void AlarmEventDataModel::refresh() void AlarmEventDataModel::refresh()
{ {
//通过服务获取当前时间段的所有事件-m_allEvents //通过服务获取当前时间段的所有对应类型(所有or确认or未确认)事件-m_allEvents
AlarmEventDataService::instance()->queryHistoricalEvents(m_currentFilter.beginTime(), m_currentFilter.endTime()); if(m_dataMode == RealTime)
return;
AlarmEventDataService::instance()->queryHistoricalEvents(m_currentFilter.beginTime(), m_currentFilter.endTime(), m_currentFilter.confirmStatus());
} }
void AlarmEventDataModel::updatePaginationInfo() void AlarmEventDataModel::updatePaginationInfo()

View File

@ -8,7 +8,7 @@
AlarmEventMainDialog::AlarmEventMainDialog(QWidget *parent) AlarmEventMainDialog::AlarmEventMainDialog(QWidget *parent)
: QDialog(parent) : QDialog(parent)
, ui(new Ui::alarmEventMainDialog) , ui(new Ui::alarmEventMainDialog)
, m_mode(Historical) , m_mode(Historical_All)
, m_pTransparentMask(nullptr) , m_pTransparentMask(nullptr)
, m_pMessageDialog(nullptr) , m_pMessageDialog(nullptr)
{ {
@ -23,7 +23,7 @@ AlarmEventMainDialog::AlarmEventMainDialog(QWidget *parent)
ui->beginTime->setDateTime(beginTime); ui->beginTime->setDateTime(beginTime);
m_eventFilter.setTimeRange(beginTime, endTime); m_eventFilter.setTimeRange(beginTime, endTime);
m_tableView = new AlarmEventDataView(Historical, this); m_tableView = new AlarmEventDataView(Historical_All, this);
m_tableView->model()->setFilter(m_eventFilter); 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(m_tableView->model(), &AlarmEventDataModel::syncDataStatus, this, &AlarmEventMainDialog::onSyncDataStatus);
@ -84,17 +84,23 @@ void AlarmEventMainDialog::showMessageDialog(MessageDialogType type,const QStrin
void AlarmEventMainDialog::setMode(AlarmDataMode mode) void AlarmEventMainDialog::setMode(AlarmDataMode mode)
{ {
if(mode == RealTime) if(mode == Historical_Unconfirmed)
{ {
ui->label_WindowlTitle->setText("实时报警"); ui->label_WindowlTitle->setText("实时事件");
ui->dataFilteringPanel->setVisible(false); ui->conboBox_confirmStatus->setEnabled(false);
ui->conboBox_confirmStatus->setCurrentIndex(1);
m_eventFilter.setConfirmStatusFilter(0);
} }
else else if(mode == Historical_All)
{ {
ui->label_WindowlTitle->setText("历史事件"); ui->label_WindowlTitle->setText("历史事件");
ui->dataFilteringPanel->setVisible(true); ui->conboBox_confirmStatus->setEnabled(true);
ui->conboBox_confirmStatus->setCurrentIndex(0);
m_eventFilter.setConfirmStatusFilter(-1); //-1表示所有事件(确认+未确认)
} }
m_tableView->model()->setMode(mode);
m_tableView->model()->setFilter(m_eventFilter);
m_mode = mode; m_mode = mode;
} }
@ -112,7 +118,8 @@ void AlarmEventMainDialog::onSyncDataStatus(const PaginationInfo& paginationInfo
void AlarmEventMainDialog::onLoadDataError(const QString& error) void AlarmEventMainDialog::onLoadDataError(const QString& error)
{ {
showMessageDialog(type_information, QString("错误"), QString("加载数据失败(%1)").arg(error)); showTransparentMask();
showMessageDialog(type_warning, QString("错误"), QString("加载数据失败(%1)").arg(error));
} }
void AlarmEventMainDialog::onBtnClicked_close() void AlarmEventMainDialog::onBtnClicked_close()

View File

@ -53,8 +53,8 @@ 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(m_status != -1 && event.status != m_status) // if(m_status != -1 && event.status != m_status)
return false; // return false;
return true; return true;
} }

View File

@ -609,7 +609,7 @@ void DashboardFrame::onBtnClicked_showRealtimeEvents()
connect(m_pAlarmEventMainDialog, SIGNAL(sgl_hide()), this, SLOT(onSignal_subDialogClose())); connect(m_pAlarmEventMainDialog, SIGNAL(sgl_hide()), this, SLOT(onSignal_subDialogClose()));
} }
m_pAlarmEventMainDialog->setMode(RealTime); m_pAlarmEventMainDialog->setMode(Historical_Unconfirmed);
int nWidth = this->width() * 0.8; int nWidth = this->width() * 0.8;
int nHeight = this->height() * 0.8; int nHeight = this->height() * 0.8;
int nX = this->geometry().x() + (this->width() - nWidth) * 0.5; int nX = this->geometry().x() + (this->width() - nWidth) * 0.5;
@ -628,7 +628,7 @@ void DashboardFrame::onBtnClicked_showHistoricalEvents()
connect(m_pAlarmEventMainDialog, SIGNAL(sgl_hide()), this, SLOT(onSignal_subDialogClose())); connect(m_pAlarmEventMainDialog, SIGNAL(sgl_hide()), this, SLOT(onSignal_subDialogClose()));
} }
m_pAlarmEventMainDialog->setMode(Historical); m_pAlarmEventMainDialog->setMode(Historical_All);
int nWidth = this->width() * 0.8; int nWidth = this->width() * 0.8;
int nHeight = this->height() * 0.8; int nHeight = this->height() * 0.8;
int nX = this->geometry().x() + (this->width() - nWidth) * 0.5; int nX = this->geometry().x() + (this->width() - nWidth) * 0.5;

View File

@ -219,7 +219,7 @@ font: 700 18pt &quot;微软雅黑&quot;;
</string> </string>
</property> </property>
<property name="text"> <property name="text">
<string>全部事件</string> <string>历史事件</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -546,6 +546,16 @@ icon: url(:/images/icon_configuration.png);
<string>请选择</string> <string>请选择</string>
</property> </property>
</item> </item>
<item>
<property name="text">
<string>未确认</string>
</property>
</item>
<item>
<property name="text">
<string>已确认</string>
</property>
</item>
</widget> </widget>
</item> </item>
<item row="1" column="0"> <item row="1" column="0">