From f0e9c7745f0f01e93b00306c2ba64b0586e70b9d Mon Sep 17 00:00:00 2001
From: Darker <mr.darker@163.com>
Date: 星期二, 04 三月 2025 10:56:41 +0800
Subject: [PATCH] 1. 添加通过 alarm_event_id 解除报警(更新结束时间) 2. 通过多个属性查找并解除报警(更新结束时间)
---
SourceCode/Bond/Servo/AlarmManager.cpp | 61 ++++++++++++++++++++++++++++++
SourceCode/Bond/Servo/AlarmManager.h | 20 ++++++++++
2 files changed, 81 insertions(+), 0 deletions(-)
diff --git a/SourceCode/Bond/Servo/AlarmManager.cpp b/SourceCode/Bond/Servo/AlarmManager.cpp
index 73ce376..74b1006 100644
--- a/SourceCode/Bond/Servo/AlarmManager.cpp
+++ b/SourceCode/Bond/Servo/AlarmManager.cpp
@@ -694,6 +694,67 @@
return lastInsertId;
}
+// 通过 alarm_event_id 解除报警(更新结束时间)
+bool AlarmManager::clearAlarmByEventId(int alarmEventId, const std::string& endTime) {
+ if (!m_pDB) {
+ return false;
+ }
+
+ bool result = true;
+ auto it = m_mapCache.find(alarmEventId);
+ if (it != m_mapCache.end()) {
+ std::lock_guard<std::mutex> lock(m_mutex);
+
+ std::ostringstream query;
+ query << "UPDATE alarms SET end_time = '" << endTime << "' WHERE alarm_event_id = " << alarmEventId << ";";
+ bool result = m_pDB->executeQuery(query.str());
+ if (result) {
+ m_mapCache.erase(it);
+ }
+ }
+
+ return result;
+}
+
+// 通过多个属性查找并解除报警(更新结束时间)
+bool AlarmManager::clearAlarmByAttributes(int nId, int nSeverityLevel, int nDeviceId, int nUnitId, const std::string& strDescription, const std::string& endTime) {
+ if (!m_pDB) {
+ return false;
+ }
+
+ std::lock_guard<std::mutex> lock(m_mutex);
+
+ // 先在缓存中查找匹配的 alarm_event_id
+ int alarmEventId = -1;
+ for (AlarmDataMap::const_iterator it = m_mapCache.begin(); it != m_mapCache.end(); ++it) {
+ const AlarmData& alarm = it->second;
+ if (alarm.nId == nId &&
+ alarm.nSeverityLevel == nSeverityLevel &&
+ alarm.nDeviceId == nDeviceId &&
+ alarm.nUnitId == nUnitId &&
+ alarm.strDescription == strDescription) {
+
+ alarmEventId = it->first;
+ break;
+ }
+ }
+
+ // 如果没找到匹配的记录,则直接返回 false
+ if (alarmEventId == -1) {
+ return false;
+ }
+
+ // 构建 SQL 语句,使用找到的 alarm_event_id 来更新结束时间
+ std::ostringstream query;
+ query << "UPDATE alarms SET end_time = '" << endTime << "' WHERE alarm_event_id = " << alarmEventId << ";";
+ bool result = m_pDB->executeQuery(query.str());
+ if (result) {
+ m_mapCache.erase(alarmEventId);
+ }
+
+ return result;
+}
+
// 读取报警文件
bool AlarmManager::readAlarmFile(const std::string& filename) {
std::ifstream file(filename);
diff --git a/SourceCode/Bond/Servo/AlarmManager.h b/SourceCode/Bond/Servo/AlarmManager.h
index c046c93..f99aafe 100644
--- a/SourceCode/Bond/Servo/AlarmManager.h
+++ b/SourceCode/Bond/Servo/AlarmManager.h
@@ -214,6 +214,26 @@
*/
int getLastInsertId();
+ /**
+ * 通过事件id解除报警(更新结束时间)
+ * @param alarmEventId 事件ID
+ * @param endTime 结束时间
+ * @return 成功返回true,失败返回false
+ */
+ bool clearAlarmByEventId(int alarmEventId, const std::string& endTime);
+
+ /**
+ * 通过多个属性查找并解除报警(更新结束时间)
+ * @param nId 报警ID
+ * @param nSeverityLevel 报警等级
+ * @param nDeviceId 设备ID
+ * @param nUnitId 单元ID
+ * @param strDescription 描述
+ * @param endTime 结束时间
+ * @return 成功返回true,失败返回false
+ */
+ bool clearAlarmByAttributes(int nId, int nSeverityLevel, int nDeviceId, int nUnitId, const std::string& strDescription, const std::string& endTime);
+
/**
* 读取报警文件
* @param filename 文件名
--
Gitblit v1.9.3