forked from ddrilling/AsbCloudServer
- Экспорт отчета Drill test
- Добавлен новый extension метод AssemblyExtensions.GetTemplateCopyStreamAsync - IAutoGeneratedDailyReportMakerService переименован в IReportMakerService и стал более универсальным
This commit is contained in:
parent
f8d2131c27
commit
b7ce104e4e
@ -5,21 +5,10 @@ namespace AsbCloudApp.Data.AutogeneratedDailyReport;
|
||||
/// <summary>
|
||||
/// Базовая информация о суточном отчёте
|
||||
/// </summary>
|
||||
public class AutoGeneratedDailyReportInfoDto
|
||||
public class AutoGeneratedDailyReportInfoDto : ReportInfoDto
|
||||
{
|
||||
/// <summary>
|
||||
/// Дата формирования отчёта
|
||||
/// </summary>
|
||||
public DateOnly ReportDate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Название файла
|
||||
/// </summary>
|
||||
public string FileName { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Размер файла
|
||||
/// </summary>
|
||||
public int FileSize { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Дата формирования отчёта
|
||||
/// </summary>
|
||||
public DateOnly ReportDate { get; set; }
|
||||
}
|
26
AsbCloudApp/Data/DrillTestReport/DrillTestReportDataDto.cs
Normal file
26
AsbCloudApp/Data/DrillTestReport/DrillTestReportDataDto.cs
Normal file
@ -0,0 +1,26 @@
|
||||
using AsbCloudApp.Data.SAUB;
|
||||
using System;
|
||||
|
||||
namespace AsbCloudApp.Data.DrillTestReport
|
||||
{
|
||||
/// <summary>
|
||||
/// Информация о drill test, выгружаемая в отчете
|
||||
/// </summary>
|
||||
public class DrillTestReportDataDto
|
||||
{
|
||||
/// <summary>
|
||||
/// Данные для отчета
|
||||
/// </summary>
|
||||
public DrillTestDto Data { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Заголовок отчета
|
||||
/// </summary>
|
||||
public string Caption { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Дата отчета
|
||||
/// </summary>
|
||||
public DateTime Date { get; set; } = DateTime.Now;
|
||||
}
|
||||
}
|
25
AsbCloudApp/Data/DrillTestReport/DrillTestReportInfoDto.cs
Normal file
25
AsbCloudApp/Data/DrillTestReport/DrillTestReportInfoDto.cs
Normal file
@ -0,0 +1,25 @@
|
||||
using System;
|
||||
|
||||
namespace AsbCloudApp.Data.DrillTestReport
|
||||
{
|
||||
/// <summary>
|
||||
/// Базовая информация о drill_test отчёте
|
||||
/// </summary>
|
||||
public class DrillTestReportInfoDto : ReportInfoDto
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор отчета
|
||||
/// </summary>
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Проходка
|
||||
/// </summary>
|
||||
public float DrillDepth { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Дата и время
|
||||
/// </summary>
|
||||
public DateTime DateTime { get; set; }
|
||||
}
|
||||
}
|
18
AsbCloudApp/Data/ReportInfoDto.cs
Normal file
18
AsbCloudApp/Data/ReportInfoDto.cs
Normal file
@ -0,0 +1,18 @@
|
||||
namespace AsbCloudApp.Data
|
||||
{
|
||||
/// <summary>
|
||||
/// Справочная информация об отчете
|
||||
/// </summary>
|
||||
public class ReportInfoDto
|
||||
{
|
||||
/// <summary>
|
||||
/// Название файла
|
||||
/// </summary>
|
||||
public string FileName { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Размер файла
|
||||
/// </summary>
|
||||
public int FileSize { get; set; } = 0;
|
||||
}
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
using AsbCloudApp.Data.SAUB;
|
||||
using AsbCloudApp.Requests;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
@ -9,6 +10,24 @@ namespace AsbCloudApp.Repositories
|
||||
/// </summary>
|
||||
public interface IDrillTestRepository
|
||||
{
|
||||
/// <summary>
|
||||
/// Получить данные drill_test в соответствии с параметрами запроса
|
||||
/// </summary>
|
||||
/// <param name="idTelemetry">ключ телеметрии</param>
|
||||
/// <param name="request">запрос</param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
Task<DrillTestDto[]> GetAllAsync(int idTelemetry, FileReportRequest request, CancellationToken cancellationToken);
|
||||
|
||||
/// <summary>
|
||||
/// Получить запись drill_test
|
||||
/// </summary>
|
||||
/// <param name="idTelemetry">ключ телеметрии</param>
|
||||
/// <param name="id">ключ записи drill_test</param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
Task<DrillTestDto> GetAsync(int idTelemetry, int id, CancellationToken cancellationToken);
|
||||
|
||||
/// <summary>
|
||||
/// Сохранить данные drill_test
|
||||
/// </summary>
|
||||
|
@ -3,17 +3,17 @@ using System;
|
||||
namespace AsbCloudApp.Requests;
|
||||
|
||||
/// <summary>
|
||||
/// Параметры запроса для получения авто-генерируемых суточных отчётов
|
||||
/// Параметры запроса для получения отчетов (файлов)
|
||||
/// </summary>
|
||||
public class AutoGeneratedDailyReportRequest : RequestBase
|
||||
public class FileReportRequest : RequestBase
|
||||
{
|
||||
/// <summary>
|
||||
/// Дата начала периода
|
||||
/// </summary>
|
||||
public DateOnly? StartDate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Дата конца периода
|
||||
/// </summary>
|
||||
public DateOnly? FinishDate { get; set; }
|
||||
/// <summary>
|
||||
/// Дата начала периода
|
||||
/// </summary>
|
||||
public DateOnly? GeDate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Дата конца периода
|
||||
/// </summary>
|
||||
public DateOnly? LeDate { get; set; }
|
||||
}
|
@ -1,20 +1,19 @@
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using AsbCloudApp.Data.AutogeneratedDailyReport;
|
||||
|
||||
namespace AsbCloudApp.Services.AutoGeneratedDailyReports;
|
||||
|
||||
/// <summary>
|
||||
/// Сервис для генерации файлов авто-генерируемых суточный отчётов
|
||||
/// Сервис для генерации файлов отчётов
|
||||
/// </summary>
|
||||
public interface IAutoGeneratedDailyReportMakerService
|
||||
public interface IReportMakerService<T>
|
||||
{
|
||||
/// <summary>
|
||||
/// Генерация файла
|
||||
/// </summary>
|
||||
/// <param name="report"></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
Task<Stream> MakeReportAsync(AutoGeneratedDailyReportDto report, CancellationToken cancellationToken);
|
||||
/// <summary>
|
||||
/// Генерация файла
|
||||
/// </summary>
|
||||
/// <param name="report">модель с данными для построения отчета</param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
Task<Stream> MakeReportAsync(T report, CancellationToken cancellationToken);
|
||||
}
|
@ -21,7 +21,7 @@ public interface IAutoGeneratedDailyReportService
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
Task<PaginationContainer<AutoGeneratedDailyReportInfoDto>> GetListAsync(int idWell,
|
||||
AutoGeneratedDailyReportRequest request,
|
||||
FileReportRequest request,
|
||||
CancellationToken cancellationToken);
|
||||
|
||||
/// <summary>
|
||||
|
35
AsbCloudApp/Services/IDrillTestReportService.cs
Normal file
35
AsbCloudApp/Services/IDrillTestReportService.cs
Normal file
@ -0,0 +1,35 @@
|
||||
using AsbCloudApp.Data;
|
||||
using AsbCloudApp.Data.DrillTestReport;
|
||||
using AsbCloudApp.Requests;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AsbCloudApp.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// сервис по работе с отчетами drill test
|
||||
/// </summary>
|
||||
public interface IDrillTestReportService
|
||||
{
|
||||
/// <summary>
|
||||
/// Список файлов drill test
|
||||
/// </summary>
|
||||
/// <param name="idWell">ключ скважины</param>
|
||||
/// <param name="request">параметры запроса</param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
Task<PaginationContainer<DrillTestReportInfoDto>> GetListAsync(int idWell,
|
||||
FileReportRequest request,
|
||||
CancellationToken cancellationToken);
|
||||
|
||||
/// <summary>
|
||||
/// Генерация файла с отчётом
|
||||
/// </summary>
|
||||
/// <param name="idWell">ключ скважины</param>
|
||||
/// <param name="id">ключ drill test записи</param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
Task<(string fileName, Stream stream)> GenerateAsync(int idWell, int id, CancellationToken cancellationToken);
|
||||
}
|
||||
}
|
@ -13,6 +13,7 @@
|
||||
<None Remove="CommonLibs\logo_720x404.png" />
|
||||
<None Remove="CommonLibs\Readme.md" />
|
||||
<None Remove="Services\DailyReport\DailyReportTemplate.xlsx" />
|
||||
<None Remove="Services\DrillTestReport\DrillTestReportTemplate.xlsx" />
|
||||
<None Remove="Services\Trajectory\PlannedTrajectoryTemplate.xlsx" />
|
||||
<None Remove="Services\WellOperationService\ScheduleReportTemplate.xlsx" />
|
||||
<None Remove="Services\WellOperationService\WellOperationImportTemplate.xlsx" />
|
||||
@ -30,6 +31,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="Services\DailyReport\DailyReportTemplate.xlsx" />
|
||||
<EmbeddedResource Include="Services\DrillTestReport\DrillTestReportTemplate.xlsx" />
|
||||
<EmbeddedResource Include="Services\Trajectory\PlannedTrajectoryTemplate.xlsx" />
|
||||
<EmbeddedResource Include="Services\WellOperationService\ScheduleReportTemplate.xlsx" />
|
||||
<EmbeddedResource Include="Services\AutoGeneratedDailyReports\AutogeneratedDailyReportTemplate.xlsx" />
|
||||
|
30
AsbCloudInfrastructure/AssemblyExtensions.cs
Normal file
30
AsbCloudInfrastructure/AssemblyExtensions.cs
Normal file
@ -0,0 +1,30 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AsbCloudInfrastructure
|
||||
{
|
||||
public static class AssemblyExtensions
|
||||
{
|
||||
public static async Task<Stream> GetTemplateCopyStreamAsync(this Assembly assembly, string templateName, CancellationToken cancellationToken)
|
||||
{
|
||||
var resourceName = assembly
|
||||
.GetManifestResourceNames()
|
||||
.FirstOrDefault(n => n.EndsWith(templateName))!;
|
||||
|
||||
using var stream = Assembly.GetExecutingAssembly()
|
||||
.GetManifestResourceStream(resourceName)!;
|
||||
|
||||
var memoryStream = new MemoryStream();
|
||||
await stream.CopyToAsync(memoryStream, cancellationToken);
|
||||
memoryStream.Position = 0;
|
||||
|
||||
return memoryStream;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using AsbCloudApp.Data;
|
||||
using AsbCloudApp.Data;
|
||||
using AsbCloudApp.Data.AutogeneratedDailyReport;
|
||||
using AsbCloudApp.Data.DrillTestReport;
|
||||
using AsbCloudApp.Data.Manuals;
|
||||
using AsbCloudApp.Data.ProcessMaps;
|
||||
using AsbCloudApp.Data.SAUB;
|
||||
@ -24,6 +25,7 @@ using AsbCloudInfrastructure.Services.AutoGeneratedDailyReports;
|
||||
using AsbCloudInfrastructure.Services.DailyReport;
|
||||
using AsbCloudInfrastructure.Services.DetectOperations;
|
||||
using AsbCloudInfrastructure.Services.DrillingProgram;
|
||||
using AsbCloudInfrastructure.Services.DrillTestReport;
|
||||
using AsbCloudInfrastructure.Services.ProcessMaps.Report;
|
||||
using AsbCloudInfrastructure.Services.ProcessMaps.WellDrilling;
|
||||
using AsbCloudInfrastructure.Services.SAUB;
|
||||
@ -37,273 +39,275 @@ using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Caching.Memory;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using System;
|
||||
|
||||
namespace AsbCloudInfrastructure
|
||||
{
|
||||
|
||||
public static class DependencyInjection
|
||||
{
|
||||
public static IAsbCloudDbContext MakeContext(string connectionString)
|
||||
{
|
||||
var options = new DbContextOptionsBuilder<AsbCloudDbContext>()
|
||||
.UseNpgsql(connectionString)
|
||||
.Options;
|
||||
var context = new AsbCloudDbContext(options);
|
||||
return context;
|
||||
}
|
||||
public static IAsbCloudDbContext MakeContext(string connectionString)
|
||||
{
|
||||
var options = new DbContextOptionsBuilder<AsbCloudDbContext>()
|
||||
.UseNpgsql(connectionString)
|
||||
.Options;
|
||||
var context = new AsbCloudDbContext(options);
|
||||
return context;
|
||||
}
|
||||
|
||||
public static void MapsterSetup()
|
||||
{
|
||||
TypeAdapterConfig.GlobalSettings.Default.Config
|
||||
.ForType<DateTimeOffset, DateTime>()
|
||||
.MapWith((source) => source.DateTime);
|
||||
public static void MapsterSetup()
|
||||
{
|
||||
TypeAdapterConfig.GlobalSettings.Default.Config
|
||||
.ForType<DateTimeOffset, DateTime>()
|
||||
.MapWith((source) => source.DateTime);
|
||||
|
||||
TypeAdapterConfig.GlobalSettings.Default.Config
|
||||
.ForType<DateTime, DateTimeOffset>()
|
||||
.MapWith((source) => source == default ? new DateTime(0, DateTimeKind.Utc) : source);
|
||||
TypeAdapterConfig.GlobalSettings.Default.Config
|
||||
.ForType<DateTime, DateTimeOffset>()
|
||||
.MapWith((source) => source == default ? new DateTime(0, DateTimeKind.Utc) : source);
|
||||
|
||||
TypeAdapterConfig.GlobalSettings.Default.Config
|
||||
.ForType<TimeDto, TimeOnly>()
|
||||
.MapWith((source) => source.MakeTimeOnly());
|
||||
TypeAdapterConfig.GlobalSettings.Default.Config
|
||||
.ForType<TimeDto, TimeOnly>()
|
||||
.MapWith((source) => source.MakeTimeOnly());
|
||||
|
||||
TypeAdapterConfig.GlobalSettings.Default.Config
|
||||
.ForType<TimeOnly, TimeDto>()
|
||||
.MapWith((source) => new(source));
|
||||
TypeAdapterConfig.GlobalSettings.Default.Config
|
||||
.ForType<TimeOnly, TimeDto>()
|
||||
.MapWith((source) => new(source));
|
||||
|
||||
TypeAdapterConfig.GlobalSettings.Default.Config
|
||||
.ForType<TimeOnly, TimeDto>()
|
||||
.MapWith((source) => new(source));
|
||||
TypeAdapterConfig.GlobalSettings.Default.Config
|
||||
.ForType<TimeOnly, TimeDto>()
|
||||
.MapWith((source) => new(source));
|
||||
|
||||
#pragma warning disable CS8603 // Possible null reference return.
|
||||
TypeAdapterConfig.GlobalSettings.Default.Config
|
||||
.ForType<WellDto, Well>()
|
||||
.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<WellDto, Well>()
|
||||
.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<ClusterDto, Cluster>()
|
||||
.Ignore(dst => dst.Deposit,
|
||||
dst => dst.Wells);
|
||||
TypeAdapterConfig.GlobalSettings.Default.Config
|
||||
.ForType<ClusterDto, Cluster>()
|
||||
.Ignore(dst => dst.Deposit,
|
||||
dst => dst.Wells);
|
||||
|
||||
TypeAdapterConfig.GlobalSettings.Default.Config
|
||||
.ForType<FileCategoryDto, FileCategory>();
|
||||
TypeAdapterConfig.GlobalSettings.Default.Config
|
||||
.ForType<FileCategoryDto, FileCategory>();
|
||||
|
||||
TypeAdapterConfig.GlobalSettings.Default.Config
|
||||
.ForType<WellFinalDocumentDto, WellFinalDocument>();
|
||||
TypeAdapterConfig.GlobalSettings.Default.Config
|
||||
.ForType<WellFinalDocumentDto, WellFinalDocument>();
|
||||
|
||||
TypeAdapterConfig.GlobalSettings.Default.Config
|
||||
.ForType<NotificationDto, Notification>()
|
||||
.Ignore(dst => dst.NotificationCategory,
|
||||
dst => dst.User);
|
||||
TypeAdapterConfig.GlobalSettings.Default.Config
|
||||
.ForType<NotificationDto, Notification>()
|
||||
.Ignore(dst => dst.NotificationCategory,
|
||||
dst => dst.User);
|
||||
|
||||
TypeAdapterConfig.GlobalSettings.Default.Config
|
||||
.ForType<ProcessMapWellDrilling, ProcessMapPlanWellDrillingDto>()
|
||||
.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<ProcessMapWellDrilling, ProcessMapPlanWellDrillingDto>()
|
||||
.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<ProcessMapPlanWellDrillingDto, ProcessMapWellDrilling>()
|
||||
.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);
|
||||
}
|
||||
TypeAdapterConfig.GlobalSettings.Default.Config
|
||||
.ForType<ProcessMapPlanWellDrillingDto, ProcessMapWellDrilling>()
|
||||
.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";
|
||||
public static IServiceCollection AddInfrastructure(this IServiceCollection services, IConfiguration configuration)
|
||||
{
|
||||
MapsterSetup();
|
||||
string connectionStringName = "DefaultConnection";
|
||||
#if DEBUG
|
||||
connectionStringName = "DebugConnection";
|
||||
connectionStringName = "DebugConnection";
|
||||
#endif
|
||||
services.AddDbContext<AsbCloudDbContext>(options =>
|
||||
options.UseNpgsql(configuration.GetConnectionString(connectionStringName)));
|
||||
services.AddDbContext<AsbCloudDbContext>(options =>
|
||||
options.UseNpgsql(configuration.GetConnectionString(connectionStringName)));
|
||||
|
||||
|
||||
services.AddMemoryCache();
|
||||
services.AddScoped<IAsbCloudDbContext>(provider => provider.GetRequiredService<AsbCloudDbContext>());
|
||||
services.AddMemoryCache();
|
||||
services.AddScoped<IAsbCloudDbContext>(provider => provider.GetRequiredService<AsbCloudDbContext>());
|
||||
|
||||
services.AddSingleton(new WitsInfoService());
|
||||
services.AddSingleton(provider => TelemetryDataCache<TelemetryDataSaubDto>.GetInstance<TelemetryDataSaub>(provider));
|
||||
services.AddSingleton(provider => TelemetryDataCache<TelemetryDataSpinDto>.GetInstance<TelemetryDataSpin>(provider));
|
||||
services.AddSingleton<IRequerstTrackerService, RequestTrackerService>();
|
||||
services.AddSingleton<BackgroundWorker>();
|
||||
services.AddSingleton<NotificationBackgroundWorker>();
|
||||
services.AddSingleton<IReduceSamplingService>(provider => ReduceSamplingService.GetInstance(configuration));
|
||||
services.AddSingleton(new WitsInfoService());
|
||||
services.AddSingleton(provider => TelemetryDataCache<TelemetryDataSaubDto>.GetInstance<TelemetryDataSaub>(provider));
|
||||
services.AddSingleton(provider => TelemetryDataCache<TelemetryDataSpinDto>.GetInstance<TelemetryDataSpin>(provider));
|
||||
services.AddSingleton<IRequerstTrackerService, RequestTrackerService>();
|
||||
services.AddSingleton<BackgroundWorker>();
|
||||
services.AddSingleton<NotificationBackgroundWorker>();
|
||||
services.AddSingleton<IReduceSamplingService>(provider => ReduceSamplingService.GetInstance(configuration));
|
||||
|
||||
services.AddTransient<IAuthService, AuthService>();
|
||||
services.AddTransient<IProcessMapPlanRepository<ProcessMapPlanWellDrillingDto>, ProcessMapPlanRepository<ProcessMapPlanWellDrillingDto, ProcessMapWellDrilling>>();
|
||||
services.AddTransient<IProcessMapPlanRepository<ProcessMapPlanWellReamDto>, ProcessMapPlanRepository<ProcessMapPlanWellReamDto, ProcessMapWellReam>>();
|
||||
services.AddTransient<IDepositRepository, DepositRepository>();
|
||||
services.AddTransient<IDrillingProgramService, DrillingProgramService>();
|
||||
services.AddTransient<IEventService, EventService>();
|
||||
services.AddTransient<FileService>();
|
||||
services.AddTransient<IMeasureService, MeasureService>();
|
||||
services.AddTransient<IMessageService, MessageService>();
|
||||
services.AddTransient<IOperationsStatService, OperationsStatService>();
|
||||
services.AddTransient<IReportService, ReportService>();
|
||||
services.AddTransient<ISetpointsService, SetpointsService>();
|
||||
services.AddTransient<ITelemetryService, TelemetryService>();
|
||||
services.AddTransient<ITelemetryUserService, TelemetryUserService>();
|
||||
services.AddTransient<ITimezoneService, TimezoneService>();
|
||||
services.AddTransient<IWellService, WellService>();
|
||||
services.AddTransient<IWellOperationImportService, WellOperationImportService>();
|
||||
services.AddTransient<IProcessMapReportWellDrillingExportService, ProcessMapReportWellDrillingExportService>();
|
||||
services.AddTransient<IPlannedTrajectoryImportService, PlannedTrajectoryImportService>();
|
||||
services.AddTransient<IWellOperationRepository, WellOperationRepository>();
|
||||
services.AddTransient<IScheduleReportService, ScheduleReportService>();
|
||||
services.AddTransient<IDailyReportService, DailyReportService>();
|
||||
services.AddTransient<IDetectedOperationService, DetectedOperationService>();
|
||||
services.AddTransient<ISubsystemOperationTimeService, SubsystemOperationTimeService>();
|
||||
services.AddTransient<IScheduleRepository, ScheduleRepository>();
|
||||
services.AddTransient<IRepositoryWellRelated<OperationValueDto>, CrudWellRelatedRepositoryBase<OperationValueDto, OperationValue>>();
|
||||
services.AddTransient<IUserSettingsRepository, UserSettingsRepository>();
|
||||
services.AddTransient<IWellFinalDocumentsService, WellFinalDocumentsService>();
|
||||
services.AddTransient<IFileCategoryService, FileCategoryService>();
|
||||
services.AddTransient<ILimitingParameterService, LimitingParameterService>();
|
||||
services.AddTransient<IProcessMapReportWellDrillingService, ProcessMapReportWellDrillingService>();
|
||||
services.AddTransient<IProcessMapPlanImportService, ProcessMapPlanImportWellDrillingService>();
|
||||
services.AddTransient<WellInfoService>();
|
||||
services.AddTransient<IHelpPageService, HelpPageService>();
|
||||
services.AddTransient<IAuthService, AuthService>();
|
||||
services.AddTransient<IProcessMapPlanRepository<ProcessMapPlanWellDrillingDto>, ProcessMapPlanRepository<ProcessMapPlanWellDrillingDto, ProcessMapWellDrilling>>();
|
||||
services.AddTransient<IProcessMapPlanRepository<ProcessMapPlanWellReamDto>, ProcessMapPlanRepository<ProcessMapPlanWellReamDto, ProcessMapWellReam>>();
|
||||
services.AddTransient<IDepositRepository, DepositRepository>();
|
||||
services.AddTransient<IDrillingProgramService, DrillingProgramService>();
|
||||
services.AddTransient<IEventService, EventService>();
|
||||
services.AddTransient<FileService>();
|
||||
services.AddTransient<IMeasureService, MeasureService>();
|
||||
services.AddTransient<IMessageService, MessageService>();
|
||||
services.AddTransient<IOperationsStatService, OperationsStatService>();
|
||||
services.AddTransient<IReportService, ReportService>();
|
||||
services.AddTransient<ISetpointsService, SetpointsService>();
|
||||
services.AddTransient<ITelemetryService, TelemetryService>();
|
||||
services.AddTransient<ITelemetryUserService, TelemetryUserService>();
|
||||
services.AddTransient<ITimezoneService, TimezoneService>();
|
||||
services.AddTransient<IWellService, WellService>();
|
||||
services.AddTransient<IWellOperationImportService, WellOperationImportService>();
|
||||
services.AddTransient<IProcessMapReportWellDrillingExportService, ProcessMapReportWellDrillingExportService>();
|
||||
services.AddTransient<IPlannedTrajectoryImportService, PlannedTrajectoryImportService>();
|
||||
services.AddTransient<IWellOperationRepository, WellOperationRepository>();
|
||||
services.AddTransient<IDailyReportService, DailyReportService>();
|
||||
services.AddTransient<IDetectedOperationService, DetectedOperationService>();
|
||||
services.AddTransient<ISubsystemOperationTimeService, SubsystemOperationTimeService>();
|
||||
services.AddTransient<IScheduleRepository, ScheduleRepository>();
|
||||
services.AddTransient<IRepositoryWellRelated<OperationValueDto>, CrudWellRelatedRepositoryBase<OperationValueDto, OperationValue>>();
|
||||
services.AddTransient<IUserSettingsRepository, UserSettingsRepository>();
|
||||
services.AddTransient<IWellFinalDocumentsService, WellFinalDocumentsService>();
|
||||
services.AddTransient<IFileCategoryService, FileCategoryService>();
|
||||
services.AddTransient<ILimitingParameterService, LimitingParameterService>();
|
||||
services.AddTransient<IProcessMapReportWellDrillingService, ProcessMapReportWellDrillingService>();
|
||||
services.AddTransient<IProcessMapPlanImportService, ProcessMapPlanImportWellDrillingService>();
|
||||
services.AddTransient<WellInfoService>();
|
||||
services.AddTransient<IHelpPageService, HelpPageService>();
|
||||
|
||||
services.AddTransient<TrajectoryService>();
|
||||
services.AddTransient<TrajectoryService>();
|
||||
|
||||
services.AddTransient<IGtrRepository, GtrWitsRepository>();
|
||||
services.AddTransient<IGtrRepository, GtrWitsRepository>();
|
||||
|
||||
services.AddTransient<NotificationService>();
|
||||
services.AddTransient<INotificationRepository, NotificationRepository>();
|
||||
services.AddTransient<ICrudRepository<NotificationCategoryDto>, CrudCacheRepositoryBase<NotificationCategoryDto,
|
||||
services.AddTransient<ICrudRepository<NotificationCategoryDto>, CrudCacheRepositoryBase<NotificationCategoryDto,
|
||||
NotificationCategory>>();
|
||||
services.AddTransient<IDrillTestRepository, DrillTestRepository>();
|
||||
|
||||
// admin crud services:
|
||||
services.AddTransient<ICrudRepository<TelemetryDto>, CrudCacheRepositoryBase<TelemetryDto, Telemetry>>(s =>
|
||||
new CrudCacheRepositoryBase<TelemetryDto, Telemetry>(
|
||||
s.GetRequiredService<IAsbCloudDbContext>(),
|
||||
s.GetRequiredService<IMemoryCache>(),
|
||||
dbSet => dbSet.Include(t => t.Well))); // может быть включен в сервис TelemetryService
|
||||
services.AddTransient<ICrudRepository<DepositDto>, CrudCacheRepositoryBase<DepositDto, Deposit>>(s =>
|
||||
new CrudCacheRepositoryBase<DepositDto, Deposit>(
|
||||
s.GetRequiredService<IAsbCloudDbContext>(),
|
||||
s.GetRequiredService<IMemoryCache>(),
|
||||
dbSet => dbSet.Include(d => d.Clusters)));
|
||||
services.AddTransient<ICrudRepository<CompanyDto>, CrudCacheRepositoryBase<CompanyDto, Company>>(s =>
|
||||
new CrudCacheRepositoryBase<CompanyDto, Company>(
|
||||
s.GetRequiredService<IAsbCloudDbContext>(),
|
||||
s.GetRequiredService<IMemoryCache>(),
|
||||
dbSet => dbSet.Include(c => c.CompanyType)));
|
||||
// admin crud services:
|
||||
services.AddTransient<ICrudRepository<TelemetryDto>, CrudCacheRepositoryBase<TelemetryDto, Telemetry>>(s =>
|
||||
new CrudCacheRepositoryBase<TelemetryDto, Telemetry>(
|
||||
s.GetRequiredService<IAsbCloudDbContext>(),
|
||||
s.GetRequiredService<IMemoryCache>(),
|
||||
dbSet => dbSet.Include(t => t.Well))); // может быть включен в сервис TelemetryService
|
||||
services.AddTransient<ICrudRepository<DepositDto>, CrudCacheRepositoryBase<DepositDto, Deposit>>(s =>
|
||||
new CrudCacheRepositoryBase<DepositDto, Deposit>(
|
||||
s.GetRequiredService<IAsbCloudDbContext>(),
|
||||
s.GetRequiredService<IMemoryCache>(),
|
||||
dbSet => dbSet.Include(d => d.Clusters)));
|
||||
services.AddTransient<ICrudRepository<CompanyDto>, CrudCacheRepositoryBase<CompanyDto, Company>>(s =>
|
||||
new CrudCacheRepositoryBase<CompanyDto, Company>(
|
||||
s.GetRequiredService<IAsbCloudDbContext>(),
|
||||
s.GetRequiredService<IMemoryCache>(),
|
||||
dbSet => dbSet.Include(c => c.CompanyType)));
|
||||
|
||||
services.AddTransient<ICrudRepository<CompanyTypeDto>, CrudCacheRepositoryBase<CompanyTypeDto, CompanyType>>();
|
||||
services.AddTransient<ICrudRepository<ClusterDto>, CrudCacheRepositoryBase<ClusterDto, Cluster>>(s =>
|
||||
new CrudCacheRepositoryBase<ClusterDto, Cluster>(
|
||||
s.GetRequiredService<IAsbCloudDbContext>(),
|
||||
s.GetRequiredService<IMemoryCache>(),
|
||||
dbSet => dbSet
|
||||
.Include(c => c.Wells)
|
||||
.Include(c => c.Deposit))); // может быть включен в сервис ClusterService
|
||||
services.AddTransient<ICrudRepository<CompanyTypeDto>, CrudCacheRepositoryBase<CompanyTypeDto, CompanyType>>();
|
||||
services.AddTransient<ICrudRepository<ClusterDto>, CrudCacheRepositoryBase<ClusterDto, Cluster>>(s =>
|
||||
new CrudCacheRepositoryBase<ClusterDto, Cluster>(
|
||||
s.GetRequiredService<IAsbCloudDbContext>(),
|
||||
s.GetRequiredService<IMemoryCache>(),
|
||||
dbSet => dbSet
|
||||
.Include(c => c.Wells)
|
||||
.Include(c => c.Deposit))); // может быть включен в сервис ClusterService
|
||||
|
||||
services.AddTransient<ICrudRepository<DrillerDto>, CrudCacheRepositoryBase<DrillerDto, Driller>>();
|
||||
services.AddTransient<ICrudRepository<DrillerDto>, CrudCacheRepositoryBase<DrillerDto, Driller>>();
|
||||
|
||||
services.AddTransient<IHelpPageRepository, HelpPageRepository>();
|
||||
services.AddTransient<IFileRepository, FileRepository>();
|
||||
services.AddTransient<IFileStorageRepository, FileStorageRepository>();
|
||||
services.AddTransient<IWellCompositeRepository, WellCompositeRepository>();
|
||||
services.AddTransient<IUserRoleRepository, UserRoleRepository>();
|
||||
services.AddTransient<IUserRepository, UserRepository>();
|
||||
services.AddTransient<ILimitingParameterRepository, LimitingParameterRepository>();
|
||||
services.AddTransient<ITelemetryWirelineRunOutRepository, TelemetryWirelineRunOutRepository>();
|
||||
services.AddTransient<IWellFinalDocumentsRepository, WellFinalDocumentsRepository>();
|
||||
services.AddTransient<ITrajectoryPlanRepository, TrajectoryPlanRepository>();
|
||||
services.AddTransient<ITrajectoryFactRepository, TrajectoryFactRepository>();
|
||||
services.AddTransient<IFaqRepository, FaqRepository>();
|
||||
services.AddTransient<ISlipsStatService, SlipsStatService>();
|
||||
services.AddTransient<IWellContactService, WellContactService>();
|
||||
services.AddTransient<ICrudRepository<WellSectionTypeDto>, CrudCacheRepositoryBase<WellSectionTypeDto,
|
||||
WellSectionType>>();
|
||||
services.AddTransient<IHelpPageRepository, HelpPageRepository>();
|
||||
services.AddTransient<IFileRepository, FileRepository>();
|
||||
services.AddTransient<IFileStorageRepository, FileStorageRepository>();
|
||||
services.AddTransient<IWellCompositeRepository, WellCompositeRepository>();
|
||||
services.AddTransient<IUserRoleRepository, UserRoleRepository>();
|
||||
services.AddTransient<IUserRepository, UserRepository>();
|
||||
services.AddTransient<ILimitingParameterRepository, LimitingParameterRepository>();
|
||||
services.AddTransient<ITelemetryWirelineRunOutRepository, TelemetryWirelineRunOutRepository>();
|
||||
services.AddTransient<IWellFinalDocumentsRepository, WellFinalDocumentsRepository>();
|
||||
services.AddTransient<ITrajectoryPlanRepository, TrajectoryPlanRepository>();
|
||||
services.AddTransient<ITrajectoryFactRepository, TrajectoryFactRepository>();
|
||||
services.AddTransient<IFaqRepository, FaqRepository>();
|
||||
services.AddTransient<ISlipsStatService, SlipsStatService>();
|
||||
services.AddTransient<IWellContactService, WellContactService>();
|
||||
services.AddTransient<ICrudRepository<WellSectionTypeDto>, CrudCacheRepositoryBase<WellSectionTypeDto,
|
||||
WellSectionType>>();
|
||||
|
||||
// Subsystem service
|
||||
services.AddTransient<ICrudRepository<SubsystemDto>, CrudCacheRepositoryBase<SubsystemDto, Subsystem>>();
|
||||
services.AddTransient<ISubsystemService, SubsystemService>();
|
||||
// Subsystem service
|
||||
services.AddTransient<ICrudRepository<SubsystemDto>, CrudCacheRepositoryBase<SubsystemDto, Subsystem>>();
|
||||
services.AddTransient<ISubsystemService, SubsystemService>();
|
||||
|
||||
services.AddTransient<ICrudRepository<PermissionDto>, CrudCacheRepositoryBase<PermissionDto, Permission>>();
|
||||
services.AddTransient<ICrudRepository<PermissionDto>, CrudCacheRepositoryBase<PermissionDto, Permission>>();
|
||||
|
||||
// TelemetryData services
|
||||
services.AddTransient<ITelemetryDataSaubService, TelemetryDataSaubService>();
|
||||
services.AddTransient<ITelemetryDataService<TelemetryDataSpinDto>, TelemetryDataSpinService>();
|
||||
// TelemetryData services
|
||||
services.AddTransient<ITelemetryDataSaubService, TelemetryDataSaubService>();
|
||||
services.AddTransient<ITelemetryDataService<TelemetryDataSpinDto>, TelemetryDataSpinService>();
|
||||
|
||||
// Wits
|
||||
services.AddTransient<IWitsRecordRepository<AsbCloudApp.Data.WITS.Record1Dto>, WitsRecordRepository<AsbCloudApp.Data.WITS.Record1Dto, AsbCloudDb.Model.WITS.Record1>>();
|
||||
services.AddTransient<IWitsRecordRepository<AsbCloudApp.Data.WITS.Record7Dto>, WitsRecordRepository<AsbCloudApp.Data.WITS.Record7Dto, AsbCloudDb.Model.WITS.Record7>>();
|
||||
services.AddTransient<IWitsRecordRepository<AsbCloudApp.Data.WITS.Record8Dto>, WitsRecordRepository<AsbCloudApp.Data.WITS.Record8Dto, AsbCloudDb.Model.WITS.Record8>>();
|
||||
services.AddTransient<IWitsRecordRepository<AsbCloudApp.Data.WITS.Record50Dto>, WitsRecordRepository<AsbCloudApp.Data.WITS.Record50Dto, AsbCloudDb.Model.WITS.Record50>>();
|
||||
services.AddTransient<IWitsRecordRepository<AsbCloudApp.Data.WITS.Record60Dto>, WitsRecordRepository<AsbCloudApp.Data.WITS.Record60Dto, AsbCloudDb.Model.WITS.Record60>>();
|
||||
services.AddTransient<IWitsRecordRepository<AsbCloudApp.Data.WITS.Record61Dto>, WitsRecordRepository<AsbCloudApp.Data.WITS.Record61Dto, AsbCloudDb.Model.WITS.Record61>>();
|
||||
// Wits
|
||||
services.AddTransient<IWitsRecordRepository<AsbCloudApp.Data.WITS.Record1Dto>, WitsRecordRepository<AsbCloudApp.Data.WITS.Record1Dto, AsbCloudDb.Model.WITS.Record1>>();
|
||||
services.AddTransient<IWitsRecordRepository<AsbCloudApp.Data.WITS.Record7Dto>, WitsRecordRepository<AsbCloudApp.Data.WITS.Record7Dto, AsbCloudDb.Model.WITS.Record7>>();
|
||||
services.AddTransient<IWitsRecordRepository<AsbCloudApp.Data.WITS.Record8Dto>, WitsRecordRepository<AsbCloudApp.Data.WITS.Record8Dto, AsbCloudDb.Model.WITS.Record8>>();
|
||||
services.AddTransient<IWitsRecordRepository<AsbCloudApp.Data.WITS.Record50Dto>, WitsRecordRepository<AsbCloudApp.Data.WITS.Record50Dto, AsbCloudDb.Model.WITS.Record50>>();
|
||||
services.AddTransient<IWitsRecordRepository<AsbCloudApp.Data.WITS.Record60Dto>, WitsRecordRepository<AsbCloudApp.Data.WITS.Record60Dto, AsbCloudDb.Model.WITS.Record60>>();
|
||||
services.AddTransient<IWitsRecordRepository<AsbCloudApp.Data.WITS.Record61Dto>, WitsRecordRepository<AsbCloudApp.Data.WITS.Record61Dto, AsbCloudDb.Model.WITS.Record61>>();
|
||||
|
||||
services.AddTransient<IAutoGeneratedDailyReportService, AutoGeneratedDailyReportService>();
|
||||
services.AddTransient<IAutoGeneratedDailyReportMakerService, AutoGeneratedDailyReportMakerService>();
|
||||
services.AddTransient<IAutoGeneratedDailyReportService, AutoGeneratedDailyReportService>();
|
||||
services.AddTransient<IReportMakerService<AutoGeneratedDailyReportDto>, AutoGeneratedDailyReportMakerService>();
|
||||
services.AddTransient<IDrillTestReportService, DrillTestReportService>();
|
||||
services.AddTransient<IReportMakerService<DrillTestReportDataDto>, DrillTestReportMakerService>();
|
||||
|
||||
services.AddTransient<IManualDirectoryRepository, ManualDirectoryRepository>();
|
||||
services.AddTransient<IManualCatalogService, ManualCatalogService>();
|
||||
services.AddTransient<ICrudRepository<ManualDto>, CrudRepositoryBase<ManualDto, Manual>>();
|
||||
services.AddTransient<IManualDirectoryRepository, ManualDirectoryRepository>();
|
||||
services.AddTransient<IManualCatalogService, ManualCatalogService>();
|
||||
services.AddTransient<ICrudRepository<ManualDto>, CrudRepositoryBase<ManualDto, Manual>>();
|
||||
|
||||
services.AddTransient<IWellboreService, WellboreService>();
|
||||
services.AddTransient<IWellboreService, WellboreService>();
|
||||
|
||||
services.AddTransient<IWellOperationExportService, WellOperationExportService>();
|
||||
services.AddTransient<IWellOperationImportService, WellOperationImportService>();
|
||||
services.AddTransient<IWellOperationImportTemplateService, WellOperationImportTemplateService>();
|
||||
services.AddTransient<IWellOperationExportService, WellOperationExportService>();
|
||||
services.AddTransient<IWellOperationImportService, WellOperationImportService>();
|
||||
services.AddTransient<IWellOperationImportTemplateService, WellOperationImportTemplateService>();
|
||||
|
||||
services.AddTransient<IWellOperationExcelParser<WellOperationImportDefaultOptionsDto>, WellOperationDefaultExcelParser>();
|
||||
services.AddTransient<IWellOperationExcelParser<WellOperationImportGazpromKhantosOptionsDto>, WellOperationGazpromKhantosExcelParser>();
|
||||
services.AddTransient<IWellOperationExcelParser<WellOperationImportDefaultOptionsDto>, WellOperationDefaultExcelParser>();
|
||||
services.AddTransient<IWellOperationExcelParser<WellOperationImportGazpromKhantosOptionsDto>, WellOperationGazpromKhantosExcelParser>();
|
||||
|
||||
return services;
|
||||
}
|
||||
return services;
|
||||
}
|
||||
|
||||
public static IServiceCollection AddTransientLazy<TService, TImplementation>(this IServiceCollection services)
|
||||
where TService : class
|
||||
where TImplementation : class, TService
|
||||
=> services.AddTransient<TService, TImplementation>()
|
||||
.AddTransient(provider => new Lazy<TService>(provider.GetRequiredService<TService>));
|
||||
public static IServiceCollection AddTransientLazy<TService, TImplementation>(this IServiceCollection services)
|
||||
where TService : class
|
||||
where TImplementation : class, TService
|
||||
=> services.AddTransient<TService, TImplementation>()
|
||||
.AddTransient(provider => new Lazy<TService>(provider.GetRequiredService<TService>));
|
||||
|
||||
public static IServiceCollection AddTransientLazy<TService, TImplementation>(this IServiceCollection services, Func<IServiceProvider, TImplementation> implementationFactory)
|
||||
where TService : class
|
||||
where TImplementation : class, TService
|
||||
=> services.AddTransient<TService, TImplementation>(implementationFactory)
|
||||
.AddTransient(provider => new Lazy<TService>(() => implementationFactory(provider)));
|
||||
public static IServiceCollection AddTransientLazy<TService, TImplementation>(this IServiceCollection services, Func<IServiceProvider, TImplementation> implementationFactory)
|
||||
where TService : class
|
||||
where TImplementation : class, TService
|
||||
=> services.AddTransient<TService, TImplementation>(implementationFactory)
|
||||
.AddTransient(provider => new Lazy<TService>(() => implementationFactory(provider)));
|
||||
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,12 @@
|
||||
using AsbCloudApp.Data.SAUB;
|
||||
using AsbCloudApp.Repositories;
|
||||
using AsbCloudApp.Requests;
|
||||
using AsbCloudApp.Services;
|
||||
using AsbCloudDb.Model;
|
||||
using Mapster;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
@ -16,6 +21,44 @@ namespace AsbCloudInfrastructure.Repository
|
||||
this.db = db;
|
||||
}
|
||||
|
||||
public async Task<DrillTestDto[]> GetAllAsync(int idTelemetry, FileReportRequest request, CancellationToken cancellationToken)
|
||||
{
|
||||
var query = db.DrillTests
|
||||
.Where(d => d.IdTelemetry == idTelemetry)
|
||||
.AsNoTracking();
|
||||
|
||||
if (request.GeDate.HasValue)
|
||||
{
|
||||
var startDate = new DateTime(request.GeDate.Value.Year, request.GeDate.Value.Month, request.GeDate.Value.Day);
|
||||
query = query.Where(q => q.TimeStampStart >= startDate);
|
||||
}
|
||||
if (request.LeDate.HasValue)
|
||||
{
|
||||
var finishDate = new DateTime(request.LeDate.Value.Year, request.LeDate.Value.Month, request.LeDate.Value.Day);
|
||||
query = query.Where(q => q.TimeStampStart <= finishDate);
|
||||
}
|
||||
|
||||
var entities = await query.ToListAsync(cancellationToken);
|
||||
var dtos = entities.Select(e => e.Adapt<DrillTestDto>()).ToArray();
|
||||
|
||||
return dtos;
|
||||
}
|
||||
|
||||
|
||||
public async Task<DrillTestDto> GetAsync(int idTelemetry, int id, CancellationToken cancellationToken)
|
||||
{
|
||||
var drillTest = await db.DrillTests
|
||||
.Where(d => d.IdTelemetry == idTelemetry)
|
||||
.Where(d => d.Id == id)
|
||||
.FirstOrDefaultAsync(cancellationToken);
|
||||
|
||||
if (drillTest is null)
|
||||
throw new Exception($"Drill test with id: {id} and idTelemetry: {idTelemetry} does not exist.");
|
||||
|
||||
var dto = drillTest.Adapt<DrillTestDto>();
|
||||
return dto;
|
||||
}
|
||||
|
||||
public async Task<int> SaveDataAsync(int idTelemetry, DrillTestDto dto, CancellationToken token)
|
||||
{
|
||||
var entity = dto.Adapt<DrillTest>();
|
||||
|
@ -11,8 +11,10 @@ using ClosedXML.Excel;
|
||||
|
||||
namespace AsbCloudInfrastructure.Services.AutoGeneratedDailyReports;
|
||||
|
||||
public class AutoGeneratedDailyReportMakerService : IAutoGeneratedDailyReportMakerService
|
||||
public class AutoGeneratedDailyReportMakerService : IReportMakerService<AutoGeneratedDailyReportDto>
|
||||
{
|
||||
private readonly string templateName = "AutogeneratedDailyReportTemplate.xlsx";
|
||||
|
||||
private readonly IEnumerable<IExcelBlockWriter> blockWriters = new List<IExcelBlockWriter>()
|
||||
{
|
||||
new HeadExcelBlockWriter(),
|
||||
@ -20,10 +22,12 @@ public class AutoGeneratedDailyReportMakerService : IAutoGeneratedDailyReportMak
|
||||
new LimitingParameterExcelBlockWriter(),
|
||||
new TimeBalanceExcelBlockWriter()
|
||||
};
|
||||
|
||||
public async Task<Stream> MakeReportAsync(AutoGeneratedDailyReportDto report, CancellationToken cancellationToken)
|
||||
|
||||
public async Task<Stream> MakeReportAsync(AutoGeneratedDailyReportDto report, CancellationToken cancellationToken)
|
||||
{
|
||||
using var excelTemplateStream = await GetExcelTemplateStreamAsync(cancellationToken);
|
||||
using var excelTemplateStream = await Assembly
|
||||
.GetExecutingAssembly()
|
||||
.GetTemplateCopyStreamAsync(templateName, cancellationToken);
|
||||
|
||||
using var workbook = new XLWorkbook(excelTemplateStream, XLEventTracking.Disabled);
|
||||
|
||||
@ -35,22 +39,6 @@ public class AutoGeneratedDailyReportMakerService : IAutoGeneratedDailyReportMak
|
||||
|
||||
return memoryStream;
|
||||
}
|
||||
|
||||
private async Task<Stream> GetExcelTemplateStreamAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
var resourceName = Assembly.GetExecutingAssembly()
|
||||
.GetManifestResourceNames()
|
||||
.FirstOrDefault(n => n.EndsWith("AutogeneratedDailyReportTemplate.xlsx"))!;
|
||||
|
||||
using var stream = Assembly.GetExecutingAssembly()
|
||||
.GetManifestResourceStream(resourceName)!;
|
||||
|
||||
var memoryStream = new MemoryStream();
|
||||
await stream.CopyToAsync(memoryStream, cancellationToken);
|
||||
memoryStream.Position = 0;
|
||||
|
||||
return memoryStream;
|
||||
}
|
||||
|
||||
private void AddToWorkbook(XLWorkbook workbook, AutoGeneratedDailyReportDto report)
|
||||
{
|
||||
|
@ -26,14 +26,14 @@ public class AutoGeneratedDailyReportService : IAutoGeneratedDailyReportService
|
||||
private readonly ISubsystemOperationTimeService subsystemOperationTimeService;
|
||||
private readonly ICrudRepository<SubsystemDto> subsystemRepository;
|
||||
private readonly ILimitingParameterService limitingParameterService;
|
||||
private readonly IAutoGeneratedDailyReportMakerService autoGeneratedDailyReportMakerService;
|
||||
private readonly IReportMakerService<AutoGeneratedDailyReportDto> autoGeneratedDailyReportMakerService;
|
||||
|
||||
public AutoGeneratedDailyReportService(IWellService wellService,
|
||||
IWellOperationRepository wellOperationRepository,
|
||||
ISubsystemOperationTimeService subsystemOperationTimeService,
|
||||
ICrudRepository<SubsystemDto> subsystemRepository,
|
||||
ILimitingParameterService limitingParameterService,
|
||||
IAutoGeneratedDailyReportMakerService autoGeneratedDailyReportMakerService)
|
||||
IReportMakerService<AutoGeneratedDailyReportDto> autoGeneratedDailyReportMakerService)
|
||||
{
|
||||
this.wellOperationRepository = wellOperationRepository;
|
||||
this.wellService = wellService;
|
||||
@ -44,7 +44,7 @@ public class AutoGeneratedDailyReportService : IAutoGeneratedDailyReportService
|
||||
}
|
||||
|
||||
public async Task<PaginationContainer<AutoGeneratedDailyReportInfoDto>> GetListAsync(int idWell,
|
||||
AutoGeneratedDailyReportRequest request,
|
||||
FileReportRequest request,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
var result = new PaginationContainer<AutoGeneratedDailyReportInfoDto>
|
||||
@ -67,19 +67,19 @@ public class AutoGeneratedDailyReportService : IAutoGeneratedDailyReportService
|
||||
if (datesRange is null)
|
||||
return result;
|
||||
|
||||
if (request.StartDate.HasValue)
|
||||
if (request.GeDate.HasValue)
|
||||
{
|
||||
var startDate = new DateTime(request.StartDate.Value.Year, request.StartDate.Value.Month,
|
||||
request.StartDate.Value.Day);
|
||||
var startDate = new DateTime(request.GeDate.Value.Year, request.GeDate.Value.Month,
|
||||
request.GeDate.Value.Day);
|
||||
|
||||
if(startDate.Date >= datesRange.From.Date)
|
||||
datesRange.From = startDate;
|
||||
}
|
||||
|
||||
if (request.FinishDate.HasValue)
|
||||
if (request.LeDate.HasValue)
|
||||
{
|
||||
var finishDate = new DateTime(request.FinishDate.Value.Year, request.FinishDate.Value.Month,
|
||||
request.FinishDate.Value.Day);
|
||||
var finishDate = new DateTime(request.LeDate.Value.Year, request.LeDate.Value.Month,
|
||||
request.LeDate.Value.Day);
|
||||
|
||||
if (finishDate.Date <= datesRange.To.Date)
|
||||
datesRange.To = finishDate;
|
||||
|
@ -0,0 +1,89 @@
|
||||
using AsbCloudApp.Data.DrillTestReport;
|
||||
using AsbCloudApp.Services.AutoGeneratedDailyReports;
|
||||
using ClosedXML.Excel;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AsbCloudInfrastructure.Services.DrillTestReport
|
||||
{
|
||||
public class DrillTestReportMakerService : IReportMakerService<DrillTestReportDataDto>
|
||||
{
|
||||
private readonly string templateName = "DrillTestReportTemplate.xlsx";
|
||||
private readonly string sheetName = "Лист1";
|
||||
private readonly int startRowNumber = 8;
|
||||
|
||||
public async Task<Stream> MakeReportAsync(DrillTestReportDataDto report, CancellationToken cancellationToken)
|
||||
{
|
||||
using var excelTemplateStream = await Assembly.GetExecutingAssembly().GetTemplateCopyStreamAsync(templateName, cancellationToken);
|
||||
|
||||
using var workbook = new XLWorkbook(excelTemplateStream, XLEventTracking.Disabled);
|
||||
|
||||
AddToWorkbook(workbook, report);
|
||||
|
||||
MemoryStream memoryStream = new MemoryStream();
|
||||
workbook.SaveAs(memoryStream, new SaveOptions { });
|
||||
memoryStream.Seek(0, SeekOrigin.Begin);
|
||||
|
||||
return memoryStream;
|
||||
}
|
||||
|
||||
|
||||
private void AddToWorkbook(XLWorkbook workbook, DrillTestReportDataDto report)
|
||||
{
|
||||
var drillTestEntities = report.Data.Params;
|
||||
if (!drillTestEntities.Any())
|
||||
return;
|
||||
|
||||
var sheet = workbook.Worksheets.FirstOrDefault(ws => ws.Name == sheetName)
|
||||
?? throw new FileFormatException($"Книга excel не содержит листа {sheetName}.");
|
||||
|
||||
sheet.Cell(4, 2).Value = report.Caption;
|
||||
sheet.Cell(5, 2)._SetValue(report.Date, setAllBorders: false);
|
||||
|
||||
var rowNumber = startRowNumber;
|
||||
|
||||
var stepWithMaxDepthSpeed = drillTestEntities.OrderByDescending(p => p.DepthSpeed).FirstOrDefault()!.Step;
|
||||
var startDepth = report.Data.DepthStart;
|
||||
var startDate = report.Data.TimeStampStart;
|
||||
|
||||
foreach (var drillTestEntity in drillTestEntities)
|
||||
{
|
||||
var endDepth = startDepth + (drillTestEntity.DepthDrillStep ?? 0);
|
||||
var endDateTime = startDate.AddSeconds(drillTestEntity.TimeDrillStep ?? 0);
|
||||
|
||||
sheet.Cell(rowNumber, 2).Value = startDepth;
|
||||
|
||||
sheet.Cell(rowNumber, 3).Value = endDepth;
|
||||
|
||||
sheet.Cell(rowNumber, 4).Value = drillTestEntity.DepthDrillStep;
|
||||
|
||||
sheet.Cell(rowNumber, 5).Value = drillTestEntity.Workload;
|
||||
|
||||
sheet.Cell(rowNumber, 6).Value = drillTestEntity.Speed;
|
||||
|
||||
var cell = sheet.Cell(rowNumber, 7);
|
||||
cell._SetValue(startDate.DateTime);
|
||||
|
||||
cell = sheet.Cell(rowNumber, 8);
|
||||
cell._SetValue(endDateTime.DateTime);
|
||||
|
||||
sheet.Cell(rowNumber, 9).Value = drillTestEntity.TimeDrillStep;
|
||||
|
||||
sheet.Cell(rowNumber, 10).Value = drillTestEntity.DepthSpeed;
|
||||
|
||||
if (drillTestEntity.Step == stepWithMaxDepthSpeed)
|
||||
{
|
||||
var currentCells = sheet.Row(rowNumber).Cells(1, 10);
|
||||
currentCells.Style.Fill.BackgroundColor = XLColor.Yellow;
|
||||
}
|
||||
|
||||
startDepth = endDepth;
|
||||
startDate = endDateTime;
|
||||
rowNumber++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,103 @@
|
||||
using AsbCloudApp.Data;
|
||||
using AsbCloudApp.Data.DrillTestReport;
|
||||
using AsbCloudApp.Repositories;
|
||||
using AsbCloudApp.Requests;
|
||||
using AsbCloudApp.Services;
|
||||
using AsbCloudApp.Services.AutoGeneratedDailyReports;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AsbCloudInfrastructure.Services.DrillTestReport
|
||||
{
|
||||
public class DrillTestReportService : IDrillTestReportService
|
||||
{
|
||||
private readonly IWellService wellService;
|
||||
private readonly IDrillTestRepository drillTestRepository;
|
||||
private readonly ITelemetryService telemetryService;
|
||||
private readonly IReportMakerService<DrillTestReportDataDto> drillTestReportMakerService;
|
||||
|
||||
public DrillTestReportService(
|
||||
IWellService wellService,
|
||||
IDrillTestRepository drillTestRepository,
|
||||
ITelemetryService telemetryService,
|
||||
IReportMakerService<DrillTestReportDataDto> drillTestReportMakerService)
|
||||
{
|
||||
this.wellService = wellService;
|
||||
this.drillTestRepository = drillTestRepository;
|
||||
this.telemetryService = telemetryService;
|
||||
this.drillTestReportMakerService = drillTestReportMakerService;
|
||||
}
|
||||
|
||||
public async Task<(string fileName, Stream stream)> GenerateAsync(int idWell, int id, CancellationToken cancellationToken)
|
||||
{
|
||||
var telemetry = telemetryService.GetOrDefaultTelemetryByIdWell(idWell);
|
||||
if (telemetry is null)
|
||||
throw new Exception($"Telemetry with idWell: {idWell} does not exist.");
|
||||
|
||||
var dto = await drillTestRepository.GetAsync(telemetry.Id, id, cancellationToken);
|
||||
|
||||
var timezone = telemetryService.GetTimezone(telemetry.Id);
|
||||
var remoteDateTime = dto.TimeStampStart.ToRemoteDateTime(timezone.Hours);
|
||||
dto.TimeStampStart = remoteDateTime;
|
||||
|
||||
var cluster = telemetry.Info?.Cluster ?? "-";
|
||||
var deposit = telemetry.Info?.Deposit ?? "-";
|
||||
var wellCaption = wellService.GetOrDefault(idWell)!.Caption ?? "-";
|
||||
|
||||
|
||||
var report = new DrillTestReportDataDto()
|
||||
{
|
||||
Data = dto,
|
||||
Caption = string.Format("Месторождение: {0}, куст: {1}, скважина: {2}", deposit, cluster, wellCaption),
|
||||
Date = DateTime.Now,
|
||||
};
|
||||
|
||||
var fileName = string.Format("Drill_test_{0}.xlsx", remoteDateTime.ToString("dd.mm.yyyy_HH_MM_ss"));
|
||||
var stream = await drillTestReportMakerService.MakeReportAsync(report, cancellationToken);
|
||||
|
||||
return (fileName, stream);
|
||||
}
|
||||
|
||||
|
||||
public async Task<PaginationContainer<DrillTestReportInfoDto>> GetListAsync(int idWell, FileReportRequest request, CancellationToken cancellationToken)
|
||||
{
|
||||
var telemetry = telemetryService.GetOrDefaultTelemetryByIdWell(idWell);
|
||||
if (telemetry is null)
|
||||
throw new Exception($"Telemetry with idWell: {idWell} does not exist.");
|
||||
|
||||
var result = new PaginationContainer<DrillTestReportInfoDto>
|
||||
{
|
||||
Skip = request.Skip ?? 0,
|
||||
Take = request.Take ?? 10,
|
||||
Items = Enumerable.Empty<DrillTestReportInfoDto>()
|
||||
};
|
||||
|
||||
var reports = new List<DrillTestReportInfoDto>();
|
||||
var timezone = telemetryService.GetTimezone(telemetry.Id);
|
||||
|
||||
var dtos = await drillTestRepository.GetAllAsync(telemetry.Id, request, cancellationToken);
|
||||
foreach (var dto in dtos)
|
||||
{
|
||||
var remoteDateTime = dto.TimeStampStart.ToRemoteDateTime(timezone.Hours);
|
||||
|
||||
reports.Add(new DrillTestReportInfoDto
|
||||
{
|
||||
FileName = string.Format("Drill_test_{0}", remoteDateTime),
|
||||
DrillDepth = (dto.Params
|
||||
.Where(p => p.DepthDrillStep.HasValue)
|
||||
.Sum(x => x.DepthDrillStep) ?? 0) + dto.DepthStart,
|
||||
DateTime = remoteDateTime,
|
||||
Id = dto.Id,
|
||||
});
|
||||
}
|
||||
|
||||
result.Items = reports;
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
Binary file not shown.
@ -92,12 +92,16 @@ internal static class XLExtentions
|
||||
}
|
||||
|
||||
|
||||
internal static IXLCell _SetValue(this IXLCell cell, DateTime value, string dateFormat = "DD.MM.YYYY HH:MM:SS")
|
||||
internal static IXLCell _SetValue(this IXLCell cell, DateTime value, string dateFormat = "DD.MM.YYYY HH:MM:SS", bool? setAllBorders = true)
|
||||
{
|
||||
cell.Value = value;
|
||||
cell.Style
|
||||
.SetAllBorders()
|
||||
.Alignment.WrapText = true;
|
||||
if (setAllBorders == true)
|
||||
{
|
||||
cell.Style
|
||||
.SetAllBorders()
|
||||
.Alignment.WrapText = true;
|
||||
}
|
||||
|
||||
|
||||
cell.Value = value;
|
||||
|
||||
|
@ -25,7 +25,8 @@ public class AutoGeneratedDailyReportController : ControllerBase
|
||||
private readonly IAutoGeneratedDailyReportService autoGeneratedDailyReportService;
|
||||
private readonly IWellService wellService;
|
||||
|
||||
public AutoGeneratedDailyReportController(IAutoGeneratedDailyReportService autoGeneratedDailyReportService,
|
||||
public AutoGeneratedDailyReportController(
|
||||
IAutoGeneratedDailyReportService autoGeneratedDailyReportService,
|
||||
IWellService wellService)
|
||||
{
|
||||
this.autoGeneratedDailyReportService = autoGeneratedDailyReportService;
|
||||
@ -66,7 +67,7 @@ public class AutoGeneratedDailyReportController : ControllerBase
|
||||
[HttpGet("all")]
|
||||
[ProducesResponseType(typeof(PaginationContainer<AutoGeneratedDailyReportInfoDto>), (int)HttpStatusCode.OK)]
|
||||
public async Task<IActionResult> GetListAsync([FromRoute][Required] int idWell,
|
||||
[FromQuery] AutoGeneratedDailyReportRequest request,
|
||||
[FromQuery] FileReportRequest request,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
if (!await CanUserAccessToWellAsync(idWell, cancellationToken))
|
||||
|
84
AsbCloudWebApi/Controllers/DrillTestsReportController.cs
Normal file
84
AsbCloudWebApi/Controllers/DrillTestsReportController.cs
Normal file
@ -0,0 +1,84 @@
|
||||
using AsbCloudApp.Data;
|
||||
using AsbCloudApp.Data.AutogeneratedDailyReport;
|
||||
using AsbCloudApp.Requests;
|
||||
using AsbCloudApp.Services;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Net;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AsbCloudWebApi.Controllers;
|
||||
|
||||
/// <summary>
|
||||
/// Контроллер для drill_test отчётов
|
||||
/// </summary>
|
||||
[ApiController]
|
||||
[Route("api/well/{idWell}/[controller]")]
|
||||
[Authorize]
|
||||
public class DrillTestsReportController : ControllerBase
|
||||
{
|
||||
private readonly IDrillTestReportService drillTestReportService;
|
||||
private readonly IWellService wellService;
|
||||
|
||||
public DrillTestsReportController(IDrillTestReportService drillTestReportService,
|
||||
IWellService wellService)
|
||||
{
|
||||
this.drillTestReportService = drillTestReportService;
|
||||
this.wellService = wellService;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Формирование отчёта
|
||||
/// </summary>
|
||||
/// <param name="idWell">Id скважины</param>
|
||||
/// <param name="id">Ключ entity test записи</param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
[ProducesResponseType(typeof(PhysicalFileResult), (int)HttpStatusCode.OK, "application/octet-stream")]
|
||||
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
||||
public async Task<IActionResult> GenerateReportAsync([FromRoute] int idWell,
|
||||
[FromQuery] int id,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
if (!await CanUserAccessToWellAsync(idWell, cancellationToken))
|
||||
return Forbid();
|
||||
|
||||
var reportFile = await drillTestReportService.GenerateAsync(idWell, id, cancellationToken);
|
||||
|
||||
return File(reportFile.stream, "application/octet-stream", reportFile.fileName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Список файлов drill test отчётов
|
||||
/// </summary>
|
||||
/// <param name="idWell">Id скважины</param>
|
||||
/// <param name="request">Параметры запроса</param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("all")]
|
||||
[ProducesResponseType(typeof(PaginationContainer<AutoGeneratedDailyReportInfoDto>), (int)HttpStatusCode.OK)]
|
||||
public async Task<IActionResult> GetListAsync([FromRoute][Required] int idWell,
|
||||
[FromQuery] FileReportRequest request,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
if (!await CanUserAccessToWellAsync(idWell, cancellationToken))
|
||||
return Forbid();
|
||||
|
||||
var reports = await drillTestReportService.GetListAsync(idWell,
|
||||
request,
|
||||
cancellationToken);
|
||||
|
||||
return Ok(reports);
|
||||
}
|
||||
|
||||
private async Task<bool> CanUserAccessToWellAsync(int idWell, CancellationToken cancellationToken)
|
||||
{
|
||||
int? idCompany = User.GetCompanyId();
|
||||
return idCompany is not null && await wellService.IsCompanyInvolvedInWellAsync((int)idCompany,
|
||||
idWell, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user