//---------------------------------------------------------------------------------------------- private void MaskAlarme(CEvenementAlarmMask evenement) { if (evenement.IdLienAccesAlarme <= 0 || evenement.DetailMasquage == null) { return; } CDictionnaireConcerne dic = null; int nIdElement = 0; if (evenement.IdSite != null) { nIdElement = evenement.IdSite.Value; dic = m_dicDirectementConcernesParSite; } if (evenement.IdEquipement != null) { nIdElement = evenement.IdEquipement.Value; dic = m_dicDirectementConcernesParEquipement; } if (evenement.IdLiaison != null) { nIdElement = evenement.IdLiaison.Value; dic = m_dicDirectementConcernesParLiaison; } List <CInfoElementDeSchemaSupervise> lst = null; EGraviteAlarmeAvecMasquage gravite = (EGraviteAlarmeAvecMasquage)evenement.NiveauMasquage; if (dic.TryGetValue((int)nIdElement, out lst)) { List <CInfoElementDeSchemaSupervise> lstAPrevenir = new List <CInfoElementDeSchemaSupervise>(lst); while (lstAPrevenir.Count != 0) { lstAPrevenir.Sort(); CInfoElementDeSchemaSupervise[] infos = lstAPrevenir.ToArray(); lstAPrevenir.Clear(); foreach (CInfoElementDeSchemaSupervise info in infos) { switch (evenement.DetailMasquage) { case EEvenementMasquage.DebutMasquageAdministrateur: info.SetMasquageAdministrateur(evenement.IdLienAccesAlarme, true); break; case EEvenementMasquage.FinMasquageAdministrateur: info.SetMasquageAdministrateur(evenement.IdLienAccesAlarme, false); break; case EEvenementMasquage.DebutMasquageBrigadier: info.SetMasquageBrigadier(evenement.IdLienAccesAlarme, true); break; case EEvenementMasquage.FinMasquageBrigadier: info.SetMasquageBrigadier(evenement.IdLienAccesAlarme, false); break; } CInfoElementDeSchemaSupervise parent = info.Parent; if (parent != null) { lstAPrevenir.Add(parent); } } } if (lst.Count != 0 && m_infoSchemaRacine != null) { List <CInfoElementDeSchemaSupervise> lstModifs = new List <CInfoElementDeSchemaSupervise>(); m_infoSchemaRacine.RecalculeToutLeMasquage(lstModifs); lock (typeof(CLockerRefresh)) { foreach (CInfoElementDeSchemaSupervise info in lstModifs) { if (info.IdElementDeSchema != null) { m_dicChangesDepuisDernierRefresh[info.IdElementDeSchema.Value] = true; } } } Refresh(); } } }
//Initialise la base des alarmes en cours avec les alarmes de la base et les acces concernant chaque élément private void LoadAlarmesEtLiensTransForElement(string strChampDansAcces, CDictionnaireConcerne dicConcernes) { //Récupère la relation entre CSpvLienAccesAlarme et CSpvLienAccesAlarmeRep if (m_relationFromLienAlarmeToLienAlarmeRep == null) { foreach (CInfoRelation relation in CContexteDonnee.GetListeRelationsTable(CSpvLienAccesAlarme.c_nomTable)) { if (relation.TableFille == CSpvLienAccesAlarme_Rep.c_nomTable && relation.TableParente == CSpvLienAccesAlarme.c_nomTable) { m_relationFromLienAlarmeToLienAlarmeRep = relation; break; } } } List <int> lstIdsElements = new List <int>(); lstIdsElements.AddRange(dicConcernes.Keys); int nSizePaquet = 100; for (int nPaquet = 0; nPaquet < lstIdsElements.Count; nPaquet += nSizePaquet) { int nMax = Math.Min(nPaquet + nSizePaquet, lstIdsElements.Count); StringBuilder bl = new StringBuilder(); for (int nId = 0; nId < nMax; nId++) { bl.Append(lstIdsElements[nId]); bl.Append(';'); } if (bl.Length > 0) { bl.Remove(bl.Length - 1, 1); //Charge tous les Liens d'alarme pour les éléments CListeObjetsDonnees lstLiensAccesAlarme = new CListeObjetsDonnees(m_contexteDonnee, typeof(CSpvLienAccesAlarme)); lstLiensAccesAlarme.Filtre = new CFiltreDataAvance(CSpvLienAccesAlarme.c_nomTable, CSpvAccesAlarme.c_nomTable + "." + strChampDansAcces + " in (" + bl.ToString() + ")"); lstLiensAccesAlarme.AssureLectureFaite(); // Chargement des acces correspondant CListeObjetsDonnees lstAcces = lstLiensAccesAlarme.GetDependances("AccesAlarmeOne"); lstAcces.InterditLectureInDB = true; CListeObjetsDonnees lstEtatAlarme = lstLiensAccesAlarme.GetDependances(m_relationFromLienAlarmeToLienAlarmeRep); lstEtatAlarme.Filtre = new CFiltreData(CSpvLienAccesAlarme_Rep.c_champALARM_ID + " is not null"); lstEtatAlarme.AssureLectureFaite(); lstEtatAlarme.InterditLectureInDB = true; // Chargement des données alarmes CListeObjetsDonnees listAlarmesDonnees = lstEtatAlarme.GetDependances("AlarmeDonnee"); listAlarmesDonnees.AssureLectureFaite(); listAlarmesDonnees.InterditLectureInDB = true; lstLiensAccesAlarme.InterditLectureInDB = true; lstEtatAlarme.InterditLectureInDB = true; foreach (CSpvAlarmeDonnee donneeAlarme in listAlarmesDonnees) { if (donneeAlarme != null) { CInfoAlarmeAffichee info = new CInfoAlarmeAffichee(donneeAlarme); //m_dicAlarmes[info.IdSpvEvtAlarme] = info; m_dicAlarmes[info.IdSpvAlarmeData] = info; StartAlarme(info); } } foreach (CSpvLienAccesAlarme lienAlarme in lstLiensAccesAlarme) { CSpvAcces acces = lienAlarme.AccesAlarmeOne; if (acces != null) { int?nId = acces.Row[strChampDansAcces] as int?; if (nId != null) { List <CInfoElementDeSchemaSupervise> lst = null; if (dicConcernes.TryGetValue(nId.Value, out lst)) { foreach (CInfoElementDeSchemaSupervise info in lst) { info.SetConcerneParAlarmes(); if (lienAlarme.MaskAdminDateMin != null && lienAlarme.MaskBriDateMin > DateTime.Now) { if (lienAlarme.MaskAdminDateMax == null || lienAlarme.MaskAdminDateMax < DateTime.Now) { info.SetMasquageAdministrateur(lienAlarme.Id, true); } } if (lienAlarme.MaskBriDateMin != null && lienAlarme.MaskBriDateMin > DateTime.Now) { if (lienAlarme.MaskBriDateMax == null || lienAlarme.MaskBriDateMax < DateTime.Now) { info.SetMasquageBrigadier(lienAlarme.Id, true); } } } } } } } if (m_infoSchemaRacine != null) { List <CInfoElementDeSchemaSupervise> lstTmp = new List <CInfoElementDeSchemaSupervise>(); m_infoSchemaRacine.RecalculeToutLeMasquage(lstTmp); } } } }
//---------------------------------------------------------------------------------------------- private void StartAlarme(CInfoAlarmeAffichee infoAlarme) { //int nIdAlarme = infoAlarme.IdSpvEvtAlarme; int nIdAlarmeData = infoAlarme.IdSpvAlarmeData; m_dicAlarmes[nIdAlarmeData] = infoAlarme; // Traitement de l'état opérationnel des schémas CSpvAlarmeDonnee alarmeData = new CSpvAlarmeDonnee(ContexteDonnee); if (infoAlarme.SeverityCode >= (int)EGraviteAlarme.Major && alarmeData.ReadIfExists(nIdAlarmeData)) { List <CElementDeArbreOperationnel> listeNoeudsConcernes = new List <CElementDeArbreOperationnel>(); if (alarmeData.EquipId != null) { m_dicEquipementToNoeudArbreOp.TryGetValue(alarmeData.EquipId.Value, out listeNoeudsConcernes); } else if (alarmeData.SiteId != null) { m_dicSiteToNoeudArbreOp.TryGetValue(alarmeData.SiteId.Value, out listeNoeudsConcernes); } else if (alarmeData.LiaiId != null) { m_dicLiaisonToNoeudArbreOp.TryGetValue(alarmeData.LiaiId.Value, out listeNoeudsConcernes); } PropageCoefOperationnel(listeNoeudsConcernes, 0.0); } List <CInfoElementDeSchemaSupervise> lstConcernes = null; if (infoAlarme.InfoEquipement != null) { m_dicDirectementConcernesParEquipement.TryGetValue(infoAlarme.InfoEquipement.Id, out lstConcernes); } if (infoAlarme.InfoLiaison != null) { m_dicDirectementConcernesParLiaison.TryGetValue(infoAlarme.InfoLiaison.Id, out lstConcernes); } if (infoAlarme.InfoSite != null && infoAlarme.InfoSite.Id != null) { m_dicDirectementConcernesParSite.TryGetValue(infoAlarme.InfoSite.Id.Value, out lstConcernes); } Dictionary <CInfoElementDeSchemaSupervise, bool> dicConcernes = new Dictionary <CInfoElementDeSchemaSupervise, bool>(); if (lstConcernes != null) { List <CInfoElementDeSchemaSupervise> lstAPrevenir = new List <CInfoElementDeSchemaSupervise>(lstConcernes); bool bFirstNiveau = true; while (lstAPrevenir.Count != 0) { lstAPrevenir.Sort(); CInfoElementDeSchemaSupervise[] infos = lstAPrevenir.ToArray(); lstAPrevenir.Clear(); foreach (CInfoElementDeSchemaSupervise info in infos) { if (bFirstNiveau) { dicConcernes[info] = true; } info.StartAlarme(infoAlarme, false); CInfoElementDeSchemaSupervise parent = info.Parent; if (parent != null) { lstAPrevenir.Add(parent); } } bFirstNiveau = false; } if (lstConcernes.Count > 0) { Refresh(); } } List <CInfoElementDeSchemaSupervise> lst = new List <CInfoElementDeSchemaSupervise>(); lst.AddRange(dicConcernes.Keys); m_dicAlarmeToElementsConcernes[nIdAlarmeData] = lst; }