feat:完成数据服务模块(alarmEventDataService)中历史数据查询逻辑
This commit is contained in:
parent
0962645144
commit
1037b0b2a9
|
|
@ -6,10 +6,13 @@
|
||||||
#include "qamqpclient.h"
|
#include "qamqpclient.h"
|
||||||
#include "qamqpexchange.h"
|
#include "qamqpexchange.h"
|
||||||
#include "qamqpqueue.h"
|
#include "qamqpqueue.h"
|
||||||
|
//#include <QNetworkRequest>
|
||||||
|
|
||||||
class QAmqpClient;
|
class QAmqpClient;
|
||||||
class QAmqpQueue;
|
class QAmqpQueue;
|
||||||
class QAmqpExchange;
|
class QAmqpExchange;
|
||||||
|
class QNetworkAccessManager;
|
||||||
|
class QNetworkReply;
|
||||||
class QTimer;
|
class QTimer;
|
||||||
|
|
||||||
class AlarmEventDataService : public QObject
|
class AlarmEventDataService : public QObject
|
||||||
|
|
@ -21,9 +24,12 @@ public:
|
||||||
bool initialize(const ServiceConfig& config);
|
bool initialize(const ServiceConfig& config);
|
||||||
void start();
|
void start();
|
||||||
void stop();
|
void stop();
|
||||||
|
void queryHistoricalEvents(const QDateTime& startTime, const QDateTime& endTime);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void realTimeEventReceived(const EventData& event);
|
void realTimeEventReceived(const EventData& event);
|
||||||
|
void historicalQueryError(const QString& msg);
|
||||||
|
void historicalQuertData(const QList<EventData>& events);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onRabbitMQConnected();
|
void onRabbitMQConnected();
|
||||||
|
|
@ -31,6 +37,7 @@ private slots:
|
||||||
void onRabbitMQError(QAMQP::Error error);
|
void onRabbitMQError(QAMQP::Error error);
|
||||||
void onMessageReceived();
|
void onMessageReceived();
|
||||||
void onReconnectTimeout();
|
void onReconnectTimeout();
|
||||||
|
void onHistoricalRequestFinished(QNetworkReply* reply);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit AlarmEventDataService();
|
explicit AlarmEventDataService();
|
||||||
|
|
@ -45,6 +52,10 @@ private:
|
||||||
MessageHandleResult processMessage(const QAmqpMessage& message);
|
MessageHandleResult processMessage(const QAmqpMessage& message);
|
||||||
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);
|
||||||
|
void processHistoricalResponse(const QByteArray& data);
|
||||||
|
//QNetworkRequest createHistoricalRequest(const QUrl& url);
|
||||||
|
|
||||||
ServiceConfig m_config;
|
ServiceConfig m_config;
|
||||||
ServiceStatus m_serviceStatus;
|
ServiceStatus m_serviceStatus;
|
||||||
|
|
@ -60,6 +71,9 @@ private:
|
||||||
QTimer* m_reconnectTimer;
|
QTimer* m_reconnectTimer;
|
||||||
int m_reconnectAttempts;
|
int m_reconnectAttempts;
|
||||||
int m_maxReconnectAttempts;
|
int m_maxReconnectAttempts;
|
||||||
|
|
||||||
|
//历史数据相关
|
||||||
|
QNetworkAccessManager* m_networkManager;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,8 @@
|
||||||
#include "alarmEventDataService.h"
|
#include "alarmEventDataService.h"
|
||||||
|
#include <QNetworkAccessManager>
|
||||||
|
#include <QNetworkRequest>
|
||||||
|
#include <QUrlQuery>
|
||||||
|
#include <QNetworkReply>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
#include <QJsonDocument>
|
#include <QJsonDocument>
|
||||||
|
|
@ -24,6 +28,8 @@ AlarmEventDataService::AlarmEventDataService()
|
||||||
m_reconnectTimer = new QTimer(this);
|
m_reconnectTimer = new QTimer(this);
|
||||||
m_reconnectTimer->setSingleShot(true);
|
m_reconnectTimer->setSingleShot(true);
|
||||||
connect(m_reconnectTimer, &QTimer::timeout, this, &AlarmEventDataService::onReconnectTimeout);
|
connect(m_reconnectTimer, &QTimer::timeout, this, &AlarmEventDataService::onReconnectTimeout);
|
||||||
|
|
||||||
|
m_networkManager = new QNetworkAccessManager(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
AlarmEventDataService::~AlarmEventDataService()
|
AlarmEventDataService::~AlarmEventDataService()
|
||||||
|
|
@ -60,6 +66,22 @@ void AlarmEventDataService::stop()
|
||||||
m_serviceStatus = ServiceStatus::Disconnected;
|
m_serviceStatus = ServiceStatus::Disconnected;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AlarmEventDataService::queryHistoricalEvents(const QDateTime& startTime, const QDateTime& endTime)
|
||||||
|
{
|
||||||
|
QUrl url = bulidHistoricalQueryUrl(startTime, endTime);
|
||||||
|
if(!url.isValid())
|
||||||
|
return;
|
||||||
|
|
||||||
|
//创建网络请求
|
||||||
|
QNetworkRequest request(url);
|
||||||
|
request.setTransferTimeout(m_config.historicalConfig.timeout);
|
||||||
|
//发送请求
|
||||||
|
QNetworkReply* reply = m_networkManager->get(request);
|
||||||
|
connect(reply, &QNetworkReply::finished, this, [this, reply](){
|
||||||
|
onHistoricalRequestFinished(reply);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void AlarmEventDataService::startRealTimeDataService()
|
void AlarmEventDataService::startRealTimeDataService()
|
||||||
{
|
{
|
||||||
cleanupRabbitMQConnection();
|
cleanupRabbitMQConnection();
|
||||||
|
|
@ -166,6 +188,58 @@ bool AlarmEventDataService::validateEvent(const EventData& event)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QUrl AlarmEventDataService::bulidHistoricalQueryUrl(const QDateTime& startTime, const QDateTime& endTime)
|
||||||
|
{
|
||||||
|
QUrl url = m_config.historicalConfig.baseUrl;
|
||||||
|
QUrlQuery query;
|
||||||
|
query.addQueryItem("begin", QString::number(startTime.toMSecsSinceEpoch()));
|
||||||
|
query.addQueryItem("end", QString::number(startTime.toMSecsSinceEpoch()));
|
||||||
|
url.setQuery(query);
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AlarmEventDataService::processHistoricalResponse(const QByteArray& data)
|
||||||
|
{
|
||||||
|
QJsonParseError parseError;
|
||||||
|
QJsonDocument doc = QJsonDocument::fromJson(data, &parseError);
|
||||||
|
|
||||||
|
if(parseError.error != QJsonParseError::NoError)
|
||||||
|
{
|
||||||
|
QString errorMsg = QString("Historical Events JSON parse error: %1 at offset %2")
|
||||||
|
.arg(parseError.errorString())
|
||||||
|
.arg(parseError.offset);
|
||||||
|
emit historicalQueryError(errorMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!doc.isObject())
|
||||||
|
{
|
||||||
|
QString errorMsg = "Historical Events JSON document is not an object";
|
||||||
|
emit historicalQueryError(errorMsg);
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
QJsonObject obj = doc.object();
|
||||||
|
QJsonValue dataValue = obj.value("data");
|
||||||
|
if(dataValue.isArray())
|
||||||
|
{
|
||||||
|
QList<EventData> historicalEvents;
|
||||||
|
QJsonArray eventArray = dataValue.toArray();
|
||||||
|
int size = eventArray.size();
|
||||||
|
for(int i = 0; i < size; ++i)
|
||||||
|
{
|
||||||
|
QJsonValue eventValue = eventArray.at(i);
|
||||||
|
if(!eventValue.isObject())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
QJsonObject eventObj = eventValue.toObject();
|
||||||
|
EventData event = EventData::fromJson(eventObj);
|
||||||
|
if(!event.id.isEmpty())
|
||||||
|
historicalEvents.append(event);
|
||||||
|
}
|
||||||
|
emit historicalQuertData(historicalEvents);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ==================== 槽函数 ====================
|
// ==================== 槽函数 ====================
|
||||||
void AlarmEventDataService::onRabbitMQConnected()
|
void AlarmEventDataService::onRabbitMQConnected()
|
||||||
{
|
{
|
||||||
|
|
@ -216,3 +290,19 @@ void AlarmEventDataService::onReconnectTimeout()
|
||||||
m_serviceStatus = ServiceStatus::Reconnecting;
|
m_serviceStatus = ServiceStatus::Reconnecting;
|
||||||
startRealTimeDataService();
|
startRealTimeDataService();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AlarmEventDataService::onHistoricalRequestFinished(QNetworkReply* reply)
|
||||||
|
{
|
||||||
|
if(reply->error() == QNetworkReply::NoError)
|
||||||
|
{
|
||||||
|
QByteArray data = reply->readAll();
|
||||||
|
processHistoricalResponse(data);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QString errorMsg = QString("Request HistoricalEvents error: %1").arg(reply->errorString());
|
||||||
|
emit historicalQueryError(errorMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
reply->deleteLater();
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue