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); }
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); }