Exemplo n.º 1
0
        /// <summary>
        /// Возвращает последнюю выполненную группу чеков, чеки которой имеют заданные парамерты
        /// </summary>
        /// <param name="checks"></param>
        /// <param name="schedule">Чеки плановые или по программе хранения</param>
        /// <param name="aircraftId">Родительское ВС чеков</param>
        /// <param name="grouping">Чеки групповые или нет</param>
        /// <param name="resource">По какому из ресурсов (часы, циклы или календарь) группируются чеки</param>
        /// <param name="checkType">Тип чека (A B C D)</param>
        /// <returns></returns>
        public static MaintenanceCheckComplianceGroup GetLastComplianceCheckGroup(this ICommonCollection <MaintenanceCheck> checks,
                                                                                  bool schedule, int aircraftId,
                                                                                  bool grouping = true,
                                                                                  LifelengthSubResource resource = LifelengthSubResource.Hours,
                                                                                  MaintenanceCheckType checkType = null)
        {
            int last = 0;
            var aircraftScheduleChecks = checks.Where(c => c.Schedule == schedule &&
                                                      c.ParentAircraftId == aircraftId &&
                                                      c.Grouping == grouping &&
                                                      c.Resource == resource).ToList();

            if (checkType != null)
            {
                aircraftScheduleChecks = aircraftScheduleChecks.Where(c => c.CheckType == checkType).ToList();
            }

            foreach (MaintenanceCheck checkItem in aircraftScheduleChecks)
            {
                if (checkItem.LastPerformance != null && last < checkItem.LastPerformance.NumGroup)
                {
                    last = checkItem.LastPerformance.NumGroup;
                }
            }

            if (last <= 0)
            {
                return(null);
            }

            var lastComplianceGroup = new MaintenanceCheckComplianceGroup(schedule);

            foreach (MaintenanceCheck checkItem in aircraftScheduleChecks)
            {
                if (checkItem.LastPerformance != null && last == checkItem.LastPerformance.NumGroup)
                {
                    lastComplianceGroup.Checks.Add(checkItem);
                }
            }

            if (lastComplianceGroup.GetMaxIntervalCheck() == null)
            {
                return(null);
            }
            lastComplianceGroup.Sort();
            return(lastComplianceGroup);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Возвращает чеки которые нужно выполнить на следующем шаге(должен быть выполнен хотя бы один шаг)
        /// <br/>если вернет null то значит входные данные не верны
        /// </summary>
        public static IEnumerable <MaintenanceCheckComplianceGroup> GetNextComplianceCheckGroups(this ICommonCollection <MaintenanceCheck> checks, bool schedule)
        {
            var checksGroupsCollections   = checks.GroupingCheckByType(schedule);
            var complianceGroupCollection = new MaintenanceCheckComplianceGroupCollection();

            if (checksGroupsCollections.Length == 0)
            {
                return(complianceGroupCollection);
            }
            foreach (var groupCollection in checksGroupsCollections)
            {
                if (groupCollection.Grouping)
                {
                    //поиск минимального шага
                    int?minStep = groupCollection.FindMinStep();
                    if (minStep == null)
                    {
                        continue;
                    }

                    int num;
                    if (schedule)
                    {
                        var nums = groupCollection.GetLastComplianceGroupNums();
                        num = nums.Count == 0 ? 1 : nums.First() + 1;
                    }
                    else
                    {
                        var lastCheck = (from check in checks
                                         where check.LastPerformance != null && check.Schedule == schedule
                                         orderby check.LastPerformance.RecordDate descending
                                         select check).ToList();
                        if (lastCheck.Count == 0 || lastCheck.First().Schedule)
                        {
                            //Последним выполненым чеков на ВС бал чек по плановой программе обслуживания
                            //т.е. после пред. выполнения программа обслуживания была изменена на "Хранение"
                            //поэтому надо расчитать 1 группу чеков по Хранению
                            num = 1;
                        }
                        else
                        {
                            num = lastCheck.First().LastPerformance.NumGroup + 1;
                        }
                    }
                    int tableInterval = num * minStep.Value;

                    foreach (var groupCheck in groupCollection)
                    {
                        int localInterval = tableInterval;
                        if (groupCheck.CheckCycle <= tableInterval)
                        {
                            localInterval = tableInterval % groupCheck.CheckCycle;
                            if (localInterval == 0)
                            {
                                //если локальный интервал равен нулю
                                //то программа обслуживания находится на
                                //границе выполнения данного типа чеков (н: всех чеков А)
                                //Поэтому в след. группу выполнения надо включить все чеки
                                //данного типа.
                                //На след. шаге к данной группе должен быть добавлен хотя бы один чек вышестоящего типа
                                //(н: B или C)
                                if (groupCheck.Checks.Count > 0 && groupCheck.Checks[0].ParentAircraft.MSG >= MSG.MSG3)
                                {
                                    foreach (var check in groupCheck.Checks)
                                    {
                                        check.Tag = num;
                                        if (tableInterval % check.Interval.GetSubresource(groupCollection.Resource) == 0)
                                        {
                                            complianceGroupCollection.Add(check, num, groupCheck.CheckCycle);
                                        }
                                    }
                                }
                                else
                                {
                                    foreach (var check in groupCheck.Checks)
                                    {
                                        check.Tag = num;
                                        complianceGroupCollection.Add(check, num, groupCheck.CheckCycle);
                                    }
                                }
                            }
                        }
                        if (localInterval == 0)
                        {
                            continue;
                        }
                        foreach (var check in groupCheck.Checks)
                        {
                            check.Tag = num;
                            if (localInterval % check.Interval.GetSubresource(groupCollection.Resource) == 0)
                            {
                                complianceGroupCollection.Add(check, num, groupCheck.CheckCycle);
                            }
                        }
                    }
                }
                else
                {
                    foreach (var groupCheck in groupCollection)
                    {
                        foreach (var check in groupCheck.Checks)
                        {
                            var group = new MaintenanceCheckComplianceGroup(check.Schedule);
                            group.Grouping           = check.Grouping;
                            group.Resource           = check.Resource;
                            group.GroupComplianceNum = check.LastPerformance != null ? check.LastPerformance.PerformanceNum : 1;
                            group.CheckCycle         = Convert.ToInt32(check.Interval.GetSubresource(check.Resource));
                            group.Checks.Add(check);

                            complianceGroupCollection.Add(group);
                        }
                    }
                }
            }
            return(complianceGroupCollection);
        }