public List <FlightPlanOpsRecords> LoadAircraftStatusOps() { var records = new List <FlightPlanOpsRecords>(); var aircrafts = _aircraftsCore.GetAllAircrafts(); foreach (var aircraft in aircrafts) { var find = new List <FlightPlanOpsRecords>(); find.AddRange(_newLoader.GetObjectList <FlightPlanOpsRecordsDTO, FlightPlanOpsRecords>(new List <Filter>() { new Filter("AircraftId", aircraft.ItemId), new Filter("ParentFlightId", FilterType.Grather, 0) })); find.AddRange(_newLoader.GetObjectList <FlightPlanOpsRecordsDTO, FlightPlanOpsRecords>(new List <Filter>() { new Filter("AircraftExchangeId", aircraft.ItemId), new Filter("ParentFlightId", FilterType.Grather, 0) })); var record = find.OrderByDescending(i => i.Date).FirstOrDefault(); if (record == null) { continue; } records.Add(record); } loadChild(records); return(records); }
public List <FlightTrackRecord> GetAllFlightScheduleRecordsForPeriod(DateTime from, DateTime to, bool loadChild = false) { var fl = _newLoader.GetObjectList <FlightNumberDTO, FlightNumber>(new Filter("FlightType", FlightType.Schedule.ItemId)); var flNumberIds = fl.Select(i => i.ItemId); var query = BaseQueries.GetSelectQueryColumnOnly <FlightNumberPeriod>(BaseEntityObject.ItemIdProperty); query = $"{query} and FlightNumberId in ({string.Join(",", flNumberIds)}) " + $"and (DepartureDate <= {from.ToSqlDate()} or DepartureDate <= {to.ToSqlDate()}) " + $"and (ArrivalDate >= {from.ToSqlDate()} or ArrivalDate >= {to.ToSqlDate()})"; var res = _environment.Execute(query); var ids = new List <int>(); foreach (DataRow row in res.Tables[0].Rows) { ids.Add(Convert.ToInt32(row[0].ToString())); } var tripRecords = _newLoader.GetObjectListAll <FlightTrackRecordDTO, FlightTrackRecord>(new Filter("FlightPeriodId", ids), loadChild).ToList(); if (loadChild) { loadChildTrackRecords(tripRecords); } return(tripRecords); }
/// <summary> /// Возвращает все директивы базового агрегата, или самолета /// </summary> /// <returns></returns> public MaintenanceDirective GetMaintenanceDirective(Int32 itemId, int?parentAircraftId = null) { List <DbQuery> qrs; if (parentAircraftId != null) { //Если задано родительское ВС, то директиву с заданный ID нужно искать среди директив ВС qrs = MaintenanceDirectiveQueries.GetAircraftDirectivesSelectQuery (parentAircraftId.Value, new ICommonFilter[] { new CommonFilter <int>(BaseEntityObject.ItemIdProperty, itemId) }, true, true); } else { qrs = BaseQueries.GetSelectQueryWithWhereAll <MaintenanceDirective> (new ICommonFilter[] { new CommonFilter <int>(BaseEntityObject.ItemIdProperty, itemId) }, true, true); } List <ExecutionResultArgs> resultArgses; var ds = _casEnvironment.Execute(qrs, out resultArgses); if (resultArgses.Count(r => r.Exception != null) > 0) { throw resultArgses.First(r => r.Exception != null).Exception; } var directive = BaseQueries.GetObjectList <MaintenanceDirective>(ds, true).FirstOrDefault(); if (directive == null) { return(null); } var itemRelation = _itemsRelationsDataAccess.GetRelations(directive.ItemId, directive.SmartCoreObjectType.ItemId); directive.ItemRelations.AddRange(itemRelation); var fileIds = directive.Files.Where(i => i.FileId.HasValue).Select(i => i.FileId.Value); if (fileIds.Any()) { var files = _newLoader.GetObjectList <AttachedFileDTO, AttachedFile>(new Filter("ItemId", values: fileIds)); foreach (var file in directive.Files) { var f = files.FirstOrDefault(i => i.ItemId == file.FileId)?.GetCopyUnsaved(false); if (f == null) { continue; } f.ItemId = file.FileId.Value; file.File = (AttachedFile)f; } } return(directive); }
/// <summary> /// Полность загружает директиву делая запрос по заданному ID /// </summary> /// <param name="itemId"></param> /// <param name="directiveType"></param> /// <param name="loadChild"></param> public Directive GetDirectiveById(Int32 itemId, DirectiveType directiveType, bool loadChild = true) { if (directiveType == null) { directiveType = DirectiveType.AirworthenessDirectives; } var qrs = DirectiveQueries.GetSelectQueryById(itemId, directiveType, loadChild: loadChild); var directive = _loader.GetObjectListAll <Directive>(qrs, true).FirstOrDefault(); if (directive == null) { return(null); } var itemsRelations = _itemsRelationsDataAccess.GetRelations(directive.ItemId, directive.SmartCoreObjectType.ItemId); var fileIds = directive.Files.Where(i => i.FileId.HasValue).Select(i => i.FileId.Value); if (fileIds.Any()) { var files = _newLoader.GetObjectList <AttachedFileDTO, AttachedFile>(new Filter("ItemId", values: fileIds)); foreach (var file in directive.Files) { var f = files.FirstOrDefault(i => i.ItemId == file.FileId)?.GetCopyUnsaved(false); if (f == null) { continue; } f.ItemId = file.FileId.Value; file.File = (AttachedFile)f; } } directive.ItemRelations.AddRange(itemsRelations); return(directive); // Примечание - загрузка всех связанных данных должна идти вместе с выставлением Parent }
///// <param name="status">Фильтр статуса рабочего пакета. (По умолчанию = WorkPackageStatus.All)</param> ///// <param name="loadWorkPackageItems">Флаг загрузки элементов рабочих пакетов</param> ///// <param name="includedTasks">Задачи, которые должны содержать пакеты (при передаче пустои коллекции запрос вернет 0 рабочих пакетов)</param> /// <returns></returns> public List <Discrepancy> GetDiscrepancies(Aircraft aircraft = null, DiscFilterType filterType = DiscFilterType.All, DateTime?from = null, DateTime?to = null) //TODO: Переделать на int? aircraftId = null { var resultList = new List <Discrepancy>(); var preResultList = new List <Discrepancy>(); var filters = new List <ICommonFilter>(); if (filterType == DiscFilterType.Defect) { filters.Add(new CommonFilter <bool>(Discrepancy.IsReliabilityProperty, true)); } else if (filterType == DiscFilterType.Occurrence) { filters.Add(new CommonFilter <bool>(Discrepancy.IsOccurrenceProperty, true)); } else if (from.HasValue && to.HasValue) { var flights = _loader.GetObjectList <AircraftFlight>(new ICommonFilter[] { new CommonFilter <DateTime>(AircraftFlight.FlightDateProperty, FilterType.GratherOrEqual, new [] { from.Value.Date }), new CommonFilter <DateTime>(AircraftFlight.FlightDateProperty, FilterType.LessOrEqual, new [] { to.Value.Date }), }); if (flights.Count > 0) { filters.Add(new CommonFilter <int>(Discrepancy.FlightIdProperty, FilterType.In, flights.Select(i => i.ItemId).ToArray())); } } if (aircraft != null) { preResultList.AddRange(_loader.GetObjectList <Discrepancy>(new[] { new CommonFilter <string>(Discrepancy.FlightIdProperty, FilterType.In, new [] { $"(Select ItemId from AircraftFlights where AircraftId = {aircraft.ItemId} and IsDeleted = 0)" }), })); //Строка запроса, выдающая идентификаторы родительских задач КИТов //Фильтр по ключевому полю таблицы обозначающий //что значения ключевого поля таблицы должны быть //среди идентификаторов родительских задач КИТов } else { if (filters.Count > 0) { preResultList.AddRange(_loader.GetObjectListAll <Discrepancy>(filters.ToArray(), loadChild: true)); } } #region //заполнение Discrepancies CorrectiveAction в Discrepancies нового полета// int[] deferredsIds = preResultList .Where(i => i.DirectiveId > 0) .Select(i => i.DirectiveId) .ToArray(); var deffereds = new DirectiveCollection(); if (deferredsIds.Length > 0) { deffereds = _directiveCore.GetDeferredItems(filters: new ICommonFilter[] { new CommonFilter <int>(BaseEntityObject.ItemIdProperty, FilterType.In, deferredsIds) }); } var parentFlights = new List <AircraftFlight>(); var flightIds = preResultList.Select(i => i.FlightId).Distinct().ToArray(); if (aircraft != null) { foreach (var id in flightIds) { var fl = _aircraftFlightCore.GetAircraftFlightById(aircraft.ItemId, id); if (fl != null) { parentFlights.Add(fl); resultList.Add(preResultList.FirstOrDefault(i => i.FlightId == id)); } } } else { if (flightIds.Length > 0) { var flights = _newLoader.GetObjectList <AircraftFlightDTO, AircraftFlight>(new Filter("ItemId", flightIds)); foreach (var id in flightIds) { var fl = flights.FirstOrDefault(i => i.ItemId == id); if (fl != null) { parentFlights.Add(fl); resultList.Add(preResultList.FirstOrDefault(i => i.FlightId == id)); } } } } var atlbs = new List <ATLB>(); var atlbIds = parentFlights.Select(i => i.ATLBId).Distinct().ToArray(); if (atlbIds.Length > 0) { //atlbs.AddRange(_loader.GetObjectList<ATLB>(new CommonFilter<int>(BaseEntityObject.ItemIdProperty, FilterType.In, atlbIds))); atlbs.AddRange(_newLoader.GetObjectList <ATLBDTO, ATLB>(new Filter("ItemId", atlbIds))); } var correctiveActions = new List <CorrectiveAction>(); var discrepancyIds = resultList.Select(i => i.ItemId).Distinct().ToArray(); if (discrepancyIds.Length > 0) { //correctiveActions.AddRange(_loader.GetObjectList<CorrectiveAction>(new CommonFilter<int>(CorrectiveAction.DiscrepancyIdProperty, FilterType.In, discrepancyIds), true)); correctiveActions.AddRange(_newLoader.GetObjectList <CorrectiveActionDTO, CorrectiveAction>(new Filter("DiscrepancyID", discrepancyIds), true)); } var cetificates = new List <CertificateOfReleaseToService>(); var crsIds = correctiveActions.Select(i => i.CRSID).Distinct().ToArray(); if (crsIds.Length > 0) { cetificates.AddRange(_loader.GetObjectList <CertificateOfReleaseToService>(new CommonFilter <int>(BaseEntityObject.ItemIdProperty, FilterType.In, crsIds), true)); } //cetificates.AddRange(_newLoader.GetObjectList<CertificateOfReleaseToServiceDTO, CertificateOfReleaseToService>(new Filter("ItemId", crsIds), true)); foreach (var t in resultList) { t.ParentFlight = parentFlights.FirstOrDefault(i => i.ItemId == t.FlightId); if (t.ParentFlight != null) { t.ParentFlight.ParentATLB = atlbs.FirstOrDefault(i => i.ItemId == t.ParentFlight.ATLBId); } t.DeferredItem = deffereds.GetDirectiveById(t.DirectiveId) as DeferredItem; t.CorrectiveActionCollection = new CorrectiveActionCollection(); t.CorrectiveActionCollection.AddRange(correctiveActions.Where(i => t.ItemId == i.DiscrepancyId)); t.CorrectiveAction.CertificateOfReleaseToService = cetificates.FirstOrDefault(i => i.ItemId == t.CorrectiveAction.CRSID); } #endregion return(resultList.Where(i => i.ParentFlight != null && i.ParentFlight.ParentATLB != null).ToList()); }