Beispiel #1
0
 protected override void UpDate()
 {
     SyncContext.AsyncAction(list => UpDate(list), Monitor?.FilterProcessMonitor?.UserLogActivities);
 }
        public void Analyse(ICollection<ProcessActivity> list, bool isFullUpdate = false)
        {
            if (list == null)
                return;

            if (list.Count == 0)
                return;

            var processlist = new List<ProcessActivity>() { list.First() };

            foreach (var last in list.Skip(1))
            {
                var itemslast = processlist.Last();
                if (this.MinutesBetween(itemslast, last) > MinTimeInterval)
                {
                    processlist.Add(new ProcessActivity()
                    {
                        LinkProcess = RestProcess,
                        Start = itemslast.End,
                        End = last.Start,
                        GroundWorkStates = new ObservableCollection<GroundWorkState>() { new GroundWorkState() { Title = "( ̄、 ̄@)Zzz" } }
                    });
                }
                processlist.Add(last);
            }

            if ((DateTime.Now.TimeOfDay - processlist.Last().End).TotalMinutes > MinTimeInterval)
            {
                processlist.Add(new ProcessActivity()
                {
                    LinkProcess = RestProcess,
                    Start = processlist.Last().End,
                    End = DateTime.Now.TimeOfDay,
                    GroundWorkStates = new ObservableCollection<GroundWorkState>() { new GroundWorkState() { Title = "( ̄、 ̄@)Zzz" } }
                });
            }

            var _processes = processlist.OrderBy(ac => ac.Start).GroupBy(el => el.LinkProcess.Name).Select(activities =>
            {
                var items = new List<ProcessActivity>() { ProcessActivityClone(activities.First()) };

                foreach (var last in activities.Skip(1))
                {
                    var first = items.Last();
                    if (MinutesBetween(first, last) < MinPixTimeInterval)
                    {
                        if (first.GroundWorkStates.Count == 0 || first.GroundWorkStates.Last().Title != last.GroundWorkStates.First().Title)
                            first.GroundWorkStates.Add(last.GroundWorkStates.First());

                        first.End = last.End;
                    }
                    else
                    {
                        items.Add(ProcessActivityClone(last));
                    }
                }

                return items.Where(item => item.TotalMinutesInterval > MinTimeInterval).ToList();

            }).SelectMany(el => el).OrderBy(ac => ac.Start).ToList();

            SyncContext.AsyncAction(processes => SmartUpDate(isFullUpdate, processes), _processes);
        }
Beispiel #3
0
        public DayActivitiyOptimization(Monitor monitor) : base(monitor)
        {
            UserLogActivities = Range(20000.0);

            SyncContext.AsyncAction(list => UpDate(list), Monitor?.FilterProcessMonitor?.UserLogActivities);
        }