From 50a42e5d72e2f8cf92ff9b2273e0442977dbcefd Mon Sep 17 00:00:00 2001
From: LAPTOP-T815PCOQ\25526 <mr.liuyang@126.com>
Date: 星期三, 18 十二月 2024 18:28:02 +0800
Subject: [PATCH] 1. 对话框基类添加动态控件管理 2. 对话框基类主题切换功能

---
 SourceCode/Bond/BondEq/AlarmMonitor.cpp |   69 +++++++++++++++++++++++++---------
 1 files changed, 50 insertions(+), 19 deletions(-)

diff --git a/SourceCode/Bond/BondEq/AlarmMonitor.cpp b/SourceCode/Bond/BondEq/AlarmMonitor.cpp
index d53b6f7..37528f3 100644
--- a/SourceCode/Bond/BondEq/AlarmMonitor.cpp
+++ b/SourceCode/Bond/BondEq/AlarmMonitor.cpp
@@ -9,8 +9,8 @@
 
 CAlarmMonitor::CAlarmMonitor()
 {
-	m_pRawData = new char[200];
-	memset(m_pRawData, 0, 200);
+	m_pRawData = new char[512];
+	memset(m_pRawData, 0, 512);
 }
 
 
@@ -49,7 +49,7 @@
 	if (MONITOR_ID_ALARM != id) {
 		return;
 	}
-	
+
 	// 比较有没有变化
 	if (compareData(m_pRawData, (const char*)pData, size)) {
 		return;
@@ -90,12 +90,14 @@
 	for (auto iter = m_mapAlarming.begin(); iter != m_mapAlarming.end();/* iter++*/) {
 		if (!findAlarm(alarmIds, iter->first)) {
 			// 消除警告, 同时将信息发出,以使界面显示和历史记录保存
-			iter->second->alarmOff();
-			LOGE("消除了警告:%s", iter->second->toString().c_str());
-			SendBroadcast(&CIntent(BC_CODE_ALARM_OFF, "", iter->second));
-
-			iter->second->release();
+			CAlarm* pAlarm = iter->second;
+			pAlarm->alarmOff();
+			addAlarmToHistoryRecord(pAlarm);
 			m_mapAlarming.erase(iter++);
+
+			LOGE("消除了警告:%s", pAlarm->toString().c_str());
+			SendBroadcast(&CIntent(BC_CODE_ALARM_OFF, "", pAlarm));
+			pAlarm->release();
 		}
 		else {
 			iter++;
@@ -159,14 +161,13 @@
 
 void CAlarmMonitor::Serialize(CArchive& ar)
 {
-	/*
 	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();
 	}
@@ -179,20 +180,16 @@
 			CAlarm* pAlarm = new CAlarm();
 			pAlarm->addRef();
 			pAlarm->Serialize(ar);
-			AddAlarm(pAlarm);
+			addAlarming(pAlarm);
 			pAlarm->release();
-
 		}
 		Unlock();
 	}
-	*/
 }
 
-void CAlarmMonitor::getAlarmingMap(std::map<int, CAlarm*>& alarms)
+std::map<int, CAlarm*>& CAlarmMonitor::getAlarmingMap()
 {
-	Lock();
-	alarms = m_mapAlarming;
-	Unlock();
+	return m_mapAlarming;
 }
 
 BOOL CAlarmMonitor::isAlarming()
@@ -201,6 +198,19 @@
 	BOOL bAlarming = !m_mapAlarming.empty();
 	Unlock();
 	return bAlarming;
+}
+
+CAlarm* CAlarmMonitor::getActiveAlarm()
+{
+	Lock();
+	if (m_mapAlarming.empty()) {
+		Unlock();
+		return nullptr;
+	}
+	auto iter = m_mapAlarming.begin();
+	Unlock();
+
+	return iter->second;
 }
 
 BOOL CAlarmMonitor::compareData(const char* pScrData, const char* pTarData, int len)
@@ -240,4 +250,25 @@
 	}
 
 	return FALSE;
+}
+
+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_mapAlarming[pAlarm->getId()] = pAlarm;
+
+	return TRUE;
 }
\ No newline at end of file

--
Gitblit v1.9.3