public List <MaintenanceDirective> GetMaintenanceDirectives(string text) { var qrs = MaintenanceDirectiveQueries.GetSelectQuery(text, 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); }
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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
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); }