Пример #1
0
        /// <summary>
        /// Возвращает группу следующих чеков заданного типа, который должны быть выполнены до назначенного ресурса lifeLenghtSourcе
        /// если вернет null то значит входные данные неверны
        /// </summary>
        /// <param name="checkInput"></param>
        /// <param name="lastComplianceCheck"></param>
        /// <param name="lifeLenghtSource"></param>
        /// <returns></returns>
        public static MaintenanceCheckGroupByType GetNextCheckBySourceDifference(this IEnumerable <MaintenanceCheck> checkInput, MaintenanceCheck lastComplianceCheck, int?lifeLenghtSource)
        {
            if (lifeLenghtSource == null || lifeLenghtSource.Value == 0 || lastComplianceCheck == null)
            {
                return(null);
            }
            //сортировка коллекции по типу Shedule;
            MaintenanceCheckCollection sourceCollection =
                new MaintenanceCheckCollection(checkInput.Where(c => c.Schedule == lastComplianceCheck.Schedule).ToList());
            //поиск минимального шага
            int?minStep = lastComplianceCheck.Interval.Days;

            if (minStep == null)
            {
                return(null);
            }

            List <MaintenanceCheckGroupByType> checksGroups =
                new List <MaintenanceCheckGroupByType>(sourceCollection.GroupingCheckByType(minStep, lastComplianceCheck.Schedule));

            if (checksGroups.Count == 0)
            {
                return(null);
            }

            return(GetCheckPacketBySource(checksGroups, lifeLenghtSource, minStep, lastComplianceCheck));
        }
Пример #2
0
        private void FindLastCheck()
        {
            MaintenanceCheckGroupCollection[] groupByType =
                _checkItems.GroupingCheckByType(_schedule)
                .OrderByDescending(g => g.GetLastComplianceDate())
                .ToArray();

            MaintenanceCheckGroupCollection checkGroupCollectionOrdered =
                new MaintenanceCheckGroupCollection(groupByType.SelectMany(gbt => gbt.ToArray())
                                                    .OrderByDescending(gbt => gbt.LastComplianceGroupDate));

            foreach (MaintenanceCheckGroupByType checkGroupByType in checkGroupCollectionOrdered)
            {
                string   lastCheck = "", lastComplianceDate = "", lastComplianceLl = "";
                DateTime last = DateTimeExtend.GetCASMinDateTime();
                if (checkGroupByType.Grouping)
                {
                    //Вычисление последней даты выполнения чеков данного типа
                    //A, B или C
                    foreach (MaintenanceCheck checkItem in checkGroupByType.Checks.Where(c => c.Schedule == _schedule))
                    {
                        if (checkItem.LastPerformance != null && last < checkItem.LastPerformance.RecordDate)
                        {
                            last = checkItem.LastPerformance.RecordDate;
                        }
                    }
                    //Если чеки с данным типом (A, B или C) еще не выполнялись
                    //то производится переход на след. тип. чека
                    if (last <= DateTimeExtend.GetCASMinDateTime() ||
                        last <= checkGroupCollectionOrdered.GetLastComplianceDateOfCheckWithHigherType(checkGroupByType.Schedule,
                                                                                                       checkGroupByType.Resource,
                                                                                                       checkGroupByType.Grouping,
                                                                                                       checkGroupByType.CheckType))
                    {
                        continue;
                    }
                    //lastGroupComplianceDates[checkGroupByType.Resource] = last;
                    //Если чеки с данным типом выполнялись
                    //то собирается група из чеков данного типа (A, B или C),
                    //чья дата выполнения равна найденой
                    MaintenanceCheckComplianceGroup lastComplianceGroup = new MaintenanceCheckComplianceGroup(_schedule);
                    foreach (MaintenanceCheck checkItem in checkGroupByType.Checks.Where(c => c.Schedule == _schedule))
                    {
                        if (checkItem.LastPerformance != null && last == checkItem.LastPerformance.RecordDate)
                        {
                            lastComplianceGroup.Checks.Add(checkItem);
                            if (lastComplianceGroup.CheckCycle < checkGroupByType.CheckCycle)
                            {
                                lastComplianceGroup.CheckCycle = checkGroupByType.CheckCycle;
                            }
                            if (lastComplianceGroup.GroupComplianceNum < checkItem.LastPerformance.NumGroup)
                            {
                                lastComplianceGroup.GroupComplianceNum = checkItem.LastPerformance.NumGroup;
                            }
                        }
                    }
                    MaintenanceCheck maxIntervalCheckInGroup;
                    //Поиск старшего чека данного типа в собранной группе
                    //Если его нет, переход к след. типу чеков
                    if ((maxIntervalCheckInGroup = lastComplianceGroup.GetMaxIntervalCheck()) == null)
                    {
                        continue;
                    }
                    //Упорядочивание собранной группы
                    lastComplianceGroup.Sort();

                    string prefix = lastComplianceGroup.GetComplianceGroupName();
                    lastComplianceDate = UsefulMethods.NormalizeDate(last);
                    lastComplianceLl   = maxIntervalCheckInGroup.LastPerformance.OnLifelength.ToString();

                    //название чеков
                    lastCheck = prefix;
                    if (maxIntervalCheckInGroup.ParentAircraft != null &&
                        maxIntervalCheckInGroup.ParentAircraft.MSG < MSG.MSG3)
                    {
                        lastCheck += " (";
                        lastCheck += lastComplianceGroup.Checks.Aggregate("", (current, maintenanceCheck) => current + (maintenanceCheck.Name + " "));
                        lastCheck += ") ";
                    }

                    Action <string, string, string> addLast = AddLastCheckItem;
                    if (InvokeRequired)
                    {
                        Invoke(addLast, lastCheck, lastComplianceDate, lastComplianceLl);
                    }
                    else
                    {
                        addLast.Invoke(lastCheck, lastComplianceDate, lastComplianceLl);
                    }
                }
                else
                {
                    foreach (MaintenanceCheck checkItem in checkGroupByType.Checks.Where(c => c.Schedule == _schedule))
                    {
                        if (checkItem.LastPerformance != null)
                        {
                            lastComplianceDate = UsefulMethods.NormalizeDate(checkItem.LastPerformance.RecordDate);
                            lastComplianceLl   = checkItem.LastPerformance.OnLifelength.ToString();

                            //название чеков
                            lastCheck = checkItem.Name;
                        }

                        Action <string, string, string> addLast = AddLastCheckItem;
                        if (InvokeRequired)
                        {
                            Invoke(addLast, lastCheck, lastComplianceDate, lastComplianceLl);
                        }
                        else
                        {
                            addLast.Invoke(lastCheck, lastComplianceDate, lastComplianceLl);
                        }
                    }
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Возвращает чеки которые нужно выполнить на следующем шаге(должен быть выполнен хотя бы один шаг)
        /// если вернет null то значит входные данные не верны
        /// </summary>
        /// <param name="checkInput"></param>
        /// <param name="schedule"></param>
        /// <returns></returns>
        public static MaintenanceCheckGroupCollection GetNextCheckByLastCompliane(this IEnumerable <MaintenanceCheck> checkInput, bool schedule)
        {
            //сортировка коллекции по типу Shedule;
            MaintenanceCheckCollection sourceCollection = new MaintenanceCheckCollection(checkInput.Where(c => c.Schedule == schedule).ToList());
            //поиск минимального шага
            int?minStep = sourceCollection.FindMinStep(schedule);

            if (minStep == null)
            {
                return(null);
            }

            List <MaintenanceCheckGroupByType> checksGroups = new List <MaintenanceCheckGroupByType>(sourceCollection.GroupingCheckByType(minStep, schedule));

            if (checksGroups.Count == 0)
            {
                return(null);
            }

            return(schedule
                                ? GetNextCheckSchedule(checkInput, checksGroups, minStep)
                                : GetNextCheckUnschedule(checkInput, checksGroups, minStep));
        }
Пример #4
0
        /// <summary>
        /// Возвращает чеки которые нужно выполнить на назначенный ресурс lifeLenghtSourcе
        /// если вернет null то значит входные данные не верны
        /// </summary>
        /// <param name="checkInput"></param>
        /// <param name="schedule"></param>
        /// <param name="lifeLenghtSource"></param>
        /// <returns></returns>
        public static MaintenanceCheckGroupCollection GetFirstCheckBySource(this IEnumerable <MaintenanceCheck> checkInput, bool schedule, int?lifeLenghtSource)
        {
            //if (lifeLenghtSource == null || lifeLenghtSource.Value == 0) return null;
            if (lifeLenghtSource == null)
            {
                return(null);
            }
            //сортировка коллекции по типу Shedule;
            MaintenanceCheckCollection sourceCollection = new MaintenanceCheckCollection(checkInput.Where(c => c.Schedule == schedule).ToList());
            //поиск минимального шага
            int?minStep = sourceCollection.FindMinStep(schedule);

            if (minStep == null)
            {
                return(null);
            }

            List <MaintenanceCheckGroupByType> checksGroups = new List <MaintenanceCheckGroupByType>(sourceCollection.GroupingCheckByType(minStep, schedule));

            if (checksGroups.Count == 0)
            {
                return(null);
            }

            return(GetCheckBySource(checksGroups, lifeLenghtSource, minStep, schedule));
        }