예제 #1
0
        private DateTime GetNextComplianceDate(MaintenanceCheckComplianceGroup complianceGroup)
        {
            if ((complianceGroup.GetMaxIntervalCheck()) == null)
            {
                return(DateTimeExtend.GetCASMinDateTime());
            }
            complianceGroup.Sort();

            DateTime nextDate = DateTimeExtend.GetCASMinDateTime();

            if (complianceGroup.Grouping)
            {
                MaintenanceCheck lastOrMinCheck =
                    complianceGroup.GetLastComplianceChecks().FirstOrDefault() != null
                        ? complianceGroup.GetLastComplianceChecks().First()
                        : complianceGroup.GetMinIntervalCheck();

                if (lastOrMinCheck.Interval.Days != null && lastOrMinCheck.Interval.Days > 0)
                {
                    nextDate = lastOrMinCheck.NextPerformances.Count != 0 && lastOrMinCheck.NextPerformances[0].PerformanceDate != null
                                            ? lastOrMinCheck.NextPerformances[0].PerformanceDate.Value
                                            : lastOrMinCheck.LastPerformance != null
                                                  ? lastOrMinCheck.LastPerformance.RecordDate.AddDays(Convert.ToInt32(lastOrMinCheck.Interval.Days))
                                                  : lastOrMinCheck.ParentAircraft.ManufactureDate.AddDays(Convert.ToInt32(lastOrMinCheck.Interval.Days));
                }
                else
                {
                    nextDate = lastOrMinCheck.NextPerformances.Count != 0 &&
                               lastOrMinCheck.NextPerformances[0].PerformanceDate != null
                        ? lastOrMinCheck.NextPerformances[0].PerformanceDate.Value
                        : DateTimeExtend.GetCASMinDateTime();
                }
            }
            else
            {
                foreach (MaintenanceCheck maintenanceCheck in complianceGroup.Checks)
                {
                    if (maintenanceCheck.Interval.Days != null && maintenanceCheck.Interval.Days > 0)
                    {
                        nextDate =
                            maintenanceCheck.NextPerformances.Count != 0 && maintenanceCheck.NextPerformances[0].PerformanceDate != null
                                            ? maintenanceCheck.NextPerformances[0].PerformanceDate.Value
                                            : maintenanceCheck.LastPerformance != null
                                                  ? maintenanceCheck.LastPerformance.RecordDate.AddDays(Convert.ToInt32(maintenanceCheck.Interval.Days))
                                                  : maintenanceCheck.ParentAircraft.ManufactureDate.AddDays(Convert.ToInt32(maintenanceCheck.Interval.Days));
                    }
                    else
                    {
                        nextDate = maintenanceCheck.NextPerformanceDate != null
                            ? maintenanceCheck.NextPerformanceDate.Value
                            : DateTimeExtend.GetCASMinDateTime();
                    }
                }
            }

            return(nextDate);
        }
예제 #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(lastCheck, (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);
                        }
                    }
                }
            }
        }