From 6b80da0fe2a6053b39802a6701db6df0ab1fde24 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期五, 05 九月 2025 17:27:35 +0800
Subject: [PATCH] 1. 添加设备配方参数显示界面

---
 SourceCode/Bond/Servo/AlarmManager.cpp |   56 +++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 35 insertions(+), 21 deletions(-)

diff --git a/SourceCode/Bond/Servo/AlarmManager.cpp b/SourceCode/Bond/Servo/AlarmManager.cpp
index 3283979..0ed76e5 100644
--- a/SourceCode/Bond/Servo/AlarmManager.cpp
+++ b/SourceCode/Bond/Servo/AlarmManager.cpp
@@ -33,12 +33,6 @@
     }
 }
 
-// 设置数据库连接
-void AlarmManager::setDatabase(BL::Database* db) {
-    std::lock_guard<std::mutex> lock(m_mutex);
-    m_pDB = db;
-}
-
 // 初始化报警表
 bool AlarmManager::initAlarmTable() {
     char path[MAX_PATH];
@@ -221,6 +215,17 @@
     
         return result;
     #else
+        for (AlarmDataMap::const_iterator it = m_mapCache.begin(); it != m_mapCache.end(); ++it) {
+            const AlarmData& alarm = it->second;
+            if (alarm.nId == alarmData.nId &&
+                alarm.nDeviceId == alarmData.nDeviceId &&
+                alarm.nUnitId == alarmData.nUnitId) {
+
+                alarmEventId = it->first;
+                return false;
+            }
+        }
+
         // 构建插入查询并使用 RETURNING 获取插入后的 alarm_event_id
         std::ostringstream query;
         query << "INSERT INTO alarms (id, severity_level, device_id, unit_id, description, start_time, end_time) "
@@ -776,23 +781,32 @@
         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, ',');
+        try {
+            // 逐字段解析并验证
+            if (!std::getline(ss, cell, ',')) throw std::runtime_error("Missing field: No");
+            if (!std::getline(ss, alarm.strUnitID, ',')) throw std::runtime_error("Missing field: UnitID");
+            if (!std::getline(ss, alarm.strUnitNo, ',')) throw std::runtime_error("Missing field: UnitNo");
+            if (!std::getline(ss, cell, ',')) throw std::runtime_error("Missing field: AlarmLevel");
+            alarm.nAlarmLevel = std::stoi(cell);
+            if (!std::getline(ss, cell, ',')) throw std::runtime_error("Missing field: AlarmCode");
+            alarm.nAlarmCode = std::stoi(cell);
+            if (!std::getline(ss, cell, ',')) throw std::runtime_error("Missing field: AlarmID");
+            alarm.nAlarmID = std::stoi(cell);
+            if (!std::getline(ss, alarm.strAlarmText, ',')) throw std::runtime_error("Missing field: AlarmText");
+            if (!std::getline(ss, alarm.strDescription, ',')) throw std::runtime_error("Missing field: Description");
 
-        if (m_mapAlarm.find(alarm.nAlarmID) == m_mapAlarm.end()) {
-            m_mapAlarm[alarm.nAlarmID] = alarm;
+            // 检查是否重复
+            if (m_mapAlarm.find(alarm.nAlarmID) == m_mapAlarm.end()) {
+                m_mapAlarm[alarm.nAlarmID] = alarm;
+            }
+            else {
+                std::cerr << "Duplicate AlarmID: " << alarm.nAlarmID << std::endl;
+            }
         }
-        else {
-            std::cerr << "Duplicate AlarmID: " << alarm.nAlarmID << std::endl;
+        catch (const std::exception& e) {
+            // 捕获并记录解析错误
+            std::cerr << "Error parsing line: " << line << " - " << e.what() << std::endl;
+            continue;
         }
     }
 

--
Gitblit v1.9.3