Ejemplo n.º 1
0
        /// <summary>
        /// Возвращает пакеты задач для определенного родителя (воздушного судна, оператора и т.д.)
        /// </summary>
        /// <param name="parent">Родитель. При пережаче null вернет все пакеты задач переданного типа</param>
        /// <param name="statuses">Фильтр статуса рабочего пакета. (По умолчанию = null)</param>
        /// <param name="loadWorkPackageItems">Флаг загрузки элементов рабочих пакетов</param>
        /// <param name="includedTasks">Задачи, которые должны содержать пакеты (при передаче пустои коллекции запрос вернет 0 рабочих пакетов)</param>
        /// <returns></returns>
        public List <T> GetPackages <T, TV>(BaseEntityObject parent          = null,
                                            WorkPackageStatus[] statuses     = null,
                                            bool loadWorkPackageItems        = false,
                                            BaseEntityObject[] includedTasks = null)
            where T : AbstractPackage <TV>, new()
            where TV : BasePackageRecord, new()
        {
            List <ICommonFilter> filters = new List <ICommonFilter>();

            if (includedTasks != null)
            {
                if (includedTasks.Length == 0 || includedTasks.Count(t => t != null) == 0)
                {
                    //Строка запроса, выдающая идентификаторы пакетов задач
                    string recordsParentId = BaseQueries.GetSelectQueryColumnOnly <TV>
                                                 (BaseDirectivePackageRecord.ParentIdProperty, new ICommonFilter[]
                    {
                        new CommonFilter <int>(BasePackageRecord.PackageItemTypeProperty, 0),
                        new CommonFilter <int>(BasePackageRecord.PackageItemIdProperty, 0)
                    }
                                                 );
                    //Фильтр по ключевому полю таблицы обозначающий
                    //что значения ключевого поля таблицы должны быть
                    //среди идентификаторов пакетов задач
                    ICommonFilter idFilter = new CommonFilter <string>(BaseEntityObject.ItemIdProperty,
                                                                       FilterType.In,
                                                                       new[] { recordsParentId });

                    filters.Add(idFilter);
                }
                else
                {
                    Dictionary <int, string> subs = new Dictionary <int, string>();
                    foreach (BaseEntityObject task in includedTasks.Where(t => t != null))
                    {
                        if (subs.ContainsKey(task.SmartCoreObjectType.ItemId))
                        {
                            string s = subs[task.SmartCoreObjectType.ItemId];
                            if (s != "")
                            {
                                s += ", ";
                            }

                            s += task.ItemId;
                            subs[task.SmartCoreObjectType.ItemId] = s;
                        }
                        else
                        {
                            subs.Add(task.SmartCoreObjectType.ItemId, task.ItemId.ToString(CultureInfo.InvariantCulture));
                        }
                    }

                    string filterString = "";
                    foreach (KeyValuePair <int, string> sub in subs)
                    {
                        if (filterString != "")
                        {
                            filterString += "\n or";
                        }
                        filterString += $"(PackageItemTypeId = {sub.Key} and PackageItemId in ({sub.Value}))";
                    }

                    //Строка запроса, выдающая идентификаторы пакетов задач
                    string recordsParentId =
                        BaseQueries.GetSelectQueryColumnOnly <TV>
                            (BasePackageRecord.PackageItemIdProperty, new ICommonFilter[] { new CommonFilter <string>(null, FilterType.In, new[] { filterString }) });
                    //Фильтр по ключевому полю таблицы обозначающий
                    //что значения ключевого поля таблицы должны быть
                    //среди идентификаторов пакетов задач
                    ICommonFilter idFilter = new CommonFilter <string>(BaseEntityObject.ItemIdProperty,
                                                                       FilterType.In,
                                                                       new[] { recordsParentId });

                    filters.Add(idFilter);
                }
            }
            if (parent != null)
            {
                filters.Add(new CommonFilter <int>(AbstractPackage <TV> .ParentIdProperty, parent.ItemId));
                filters.Add(new CommonFilter <SmartCoreType>(AbstractPackage <TV> .ParentTypeIdProperty, parent.SmartCoreObjectType));
            }
            if (statuses != null && statuses.Length > 0)
            {
                filters.Add(new CommonFilter <WorkPackageStatus>(AbstractPackage <TV> .StatusProperty, FilterType.In, statuses));
            }
            List <T> wps = _loader.GetObjectList <T>(filters.ToArray(), true);

            if (!loadWorkPackageItems)
            {
                return(wps);
            }
            foreach (T wp in wps)
            {
                //Обратная ссылка на родительский объект
                //загрузка элементов рабочих пакетов (если требуется)
                LoadPackageItems <T, TV>(wp);
            }
            return(wps);
        }
Ejemplo n.º 2
0
        ///// <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());
        }
Ejemplo n.º 3
0
        public List <AbstractAccessory> GetAllWorkPackageKits(int workPackageId)
        {
            var resultKits = new List <AbstractAccessory>();

            #region Поиск Директив летной годности с КИТами

            //Строка запроса, выдающая идентификаторы родительских задач КИТов
            var accessoryParentId = BaseQueries.GetSelectQueryColumnOnly <AccessoryRequired>
                                        (AccessoryRequired.ParentIdProperty,
                                        new ICommonFilter[] { new CommonFilter <int>(AccessoryRequired.ParentTypeIdProperty, SmartCoreType.Directive.ItemId) }
                                        );
            //Фильтр по ключевому полю таблицы обозначающий
            //что значения ключевого поля таблицы должны быть
            //среди идентификаторов родительских задач КИТов
            ICommonFilter idFilter = new CommonFilter <string>(BaseEntityObject.ItemIdProperty,
                                                               FilterType.In,
                                                               new[] { accessoryParentId });
            //создаются запросы на выборку задач по компонентам с заданного рабочего пакета
            //дополнительно фильтрую ключевое поле. значение ключевого поля
            //задач по компонентам рабочего пакета должно быть среди идентификатор родительских задач КИТов
            var qrs        = DirectiveQueries.GetSelectQueryForWp(workPackageId, DirectiveType.All, new[] { idFilter }, true);
            var directives = _loader.GetObjectListAll <Directive>(qrs, true);
            //связь КИТов с родительскими деталями
            foreach (var directive in directives)
            {
                resultKits.AddRange(directive.Kits.ToArray());
            }

            #endregion

            #region Поиск Директив деталей с КИТами

            //Строка запроса, выдающая идентификаторы родительских задач КИТов
            accessoryParentId = BaseQueries.GetSelectQueryColumnOnly <AccessoryRequired>
                                    (AccessoryRequired.ParentIdProperty,
                                    new ICommonFilter[]
                                    { new CommonFilter <int>(AccessoryRequired.ParentTypeIdProperty, SmartCoreType.ComponentDirective.ItemId) }
                                    );
            //Фильтр по ключевому полю таблицы обозначающий
            //что значения ключевого поля таблицы должны быть
            //среди идентификаторов родительских задач КИТов
            idFilter = new CommonFilter <string>(BaseEntityObject.ItemIdProperty,
                                                 FilterType.In,
                                                 new[] { accessoryParentId });
            //создаются запросы на выборку задач по компонентам с заданного рабочего пакета
            //дополнительно фильтрую ключевое поле. значение ключевого поля
            //задач по компонентам рабочего пакета должно быть среди идентификатор родительских задач КИТов
            qrs = ComponentDirectiveQueries.GetSelectQueryForWp(workPackageId, new[] { idFilter }, true);

            var componentDirectives = _loader.GetObjectListAll <ComponentDirective>(qrs, true);
            //связь КИТов с родительскими деталями
            foreach (var dd in componentDirectives)
            {
                dd.ParentComponent = _componentCore.GetComponentById(dd.ComponentId);
                resultKits.AddRange(dd.Kits.ToArray());
            }

            #endregion

            #region Поиск КИТ-ов Maintenance чеков

            //Строка запроса, выдающая идентификаторы родительских задач КИТов
            accessoryParentId = BaseQueries.GetSelectQueryColumnOnly <AccessoryRequired>
                                    (AccessoryRequired.ParentIdProperty,
                                    new ICommonFilter[]
                                    { new CommonFilter <int>(AccessoryRequired.ParentTypeIdProperty, SmartCoreType.MaintenanceCheck.ItemId) }
                                    );
            //Фильтр по ключевому полю таблицы обозначающий
            //что значения ключевого поля таблицы должны быть
            //среди идентификаторов родительских задач КИТов
            idFilter = new CommonFilter <string>(BaseEntityObject.ItemIdProperty,
                                                 FilterType.In,
                                                 new[] { accessoryParentId });

            var directiveIn = BaseQueries.GetSelectQueryColumnOnly <WorkPackageRecord>(WorkPackageRecord.DirectiveIdProperty,
                                                                                       new ICommonFilter[]
            {
                new CommonFilter <int>(WorkPackageRecord.WorkPakageIdProperty, workPackageId),
                new CommonFilter <int>(WorkPackageRecord.WorkPackageItemTypeProperty, SmartCoreType.MaintenanceCheck.ItemId)
            });

            //создаются запросы на выборку чеков с заданного рабочего пакета
            //дополнительно фильтрую ключевое поле. значение ключевого поля
            //чека рабочего пакета должно быть среди идентификатор родительских задач КИТов
            var checks =
                _loader.GetObjectListAll <MaintenanceCheck>(new[]
            {
                new CommonFilter <string>(BaseEntityObject.ItemIdProperty, FilterType.In, new[] { directiveIn }),
                idFilter
            }, true);

            //связь КИТов с родительскими деталями
            foreach (var dd in checks)
            {
                resultKits.AddRange(dd.Kits.ToArray());
            }

            #endregion

            #region Поиск КИТ-ов NonRoutine Job-ов

            var jobDTOs = _nonRoutineJobDataAccess.GetNonRoutineJobDTOsWithKitsByWorkPackageId(workPackageId);

            //связь КИТов с родительскими деталями
            foreach (var jobDTO in jobDTOs)
            {
                var nonRoutineJob = NonRoutineJobHelper.Convert(jobDTO, _casEnvironment);
                resultKits.AddRange(nonRoutineJob.Kits.ToArray());
            }


            #endregion

            #region Поиск КИТ-ов Базовых деталей

            directiveIn = BaseQueries.GetSelectQueryColumnOnly <WorkPackageRecord>(WorkPackageRecord.DirectiveIdProperty,
                                                                                   new ICommonFilter[]
            {
                new CommonFilter <int>(WorkPackageRecord.WorkPakageIdProperty, workPackageId),
                new CommonFilter <int>(WorkPackageRecord.WorkPackageItemTypeProperty, SmartCoreType.BaseComponent.ItemId)
            });

            var kitQrs = BaseQueries.GetSelectQueryWithWhereAll <AccessoryRequired>(new ICommonFilter[]
            {
                new CommonFilter <int>(AccessoryRequired.ParentTypeIdProperty, SmartCoreType.BaseComponent.ItemId),
                new CommonFilter <string>(BaseEntityObject.ItemIdProperty, FilterType.In, new[] { directiveIn })
            }, true);

            var kits = _loader.GetObjectListAll <AccessoryRequired>(kitQrs, true);

            var baseComponents = _loader.GetObjectList <BaseComponent>(new CommonFilter <string>(BaseEntityObject.ItemIdProperty, FilterType.In, new[] { directiveIn }));

            //связь КИТов с родительскими деталями
            foreach (var baseComponent in baseComponents)
            {
                baseComponent.Kits.Clear();
                baseComponent.Kits.AddRange(kits.Where(k => k.ParentId == baseComponent.ItemId));
                foreach (var kit in baseComponent.Kits)
                {
                    kit.ParentObject = baseComponent;
                }
            }
            resultKits.AddRange(kits.ToArray());

            #endregion

            #region поиск КИТ-ов деталей

            directiveIn = BaseQueries.GetSelectQueryColumnOnly <WorkPackageRecord>(WorkPackageRecord.DirectiveIdProperty,
                                                                                   new ICommonFilter[]
            {
                new CommonFilter <int>(WorkPackageRecord.WorkPakageIdProperty, workPackageId),
                new CommonFilter <int>(WorkPackageRecord.WorkPackageItemTypeProperty, SmartCoreType.Component.ItemId)
            });

            kitQrs = BaseQueries.GetSelectQueryWithWhereAll <AccessoryRequired>(new ICommonFilter[]
            {
                new CommonFilter <int>(AccessoryRequired.ParentTypeIdProperty, SmartCoreType.Component.ItemId),
                new CommonFilter <string>(BaseEntityObject.ItemIdProperty, FilterType.In, new[] { directiveIn })
            }, true);

            kits = _loader.GetObjectListAll <AccessoryRequired>(kitQrs, true);
            var components = _loader.GetObjectList <Entities.General.Accessory.Component>(new CommonFilter <string>(BaseEntityObject.ItemIdProperty, FilterType.In, new[] { directiveIn }));

            //связь КИТов с родительскими деталями
            foreach (var component in components)
            {
                component.Kits.Clear();
                component.Kits.AddRange(kits.Where(k => k.ParentId == component.ItemId));
                foreach (var kit in component.Kits)
                {
                    kit.ParentObject = component;
                }
            }
            resultKits.AddRange(kits.ToArray());

            #endregion

            #region Поиск MPD с КИТами

            //Строка запроса, выдающая идентификаторы родительских задач КИТов
            accessoryParentId = BaseQueries.GetSelectQueryColumnOnly <AccessoryRequired>
                                    (AccessoryRequired.ParentIdProperty,
                                    new ICommonFilter[]
                                    { new CommonFilter <int>(AccessoryRequired.ParentTypeIdProperty, SmartCoreType.MaintenanceDirective.ItemId) }
                                    );
            //Фильтр по ключевому полю таблицы обозначающий
            //что значения ключевого поля таблицы должны быть
            //среди идентификаторов родительских задач КИТов
            idFilter = new CommonFilter <string>(BaseEntityObject.ItemIdProperty,
                                                 FilterType.In,
                                                 new[] { accessoryParentId });
            //создаются запросы на выборку задач с заданного рабочего пакета
            //дополнительно фильтруя ключевое поле. значение ключевого поля
            //задач по компонентам рабочего пакета должно быть среди идентификатор родительских задач КИТов
            qrs = MaintenanceDirectiveQueries.GetSelectQueryForWp(workPackageId, new[] { idFilter }, true);

            var maintenanceDirectives = _loader.GetObjectListAll <MaintenanceDirective>(qrs, true);
            //связь КИТов с родительскими деталями
            foreach (var mpd in maintenanceDirectives)
            {
                resultKits.AddRange(mpd.Kits.ToArray());
            }

            #endregion

            return(resultKits);
        }