Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }