Esempio n. 1
0
        /// <summary>
        /// Возвращает все директивы базового агрегата, самолета, или задачи созданные в рамках страницы бортжурнала
        /// </summary>
        /// <returns></returns>
        private DirectiveCollection GetDirectives(BaseComponent parentBaseComponent,
                                                  Aircraft parentAircraft,
                                                  AircraftFlight parentFlight,
                                                  DirectiveType directiveType)
        {
            if (parentAircraft == null && parentBaseComponent == null && parentFlight == null)
            {
                throw new ArgumentNullException();
            }
            if (directiveType == null)
            {
                directiveType = DirectiveType.AirworthenessDirectives;
            }

            List <DbQuery> qrs;

            if (parentBaseComponent != null)
            {
                qrs = DirectiveQueries.GetSelectQuery(parentBaseComponent, directiveType, loadChild: true);
            }
            else if (parentAircraft != null)
            {
                qrs = DirectiveQueries.GetAircraftDirectivesSelectQuery(parentAircraft.ItemId, directiveType, loadChild: true);
            }
            else
            {
                qrs = DirectiveQueries.GetSelectQuery(parentFlight, directiveType, loadChild: true);
            }

            var directives = new DirectiveCollection();

            directives.AddRange(_loader.GetObjectListAll <Directive>(qrs, true));

            if (directives.Count == 0)
            {
                return(directives);
            }

            var directiveIds   = directives.Select(d => d.ItemId).ToList();
            var itemsRelations = _itemsRelationsDataAccess.GetRelations(directiveIds, SmartCoreType.Directive.ItemId);

            if (itemsRelations.Count > 0)
            {
                foreach (var directive in directives)
                {
                    directive.ItemRelations.AddRange(itemsRelations.Where(i => i.FirstItemId == directive.ItemId || i.SecondItemId == directive.ItemId));
                }
            }

            return(directives);
        }
Esempio n. 2
0
        public IList <Directive> GetDirectivesList(int aircraftId, DirectiveType directiveType, IList <int> directiveIds, bool loadDeleted = false)
        {
            var directives = new List <Directive>();

            if (directiveIds.Count == 0)
            {
                return(directives);
            }

            var qrs = DirectiveQueries.GetAircraftDirectivesSelectQuery(aircraftId, directiveType,
                                                                        new ICommonFilter[]
            {
                new CommonFilter <int>(BaseEntityObject.ItemIdProperty, FilterType.In,
                                       directiveIds.ToArray())
            }, true, loadDeleted);

            directives.AddRange(_loader.GetObjectListAll <Directive>(qrs, true));

            if (directives.Count == 0)
            {
                return(directives);
            }

            var itemsRelations = _itemsRelationsDataAccess.GetRelations(directiveIds, SmartCoreType.Directive.ItemId);

            if (itemsRelations.Count > 0)
            {
                foreach (var directive in directives)
                {
                    directive.ItemRelations.AddRange(
                        itemsRelations.Where(i => i.FirstItemId == directive.ItemId || i.SecondItemId == directive.ItemId));
                }
                //TODO:(Evgenii Babak)не использовать Where
            }

            return(directives);
        }
Esempio n. 3
0
        /// <summary>
        /// Возвращает все директивы базового агрегата, самолета, или задачи созданные в рамках страницы бортжурнала
        /// </summary>
        /// <returns></returns>
        private DirectiveCollection GetDirectives(BaseComponent parentBaseComponent,
                                                  Aircraft parentAircraft,
                                                  AircraftFlight parentFlight,
                                                  DirectiveType directiveType)
        {
            if (parentAircraft == null && parentBaseComponent == null && parentFlight == null)
            {
                throw new ArgumentNullException();
            }
            if (directiveType == null)
            {
                directiveType = DirectiveType.AirworthenessDirectives;
            }

            List <DbQuery> qrs;

            if (parentBaseComponent != null)
            {
                qrs = DirectiveQueries.GetSelectQuery(parentBaseComponent, directiveType, loadChild: true);
            }
            else if (parentAircraft != null)
            {
                qrs = DirectiveQueries.GetAircraftDirectivesSelectQuery(parentAircraft.ItemId, directiveType, loadChild: true);
            }
            else
            {
                qrs = DirectiveQueries.GetSelectQuery(parentFlight, directiveType, loadChild: true);
            }

            var directives = new DirectiveCollection();

            directives.AddRange(_loader.GetObjectListAll <Directive>(qrs, true));

            if (directives.Count == 0)
            {
                return(directives);
            }

            var directiveIds     = directives.Select(d => d.ItemId).ToList();
            var itemsRelations   = _itemsRelationsDataAccess.GetRelations(directiveIds, SmartCoreType.Directive.ItemId);
            var mpdCompRelations = _itemsRelationsDataAccess.GetCustomRelations(itemsRelations.Select(i => i.FirstItemId).Concat(itemsRelations.Select(i => i.SecondItemId)), SmartCoreType.ComponentDirective.ItemId);


            if (itemsRelations.Count > 0)
            {
                foreach (var directive in directives)
                {
                    directive.ItemRelations.AddRange(itemsRelations.Where(i => i.FirstItemId == directive.ItemId || i.SecondItemId == directive.ItemId));

                    var mpdLink = directive.ItemRelations.FirstOrDefault(i =>
                                                                         i.FirtsItemTypeId == SmartCoreType.MaintenanceDirective.ItemId ||
                                                                         i.SecondItemTypeId == SmartCoreType.MaintenanceDirective.ItemId);
                    if (mpdLink != null)
                    {
                        var mpdId = mpdLink.FirtsItemTypeId == SmartCoreType.MaintenanceDirective.ItemId
                                                        ? mpdLink.FirstItemId
                                                        : mpdLink.SecondItemId;
                        var mpdComLink = mpdCompRelations.FirstOrDefault(i => i.FirstItemId == mpdId || i.SecondItemId == mpdId);
                        directive.LinkComp = mpdComLink?.AdditionalInformation?.Component;
                    }
                }
            }

            return(directives);
        }
Esempio n. 4
0
        public List <AbstractAccessory> GetAllAircraftKits(int aircraftId, int aircraftModelId)
        {
            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.GetAircraftDirectivesSelectQuery(aircraftId, 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.GetAircraftDirectivesSelectQuery(aircraftId,
                                                                             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 checks =
                _loader.GetObjectListAll <MaintenanceCheck>(new[]
            {
                new CommonFilter <int>(MaintenanceCheck.ParentAircraftIdProperty, aircraftId),
                idFilter
            }, true);

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

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

            var jobDTOs = _nonRoutineJobDataAccess.GetNonRoutineJobDTOsWithKits();

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


            #endregion

            #region Поиск КИТ-ов Базовых деталей
            //TODO:(Evgenii Babak) выделить в отдельный класс и не использовать рукописные запросы
            //TODO:(Evgenii Babak) нужно реализовать TablePrefix в методе BaseComponentQueries.GetSelectQueryPrimaryColumnOnly

            var bdFilter =
                $"Select ComponentsItemId from ({BaseQueries.GetSelectQueryWithWhere<BaseComponent>() + $" and (Select top 1 DestinationObjectId from dbo.TransferRecords Where \r\n            \t\t\t\t\tParentType = {SmartCoreType.BaseComponent.ItemId} \r\n            \t\t\t\t\tand ParentId = dbo.Components.ItemId  \r\n            \t\t\t\t\tand IsDeleted = 0\r\n            \t\t\t\t\torder by dbo.TransferRecords.TransferDate Desc) = {aircraftId}"}) directiveSelect ";

            var preResult = _loader.GetObjectListAll <AccessoryRequired>(new ICommonFilter[]
            {
                new CommonFilter <int>(AccessoryRequired.ParentTypeIdProperty, SmartCoreType.BaseComponent.ItemId),
                new CommonFilter <string>(AccessoryRequired.ParentIdProperty, FilterType.In, new [] { bdFilter })
            });


            // поиск поставщиков и связей с ними
            var kitsIds = preResult.Select(k => k.ItemId).ToArray();
            var ksrs    = new List <KitSuppliersRelation>();
            if (kitsIds.Length > 0)
            {
                _loader.GetObjectListAll <KitSuppliersRelation>(new CommonFilter <int>(KitSuppliersRelation.KitIdProperty, FilterType.In, kitsIds));
            }

            var kitSupplierIds = ksrs.Select(k => k.SupplierId).ToArray();
            var suppliers      = new List <Supplier>();
            if (kitSupplierIds.Length > 0)
            {
                suppliers = _loader.GetObjectListAll <Supplier>(new CommonFilter <int>(BaseEntityObject.ItemIdProperty, FilterType.In, kitSupplierIds));
            }

            foreach (var kit in preResult)
            {
                var supls = (from sup in suppliers
                             from k in ksrs
                             where k.KitId == kit.ItemId &&
                             sup.ItemId == k.SupplierId
                             select sup).ToList();
                kit.Suppliers.AddRange(supls.ToArray());
            }

            //поиск чеков, который пренадлежат КИТы
            var kitParentIds   = preResult.Select(k => k.ParentId).ToArray();
            var baseComponents = new List <BaseComponent>();
            if (kitParentIds.Length > 0)
            {
                baseComponents = _loader.GetObjectListAll <BaseComponent>(new CommonFilter <int>(BaseEntityObject.ItemIdProperty, FilterType.In, kitParentIds));
            }

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

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

            var componentQuery = $"(Select ComponentsItemId from ({ComponentQueries.GetSelectQuery(aircraftId)}) directiveSelect )";
            preResult = _loader.GetObjectListAll <AccessoryRequired>(new ICommonFilter[]
            {
                new CommonFilter <int>(AccessoryRequired.ParentTypeIdProperty, SmartCoreType.Component.ItemId),
                new CommonFilter <string>(AccessoryRequired.ParentIdProperty, FilterType.In, new [] { componentQuery }),
            });

            //поиск деталей, который пренадлежат КИТы
            kitParentIds = preResult.Select(k => k.ParentId).ToArray();
            var components = new List <BaseComponent>();
            if (kitParentIds.Length > 0)
            {
                components = _loader.GetObjectListAll <BaseComponent>(new CommonFilter <int>(BaseEntityObject.ItemIdProperty, FilterType.In, kitParentIds));
            }

            //связь КИТов с родительскими деталями
            foreach (var baseComponent in components)
            {
                baseComponent.Kits.Clear();
                baseComponent.Kits.AddRange(preResult.Where(k => k.ParentId == baseComponent.ItemId));
                foreach (var kit in baseComponent.Kits)
                {
                    kit.ParentObject = baseComponent;
                }
            }
            resultKits.AddRange(preResult.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.GetAircraftDirectivesSelectQuery(aircraftId,
                                                                               new[] { idFilter },
                                                                               true);

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

            #endregion

            #region Поиск Нерутинных КИТов
            //добавление не рутинных кит-ов
            preResult = _loader.GetObjectListAll <AccessoryRequired>(new CommonFilter <int>(AccessoryRequired.AircraftModelIdProperty, aircraftModelId));

            // поиск поставщиков и связей с ними
            kitsIds = preResult.Select(k => k.ItemId).ToArray();
            if (kitsIds.Length > 0)
            {
                ksrs = _loader.GetObjectListAll <KitSuppliersRelation>(new CommonFilter <int>(KitSuppliersRelation.KitIdProperty, FilterType.In, kitsIds));
            }

            kitSupplierIds = ksrs.Select(k => k.SupplierId).ToArray();
            if (kitSupplierIds.Length > 0)
            {
                suppliers = _loader.GetObjectListAll <Supplier>(new CommonFilter <int>(BaseEntityObject.ItemIdProperty, FilterType.In, kitSupplierIds));
            }
            foreach (var kit in preResult)
            {
                var supls = (from sup in suppliers
                             from k in ksrs
                             where k.KitId == kit.ItemId &&
                             sup.ItemId == k.SupplierId
                             select sup).ToList();
                kit.Suppliers.AddRange(supls.ToArray());
            }


            resultKits.AddRange(preResult.ToArray());

            #endregion

            return(resultKits);
        }