From b67e16869a5bfbbde3896a4e5a13f1301f1b978d Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期五, 13 十二月 2024 14:55:55 +0800
Subject: [PATCH] 1.调整保存警告到数据库的位置; 2.CAlarmMonitor组件不再保存已完成的警告的数据;

---
 SourceCode/Bond/BondEq/AlarmMonitor.cpp |   50 +++++++++++--------------
 SourceCode/Bond/BondEq/AlarmMonitor.h   |    3 -
 SourceCode/Bond/BondEq/CPageAlarm.cpp   |   30 +++------------
 3 files changed, 29 insertions(+), 54 deletions(-)

diff --git a/SourceCode/Bond/BondEq/AlarmMonitor.cpp b/SourceCode/Bond/BondEq/AlarmMonitor.cpp
index 86614e5..37528f3 100644
--- a/SourceCode/Bond/BondEq/AlarmMonitor.cpp
+++ b/SourceCode/Bond/BondEq/AlarmMonitor.cpp
@@ -30,11 +30,6 @@
 		item.second->release();
 	}
 	m_mapAlarming.clear();
-
-	for (auto item : m_alarms) {
-		item->release();
-	}
-	m_alarms.clear();
 }
 
 std::string& CAlarmMonitor::getClassName()
@@ -169,10 +164,10 @@
 	if (ar.IsStoring())
 	{
 		Lock();
-		int count = (int)m_alarms.size();
+		int count = (int)m_mapAlarming.size();
 		ar << count;
-		for (auto item : m_alarms) {
-			item->Serialize(ar);
+		for (auto item : m_mapAlarming) {
+			item.second->Serialize(ar);
 		}
 		Unlock();
 	}
@@ -183,9 +178,10 @@
 		ar >> count;
 		for (int i = 0; i < count; i++) {
 			CAlarm* pAlarm = new CAlarm();
+			pAlarm->addRef();
 			pAlarm->Serialize(ar);
-			addAlarmToHistoryRecord(pAlarm);
-			LOGE("历史警告:%s", pAlarm->toString().c_str());
+			addAlarming(pAlarm);
+			pAlarm->release();
 		}
 		Unlock();
 	}
@@ -215,18 +211,6 @@
 	Unlock();
 
 	return iter->second;
-}
-
-std::list< CAlarm*>& CAlarmMonitor::getAlarmRecords()
-{
-	return m_alarms;
-}
-
-void CAlarmMonitor::getAlarmRecords(std::list< CAlarm*>& list)
-{
-	Lock();
-	list = m_alarms;
-	Unlock();
 }
 
 BOOL CAlarmMonitor::compareData(const char* pScrData, const char* pTarData, int len)
@@ -270,11 +254,21 @@
 
 void CAlarmMonitor::addAlarmToHistoryRecord(CAlarm* pAlarm)
 {
+	// 加入数据库
+	AlarmManager::getInstance().addAlarm(
+		std::to_string(pAlarm->getId()).c_str(),
+		getAlarmText(pAlarm->getId()),
+		CToolUnits::timeToString2(pAlarm->getOnTime()).c_str(),
+		CToolUnits::timeToString2(pAlarm->getOffTime()).c_str());
+}
+
+BOOL CAlarmMonitor::addAlarming(CAlarm* pAlarm)
+{
+	auto iter = m_mapAlarming.find(pAlarm->getId());
+	if (iter != m_mapAlarming.end()) return FALSE;
+
 	pAlarm->addRef();
-	m_alarms.push_back(pAlarm);
-	if (m_alarms.size() > 1000) {
-		CAlarm* pTemp = m_alarms.front();
-		pTemp->release();
-		m_alarms.pop_front();
-	}
+	m_mapAlarming[pAlarm->getId()] = pAlarm;
+
+	return TRUE;
 }
\ No newline at end of file
diff --git a/SourceCode/Bond/BondEq/AlarmMonitor.h b/SourceCode/Bond/BondEq/AlarmMonitor.h
index a0b0fac..c7cf2f1 100644
--- a/SourceCode/Bond/BondEq/AlarmMonitor.h
+++ b/SourceCode/Bond/BondEq/AlarmMonitor.h
@@ -25,7 +25,6 @@
 	BOOL isAlarming();
 	CAlarm* getActiveAlarm();
 	void getAlarmRecords(std::list< CAlarm*>& list);
-	std::list< CAlarm*>& getAlarmRecords();
 
 private:
 	BOOL compareData(const char* pScrData, const char* pTarData, int len);
@@ -33,11 +32,11 @@
 	BOOL isAlarmOn(int id);
 	BOOL findAlarm(std::vector<int>& ids, int id);
 	void addAlarmToHistoryRecord(CAlarm* pAlarm);
+	BOOL addAlarming(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/CPageAlarm.cpp b/SourceCode/Bond/BondEq/CPageAlarm.cpp
index ffffedd..f03c56b 100644
--- a/SourceCode/Bond/BondEq/CPageAlarm.cpp
+++ b/SourceCode/Bond/BondEq/CPageAlarm.cpp
@@ -157,20 +157,17 @@
 {
 	CAlarmMonitor* pMonitor = (CAlarmMonitor*)theApp.m_model.getBonder().GetComponent(ALARM_MONITOR);
 
+
+	// 当前正在发生的报警
 	pMonitor->Lock();
-
-#if 0
 	std::map<int, CAlarm*>& alarmings = pMonitor->getAlarmingMap();
-	std::list< CAlarm*>& alarms = pMonitor->getAlarmRecords();
-
 	for (auto item : alarmings) {
 		AddAlarm(pMonitor, item.second);
 	}
-	for (auto item : alarms) {
-		AddAlarm(pMonitor, item);
-	}
-#else
-	// 获取报警数据
+	pMonitor->Unlock();
+
+
+	// 获取历史报警数据
 	auto vecData = AlarmManager::getInstance().getAllAlarms();
 
 	// 填充数据
@@ -182,9 +179,6 @@
 		pListCtrl->SetItemText(0, 3, item[2].c_str());
 		pListCtrl->SetItemText(0, 4, item[3].c_str());
 	}
-#endif // 0
-
-	pMonitor->Unlock();
 }
 
 void CPageAlarm::AddAlarm(CAlarmMonitor* pMonitor, CAlarm* pAlarm)
@@ -202,12 +196,6 @@
 	if (pAlarm->getOffTime() > 0) {
 		pListCtrl->SetItemText(0, 4, CToolUnits::timeToString2(pAlarm->getOffTime()).c_str());
 	}
-
-	AlarmManager::getInstance().addAlarm(
-		std::to_string(pAlarm->getId()).c_str(), 
-		pMonitor->getAlarmText(pAlarm->getId()),
-		CToolUnits::timeToString2(pAlarm->getOnTime()).c_str(),
-		CToolUnits::timeToString2(pAlarm->getOffTime()).c_str());
 }
 
 void CPageAlarm::UpdateAlarm(CAlarmMonitor* pMonitor, CAlarm* pAlarm)
@@ -220,12 +208,6 @@
 		if (pListCtrl->GetItemData(i) == (DWORD_PTR)pAlarm) {
 			if (pAlarm->getOffTime() > 0) {
 				pListCtrl->SetItemText(i, 4, CToolUnits::timeToString2(pAlarm->getOffTime()).c_str());
-
-				AlarmManager::getInstance().updateAlarmEndTime(
-					std::to_string(pAlarm->getId()).c_str(),
-					pMonitor->getAlarmText(pAlarm->getId()),
-					CToolUnits::timeToString2(pAlarm->getOnTime()).c_str(),
-					CToolUnits::timeToString2(pAlarm->getOffTime()).c_str());
 			}
 		}
 	}

--
Gitblit v1.9.3