public List <Alert> SearchRouteErrors(Case @case, StandartCase standartCase) { List <Alert> alerts = new List <Alert>(); Event current = @case.Begin; Event next; if (current == null || current.Next.Count == 0) { return(alerts); } else { next = @case.Begin.Next[0].Key; } int i = 0; while (current.Next.Count != 0) { var NextEventsId = standartCase.Events[i].GetNextEventNumbers(); List <string> NextEventsNames = new List <string>(); foreach (var id in NextEventsId) { NextEventsNames.Add(standartCase.Events[id].Name); } if (NextEventsNames.Contains(next.Name)) { i = NextEventsId[NextEventsNames.IndexOf(next.Name)]; } else { i = standartCase.Events.IndexOf(standartCase.GetEvent(next.Name)); alerts.Add(new Alert { Type = "Ошибка маршрута", CaseId = @case.CaseId, Text = $"{current.Name} -> {next.Name}", BPId = @case.BPId }); } current = next; if (current.Next.Count != 0) { next = current.Next[0].Key; } } return(alerts); }
public StandartCase CreateStandartCase(long BPId) { MainDBContext mainDB = new MainDBContext(); BP bP = mainDB.BPs.FirstOrDefault(s => s.Id == BPId); if (bP == null) { return(null); } StandartCase standart = bP.StandartCase; return(standart); }
private Graph Graph_Setup(StandartCase @case) { Graph dataGraph = new Graph(); for (int i = 0; i < @case.Events.Count; i++) { for (int j = 0; j < @case.Events.Count; j++) { if (@case.Events[i].Edges[j].Trans) { Edge edge = dataGraph.AddEdge(@case.Events[i].Name, @case.Events[j].Name); edge.Attr.Separation = 1; } } } dataGraph.Attr.LayerDirection = LayerDirection.TB; dataGraph.LayoutAlgorithmSettings = new SugiyamaLayoutSettings(); dataGraph.LayoutAlgorithmSettings.EdgeRoutingSettings.EdgeRoutingMode = Microsoft.Msagl.Core.Routing.EdgeRoutingMode.SugiyamaSplines; return(dataGraph); }
public List <Alert> SearchTimeErrors(Case @case, StandartCase standartCase) { List <Alert> alerts = new List <Alert>(); Event current = @case.Begin; Event next; if (current == null || current.Next.Count == 0) { return(alerts); } else { next = @case.Begin.Next[0].Key; } int i = 0; while (current.Next.Count != 0) { var NextEventsId = standartCase.Events[i].GetNextEventNumbers(); List <string> NextEventsNames = new List <string>(); foreach (var id in NextEventsId) { NextEventsNames.Add(standartCase.Events[id].Name); } if (NextEventsNames.Contains(next.Name)) { int j = i; i = NextEventsId[NextEventsNames.IndexOf(next.Name)]; DateTime timeCurrent = current.TimeStamp; DateTime timeNext = next.TimeStamp; double deltaTime = standartCase.Events[j].Edges[i].deltaTime; if (deltaTime != 0 && (timeNext - timeCurrent).TotalSeconds > deltaTime) { alerts.Add(new Alert { Type = "Ошибка времени выполнения", CaseId = @case.CaseId, Text = $"{current.Name} -> {next.Name} = {timeNext - timeCurrent} > Нормированного {TimeSpan.FromSeconds(deltaTime)} ", BPId = @case.BPId }); } } else { i = standartCase.Events.IndexOf(standartCase.GetEvent(next.Name)); } current = next; if (current.Next.Count != 0) { next = current.Next[0].Key; } } return(alerts); }