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