Browse Source

1.1.8.2202第一次上线发送一次315离线报警恢复

git-svn-id: https://202.107.226.68:8443/svn/Services/ResistanceMonitor@71 a05970a1-87b9-9d4f-9ee5-fa77e2ec115b
shenchunzhong 1 year ago
parent
commit
9cc4b0efaf
4 changed files with 42 additions and 34 deletions
  1. 2 2
      4.Data/AppService.cpp
  2. 4 0
      4.Data/MonitorObject.h
  3. 36 32
      4.Data/ResistAlarm.cpp
  4. BIN
      4.Data/TimeSyncServer.rc

+ 2 - 2
4.Data/AppService.cpp

@@ -342,9 +342,9 @@ bool CAppService::Start()
 		}
 
 		//传感器离线暂时不作为报警  作为设备状态
-		sql = "UPDATE rm_alarm set recovery_time=GETDATE() WHERE type in(0x20, 0x21)  and recovery_time < '2000'";
+		sql = "UPDATE rm_alarm set recovery_time=GETDATE() WHERE type = 0x21  and recovery_time < '2000'";
 		ret = CDBConnectPool::Instance()->DBExecuteSQL(sql);
-		sql = "UPDATE rm_alarm set ack_result=1, ack_name='system',ack_time=GETDATE() WHERE type in(0x20, 0x21)  and ack_result = 0";
+		sql = "UPDATE rm_alarm set ack_result=1, ack_name='system',ack_time=GETDATE() WHERE type = 0x21 and ack_result = 0";
 		ret = CDBConnectPool::Instance()->DBExecuteSQL(sql);
 	}
 	//end 升级

+ 4 - 0
4.Data/MonitorObject.h

@@ -35,6 +35,10 @@ struct ST_MOMP_INFO
 	string mp;
 	string name;  //名称
 
+public:
+	//临时状态
+	bool bFirstOnline = true;
+
 public:
 	//牵引点中间内存缓存数据
 	//定位常态保持力值

+ 36 - 32
4.Data/ResistAlarm.cpp

@@ -2475,7 +2475,7 @@ void CResistAlarmMng::ThreadProcDevice(DWORD_PTR param)
 {
 	auto pService = (CResistAlarmMng*)param;
 	this_thread::sleep_for(chrono::seconds(2));
-	static CTimeSpan offline_time(0, 0, 3, 0); //设备离线时间暂定5分钟
+	static CTimeSpan offline_time(0, 0, 5, 0); //设备离线时间暂定5分钟
 	static CTimeSpan offline_limit(30, 0, 0, 0);
 	bool bLock = false;
 
@@ -2498,11 +2498,10 @@ void CResistAlarmMng::ThreadProcDevice(DWORD_PTR param)
 		//离线设备
 
 		{
-
 			auto& pMap = CMonitorObjectMng::Instance()->m_mapMoMpInfo;
 			for (auto& it : pMap)
 			{
-				auto pInfo = it.second;
+				auto& pInfo = it.second;
 				if (pInfo == nullptr) continue;
 				bool bAlarm = false;
 				if (!pInfo->pDeivce) continue;
@@ -2511,8 +2510,13 @@ void CResistAlarmMng::ThreadProcDevice(DWORD_PTR param)
 					continue;
 				if (ctNow - pDevice->m_ctUpdateTime > offline_time)
 					bAlarm = true;
-				else
-					int ii = 0;
+				else if (pInfo->bFirstOnline)
+				{//第一次上线发送一次315离线报警恢复 因铁大未作报警同步
+					pInfo->bFirstOnline = false;
+					g_p315ClientManager->GetTcpClient()->SendAlarmData(pInfo->zzjno, 2, pDevice->m_ctUpdateTime.GetTime(), pDevice->m_ctUpdateTime.GetTime(), eZL_ALARMTYPE::EQUIP_OFFLINE,
+						eDaoChaPosi::DCP_UNKNOWN, 1, eLowHigh::LH_UNKNOWN, TIEDA_ACQ_VALUE(INT_MIN), TIEDA_ACQ_VALUE(INT_MIN), 0);
+					SPDLOG_INFO("{}第一次上线发送一次315离线报警恢复", it.first);
+				}
 				ALARM_INFO* pAlarmInfo = nullptr;
 				bool bNew = false;
 				auto ctAlarmTime = ctNow;
@@ -2533,10 +2537,11 @@ void CResistAlarmMng::ThreadProcDevice(DWORD_PTR param)
 							{
 								//恢复报警
 								//更新数据库
-								//string recovery_time = ctAlarmTime.Format("%Y-%m-%d %H:%M:%S");
-								//CString sql;
-								//sql.Format("UPDATE [rm_alarm] SET [recovery_time]='%s' WHERE ID = %d;", recovery_time.c_str(), pAlarmInfo->id);
-								//CDBConnectPool::Instance()->DBExecuteSQL(sql);
+								if (ctAlarmTime.GetTime() == 0) ctAlarmTime = CTime::GetCurrentTime();
+								string recovery_time = ctAlarmTime.Format("%Y-%m-%d %H:%M:%S");
+								CString sql;
+								sql.Format("UPDATE [rm_alarm] SET [recovery_time]='%s' WHERE ID = %d;", recovery_time.c_str(), pAlarmInfo->id);
+								CDBConnectPool::Instance()->DBExecuteSQL(sql);
 								//315上送
 								g_p315ClientManager->GetTcpClient()->SendAlarmData(pInfo->zzjno, 2, CTime(pAlarm->time).GetTime(), ctAlarmTime.GetTime(), pAlarm->type, 
 									eDaoChaPosi::DCP_UNKNOWN, pAlarm->level, eLowHigh::LH_UNKNOWN, TIEDA_ACQ_VALUE(INT_MIN), TIEDA_ACQ_VALUE(INT_MIN), 0);
@@ -2576,41 +2581,40 @@ void CResistAlarmMng::ThreadProcDevice(DWORD_PTR param)
 					pAlarmInfo->desc = szInfo;
 					pAlarmInfo->sunroof = CSkylightMng::GetInstance()->IsSkylight(&pAlarmInfo->time);
 					lock_guard<mutex> lock(pService->m_mtxAlarm);
-					//pService->m_lstUnConfirmAlarm.push_back(pAlarmInfo);
+					pService->m_lstUnConfirmAlarm.push_back(pAlarmInfo);
 				}
 
 				//send
-				//if (bNew) //不再推送
-				//{
-				//	rapidjson::StringBuffer buffer;
-				//	auto ret = AlarmInfo2Pack(pAlarmInfo, buffer);
-				//	const char* output = buffer.GetString();
-				//	//CAppService::Instance()->GetLwsServer()->SendPackToALLClient_with_noEncode((uint8_t*)output, buffer.GetLength());
-				//	CAppService::Instance()->GetMgServer()->SendToAllClient(output, buffer.GetLength());
-				//}
+				if (bNew) //不再推送
+				{
+					rapidjson::StringBuffer buffer;
+					auto ret = AlarmInfo2Pack(pAlarmInfo, buffer);
+					const char* output = buffer.GetString();
+					CAppService::Instance()->GetMgServer()->SendToAllClient(output, buffer.GetLength());
+				}
 
 				//save
 				if (bNew)
 				{
-					//CString sql;
-					//sql.Format("INSERT INTO [rm_alarm]([ID],[mo],[mp],[no],[type],[occur_time],[level],[desc],[suggest],[val],[event_id],[rel_id],posi,loworhigh,referval,[sunroof]) "\
-					//	"VALUES(%d, '%s', '%s', %d, %d, '%s', %d, '%s', '%s', %d, '%s', '%s',%d,%d,%d,%d);",
-					//	pAlarmInfo->id, pAlarmInfo->mo.c_str(), pAlarmInfo->mp.c_str(), pAlarmInfo->no, pAlarmInfo->type,
-					//	(LPCSTR)(ctAlarmTime.Format("%Y-%m-%d %H:%M:%S")), pAlarmInfo->level, pAlarmInfo->desc.c_str(), pAlarmInfo->suggest.c_str(), pAlarmInfo->val,
-					//	pAlarmInfo->event_id.c_str(), pAlarmInfo->rel_id.c_str(), uint8_t(pAlarmInfo->posi), uint8_t(pAlarmInfo->loworhigh), pAlarmInfo->refer_val, pAlarmInfo->sunroof);
-					//
-					//if (false == CDBConnectPool::Instance()->DBExecuteSQL(sql))
-					//	CSimpleLog::Error("执行语句失败" + sql);
-					//else
-					//{
+					CString sql;
+					sql.Format("INSERT INTO [rm_alarm]([ID],[mo],[mp],[no],[type],[occur_time],[level],[desc],[suggest],[val],[event_id],[rel_id],posi,loworhigh,referval,[sunroof]) "\
+						"VALUES(%d, '%s', '%s', %d, %d, '%s', %d, '%s', '%s', %d, '%s', '%s',%d,%d,%d,%d);",
+						pAlarmInfo->id, pAlarmInfo->mo.c_str(), pAlarmInfo->mp.c_str(), pAlarmInfo->no, pAlarmInfo->type,
+						(LPCSTR)(ctAlarmTime.Format("%Y-%m-%d %H:%M:%S")), pAlarmInfo->level, pAlarmInfo->desc.c_str(), pAlarmInfo->suggest.c_str(), pAlarmInfo->val,
+						pAlarmInfo->event_id.c_str(), pAlarmInfo->rel_id.c_str(), uint8_t(pAlarmInfo->posi), uint8_t(pAlarmInfo->loworhigh), pAlarmInfo->refer_val, pAlarmInfo->sunroof);
+					
+					if (false == CDBConnectPool::Instance()->DBExecuteSQL(sql))
+						CSimpleLog::Error("执行语句失败" + sql);
+					else
+					{
 						uint8_t* pack = nullptr; int len = 0;
-						//auto packno = CResistAlarmMng::GeneralNewAlarmData(pAlarmInfo, &pack, &len);
-						//if (packno) CSuperManager::Instance()->SendPack(pack, len, packno, E_ZL_PROTOCAL::ZL_ALARM_DATA, true);
+						auto packno = CResistAlarmMng::GeneralNewAlarmData(pAlarmInfo, &pack, &len);
+						if (packno) CSuperManager::Instance()->SendPack(pack, len, packno, E_ZL_PROTOCAL::ZL_ALARM_DATA, true);
 						g_p315ClientManager->GetTcpClient()->SendAlarmData(pAlarmInfo->zzjno, 1, ctAlarmTime.GetTime(), 0xFFFFFFFF, pAlarmInfo->type, eDaoChaPosi::DCP_UNKNOWN, 1, eLowHigh::LH_UNKNOWN,
 							TIEDA_ACQ_VALUE(INT_MIN), TIEDA_ACQ_VALUE(INT_MIN), 0);
 						delete[] pack;
 						pack = nullptr;
-					//}
+					}
 				}
 			}
 		}

BIN
4.Data/TimeSyncServer.rc