| | |
| | | #include "stdafx.h" |
| | | #include "AlarmManager.h" |
| | | #include <sstream> |
| | | #include <fstream> |
| | | #include <iostream> |
| | | #include <stdexcept> |
| | | #include <ctime> |
| | |
| | | } |
| | | 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; |
| | | } |