From debee9b5cae51f744937fc4f0ef4c25272886676 Mon Sep 17 00:00:00 2001
From: darker <mr.darker@163.com>
Date: 星期五, 21 二月 2025 11:13:06 +0800
Subject: [PATCH] 1. 添加错误文件的加载好保存,并提供ID查询功能
---
SourceCode/Bond/Servo/AlarmManager.cpp | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 105 insertions(+), 0 deletions(-)
diff --git a/SourceCode/Bond/Servo/AlarmManager.cpp b/SourceCode/Bond/Servo/AlarmManager.cpp
index 7864235..18953a6 100644
--- a/SourceCode/Bond/Servo/AlarmManager.cpp
+++ b/SourceCode/Bond/Servo/AlarmManager.cpp
@@ -1,6 +1,7 @@
#include "stdafx.h"
#include "AlarmManager.h"
#include <sstream>
+#include <fstream>
#include <iostream>
#include <stdexcept>
#include <ctime>
@@ -287,3 +288,107 @@
}
m_pDB->executeQuery(query.str());
}
+
+// 读取报警文件
+bool AlarmManager::readAlarmFile(const std::string& filename) {
+ std::ifstream file(filename);
+ std::string line;
+ bool first_line = true;
+
+ if (!file.is_open()) {
+ std::cerr << "Error opening file!" << std::endl;
+ return false;
+ }
+
+ while (std::getline(file, line)) {
+ if (first_line) {
+ first_line = false;
+ continue;
+ }
+
+ std::stringstream ss(line);
+ std::string cell;
+ AlarmInfo alarm;
+
+ std::getline(ss, cell, ',');
+ std::getline(ss, alarm.strUnitID, ',');
+ std::getline(ss, alarm.strUnitNo, ',');
+ std::getline(ss, cell, ',');
+ alarm.nAlarmLevel = std::stoi(cell);
+ std::getline(ss, cell, ',');
+ alarm.nAlarmCode = std::stoi(cell);
+ std::getline(ss, cell, ',');
+ alarm.nAlarmID = std::stoi(cell);
+ std::getline(ss, alarm.strAlarmText, ',');
+ std::getline(ss, alarm.strDescription, ',');
+
+ if (m_mapAlarm.find(alarm.nAlarmID) == m_mapAlarm.end()) {
+ m_mapAlarm[alarm.nAlarmID] = alarm;
+ }
+ else {
+ std::cerr << "Duplicate AlarmID: " << alarm.nAlarmID << std::endl;
+ }
+ }
+
+ file.close();
+ return true;
+}
+
+// 将报警数据保存到文件
+bool AlarmManager::saveAlarmFile(const std::string& filename) {
+ std::ofstream file(filename);
+
+ if (!file.is_open()) {
+ std::cerr << "打开文件写入失败!" << std::endl;
+ return false;
+ }
+
+ // 写入标题行
+ file << "No,UNIT ID,UNIT NO,Alarm Level,Alarm Code,AlarmID,Alarm Text,Description\n";
+
+ // 写入报警数据
+ int nIndex = 1;
+ for (const auto& pair : m_mapAlarm) {
+ const AlarmInfo& alarm = pair.second;
+ file << nIndex++ << ","
+ << alarm.strUnitID << ","
+ << alarm.strUnitNo << ","
+ << alarm.nAlarmLevel << ","
+ << alarm.nAlarmCode << ","
+ << alarm.nAlarmID << ","
+ << alarm.strAlarmText << ","
+ << alarm.strDescription << "\n";
+ }
+
+ file.close();
+ return true;
+}
+
+// 通过 AlarmID 查询对应的报警信息
+const AlarmInfo* AlarmManager::getAlarmInfoByID(int nAlarmID) const {
+ auto it = m_mapAlarm.find(nAlarmID);
+ if (it != m_mapAlarm.end()) {
+ return &(it->second);
+ }
+ else {
+ std::cerr << "未找到 AlarmID: " << nAlarmID << std::endl;
+ return nullptr;
+ }
+}
+
+// 通过多个 AlarmID 查询对应的报警信息
+std::vector<AlarmInfo> AlarmManager::getAlarmsInfoByIDs(const std::vector<int>& alarmIDs) const {
+ std::vector<AlarmInfo> alarms;
+
+ for (int alarmID : alarmIDs) {
+ auto it = m_mapAlarm.find(alarmID);
+ if (it != m_mapAlarm.end()) {
+ alarms.push_back(it->second);
+ }
+ else {
+ std::cerr << "未找到 AlarmID: " << alarmID << std::endl;
+ }
+ }
+
+ return alarms;
+}
\ No newline at end of file
--
Gitblit v1.9.3