コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: FlightTrackCore.cs プロジェクト: jecus/Cas
        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);
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
ファイル: DirectiveCore.cs プロジェクト: jecus/Cas
        /// <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
        }
コード例 #5
0
ファイル: DiscrepanciesCore.cs プロジェクト: jecus/Cas
        ///// <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());
        }