From a37988428ced6683f431ca01629015d51ceeb1e4 Mon Sep 17 00:00:00 2001 From: duanshengchao <519970194@qq.com> Date: Wed, 12 Nov 2025 14:48:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0=E6=8A=A5=E8=AD=A6?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E6=9C=8D=E5=8A=A1=E7=9A=84=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=8F=8A=E4=BF=A1=E6=81=AF=E8=AF=BB=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 39 +++++++++++++++++++++++++++++ alarmEventService_config.ini | 18 +++++++++++++ include/alarmEventDataService.h | 9 ++++++- realTimeDataService_config.ini | 0 source/alarmEventDataService.cpp | 43 ++++++++++++++++++++++++++------ 5 files changed, 100 insertions(+), 9 deletions(-) create mode 100644 alarmEventService_config.ini create mode 100644 realTimeDataService_config.ini diff --git a/CMakeLists.txt b/CMakeLists.txt index 60f3e12..ac42696 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -211,6 +211,45 @@ install(TARGETS PowerMaster RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) +# 定义配置文件和目标目录 +set(CONFIG_FILES + alarmEventService_config.ini + realTimeDataService_config.ini +) +set(CONFIG_FILE_DIR "${CMAKE_BINARY_DIR}/config") +# 确保配置文件目录存在 +if(NOT EXISTS "${CONFIG_FILE_DIR}") + message(STATUS "Creating confiuration directory: ${CONFIG_FILE_DIR}") + file(MAKE_DIRECTORY "${CONFIG_FILE_DIR}") +endif() +# 复制所有配置文件到目标目录 +foreach(CONFIG_FILE ${CONFIG_FILES}) + set(SOURCE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/${CONFIG_FILE}") + set(TARGET_FILE "${CONFIG_FILE_DIR}/${CONFIG_FILE}") + # 检查源文件是否存在 + if(NOT EXISTS "${SOURCE_FILE}") + message(WARNING "Config file not found: ${CONFIG_FILE}") + continue() + endif() + # 拷贝 + if(NOT EXISTS "${TARGET_FILE}") + message(STATUS "Copied ${CONFIG_FILE} to ${CONFIG_FILE_DIR}") + file(COPY "${SOURCE_FILE}" DESTINATION "${CONFIG_FILE_DIR}") + else() + # 可选:检查是否需要更新(基于时间戳并采用统一格式) + file(TIMESTAMP "${SOURCE_FILE}" SOURCE_TIME "%s") + file(TIMESTAMP "${TARGET_FILE}" TARGET_TIME "%s") + # message(STATUS "${SOURCE_FILE} timestamp: ${SOURCE_TIME}") + # message(STATUS "${TARGET_FILE} timestamp: ${TARGET_TIME}") + if(SOURCE_TIME GREATER TARGET_TIME) + message(STATUS "Updating ${CONFIG_FILE} (source is newer)") + file(COPY "${SOURCE_FILE}" DESTINATION "${CONFIG_FILE_DIR}") + else() + message(STATUS "${TARGET_FILE} already exists, skipping copy") + endif() + endif() +endforeach() + if(QT_VERSION_MAJOR EQUAL 6) qt_finalize_executable(PowerMaster) endif() diff --git a/alarmEventService_config.ini b/alarmEventService_config.ini new file mode 100644 index 0000000..bc80b69 --- /dev/null +++ b/alarmEventService_config.ini @@ -0,0 +1,18 @@ +[RabbitMQConfig] +host=127.0.0.1 +port=5672 +username=alarm_service +password=123456 +virtualHost=/alarm +exchangeName=event_notify_fanout +queueName=event_nofify_queue +routingKey=key +reconnectInterval=3000 +heartbeat=60 +autoAck=1 + +[HistoricalDataConfig] +baseUrl=http://127.0.0.1:8888/api/events +timeout=3000 +maxRetries=3 +retryInterval=2000 \ No newline at end of file diff --git a/include/alarmEventDataService.h b/include/alarmEventDataService.h index a09c7c7..3119c6e 100644 --- a/include/alarmEventDataService.h +++ b/include/alarmEventDataService.h @@ -14,6 +14,7 @@ class QAmqpExchange; class QNetworkAccessManager; class QNetworkReply; class QTimer; +class QSettings; class AlarmEventDataService : public QObject { @@ -22,7 +23,6 @@ class AlarmEventDataService : public QObject public: static AlarmEventDataService* instance(); - bool initialize(const ServiceConfig& config); void start(); void stop(); void queryHistoricalEvents(const QDateTime& startTime, const QDateTime& endTime); @@ -44,6 +44,8 @@ private: explicit AlarmEventDataService(); ~AlarmEventDataService(); + void initialize(); + //连接管理 void startRealTimeDataService(); void cleanupRabbitMQConnection(); @@ -75,6 +77,11 @@ private: //历史数据相关 QNetworkAccessManager* m_networkManager; + + //配置相关 + QSettings* m_settings; + QString m_settingsFile; + bool m_isVaildSettingsFile; }; #endif diff --git a/realTimeDataService_config.ini b/realTimeDataService_config.ini new file mode 100644 index 0000000..e69de29 diff --git a/source/alarmEventDataService.cpp b/source/alarmEventDataService.cpp index fee527d..03de838 100644 --- a/source/alarmEventDataService.cpp +++ b/source/alarmEventDataService.cpp @@ -4,10 +4,13 @@ #include #include #include +#include +#include #include #include #include #include +#include AlarmEventDataService* AlarmEventDataService::instance() { @@ -30,22 +33,46 @@ AlarmEventDataService::AlarmEventDataService() connect(m_reconnectTimer, &QTimer::timeout, this, &AlarmEventDataService::onReconnectTimeout); m_networkManager = new QNetworkAccessManager(this); + + initialize(); } AlarmEventDataService::~AlarmEventDataService() {} -bool AlarmEventDataService::initialize(const ServiceConfig& config) +void AlarmEventDataService::initialize() { - if(m_serviceStatus != ServiceStatus::Uninitialized) - return false; + //读取配置文件 + QString cofigDir = QCoreApplication::applicationDirPath(); + m_settingsFile = cofigDir + "/config/alarmEventService_config.ini"; + QFile file(m_settingsFile); + if(file.open(QIODevice::ReadWrite)) + { + m_isVaildSettingsFile = true; + m_settings = new QSettings(m_settingsFile, QSettings::IniFormat); - if(!config.isValid()) - return false; + //RabbitMQConfig + m_config.rabbitMQConfig.host = m_settings->value("RabbitMQConfig/host").toString(); + m_config.rabbitMQConfig.port = m_settings->value("RabbitMQConfig/port").toInt(); + m_config.rabbitMQConfig.username = m_settings->value("RabbitMQConfig/username").toString(); + m_config.rabbitMQConfig.password = m_settings->value("RabbitMQConfig/password").toString(); + m_config.rabbitMQConfig.virtualHost = m_settings->value("RabbitMQConfig/virtualHost").toString(); + m_config.rabbitMQConfig.exchangeName = m_settings->value("RabbitMQConfig/exchangeName").toString(); + m_config.rabbitMQConfig.queueName = m_settings->value("RabbitMQConfig/queueName").toString(); + m_config.rabbitMQConfig.routingKey = m_settings->value("RabbitMQConfig/routingKey").toString(); + m_config.rabbitMQConfig.reconnectInterval = m_settings->value("RabbitMQConfig/reconnectInterval").toInt(); + m_config.rabbitMQConfig.heartbeat = m_settings->value("RabbitMQConfig/heartbeat").toInt(); + m_config.rabbitMQConfig.autoAck = m_settings->value("RabbitMQConfig/autoAck").toBool(); + //HistoricalDataConfig + m_config.historicalConfig.baseUrl = m_settings->value("HistoricalDataConfig/baseUrl").toString(); + m_config.historicalConfig.timeout = m_settings->value("HistoricalDataConfig/timeout").toInt(); + m_config.historicalConfig.maxRetries = m_settings->value("HistoricalDataConfig/maxRetries").toInt(); + m_config.historicalConfig.retryInterval = m_settings->value("HistoricalDataConfig/retryInterval").toInt(); - m_config = config; - m_serviceStatus = ServiceStatus::Disconnected; - return true; + m_serviceStatus = ServiceStatus::Disconnected; + } + else + m_isVaildSettingsFile = false; } void AlarmEventDataService::start()