#include "pch.h" #include "ElectricEqpmt_ElcTurnOffAreaMng.h" void* ElectricEqpmt_ElcTurnOffAreaMng::m_pOwner = nullptr; CALLBACKFUNC_EqpmtElcStatus ElectricEqpmt_ElcTurnOffAreaMng::m_hCallBackEqpmtElcStatus = nullptr; CALLBACKFUNC_TurnOffArea ElectricEqpmt_ElcTurnOffAreaMng::m_hCallBackTurnOffArea = nullptr; ElectricEqpmt_ElcTurnOffAreaMng::ElectricEqpmt_ElcTurnOffAreaMng() { } ElectricEqpmt_ElcTurnOffAreaMng::~ElectricEqpmt_ElcTurnOffAreaMng() { m_mapEqpmtStrIDAndAreaID.clear(); m_mapElcTurnOffArea.clear(); } void ElectricEqpmt_ElcTurnOffAreaMng::AddElcTurnOffArea( int nOffArea, int nStationID, const string& strEqpmtStrID ) { m_mapEqpmtStrIDAndAreaID.insert( make_pair( strEqpmtStrID, nOffArea) ); map::iterator iterArea = m_mapElcTurnOffArea.find(nOffArea); if ( iterArea != m_mapElcTurnOffArea.end() ) { iterArea->second.AddElcTurnOffArea( nOffArea, nStationID, strEqpmtStrID ); } else { ElectricEqpmt_ElcTurnOffArea area; area.SetOffAreaID( nOffArea ); area.SetStationID( nStationID ); area.AddElcTurnOffArea( nOffArea, nStationID, strEqpmtStrID ); m_mapElcTurnOffArea.insert( make_pair( nOffArea, area) ); } } void ElectricEqpmt_ElcTurnOffAreaMng::EqpmtOffOccur( const string& strEqpmtID ) { TurnOffArea( GetAreaID(strEqpmtID) ); } void ElectricEqpmt_ElcTurnOffAreaMng::TurnOffArea( int nArea ) { if ( NULL == m_hCallBackEqpmtElcStatus || NULL == m_hCallBackTurnOffArea ) { return; } map::iterator iter = m_mapElcTurnOffArea.find(nArea); if ( iter == m_mapElcTurnOffArea.end() ) { return; } int nMark = -1; // 设备区所有电力设备失电则表示改区域失电 bool bEqpmtPower = false; for(int i = 0; i < iter->second.m_vecElcTurnOffArea.size(); i++ ) { if ( m_hCallBackEqpmtElcStatus(m_pOwner, iter->second.m_vecElcTurnOffArea[i].m_strUnioEqpmtStrID) ) { bEqpmtPower = true; break; } } if ( bEqpmtPower ) { // 有带电设备而且之前设备区无电则为设备区送电 if ( !iter->second.GetPower() ) { nMark = 1; } } else { // 无带电设备而且之前设备区有电则为设备区停电 if ( iter->second.GetPower() ) { nMark = 0; } } if ( 0 == nMark ) { // 处理设备区失电 iter->second.SetPower(false); m_hCallBackTurnOffArea( m_pOwner, iter->second.GetOffAreaID(), iter->second.GetStationID(), nMark ); } else if( 1 == nMark ) { // 处理设备区受电 iter->second.SetPower(true); m_hCallBackTurnOffArea( m_pOwner, iter->second.GetOffAreaID(), iter->second.GetStationID(), nMark ); } } int ElectricEqpmt_ElcTurnOffAreaMng::GetAreaID( const string& strEqpmtID ) { int nRet = -1; map::iterator iter = m_mapEqpmtStrIDAndAreaID.find( strEqpmtID ); if ( iter != m_mapEqpmtStrIDAndAreaID.end() ) { nRet = iter->second; } return nRet; } void ElectricEqpmt_ElcTurnOffAreaMng::AddElcToRelaData( int StationID,int CtrlAreaID, string ElcEqpmtStrID ) { m_nStationID = StationID; m_nCtrlAreaID = CtrlAreaID; m_strEqpmtStrID =ElcEqpmtStrID; }