/// <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)); }
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); } } } } }
/// <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)); }
/// <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)); }