Beispiel #1
0
        public List <AbstractAccessory> GetMpdKits(int aircraftId, IEnumerable <int> mpdIds)
        {
            var resultKits = new List <AbstractAccessory>();

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

            var maintenanceDirectives = _loader.GetObjectListAll <MaintenanceDirective>(qrs, true);

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

            return(resultKits);
        }
Beispiel #2
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);
        }
Beispiel #3
0
        /// <summary>
        /// Возвращает все директивы базового агрегата, или самолета
        /// </summary>
        /// <returns></returns>
        public IList <MaintenanceDirective> GetMaintenanceDirectiveList(IList <int> maintenanceDirectiveIds, int?parentAircraftId = null)
        {
            var directives = new List <MaintenanceDirective>();

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

            List <DbQuery> qrs;

            if (parentAircraftId != null)
            {
                //Если задано родительское ВС, то директиву с заданный ID нужно искать среди директив ВС
                qrs =
                    MaintenanceDirectiveQueries.GetAircraftDirectivesSelectQuery
                        (parentAircraftId.Value,
                        new ICommonFilter[]
                {
                    new CommonFilter <int>(BaseEntityObject.ItemIdProperty, FilterType.In, maintenanceDirectiveIds.ToArray())
                }, true, true);
            }
            else
            {
                qrs =
                    BaseQueries.GetSelectQueryWithWhereAll <MaintenanceDirective>
                        (new ICommonFilter[]
                {
                    new CommonFilter <int>(BaseEntityObject.ItemIdProperty, FilterType.In, maintenanceDirectiveIds.ToArray())
                }, 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;
            }
            directives.AddRange(BaseQueries.GetObjectList <MaintenanceDirective>(ds, true));

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

            var itemsRelations = _itemsRelationsDataAccess.GetRelations(maintenanceDirectiveIds, SmartCoreType.MaintenanceDirective.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);
        }
Beispiel #4
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);

            return(directive);
        }
Beispiel #5
0
        /// <summary>
        /// Возвращает все директивы базового агрегата, или самолета
        /// </summary>
        /// <returns></returns>
        public List <MaintenanceDirective> GetMaintenanceDirectives(BaseEntityObject parent, IEnumerable <ICommonFilter> filters = null)
        {
            if (parent == null || (!(parent is Aircraft) && !(parent is BaseComponent)))
            {
                throw new ArgumentNullException();
            }

            var qrs = parent is Aircraft
                                                                        ? MaintenanceDirectiveQueries.GetAircraftDirectivesSelectQuery(((Aircraft)parent).ItemId, filters, true)
                                                                        : MaintenanceDirectiveQueries.GetSelectQuery((BaseComponent)parent, filters, 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 directives = BaseQueries.GetObjectList <MaintenanceDirective>(ds, true);

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

            var directiveIds = directives.Select(d => d.ItemId).ToList();

            //Загрузка задач по компонентам привязанных к задачам из MPD
            //Компонент, для которого привязаны задачи должен находится на том ВС что и задачи MPD
            var itemsRelations = _itemsRelationsDataAccess.GetRelations(directiveIds, SmartCoreType.MaintenanceDirective.ItemId);

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

            return(directives);
        }
Beispiel #6
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);
        }