From bc7f1c4e028e69be51079b59dae4ae5c4d43f5bb Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期六, 31 一月 2026 21:54:56 +0800
Subject: [PATCH] 1.状态指示图,目前灰色表示掉线,绿色表示在线。增加Slot的小点表示有没有料,及加工状态 。 2.增加图示
---
SourceCode/Bond/Servo/AlarmManager.h | 287 +++++++++++++++++++++++++++++++++++++--------------------
1 files changed, 187 insertions(+), 100 deletions(-)
diff --git a/SourceCode/Bond/Servo/AlarmManager.h b/SourceCode/Bond/Servo/AlarmManager.h
index 28bea98..1cd55a9 100644
--- a/SourceCode/Bond/Servo/AlarmManager.h
+++ b/SourceCode/Bond/Servo/AlarmManager.h
@@ -1,162 +1,249 @@
-#ifndef ALARM_MANAGER_H
+锘�#ifndef ALARM_MANAGER_H
#define ALARM_MANAGER_H
#include <string>
#include <vector>
#include <mutex>
+#include <unordered_map>
#include "Database.h"
+
+struct AlarmInfo {
+ std::string strUnitID;
+ std::string strUnitNo;
+ int nAlarmLevel;
+ int nAlarmCode;
+ int nAlarmID;
+ std::string strAlarmText;
+ std::string strDescription;
+};
+
+struct AlarmData {
+ int nId; // 閿欒鐮�
+ int nSeverityLevel; // 鎶ヨ绛夌骇
+ int nDeviceId; // 璁惧ID
+ int nUnitId; // 鍗曞厓ID
+ std::string strDeviceName; // 璁惧鍚嶇О
+ std::string strUnitName; // 鍗曞厓鍚嶇О
+ std::string strDescription; // 鎻忚堪
+ std::string strStartTime; // 寮�濮嬫椂闂�
+ std::string strEndTime; // 缁撴潫鏃堕棿
+};
+
+using AlarmInfoMap = std::unordered_map<int, AlarmInfo>;
+using AlarmDataMap = std::unordered_map<int, AlarmData>;
class AlarmManager {
public:
/**
- * 获取单例实例
- * @return AlarmManager实例的引用
+ * 鑾峰彇鍗曚緥瀹炰緥
+ * @return AlarmManager瀹炰緥鐨勫紩鐢�
*/
static AlarmManager& getInstance();
/**
- * 设置数据库连接
- * @param db 数据库连接的指针
- */
- void setDatabase(BL::Database* db);
-
- /**
- * 初始化报警表
- * @return 成功返回true,失败返回false
+ * 鍒濆鍖栨姤璀﹁〃
+ * @return 鎴愬姛杩斿洖true锛屽け璐ヨ繑鍥瀎alse
*/
bool initAlarmTable();
/**
- * 销毁报警表
+ * 閿�姣佹姤璀﹁〃
*/
void termAlarmTable();
/**
- * 销毁报警表
- * @return 成功返回true,失败返回false
+ * 閿�姣佹姤璀﹁〃
+ * @return 鎴愬姛杩斿洖true锛屽け璐ヨ繑鍥瀎alse
*/
bool destroyAlarmTable();
/**
- * 添加报警
- * @param id 报警ID
- * @param deviceName 设备名称
- * @param description 报警描述
- * @param startTime 报警开始时间
- * @param endTime 报警结束时间
- * @return 成功返回true,失败返回false
- */
- bool addAlarm(const std::string& id, const std::string& deviceName, const std::string& description, const std::string& startTime, const std::string& endTime);
+ * 鎻掑叆妯℃嫙鏁版嵁
+ */
+ void insertMockData();
/**
- * 查询所有报警数据
- * @return 包含所有报警数据的二维字符串向量
+ * 娣诲姞鎶ヨ
+ * @param alarmData 鎶ヨ鏁版嵁鐨勭粨鏋勪綋
+ * @param alarmEventId 鏈�杩戞彃鍏ョ殑 alarm_event_id
+ * @return 鎴愬姛杩斿洖true锛屽け璐ヨ繑鍥瀎alse
*/
- std::vector<std::vector<std::string>> getAllAlarms();
+ bool addAlarm(const AlarmData& alarmData, int& alarmEventId);
/**
- * 根据报警ID查询报警
- * @param id 报警ID
- * @return 包含筛选后报警数据的二维字符串向量
+ * 鏌ヨ鎵�鏈夋姤璀︽暟鎹�
+ * @return 鍖呭惈鎵�鏈夋姤璀︽暟鎹殑缁撴瀯浣�
*/
- std::vector<std::vector<std::string>> getAlarmsById(const std::string& id);
+ std::vector<AlarmData> getAllAlarms();
/**
- * 根据描述查询报警
- * @param description 报警描述的筛选条件
- * @return 包含筛选后报警数据的二维字符串向量
+ * 鏍规嵁鎶ヨID鏌ヨ鎶ヨ
+ * @param id 鎶ヨID
+ * @return 鍖呭惈绛涢�夊悗鎶ヨ鏁版嵁鐨勭粨鏋勪綋
*/
- std::vector<std::vector<std::string>> getAlarmsByDescription(const std::string& description);
+ std::vector<AlarmData> getAlarmsById(const std::string& id);
/**
- * 根据时间范围查询报警
- * @param startTime 起始时间
- * @param endTime 结束时间
- * @return 包含查询结果的二维字符串向量
+ * 鏍规嵁鎻忚堪鏌ヨ鎶ヨ
+ * @param description 鎶ヨ鎻忚堪鐨勭瓫閫夋潯浠�
+ * @return 鍖呭惈绛涢�夊悗鎶ヨ鏁版嵁鐨勭粨鏋勪綋
*/
- std::vector<std::vector<std::string>> getAlarmsByTimeRange(
- const std::string& startTime, const std::string& endTime);
+ std::vector<AlarmData> getAlarmsByDescription(const std::string& description);
+
+ /**
+ * 鏍规嵁鏃堕棿鑼冨洿鏌ヨ鎶ヨ
+ * @param startTime 璧峰鏃堕棿
+ * @param endTime 缁撴潫鏃堕棿
+ * @return 鍖呭惈鏌ヨ缁撴灉鐨勬姤璀︽暟鎹�
+ */
+ std::vector<AlarmData> getAlarmsByTimeRange(const std::string& startTime, const std::string& endTime);
/**
- * 根据ID和时间范围查询报警
- * @param id 报警ID
- * @param startTime 起始时间
- * @param endTime 结束时间
- * @return 包含查询结果的二维字符串向量
+ * 鏍规嵁ID鍜屾椂闂磋寖鍥存煡璇㈡姤璀�
+ * @param id 鎶ヨID
+ * @param startTime 璧峰鏃堕棿
+ * @param endTime 缁撴潫鏃堕棿
+ * @return 鍖呭惈鏌ヨ缁撴灉鐨勬姤璀︽暟鎹�
*/
- std::vector<std::vector<std::string>> getAlarmsByIdAndTimeRange(
- const std::string& id, const std::string& startTime, const std::string& endTime);
+ std::vector<AlarmData> getAlarmsByIdAndTimeRange(const std::string& id, const std::string& startTime, const std::string& endTime);
/**
- * 获取报警数据
- * @param startPosition 起始位置
- * @param count 获取的记录数量
- * @return 包含报警数据的二维字符串向量
+ * 鑾峰彇鎶ヨ鏁版嵁
+ * @param startPosition 璧峰浣嶇疆
+ * @param count 鑾峰彇鐨勮褰曟暟閲�
+ * @return 鍖呭惈鏌ヨ缁撴灉鐨勬姤璀︽暟鎹�
*/
- std::vector<std::vector<std::string>> getAlarms(int startPosition, int count);
-
- /**
- * 获取筛选后的报警数据
- * @param id 报警ID的筛选条件
- * @param deviceName 设备名称的筛选条件
- * @param description 报警描述的筛选条件
- * @param startTime 起始时间筛选条件
- * @param endTime 结束时间筛选条件
- * @param pageNumber 页码
- * @param pageSize 每页的记录数
- * @return 包含筛选后报警数据的二维字符串向量
- */
- std::vector<std::vector<std::string>> getFilteredAlarms(
- const std::string& id,
- const std::string& deviceName,
- const std::string& description,
- const std::string& startTime,
- const std::string& endTime,
- int pageNumber,
- int pageSize);
-
- /**
- * 获取符合条件的报警总数
- * @param id 报警ID的筛选条件
- * @param deviceName 设备名称的筛选条件
- * @param description 报警描述的筛选条件
- * @param startTime 起始时间筛选条件
- * @param endTime 结束时间筛选条件
- * @return 符合条件的报警总数
- */
- int getTotalAlarmCount(
- const std::string& id,
- const std::string& deviceName,
- const std::string& description,
- const std::string& startTime,
- const std::string& endTime);
+ std::vector<AlarmData> getAlarms(int startPosition, int count);
+ std::vector<AlarmData> getActiveAlarms(int recentHours = 12);
/**
- * 更新报警结束时间
- * @param id 报警ID
- * @param description 报警描述
- * @param startTime 报警开始时间
- * @param newEndTime 新的报警结束时间
- * @return 成功返回true,失败返回false
+ * 绛涢�夋姤璀︽暟鎹�
+ * @param keyword 鍏抽敭瀛楃瓫閫夋潯浠�
+ * @param startTime 璧峰鏃堕棿绛涢�夋潯浠�
+ * @param endTime 缁撴潫鏃堕棿绛涢�夋潯浠�
+ * @param pageNumber 椤电爜
+ * @param pageSize 姣忛〉璁板綍鏁�
+ * @return 鍖呭惈绛涢�夊悗鎶ヨ鏁版嵁鐨勭粨鏋勪綋
*/
- bool updateAlarmEndTime(const std::string& id, const std::string& deviceName, const std::string& description, const std::string& startTime, const std::string& newEndTime);
+ std::vector<AlarmData> getFilteredAlarms(const std::string& keyword, const std::string& startTime, const std::string& endTime, int pageNumber, int pageSize);
/**
- * 清理旧报警
- * @param daysToKeep 保留的天数
- * @param deviceName 设备名称
+ * 鑾峰彇绗﹀悎鏉′欢鐨勬姤璀︽�绘暟
+ * @param keyword 鍏抽敭瀛楃瓫閫夋潯浠�
+ * @param startTime 璧峰鏃堕棿绛涢�夋潯浠�
+ * @param endTime 缁撴潫鏃堕棿绛涢�夋潯浠�
+ * @return 绗﹀悎鏉′欢鐨勬姤璀︽�绘暟
*/
- void cleanOldAlarms(int daysToKeep = 30, const std::string& deviceName = "");
+ int getTotalAlarmCount(const std::string& keyword, const std::string& startTime, const std::string& endTime);
+
+ /**
+ * 鏇存柊鎶ヨ缁撴潫鏃堕棿
+ * @param id 鎶ヨID
+ * @param severityLevel 鎶ヨ绛夌骇绛涢�夋潯浠�
+ * @param deviceId 璁惧ID
+ * @param unitId 鍗曞厓ID
+ * @param description 鎶ヨ鎻忚堪
+ * @param startTime 鎶ヨ寮�濮嬫椂闂�
+ * @param newEndTime 鏂扮殑鎶ヨ缁撴潫鏃堕棿
+ * @return 鎴愬姛杩斿洖true锛屽け璐ヨ繑鍥瀎alse
+ */
+ bool updateAlarmEndTime(
+ const std::string& id,
+ const std::string& severityLevel,
+ const std::string& deviceId,
+ const std::string& unitId,
+ const std::string& description,
+ const std::string& startTime,
+ const std::string& newEndTime);
+
+ /**
+ * 娓呯悊鏃ф姤璀�
+ * @param daysToKeep 淇濈暀鐨勫ぉ鏁�
+ * @param deviceId 璁惧ID
+ * @param unitId 鍗曞厓ID
+ */
+ void cleanOldAlarms(int daysToKeep = 30, const std::string& deviceId = "", const std::string& unitId = "");
+
+ /**
+ * 閫氳繃璁惧ID鑾峰彇璁惧鍚嶇О
+ * @param deviceId 璁惧ID
+ * @return 鎴愬姛杩斿洖璁惧鍚嶇О锛屽け璐ヨ繑鍥炵┖
+ */
+ std::string getDeviceNameById(int deviceId);
+
+ /**
+ * 閫氳繃璁惧ID鍜屽崟鍏僆D鑾峰彇鍗曞厓鍚嶇О
+ * @param deviceId 璁惧ID
+ * @param unitId 鍗曞厓ID
+ * @return 鎴愬姛杩斿洖鍗曞厓鍚嶇О锛屽け璐ヨ繑鍥炵┖
+ */
+ std::string getUnitNameById(int deviceId, int unitId);
+
+ /**
+ * 鑾峰彇鏈�杩戞彃鍏ョ殑 alarm_event_id
+ * @return 澶辫触杩斿洖-1锛屾垚鍔熻繑鍥炴渶杩戞彃鍏ョ殑 alarm_event_id
+ */
+ int getLastInsertId();
+
+ /**
+ * 閫氳繃浜嬩欢id瑙i櫎鎶ヨ锛堟洿鏂扮粨鏉熸椂闂达級
+ * @param alarmEventId 浜嬩欢ID
+ * @param endTime 缁撴潫鏃堕棿
+ * @return 鎴愬姛杩斿洖true锛屽け璐ヨ繑鍥瀎alse
+ */
+ bool clearAlarmByEventId(int alarmEventId, const std::string& endTime);
+
+ /**
+ * 閫氳繃澶氫釜灞炴�ф煡鎵惧苟瑙i櫎鎶ヨ锛堟洿鏂扮粨鏉熸椂闂达級
+ * @param nId 鎶ヨID
+ * @param nSeverityLevel 鎶ヨ绛夌骇
+ * @param nDeviceId 璁惧ID
+ * @param nUnitId 鍗曞厓ID
+ * @param strDescription 鎻忚堪
+ * @param endTime 缁撴潫鏃堕棿
+ * @return 鎴愬姛杩斿洖true锛屽け璐ヨ繑鍥瀎alse
+ */
+ bool clearAlarmByAttributes(int nId, int nDeviceId, int nUnitId, const std::string& endTime);
+
+ /**
+ * 璇诲彇鎶ヨ鏂囦欢
+ * @param filename 鏂囦欢鍚�
+ * @return 鎴愬姛杩斿洖true锛屽け璐ヨ繑鍥瀎alse
+ */
+ bool readAlarmFile(const std::string& filename);
+
+ /**
+ * 淇濆瓨鎶ヨ鏂囦欢
+ * @param filename 鏂囦欢鍚�
+ * @return 鎴愬姛杩斿洖true锛屽け璐ヨ繑鍥瀎alse
+ */
+ bool saveAlarmFile(const std::string& filename);
+
+ /**
+ * 閫氳繃鎶ヨID鏌ヨ鎶ヨ淇℃伅
+ * @param nAlarmID 鎶ヨID
+ * @return 鎶ヨ淇℃伅鐨勬寚閽�
+ */
+ const AlarmInfo* getAlarmInfoByID(int nAlarmID) const;
+
+ /**
+ * 閫氳繃澶氫釜鎶ヨID鏌ヨ瀵瑰簲鐨勬姤璀︿俊鎭�
+ * @param alarmIDs 澶氫釜鎶ヨID
+ * @return 杩斿洖澶氫釜鎶ヨ淇℃伅
+ */
+ std::vector<AlarmInfo> getAlarmsInfoByIDs(const std::vector<int>& alarmIDs) const;
private:
AlarmManager();
~AlarmManager();
- // 禁止拷贝和赋值
+ // 绂佹鎷疯礉鍜岃祴鍊�
AlarmManager(const AlarmManager&) = delete;
AlarmManager& operator=(const AlarmManager&) = delete;
BL::Database* m_pDB;
+ AlarmInfoMap m_mapAlarm;
+ AlarmDataMap m_mapCache;
static std::mutex m_mutex;
};
--
Gitblit v1.9.3