diff --git a/AsbCloudApp/Repositories/IProcessMapPlanRepository.cs b/AsbCloudApp/Repositories/IProcessMapPlanRepository.cs new file mode 100644 index 00000000..46b0103f --- /dev/null +++ b/AsbCloudApp/Repositories/IProcessMapPlanRepository.cs @@ -0,0 +1,31 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using System.Threading; +using AsbCloudApp.Data.ProcessMaps; +using AsbCloudApp.Requests; +using AsbCloudApp.Services; + +namespace AsbCloudApp.Repositories; + +/// +/// РТК план +/// +public interface IProcessMapPlanRepository : IRepositoryWellRelated + where TDto : ProcessMapPlanBaseDto +{ + /// + /// Получить РТК по коллекции параметров + /// + /// + /// + /// + Task> GetAsync(IEnumerable requests, CancellationToken cancellationToken); + + /// + /// Удалить РТК по скважине + /// + /// + /// + /// + Task RemoveByWellAsync(int idWell, CancellationToken cancellationToken); +} diff --git a/AsbCloudApp/Repositories/IWellCompositeRepository.cs b/AsbCloudApp/Repositories/IWellCompositeRepository.cs index 103337ac..5354a587 100644 --- a/AsbCloudApp/Repositories/IWellCompositeRepository.cs +++ b/AsbCloudApp/Repositories/IWellCompositeRepository.cs @@ -29,11 +29,11 @@ namespace AsbCloudApp.Repositories Task SaveAsync(int idWell, IEnumerable wellComposites, CancellationToken token); /// - /// Получение РТК бурение по композитной скважине + /// Получение РТК-план бурение по композитной скважине /// /// /// /// - Task> GetCompositeProcessMap(int idWell, CancellationToken token); + Task> GetCompositeProcessMap(int idWell, CancellationToken token); } } diff --git a/AsbCloudApp/Repositories/IWellDrillingProcessMapRepository.cs b/AsbCloudApp/Repositories/IWellDrillingProcessMapRepository.cs deleted file mode 100644 index 105f24b3..00000000 --- a/AsbCloudApp/Repositories/IWellDrillingProcessMapRepository.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using AsbCloudApp.Data.ProcessMaps; -using AsbCloudApp.Requests; -using AsbCloudApp.Services; - -namespace AsbCloudApp.Repositories; - -/// -/// РТК бурение скважины -/// -public interface IWellDrillingProcessMapRepository : IRepositoryWellRelated -{ - /// - /// Получить РТК бурение по параметрам - /// - /// - /// - /// - Task> GetAsync(WellDrillingProcessMapRequest request, CancellationToken cancellationToken); - - /// - /// Получить РТК бурение по коллекции параметров - /// - /// - /// - /// - Task> GetAsync(IEnumerable requests, CancellationToken cancellationToken); -} \ No newline at end of file diff --git a/AsbCloudApp/Repositories/IWellReamProcessMapRepository.cs b/AsbCloudApp/Repositories/IWellReamProcessMapRepository.cs deleted file mode 100644 index dc1ac920..00000000 --- a/AsbCloudApp/Repositories/IWellReamProcessMapRepository.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Collections.Generic; -using System.Threading.Tasks; -using System.Threading; -using AsbCloudApp.Data.ProcessMaps; -using AsbCloudApp.Requests; -using AsbCloudApp.Services; - -namespace AsbCloudApp.Repositories; - -/// -/// РТК проработки -/// -public interface IWellReamProcessMapRepository : IRepositoryWellRelated -{ - /// - /// Получить РТК проработки по параметрам - /// - /// - /// - /// - Task> GetAsync(WellReamProcessMapRequest request, CancellationToken cancellationToken); -} \ No newline at end of file diff --git a/AsbCloudApp/Requests/WellDrillingProcessMapRequest.cs b/AsbCloudApp/Requests/ProcessMapPlanRequest.cs similarity index 80% rename from AsbCloudApp/Requests/WellDrillingProcessMapRequest.cs rename to AsbCloudApp/Requests/ProcessMapPlanRequest.cs index 2c8eb150..b614b8c3 100644 --- a/AsbCloudApp/Requests/WellDrillingProcessMapRequest.cs +++ b/AsbCloudApp/Requests/ProcessMapPlanRequest.cs @@ -3,9 +3,9 @@ namespace AsbCloudApp.Requests; /// -/// Запрос для получения РТК бурение +/// Запрос для получения РТК план /// -public class WellDrillingProcessMapRequest +public class ProcessMapPlanRequest { /// /// Идентификатор скважины diff --git a/AsbCloudApp/Requests/WellReamProcessMapRequest.cs b/AsbCloudApp/Requests/WellReamProcessMapRequest.cs deleted file mode 100644 index 850feca8..00000000 --- a/AsbCloudApp/Requests/WellReamProcessMapRequest.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; - -namespace AsbCloudApp.Requests; - -/// -/// Запрос для получения РТК проработки -/// -public class WellReamProcessMapRequest -{ - /// - /// Идентификатор скважины - /// - public int IdWell { get; set; } - - /// - /// Дата обновления - /// - public DateTime? UpdateFrom { get; set; } -} \ No newline at end of file diff --git a/AsbCloudApp/Services/IRepositoryWellRelated.cs b/AsbCloudApp/Services/IRepositoryWellRelated.cs index 84dd3d71..9c771657 100644 --- a/AsbCloudApp/Services/IRepositoryWellRelated.cs +++ b/AsbCloudApp/Services/IRepositoryWellRelated.cs @@ -21,14 +21,6 @@ namespace AsbCloudApp.Services /// emptyList if nothing found Task> GetByIdWellAsync(int idWell, CancellationToken token); - /// - /// Удалить записи связанных со скважиной - /// - /// - /// - /// - Task RemoveByWellAsync(int idWell, CancellationToken cancellationToken); - /// /// Получение всех записей по нескольким скважинам /// diff --git a/AsbCloudInfrastructure/DependencyInjection.cs b/AsbCloudInfrastructure/DependencyInjection.cs index bf6b3564..9f3de68a 100644 --- a/AsbCloudInfrastructure/DependencyInjection.cs +++ b/AsbCloudInfrastructure/DependencyInjection.cs @@ -1,266 +1,308 @@ -using AsbCloudApp.Data; +using System; +using AsbCloudApp.Data; +using AsbCloudApp.Data.Manuals; +using AsbCloudApp.Data.ProcessMaps; using AsbCloudApp.Data.SAUB; using AsbCloudApp.Data.Subsystems; +using AsbCloudApp.Data.WellOperationImport.Options; using AsbCloudApp.Repositories; using AsbCloudApp.Services; +using AsbCloudApp.Services.AutoGeneratedDailyReports; +using AsbCloudApp.Services.Notifications; +using AsbCloudApp.Services.ProcessMaps; +using AsbCloudApp.Services.ProcessMaps.WellDrillingProcessMap; using AsbCloudApp.Services.Subsystems; +using AsbCloudApp.Services.WellOperationImport; using AsbCloudDb.Model; +using AsbCloudDb.Model.Manuals; +using AsbCloudDb.Model.ProcessMaps; using AsbCloudDb.Model.Subsystems; using AsbCloudInfrastructure.Background; using AsbCloudInfrastructure.Repository; using AsbCloudInfrastructure.Services; +using AsbCloudInfrastructure.Services.AutoGeneratedDailyReports; using AsbCloudInfrastructure.Services.DailyReport; using AsbCloudInfrastructure.Services.DetectOperations; using AsbCloudInfrastructure.Services.DrillingProgram; +using AsbCloudInfrastructure.Services.ProcessMaps.WellDrillingProcessMap; +using AsbCloudInfrastructure.Services.ProcessMaps.WellDrillingProcessMap.Report; using AsbCloudInfrastructure.Services.SAUB; using AsbCloudInfrastructure.Services.Subsystems; using AsbCloudInfrastructure.Services.Trajectory; +using AsbCloudInfrastructure.Services.WellOperationImport; +using AsbCloudInfrastructure.Services.WellOperationImport.FileParser; using AsbCloudInfrastructure.Services.WellOperationService; using Mapster; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; -using System; -using AsbCloudApp.Data.Manuals; -using AsbCloudApp.Data.ProcessMaps; -using AsbCloudApp.Services.AutoGeneratedDailyReports; -using AsbCloudApp.Services.Notifications; -using AsbCloudDb.Model.Manuals; -using AsbCloudInfrastructure.Services.AutoGeneratedDailyReports; -using AsbCloudApp.Services.WellOperationImport; -using AsbCloudInfrastructure.Services.WellOperationImport; -using AsbCloudApp.Data.WellOperationImport.Options; -using AsbCloudInfrastructure.Services.WellOperationImport.FileParser; -using AsbCloudApp.Services.ProcessMaps.WellDrillingProcessMap; -using AsbCloudApp.Services.ProcessMaps; -using AsbCloudInfrastructure.Services.ProcessMaps.WellDrillingProcessMap; -using AsbCloudInfrastructure.Services.ProcessMaps.WellDrillingProcessMap.Report; namespace AsbCloudInfrastructure { public static class DependencyInjection { - public static IAsbCloudDbContext MakeContext(string connectionString) - { - var options = new DbContextOptionsBuilder() - .UseNpgsql(connectionString) - .Options; - var context = new AsbCloudDbContext(options); - return context; - } + public static IAsbCloudDbContext MakeContext(string connectionString) + { + var options = new DbContextOptionsBuilder() + .UseNpgsql(connectionString) + .Options; + var context = new AsbCloudDbContext(options); + return context; + } - public static void MapsterSetup() - { - TypeAdapterConfig.GlobalSettings.Default.Config - .ForType() - .MapWith((source) => source.DateTime); + public static void MapsterSetup() + { + TypeAdapterConfig.GlobalSettings.Default.Config + .ForType() + .MapWith((source) => source.DateTime); - TypeAdapterConfig.GlobalSettings.Default.Config - .ForType() - .MapWith((source) => source == default ? new DateTime(0, DateTimeKind.Utc) : source); + TypeAdapterConfig.GlobalSettings.Default.Config + .ForType() + .MapWith((source) => source == default ? new DateTime(0, DateTimeKind.Utc) : source); - TypeAdapterConfig.GlobalSettings.Default.Config - .ForType() - .MapWith((source) => source.MakeTimeOnly()); + TypeAdapterConfig.GlobalSettings.Default.Config + .ForType() + .MapWith((source) => source.MakeTimeOnly()); - TypeAdapterConfig.GlobalSettings.Default.Config - .ForType() - .MapWith((source) => new(source)); + TypeAdapterConfig.GlobalSettings.Default.Config + .ForType() + .MapWith((source) => new(source)); - TypeAdapterConfig.GlobalSettings.Default.Config - .ForType() - .MapWith((source) => new(source)); + TypeAdapterConfig.GlobalSettings.Default.Config + .ForType() + .MapWith((source) => new(source)); #pragma warning disable CS8603 // Possible null reference return. - TypeAdapterConfig.GlobalSettings.Default.Config - .ForType() - .Ignore(dst => dst.Cluster, - dst => dst.RelationCompaniesWells, - dst => dst.Telemetry, - dst => dst.WellComposites, - dst => dst.WellCompositeSrcs, - dst => dst.WellOperations, - dst => dst.WellType); + TypeAdapterConfig.GlobalSettings.Default.Config + .ForType() + .Ignore(dst => dst.Cluster, + dst => dst.RelationCompaniesWells, + dst => dst.Telemetry, + dst => dst.WellComposites, + dst => dst.WellCompositeSrcs, + dst => dst.WellOperations, + dst => dst.WellType); #pragma warning restore CS8603 // Possible null reference return. - TypeAdapterConfig.GlobalSettings.Default.Config - .ForType() - .Ignore(dst => dst.Deposit, - dst => dst.Wells); + TypeAdapterConfig.GlobalSettings.Default.Config + .ForType() + .Ignore(dst => dst.Deposit, + dst => dst.Wells); - TypeAdapterConfig.GlobalSettings.Default.Config - .ForType(); + TypeAdapterConfig.GlobalSettings.Default.Config + .ForType(); - TypeAdapterConfig.GlobalSettings.Default.Config - .ForType(); + TypeAdapterConfig.GlobalSettings.Default.Config + .ForType(); - TypeAdapterConfig.GlobalSettings.Default.Config - .ForType() - .Ignore(dst => dst.NotificationCategory, - dst => dst.User); - } + TypeAdapterConfig.GlobalSettings.Default.Config + .ForType() + .Ignore(dst => dst.NotificationCategory, + dst => dst.User); - public static IServiceCollection AddInfrastructure(this IServiceCollection services, IConfiguration configuration) - { - MapsterSetup(); - var connectionStringName = "DefaultConnection"; + TypeAdapterConfig.GlobalSettings.Default.Config + .ForType() + .Map(dest => dest.AxialLoad, src => new PlanLimitDto + { + LimitMax = src.AxialLoadLimitMax, + Plan = src.AxialLoadPlan + }) + .Map(dest => dest.Flow, src => new PlanLimitDto + { + LimitMax = src.FlowLimitMax, + Plan = src.FlowPlan + }) + .Map(dest => dest.Pressure, src => new PlanLimitDto + { + LimitMax = src.PressureLimitMax, + Plan = src.PressurePlan + }) + .Map(dest => dest.TopDriveSpeed, src => new PlanLimitDto + { + LimitMax = src.TopDriveSpeedLimitMax, + Plan = src.TopDriveSpeedPlan + }) + .Map(dest => dest.TopDriveTorque, src => new PlanLimitDto + { + LimitMax = src.TopDriveTorqueLimitMax, + Plan = src.TopDriveTorquePlan + }); + + TypeAdapterConfig.GlobalSettings.Default.Config + .ForType() + .Map(dest => dest.AxialLoadPlan, src => src.AxialLoad.Plan) + .Map(dest => dest.AxialLoadLimitMax, src => src.AxialLoad.LimitMax) + .Map(dest => dest.FlowPlan, src => src.Flow.Plan) + .Map(dest => dest.FlowLimitMax, src => src.Flow.LimitMax) + .Map(dest => dest.PressurePlan, src => src.Pressure.Plan) + .Map(dest => dest.PressureLimitMax, src => src.Pressure.LimitMax) + .Map(dest => dest.TopDriveSpeedPlan, src => src.TopDriveSpeed.Plan) + .Map(dest => dest.TopDriveSpeedLimitMax, src => src.TopDriveSpeed.LimitMax) + .Map(dest => dest.TopDriveTorquePlan, src => src.TopDriveTorque.Plan) + .Map(dest => dest.TopDriveTorqueLimitMax, src => src.TopDriveTorque.LimitMax); + } + + public static IServiceCollection AddInfrastructure(this IServiceCollection services, IConfiguration configuration) + { + MapsterSetup(); + string connectionStringName = "DefaultConnection"; #if DEBUG - connectionStringName = "DebugConnection"; + connectionStringName = "DebugConnection"; #endif - services.AddDbContext(options => - options.UseNpgsql(configuration.GetConnectionString(connectionStringName))); - + services.AddDbContext(options => + options.UseNpgsql(configuration.GetConnectionString(connectionStringName))); - services.AddMemoryCache(); - services.AddScoped(provider => provider.GetRequiredService()); - services.AddSingleton(new WitsInfoService()); - services.AddSingleton(provider => TelemetryDataCache.GetInstance(provider)); - services.AddSingleton(provider => TelemetryDataCache.GetInstance(provider)); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(provider => ReduceSamplingService.GetInstance(configuration)); + services.AddMemoryCache(); + services.AddScoped(provider => provider.GetRequiredService()); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient, CrudWellRelatedRepositoryBase>(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); + services.AddSingleton(new WitsInfoService()); + services.AddSingleton(provider => TelemetryDataCache.GetInstance(provider)); + services.AddSingleton(provider => TelemetryDataCache.GetInstance(provider)); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(provider => ReduceSamplingService.GetInstance(configuration)); - services.AddTransient(); + services.AddTransient(); + services.AddTransient, ProcessMapPlanRepository>(); + services.AddTransient, ProcessMapPlanRepository>(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient, CrudWellRelatedRepositoryBase>(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); - services.AddTransient(); + services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient, CrudCacheRepositoryBase>(); + services.AddTransient(); - // admin crud services: - services.AddTransient, CrudCacheRepositoryBase>(s => - new CrudCacheRepositoryBase( - s.GetRequiredService(), - s.GetRequiredService(), - dbSet => dbSet.Include(t => t.Well))); // может быть включен в сервис TelemetryService - services.AddTransient, CrudCacheRepositoryBase>(s => - new CrudCacheRepositoryBase( - s.GetRequiredService(), - s.GetRequiredService(), - dbSet => dbSet.Include(d => d.Clusters))); - services.AddTransient, CrudCacheRepositoryBase>(s => - new CrudCacheRepositoryBase( - s.GetRequiredService(), - s.GetRequiredService(), - dbSet => dbSet.Include(c => c.CompanyType))); + services.AddTransient(); + services.AddTransient(); + services.AddTransient, CrudCacheRepositoryBase>(); - services.AddTransient, CrudCacheRepositoryBase>(); - services.AddTransient, CrudCacheRepositoryBase>(s => - new CrudCacheRepositoryBase( - s.GetRequiredService(), - s.GetRequiredService(), - dbSet => dbSet - .Include(c => c.Wells) - .Include(c => c.Deposit))); // может быть включен в сервис ClusterService + // admin crud services: + services.AddTransient, CrudCacheRepositoryBase>(s => + new CrudCacheRepositoryBase( + s.GetRequiredService(), + s.GetRequiredService(), + dbSet => dbSet.Include(t => t.Well))); // может быть включен в сервис TelemetryService + services.AddTransient, CrudCacheRepositoryBase>(s => + new CrudCacheRepositoryBase( + s.GetRequiredService(), + s.GetRequiredService(), + dbSet => dbSet.Include(d => d.Clusters))); + services.AddTransient, CrudCacheRepositoryBase>(s => + new CrudCacheRepositoryBase( + s.GetRequiredService(), + s.GetRequiredService(), + dbSet => dbSet.Include(c => c.CompanyType))); - services.AddTransient, CrudCacheRepositoryBase>(); + services.AddTransient, CrudCacheRepositoryBase>(); + services.AddTransient, CrudCacheRepositoryBase>(s => + new CrudCacheRepositoryBase( + s.GetRequiredService(), + s.GetRequiredService(), + dbSet => dbSet + .Include(c => c.Wells) + .Include(c => c.Deposit))); // может быть включен в сервис ClusterService - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient, CrudCacheRepositoryBase>(); + services.AddTransient, CrudCacheRepositoryBase>(); - // Subsystem service - services.AddTransient, CrudCacheRepositoryBase>(); - services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient, CrudCacheRepositoryBase>(); - services.AddTransient, CrudCacheRepositoryBase>(); + // Subsystem service + services.AddTransient, CrudCacheRepositoryBase>(); + services.AddTransient(); - // TelemetryData services - services.AddTransient(); - services.AddTransient, TelemetryDataSpinService>(); + services.AddTransient, CrudCacheRepositoryBase>(); - // Wits - services.AddTransient, WitsRecordRepository>(); - services.AddTransient, WitsRecordRepository>(); - services.AddTransient, WitsRecordRepository>(); - services.AddTransient, WitsRecordRepository>(); - services.AddTransient, WitsRecordRepository>(); - services.AddTransient, WitsRecordRepository>(); + // TelemetryData services + services.AddTransient(); + services.AddTransient, TelemetryDataSpinService>(); - services.AddTransient(); - services.AddTransient(); - - services.AddTransient(); - services.AddTransient(); - services.AddTransient, CrudRepositoryBase>(); + // Wits + services.AddTransient, WitsRecordRepository>(); + services.AddTransient, WitsRecordRepository>(); + services.AddTransient, WitsRecordRepository>(); + services.AddTransient, WitsRecordRepository>(); + services.AddTransient, WitsRecordRepository>(); + services.AddTransient, WitsRecordRepository>(); - services.AddTransient(); + services.AddTransient(); + services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient, CrudRepositoryBase>(); - services.AddTransient, WellOperationDefaultExcelParser>(); - services.AddTransient, WellOperationGazpromKhantosExcelParser>(); + services.AddTransient(); - return services; - } + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); - public static IServiceCollection AddTransientLazy(this IServiceCollection services) - where TService : class - where TImplementation : class, TService - => services.AddTransient() - .AddTransient(provider => new Lazy(provider.GetRequiredService)); + services.AddTransient, WellOperationDefaultExcelParser>(); + services.AddTransient, WellOperationGazpromKhantosExcelParser>(); - public static IServiceCollection AddTransientLazy(this IServiceCollection services, Func implementationFactory) - where TService : class - where TImplementation : class, TService - => services.AddTransient(implementationFactory) - .AddTransient(provider => new Lazy(() => implementationFactory(provider))); + return services; + } + + public static IServiceCollection AddTransientLazy(this IServiceCollection services) + where TService : class + where TImplementation : class, TService + => services.AddTransient() + .AddTransient(provider => new Lazy(provider.GetRequiredService)); + + public static IServiceCollection AddTransientLazy(this IServiceCollection services, Func implementationFactory) + where TService : class + where TImplementation : class, TService + => services.AddTransient(implementationFactory) + .AddTransient(provider => new Lazy(() => implementationFactory(provider))); } diff --git a/AsbCloudInfrastructure/Repository/CrudWellRelatedRepositoryBase.cs b/AsbCloudInfrastructure/Repository/CrudWellRelatedRepositoryBase.cs index e75a8476..6af596bc 100644 --- a/AsbCloudInfrastructure/Repository/CrudWellRelatedRepositoryBase.cs +++ b/AsbCloudInfrastructure/Repository/CrudWellRelatedRepositoryBase.cs @@ -29,15 +29,6 @@ namespace AsbCloudInfrastructure.Repository return dtos; } - public Task RemoveByWellAsync(int idWell, CancellationToken cancellationToken) - { - var query = GetQuery().Where(x => x.IdWell == idWell); - - dbSet.RemoveRange(query); - - return dbContext.SaveChangesAsync(cancellationToken); - } - public async Task> GetByIdWellAsync(IEnumerable idsWells, CancellationToken token) { if (!idsWells.Any()) diff --git a/AsbCloudInfrastructure/Repository/ProcessMapPlanRepository.cs b/AsbCloudInfrastructure/Repository/ProcessMapPlanRepository.cs new file mode 100644 index 00000000..e447bc2d --- /dev/null +++ b/AsbCloudInfrastructure/Repository/ProcessMapPlanRepository.cs @@ -0,0 +1,72 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using AsbCloudApp.Data.ProcessMaps; +using AsbCloudApp.Repositories; +using AsbCloudApp.Requests; +using AsbCloudApp.Services; +using AsbCloudDb.Model; +using AsbCloudDb.Model.ProcessMaps; +using Microsoft.EntityFrameworkCore; + +namespace AsbCloudInfrastructure.Repository; + +public class ProcessMapPlanRepository : CrudWellRelatedRepositoryBase, + IProcessMapPlanRepository + where TDto : ProcessMapPlanBaseDto + where TEntity : ProcessMapBase +{ + private readonly IWellService wellService; + + public ProcessMapPlanRepository(IAsbCloudDbContext context, IWellService wellService) + : base(context, dbSet => + dbSet + .Include(p => p.WellSectionType) + .Include(p => p.Well)) + { + this.wellService = wellService; + } + + public async Task> GetAsync(IEnumerable requests, CancellationToken cancellationToken) + { + var entities = await BuildQuery(requests) + .ToArrayAsync(cancellationToken); + + return entities.Select(Convert); + } + + public Task RemoveByWellAsync(int idWell, CancellationToken cancellationToken) + { + var query = GetQuery().Where(x => x.IdWell == idWell); + + dbSet.RemoveRange(query); + + return dbContext.SaveChangesAsync(cancellationToken); + } + + private IQueryable BuildQuery(IEnumerable requests) + { + var query = GetQuery(); + + foreach (var request in requests) + { + query = query.Where(p => p.IdWell == request.IdWell); + + if (request.IdWellSectionType is not null) + query = query.Where(p => p.IdWellSectionType == request.IdWellSectionType); + + if (request.UpdateFrom is not null) + { + var timezone = wellService.GetTimezone(request.IdWell); + var updateFromUtc = request.UpdateFrom?.ToUtcDateTimeOffset(timezone.Hours); + + query = query.Where(p => p.LastUpdate >= updateFromUtc); + } + } + + return query.OrderBy(e => e.DepthStart) + .ThenBy(e => e.Id) + .AsNoTracking(); + } +} \ No newline at end of file diff --git a/AsbCloudInfrastructure/Repository/WellCompositeRepository.cs b/AsbCloudInfrastructure/Repository/WellCompositeRepository.cs index d0a15999..0f30f1a4 100644 --- a/AsbCloudInfrastructure/Repository/WellCompositeRepository.cs +++ b/AsbCloudInfrastructure/Repository/WellCompositeRepository.cs @@ -17,12 +17,12 @@ namespace AsbCloudInfrastructure.Repository public class WellCompositeRepository : IWellCompositeRepository { private readonly IAsbCloudDbContext db; - private readonly IWellDrillingProcessMapRepository wellDrillingProcessMapRepository; + private readonly IProcessMapPlanRepository processMapPlanWellDrillingRepository; - public WellCompositeRepository(IAsbCloudDbContext db, IWellDrillingProcessMapRepository wellDrillingProcessMapRepository) + public WellCompositeRepository(IAsbCloudDbContext db, IProcessMapPlanRepository processMapPlanWellDrillingRepository) { this.db = db; - this.wellDrillingProcessMapRepository = wellDrillingProcessMapRepository; + this.processMapPlanWellDrillingRepository = processMapPlanWellDrillingRepository; } /// @@ -50,16 +50,16 @@ namespace AsbCloudInfrastructure.Repository } /// - public async Task> GetCompositeProcessMap(int idWell, CancellationToken token) + public async Task> GetCompositeProcessMap(int idWell, CancellationToken token) { var dtos = await GetAsync(idWell, token); - var requests = dtos.Select(x => new WellDrillingProcessMapRequest { + var requests = dtos.Select(x => new ProcessMapPlanRequest { IdWell = x.IdWellSrc, IdWellSectionType = x.IdWellSectionType }); - var result = await wellDrillingProcessMapRepository.GetAsync(requests, token); + var result = await processMapPlanWellDrillingRepository.GetAsync(requests, token); return result; } diff --git a/AsbCloudInfrastructure/Repository/WellDrillingProcessMapRepository.cs b/AsbCloudInfrastructure/Repository/WellDrillingProcessMapRepository.cs deleted file mode 100644 index e37a1a2b..00000000 --- a/AsbCloudInfrastructure/Repository/WellDrillingProcessMapRepository.cs +++ /dev/null @@ -1,129 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using AsbCloudApp.Data; -using AsbCloudApp.Data.ProcessMaps; -using AsbCloudApp.Repositories; -using AsbCloudApp.Requests; -using AsbCloudApp.Services; -using AsbCloudDb.Model; -using AsbCloudDb.Model.ProcessMaps; -using Mapster; -using Microsoft.EntityFrameworkCore; - -namespace AsbCloudInfrastructure.Repository; - -public class WellDrillingProcessMapRepository : CrudWellRelatedRepositoryBase, - IWellDrillingProcessMapRepository -{ - private readonly IWellService wellService; - - public WellDrillingProcessMapRepository(IAsbCloudDbContext context, IWellService wellService) - : base(context, dbSet => - dbSet - .Include(p => p.WellSectionType) - .Include(p => p.Well)) - { - this.wellService = wellService; - } - - public async Task> GetAsync(WellDrillingProcessMapRequest request, - CancellationToken cancellationToken) - { - var requests = new[] { request }; - - var entities = await BuildQuery(requests) - .ToArrayAsync(cancellationToken); - - return entities.Select(Convert); - } - - public async Task> GetAsync( - IEnumerable requests, - CancellationToken cancellationToken) - { - var entities = await BuildQuery(requests) - .ToArrayAsync(cancellationToken); - - return entities.Select(Convert); - } - - private IQueryable BuildQuery(IEnumerable requests) - { - var query = GetQuery(); - - foreach (var request in requests) - { - query = query.Where(p => p.IdWell == request.IdWell); - - if (request.IdWellSectionType is not null) - query = query.Where(p => p.IdWellSectionType == request.IdWellSectionType); - - if (request.UpdateFrom is not null) - { - var timezone = wellService.GetTimezone(request.IdWell); - var updateFromUtc = request.UpdateFrom?.ToUtcDateTimeOffset(timezone.Hours); - - query = query.Where(p => p.LastUpdate >= updateFromUtc); - } - } - - return query.OrderBy(e => e.DepthStart) - .ThenBy(e => e.Id) - .AsNoTracking(); - } - - protected override WellDrillingProcessMapDto Convert(WellDrillingProcessMap entity) - { - var dto = entity.Adapt(); - dto.LastUpdate = entity.LastUpdate.ToRemoteDateTime(entity.Well.Timezone.Hours); - dto.AxialLoad = new PlanLimitDto - { - LimitMax = entity.AxialLoadLimitMax, - Plan = entity.AxialLoadPlan - }; - dto.Flow = new PlanLimitDto - { - LimitMax = entity.FlowLimitMax, - Plan = entity.FlowPlan - }; - dto.Pressure = new PlanLimitDto - { - LimitMax = entity.PressureLimitMax, - Plan = entity.PressurePlan - }; - dto.TopDriveSpeed = new PlanLimitDto - { - LimitMax = entity.TopDriveSpeedLimitMax, - Plan = entity.TopDriveSpeedPlan - }; - dto.TopDriveTorque = new PlanLimitDto - { - LimitMax = entity.TopDriveTorqueLimitMax, - Plan = entity.TopDriveTorquePlan - }; - return dto; - } - - protected override WellDrillingProcessMap Convert(WellDrillingProcessMapDto dto) - { - var entity = dto.Adapt(); - entity.AxialLoadPlan = dto.AxialLoad.Plan; - entity.AxialLoadLimitMax = dto.AxialLoad.LimitMax; - - entity.FlowPlan = dto.Flow.Plan; - entity.FlowLimitMax = dto.Flow.LimitMax; - - entity.PressurePlan = dto.Pressure.Plan; - entity.PressureLimitMax = dto.Pressure.LimitMax; - - entity.TopDriveSpeedPlan = dto.TopDriveSpeed.Plan; - entity.TopDriveSpeedLimitMax = dto.TopDriveSpeed.LimitMax; - - entity.TopDriveTorquePlan = dto.TopDriveTorque.Plan; - entity.TopDriveTorqueLimitMax = dto.TopDriveTorque.LimitMax; - - return entity; - } -} \ No newline at end of file diff --git a/AsbCloudInfrastructure/Repository/WellReamProcessMapRepository.cs b/AsbCloudInfrastructure/Repository/WellReamProcessMapRepository.cs deleted file mode 100644 index 7e982173..00000000 --- a/AsbCloudInfrastructure/Repository/WellReamProcessMapRepository.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using AsbCloudApp.Data.ProcessMaps; -using AsbCloudApp.Repositories; -using AsbCloudApp.Requests; -using AsbCloudApp.Services; -using AsbCloudDb.Model; -using AsbCloudDb.Model.ProcessMaps; -using Microsoft.EntityFrameworkCore; - -namespace AsbCloudInfrastructure.Repository; - -internal class WellReamProcessMapRepository : CrudWellRelatedRepositoryBase, - IWellReamProcessMapRepository -{ - private readonly IWellService wellService; - - public WellReamProcessMapRepository(IAsbCloudDbContext context, IWellService wellService) - : base(context, dbSet => - dbSet.Include(p => p.Well)) - { - this.wellService = wellService; - } - - public async Task> GetAsync(WellReamProcessMapRequest request, - CancellationToken cancellationToken) - { - var query = GetQuery() - .Where(p => p.IdWell == request.IdWell); - - if (request.UpdateFrom is not null) - { - var timezone = wellService.GetTimezone(request.IdWell); - var updateFromUtc = request.UpdateFrom?.ToUtcDateTimeOffset(timezone.Hours); - - query = query.Where(p => p.LastUpdate >= updateFromUtc); - } - - var entities = await query.OrderBy(e => e.DepthStart) - .ThenBy(e => e.Id) - .AsNoTracking() - .ToArrayAsync(cancellationToken); - - return entities.Select(Convert); - } -} \ No newline at end of file