From 935de7033ac34e1d9285abef4afcce6ba31bcbd1 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期一, 09 十二月 2024 18:25:11 +0800
Subject: [PATCH] 1.历史报警记录保存;

---
 SourceCode/Bond/BondEq/AlarmMonitor.cpp |   25 +++++++++++++++++++------
 SourceCode/Bond/BondEq/AlarmMonitor.h   |    2 ++
 SourceCode/Bond/BondEq/Alarm.cpp        |   10 ++++++----
 SourceCode/Bond/BondEq/Model.cpp        |    5 +++++
 4 files changed, 32 insertions(+), 10 deletions(-)

diff --git a/SourceCode/Bond/BondEq/Alarm.cpp b/SourceCode/Bond/BondEq/Alarm.cpp
index 266e4ca..ef82a47 100644
--- a/SourceCode/Bond/BondEq/Alarm.cpp
+++ b/SourceCode/Bond/BondEq/Alarm.cpp
@@ -107,22 +107,24 @@
 	if (ar.IsStoring())
 	{
 		Lock();
+		ar << m_nUnitId;
+		ar << m_nId;
+		ar << m_nLevel;
 		ar << m_timeOn;
 		ar << m_timeOff;
 		ar << m_nStatus;
-		ar << m_nId;
-		ar << m_nLevel;
 		WriteString(ar, m_strText);
 		Unlock();
 	}
 	else
 	{
 		Lock();
+		ar >> m_nUnitId;
+		ar >> m_nId;
+		ar >> m_nLevel;
 		ar >> m_timeOn;
 		ar >> m_timeOff;
 		ar >> m_nStatus;
-		ar >> m_nId;
-		ar >> m_nLevel;
 		ReadString(ar, m_strText);
 		Unlock();
 	}
diff --git a/SourceCode/Bond/BondEq/AlarmMonitor.cpp b/SourceCode/Bond/BondEq/AlarmMonitor.cpp
index d53b6f7..8d3c9f5 100644
--- a/SourceCode/Bond/BondEq/AlarmMonitor.cpp
+++ b/SourceCode/Bond/BondEq/AlarmMonitor.cpp
@@ -30,6 +30,11 @@
 		item.second->release();
 	}
 	m_mapAlarming.clear();
+
+	for (auto item : m_alarms) {
+		item->release();
+	}
+	m_alarms.clear();
 }
 
 std::string& CAlarmMonitor::getClassName()
@@ -91,6 +96,7 @@
 		if (!findAlarm(alarmIds, iter->first)) {
 			// 消除警告, 同时将信息发出,以使界面显示和历史记录保存
 			iter->second->alarmOff();
+			addAlarmToHistoryRecord(iter->second);
 			LOGE("消除了警告:%s", iter->second->toString().c_str());
 			SendBroadcast(&CIntent(BC_CODE_ALARM_OFF, "", iter->second));
 
@@ -159,7 +165,6 @@
 
 void CAlarmMonitor::Serialize(CArchive& ar)
 {
-	/*
 	if (ar.IsStoring())
 	{
 		Lock();
@@ -177,15 +182,12 @@
 		ar >> count;
 		for (int i = 0; i < count; i++) {
 			CAlarm* pAlarm = new CAlarm();
-			pAlarm->addRef();
 			pAlarm->Serialize(ar);
-			AddAlarm(pAlarm);
-			pAlarm->release();
-
+			addAlarmToHistoryRecord(pAlarm);
+			LOGE("历史警告:%s", pAlarm->toString().c_str());
 		}
 		Unlock();
 	}
-	*/
 }
 
 void CAlarmMonitor::getAlarmingMap(std::map<int, CAlarm*>& alarms)
@@ -240,4 +242,15 @@
 	}
 
 	return FALSE;
+}
+
+void CAlarmMonitor::addAlarmToHistoryRecord(CAlarm* pAlarm)
+{
+	pAlarm->addRef();
+	m_alarms.push_back(pAlarm);
+	if (m_alarms.size() > 1000) {
+		CAlarm* pTemp = m_alarms.front();
+		pTemp->release();
+		m_alarms.pop_front();
+	}
 }
\ No newline at end of file
diff --git a/SourceCode/Bond/BondEq/AlarmMonitor.h b/SourceCode/Bond/BondEq/AlarmMonitor.h
index fe1108c..ecf7cbd 100644
--- a/SourceCode/Bond/BondEq/AlarmMonitor.h
+++ b/SourceCode/Bond/BondEq/AlarmMonitor.h
@@ -29,10 +29,12 @@
 	int addAlarmTemplate(int id, int level, const char* pszDescription);
 	BOOL isAlarmOn(int id);
 	BOOL findAlarm(std::vector<int>& ids, int id);
+	void addAlarmToHistoryRecord(CAlarm* pAlarm);
 
 private:
 	std::map<int, CAlarm*> m_mapAlarmTemplate;	// 这是警告的模板,从文件加载
 	std::map<int, CAlarm*> m_mapAlarming;		// 正在发生的警告
+	std::list< CAlarm*> m_alarms;				// 历史发生的警告信息,考虑保存一定数量
 	char* m_pRawData;
 };
 
diff --git a/SourceCode/Bond/BondEq/Model.cpp b/SourceCode/Bond/BondEq/Model.cpp
index ff9e24e..8a6cbec 100644
--- a/SourceCode/Bond/BondEq/Model.cpp
+++ b/SourceCode/Bond/BondEq/Model.cpp
@@ -178,6 +178,11 @@
 	m_bonder.init();
 
 
+	CString strBonderDataFile;
+	strBonderDataFile.Format(_T("%s\\Bonder.dat"), (LPTSTR)(LPCTSTR)m_strWorkDir);
+	m_bonder.read((LPTSTR)(LPCTSTR)strBonderDataFile);
+
+
 	return 0;
 }
 

--
Gitblit v1.9.3