Отдельные сервисы для плановой и фактической траектории

This commit is contained in:
Olga Nemt 2023-05-30 09:53:04 +05:00
parent 9530982794
commit 8c45b36623
24 changed files with 260 additions and 236 deletions

View File

@ -4,7 +4,17 @@
/// DTO объединяющее плановые и фактические значения
/// </summary>
/// <typeparam name="T"></typeparam>
public class PlanFactBase<T>
public class PlanFactDto<T> : PlanFactBase<T, T>
{
}
/// <summary>
/// DTO объединяющее плановые и фактические значения
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="V"></typeparam>
public class PlanFactBase<T, V>
{
/// <summary>
/// Плановое значение
@ -14,6 +24,6 @@
/// <summary>
/// Фактическое значение
/// </summary>
public T? Fact { get; set; }
public V? Fact { get; set; }
}
}

View File

@ -3,7 +3,7 @@
/// <summary>
/// План-факт статистики по операциям за секцию скважины
/// </summary>
public class StatSectionDto : PlanFactBase<StatOperationsDto>, IId
public class StatSectionDto : PlanFactDto<StatOperationsDto>, IId
{
/// <inheritdoc/>
public int Id { get; set; }

View File

@ -45,7 +45,7 @@ namespace AsbCloudApp.Data
/// <summary>
/// статистика за всю скважину
/// </summary>
public PlanFactBase<StatOperationsDto> Total { get; set; } = new();
public PlanFactDto<StatOperationsDto> Total { get; set; } = new();
/// <summary>
/// компании участвующие в строительстве скважины

View File

@ -1,13 +0,0 @@
namespace AsbCloudApp.Data
{
/// <summary>
/// Формирование визуализации траектории 3D
/// </summary>
/// <param name="WellboreDepth">Глубина ствола</param>
/// <param name="ZenithAngle">Зенитный угол</param>
/// <param name="AzimuthGeo">Азимут географиеский</param>
public record TrajectoryDto(
double WellboreDepth,
double ZenithAngle,
double AzimuthGeo);
}

View File

@ -0,0 +1,35 @@
namespace AsbCloudApp.Data;
public class TrajectoryDto
{
public double WellboreDepth { get; set; }
public double ZenithAngle { get; set; }
public double AzimuthGeo { get; set; }
}
/// <summary>
/// Формирование визуализации траектории 3D
/// </summary>
/// <param name="WellboreDepth">Глубина ствола</param>
/// <param name="ZenithAngle">Зенитный угол</param>
/// <param name="AzimuthGeo">Азимут географиеский</param>
public class TrajectoryFactDto : TrajectoryDto
{
}
/// <summary>
///
/// </summary>
/// <param name="WellboreDepth"></param>
/// <param name="ZenithAngle"></param>
/// <param name="AzimuthGeo"></param>
/// <param name="Radius"></param>
/// <param name="Comment"></param>
public class TrajectoryPlanDto : TrajectoryDto
{
public double? Radius { get; set; }
public string? Comment { get; set; }
}

View File

@ -3,7 +3,7 @@
/// <summary>
/// Визуализация траектории 3D
/// </summary>
public class TrajectoryVisualizationDto
public class TrajectoryVisualizationFactDto
{
/// <summary>
/// Координаты по оси X, в сторону востока (м)

View File

@ -0,0 +1,18 @@
namespace AsbCloudApp.Data
{
/// <summary>
/// Визуализация траектории 3D для посторения радиуса цели
/// </summary>
public class TrajectoryVisualizationPlanDto : TrajectoryVisualizationFactDto
{
/// <summary>
/// радиус цели
/// </summary>
public double? Radius { get; set; }
/// <summary>
/// комментарий
/// </summary>
public string? Comment { get; set; }
}
}

View File

@ -22,7 +22,7 @@ namespace AsbCloudApp.Data
/// <summary>
/// Плановая и текущая глубина
/// </summary>
public PlanFactBase<double?> WellDepth { get; set; } = null!;
public PlanFactDto<double?> WellDepth { get; set; } = null!;
/// <summary>
/// Отставание от ГГД, %
@ -32,12 +32,12 @@ namespace AsbCloudApp.Data
/// <summary>
/// Механическая скорость проходки, последней операции бурения
/// </summary>
public PlanFactBase<double?> ROP { get; set; } = null!;
public PlanFactDto<double?> ROP { get; set; } = null!;
/// <summary>
/// Рейсовая скорость проходки, последнего рейса
/// </summary>
public PlanFactBase<double?> RaceSpeed { get; set; } = null!;
public PlanFactDto<double?> RaceSpeed { get; set; } = null!;
/// <summary>
/// Процент использования АКБ

View File

@ -12,6 +12,12 @@ namespace AsbCloudApp.Repositories
/// <returns></returns>
public interface IActualTrajectoryRepository : ITrajectoryRepository
{
/// <summary>
/// Получение траектории для 3D-визуализации
/// </summary>
/// <param name="idWell">ключ скважины</param>
/// <param name="token"></param>
/// <returns></returns>
Task<IEnumerable<TrajectoryFactDto>> GetTrajectoryAsync(int idWell, CancellationToken token);
}
}

View File

@ -59,5 +59,13 @@ namespace AsbCloudApp.Repositories
/// <param name="token"></param>
/// <returns></returns>
Task<int> DeleteByIdWellAsync(int idWell, CancellationToken token);
/// <summary>
/// Получение траектории для 3D-визуализации
/// </summary>
/// <param name="idWell">ключ скважины</param>
/// <param name="token"></param>
/// <returns></returns>
Task<IEnumerable<TrajectoryPlanDto>> GetTrajectoryAsync(int idWell, CancellationToken token);
}
}

View File

@ -13,12 +13,6 @@ namespace AsbCloudApp.Repositories
/// </summary>
public interface ITrajectoryRepository
{
/// <summary>
/// Получение траектории для 3D-визуализации
/// </summary>
/// <param name="idWell">ключ скважины</param>
/// <param name="token"></param>
/// <returns></returns>
Task<IEnumerable<TrajectoryDto>> GetTrajectoryAsync(int idWell, CancellationToken token);
}
}

View File

@ -8,14 +8,14 @@ namespace AsbCloudApp.Services
/// <summary>
/// Сервис "Визуализация траектории 3D"
/// </summary>
public interface ITrajectoryVisualizationService
public interface ITrajectoryVisualizationService<T>
{
/// <summary>
/// Получение плановой и фактической траектории по скважине
/// Получение плановой или фактической траектории по скважине
/// </summary>
/// <param name="idWell">ключ скважины</param>
/// <param name="token"></param>
/// <returns></returns>
Task<PlanFactBase<IEnumerable<TrajectoryVisualizationDto>>> GetTrajectoryAsync(int idWell, CancellationToken token);
Task<IEnumerable<T>> GetVisualizationAsync(int idWell, CancellationToken token);
}
}

View File

@ -136,7 +136,11 @@ namespace AsbCloudInfrastructure
services.AddTransient<ILimitingParameterService, LimitingParameterService>();
services.AddTransient<IProcessMapReportMakerService, ProcessMapReportMakerService>();
services.AddTransient<IProcessMapReportService, ProcessMapReportService>();
services.AddTransient<ITrajectoryVisualizationService, TrajectoryVisualizationService>();
services.AddTransient<TrajectoryVisualizationBaseService>();
services.AddTransient<ITrajectoryVisualizationService<TrajectoryVisualizationPlanDto>, TrajectoryVisualizationPlanService>();
services.AddTransient<ITrajectoryVisualizationService<TrajectoryVisualizationFactDto>, TrajectoryVisualizationFactService>();
services.AddTransient<IGtrRepository, GtrWitsRepository>();
// admin crud services:

View File

@ -21,7 +21,7 @@ namespace AsbCloudInfrastructure.Repository
this.wellService = wellService;
}
public async Task<IEnumerable<TrajectoryDto>> GetTrajectoryAsync(int idWell, CancellationToken token)
public async Task<IEnumerable<TrajectoryFactDto>> GetTrajectoryAsync(int idWell, CancellationToken token)
{
var well = wellService.GetOrDefault(idWell);
@ -37,7 +37,7 @@ namespace AsbCloudInfrastructure.Repository
.ToArrayAsync(token);
var result = entities
.Select(coord => new TrajectoryDto(coord.Deptsvym!.Value, coord.Svyinc!.Value, coord.Svyazc!.Value))
.Select(coord => new TrajectoryFactDto(coord.Deptsvym!.Value, coord.Svyinc!.Value, coord.Svyazc!.Value))
.ToArray();
return result;

View File

@ -116,7 +116,7 @@ namespace AsbCloudInfrastructure.Repository
return entity;
}
public async Task<IEnumerable<TrajectoryDto>> GetTrajectoryAsync(int idWell, CancellationToken token)
public async Task<IEnumerable<TrajectoryPlanDto>> GetTrajectoryAsync(int idWell, CancellationToken token)
{
var well = wellService.GetOrDefault(idWell);
if (well is null || well.Timezone is null)
@ -127,7 +127,7 @@ namespace AsbCloudInfrastructure.Repository
.Where(x => x.IdWell == idWell);
return await query
.Select(coord => new TrajectoryDto(coord.WellboreDepth, coord.ZenithAngle, coord.AzimuthGeo))
.Select(coord => new TrajectoryPlanDto(coord.WellboreDepth, coord.ZenithAngle, coord.AzimuthGeo, coord.RadiusTarget, coord.Comment))
.ToArrayAsync()
.ConfigureAwait(false);
}

View File

@ -0,0 +1,53 @@
using AsbCloudApp.Data;
using AsbCloudApp.Repositories;
using AsbCloudApp.Services;
using DocumentFormat.OpenXml.Spreadsheet;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace AsbCloudInfrastructure.Services.Trajectory
{
public class TrajectoryVisualizationBaseService
{
private ITrajectoryVisualizationService<TrajectoryVisualizationPlanDto> planTrajectoryVisualizationService;
private ITrajectoryVisualizationService<TrajectoryVisualizationFactDto> factTrajectoryVisualizationService;
public TrajectoryVisualizationBaseService(
ITrajectoryVisualizationService<TrajectoryVisualizationPlanDto> _planTrajectoryVisualizationService,
ITrajectoryVisualizationService<TrajectoryVisualizationFactDto> _factTrajectoryVisualizationService)
{
this.planTrajectoryVisualizationService = _planTrajectoryVisualizationService;
this.factTrajectoryVisualizationService = _factTrajectoryVisualizationService;
}
/// <summary>
/// Получение плановой и фактической траектории по скважине
/// </summary>
/// <param name="idWell">ключ скважины</param>
/// <param name="token"></param>
/// <returns></returns>
public async Task<PlanFactBase<IEnumerable<TrajectoryVisualizationPlanDto>, IEnumerable<TrajectoryVisualizationFactDto>>> GetTrajectoryAsync(int idWell, CancellationToken token)
{
var result = new PlanFactBase<IEnumerable<TrajectoryVisualizationPlanDto>, IEnumerable<TrajectoryVisualizationFactDto>>();
result.Plan = await planTrajectoryVisualizationService.GetVisualizationAsync(idWell, token);
result.Fact = await factTrajectoryVisualizationService.GetVisualizationAsync(idWell, token);
return result;
}
protected void Calculate(TrajectoryDto prev, TrajectoryDto current) {
var intervalGeoParams = prev;
var deltaWellLength = current.WellboreDepth - intervalGeoParams.WellboreDepth;
var projectionLengthToXYSurface = deltaWellLength * Math.Sin(intervalGeoParams.ZenithAngle* Math.PI / 180);
var dDepth = deltaWellLength * Math.Cos(intervalGeoParams.ZenithAngle * Math.PI / 180);
var dNorth = projectionLengthToXYSurface * Math.Sin(intervalGeoParams.AzimuthGeo * Math.PI / 180);
var dEast = projectionLengthToXYSurface * Math.Cos(intervalGeoParams.AzimuthGeo * Math.PI / 180);
}
}
}

View File

@ -9,48 +9,42 @@ using System.Threading.Tasks;
namespace AsbCloudInfrastructure.Services.Trajectory
{
public class TrajectoryVisualizationService : ITrajectoryVisualizationService
public class TrajectoryVisualizationFactService : ITrajectoryVisualizationService<TrajectoryVisualizationFactDto>
{
private readonly IPlannedTrajectoryRepository plannedRepository;
private readonly IActualTrajectoryRepository factualRepository;
private readonly IActualTrajectoryRepository actualRepository;
public TrajectoryVisualizationService(IPlannedTrajectoryRepository plannedRepository, IActualTrajectoryRepository factualRepository)
public TrajectoryVisualizationFactService(IActualTrajectoryRepository actualRepository)
{
this.plannedRepository = plannedRepository;
this.factualRepository = factualRepository;
this.actualRepository = actualRepository;
}
/// <summary>
/// Получение плановой и фактической траектории по скважине
/// Визуализация для фактической траектории по скважине
/// </summary>
/// <param name="idWell">ключ скважины</param>
/// <param name="token"></param>
/// <returns></returns>
public async Task<PlanFactBase<IEnumerable<TrajectoryVisualizationDto>>> GetTrajectoryAsync(int idWell, CancellationToken token)
public async Task<IEnumerable<TrajectoryVisualizationFactDto>> GetVisualizationAsync(int idWell, CancellationToken token)
{
var result = new PlanFactBase<IEnumerable<TrajectoryVisualizationDto>>();
var geoFactCoordinates = await actualRepository.GetTrajectoryAsync(idWell, token);
var geoPlanCoordinates = await plannedRepository.GetTrajectoryAsync(idWell, token);
var geoFactCoordinates = await factualRepository.GetTrajectoryAsync(idWell, token);
result.Plan = GetTrajectoryVisualisation(geoPlanCoordinates);
result.Fact = GetTrajectoryVisualisation(geoFactCoordinates);
return result;
var visualization = GetTrajectoryVisualisation(geoFactCoordinates);
return visualization;
}
record struct Location(double North, double East, double Depth);
/// <summary>
/// Формирует список координат для визуализации трактории 3D
/// </summary>
/// <param name="geoCoordinates"></param>
/// <returns></returns>
private IEnumerable<TrajectoryVisualizationDto> GetTrajectoryVisualisation(IEnumerable<TrajectoryDto> geoCoordinates)
private IEnumerable<TrajectoryVisualizationFactDto> GetTrajectoryVisualisation(IEnumerable<TrajectoryFactDto> geoCoordinates)
{
var geoCoordinatesLength = geoCoordinates.Count();
if (geoCoordinatesLength < 2)
return new TrajectoryVisualizationDto[0];
return new TrajectoryVisualizationFactDto[0];
var cartesianCoordinates = new Location[geoCoordinatesLength];
cartesianCoordinates[0] = new();
@ -75,7 +69,7 @@ namespace AsbCloudInfrastructure.Services.Trajectory
cartesianCoordinates[i] = coordinates;
}
return cartesianCoordinates.Select(location => new TrajectoryVisualizationDto { X = location.East, Y = - location.Depth, Z = - location.North});
return cartesianCoordinates.Select(location => new TrajectoryVisualizationFactDto { X = location.East, Y = - location.Depth, Z = - location.North});
}
}

View File

@ -0,0 +1,84 @@
using AsbCloudApp.Data;
using AsbCloudApp.Repositories;
using AsbCloudApp.Services;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace AsbCloudInfrastructure.Services.Trajectory
{
public class TrajectoryVisualizationPlanService : ITrajectoryVisualizationService<TrajectoryVisualizationPlanDto>
{
private readonly IPlannedTrajectoryRepository plannedRepository;
public TrajectoryVisualizationPlanService(IPlannedTrajectoryRepository plannedRepository)
{
this.plannedRepository = plannedRepository;
}
/// <summary>
/// Визуализация для плановой траектории по скважине
/// </summary>
/// <param name="idWell">ключ скважины</param>
/// <param name="token"></param>
/// <returns></returns>
public async Task<IEnumerable<TrajectoryVisualizationPlanDto>> GetVisualizationAsync(int idWell, CancellationToken token)
{
var coords = await plannedRepository.GetTrajectoryAsync(idWell, token);
return GetTrajectoryVisualisation(coords);
}
/// <summary>
/// Формирует список координат для визуализации трактории 3D
/// </summary>
/// <param name="geoCoordinates"></param>
/// <returns></returns>
private IEnumerable<TrajectoryVisualizationPlanDto> GetTrajectoryVisualisation(IEnumerable<TrajectoryPlanDto> geoCoordinates)
{
var geoCoordinatesLength = geoCoordinates.Count();
if (geoCoordinatesLength < 2)
return new TrajectoryVisualizationPlanDto[0];
var cartesianCoordinates = new Location[geoCoordinatesLength];
cartesianCoordinates[0] = new();
var geoCoordinatesArray = geoCoordinates.OrderBy(c => c.WellboreDepth).ToArray();
for (var i = 1; i < geoCoordinatesLength; i++)
{
var intervalGeoParams = geoCoordinatesArray[i - 1];
var deltaWellLength = geoCoordinatesArray[i].WellboreDepth - intervalGeoParams.WellboreDepth;
var projectionLengthToXYSurface = deltaWellLength * Math.Sin(intervalGeoParams.ZenithAngle * Math.PI / 180);
var dDepth = deltaWellLength * Math.Cos(intervalGeoParams.ZenithAngle * Math.PI / 180);
var dNorth = projectionLengthToXYSurface * Math.Sin(intervalGeoParams.AzimuthGeo * Math.PI / 180);
var dEast = projectionLengthToXYSurface * Math.Cos(intervalGeoParams.AzimuthGeo * Math.PI / 180);
var preCoordinates = cartesianCoordinates[i - 1];
var coordinates = new Location(
preCoordinates.North + dNorth,
preCoordinates.East + dEast,
preCoordinates.Depth + dDepth,
geoCoordinatesArray[i].Radius,
geoCoordinatesArray[i].Comment
);
cartesianCoordinates[i] = coordinates;
}
return cartesianCoordinates.Select(location => new TrajectoryVisualizationPlanDto {
X = location.East,
Y = -location.Depth,
Z = -location.North,
Comment = location.Comment,
Radius = location.Radius
});
}
}
}

View File

@ -237,7 +237,7 @@ namespace AsbCloudInfrastructure.Services.WellOperationService
return sections;
}
private static PlanFactBase<StatOperationsDto> GetStatTotal(IEnumerable<WellOperation> operations,
private static PlanFactDto<StatOperationsDto> GetStatTotal(IEnumerable<WellOperation> operations,
int idWellState, double timezoneOffsetH)
{
var operationsPlan = operations.Where(o => o.IdType == WellOperation.IdOperationTypePlan);
@ -245,7 +245,7 @@ namespace AsbCloudInfrastructure.Services.WellOperationService
var factEnd = CalcStat(operationsFact, timezoneOffsetH);
if (factEnd is not null && idWellState != 2)
factEnd.End = null;
var section = new PlanFactBase<StatOperationsDto>
var section = new PlanFactDto<StatOperationsDto>
{
Plan = CalcStat(operationsPlan, timezoneOffsetH),
Fact = factEnd,

View File

@ -1,40 +0,0 @@
using AsbCloudApp.Data.SAUB;
using AsbCloudApp.Services;
using AsbCloudDb.Model;
using AsbCloudInfrastructure.Services.SAUB;
using Moq;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Xunit;
namespace AsbCloudWebApi.Tests.ServicesTests;
public class EventServiceTest
{
private readonly AsbCloudDbContext context;
private readonly EventService service;
public EventServiceTest()
{
context = TestHelpter.MakeRealTestContext();
var telemetryTracker = new Mock<ITelemetryTracker>();
var imezoneServiceMock = new Mock<ITimezoneService>();
var telemetryService = new TelemetryService(context, TestHelpter.MemoryCache, telemetryTracker.Object, imezoneServiceMock.Object);
service = new EventService(context, TestHelpter.MemoryCache, telemetryService);
}
[Fact]
public async Task Upsert_telemetry_events()
{
var dtos = new List<EventDto>
{
new EventDto {Id = 1, IdCategory = 1, Message = "Test message 1"},
new EventDto {Id = 2, IdCategory = 1, Message = "Test message 2"}
};
await service.UpsertAsync("uid", dtos);
Assert.Equal(2, context.TelemetryEvents.Count());
}
}

View File

@ -1,87 +0,0 @@
using AsbCloudApp.Data;
using AsbCloudApp.Data.SAUB;
using AsbCloudApp.Services;
using AsbCloudDb.Model;
using AsbCloudInfrastructure.Services.SAUB;
using Moq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Xunit;
namespace AsbCloudWebApi.Tests.ServicesTests
{
public class TelemetryDataSaubServiceTest
{
private readonly Mock<ITelemetryTracker> telemetryTracker;
private readonly Mock<ITimezoneService> timezoneService;
private readonly SimpleTimezoneDto timezone;
private readonly AsbCloudDbContext context;
private readonly TelemetryService telemetryService;
private readonly TelemetryUserService telemetryUserService;
private readonly TelemetryDataCache<TelemetryDataSaubDto> telemetryDataSaubCache;
private readonly DateTime drillingStartDate;
private readonly string uuid;
public TelemetryDataSaubServiceTest()
{
timezone = new() { Hours = 7 };
drillingStartDate = new DateTime(2022, 1, 1, 0, 0, 0, DateTimeKind.Unspecified);
uuid = drillingStartDate.ToString("yyyyMMdd_HHmmssfff");
AsbCloudInfrastructure.DependencyInjection.MapsterSetup();
telemetryTracker = new Mock<ITelemetryTracker>();
timezoneService = new Mock<ITimezoneService>();
timezoneService.Setup(s => s.GetOrDefaultByCoordinatesAsync(It.IsAny<double>(), It.IsAny<double>(), It.IsAny<CancellationToken>()))
.Returns(Task.FromResult(timezone));
timezoneService.Setup(s => s.GetOrDefaultByCoordinates(It.IsAny<double>(), It.IsAny<double>()))
.Returns(timezone);
context = TestHelpter.MakeRealTestContext();
telemetryService = new TelemetryService(context, TestHelpter.MemoryCache, telemetryTracker.Object, timezoneService.Object);
telemetryUserService = new TelemetryUserService(context, telemetryService, TestHelpter.MemoryCache);
telemetryDataSaubCache = TelemetryDataCache<TelemetryDataSaubDto>.GetInstance<TelemetryDataSaub>(context, out Task _);
var info = new TelemetryInfoDto
{
TimeZoneOffsetTotalHours = timezone.Hours,
DrillingStartDate = drillingStartDate,
};
telemetryService.UpdateInfoAsync(uuid, info, CancellationToken.None).Wait();
}
~TelemetryDataSaubServiceTest()
{
var ts = context.Telemetries.Where(t => t.RemoteUid == uuid);
context.Telemetries.RemoveRange(ts);
context.SaveChanges();
context?.Dispose();
}
[Fact]
public async Task UpdateDataAsync()
{
// Arrange
var telemetryDataSaubService = new TelemetryDataSaubService(context, telemetryService, telemetryUserService, telemetryDataSaubCache);
var now = DateTimeOffset.UtcNow.ToOffset(TimeSpan.FromHours(timezone.Hours)).DateTime;
var tuser = "Завулон";
var newData = new List<TelemetryDataSaubDto>
{
new TelemetryDataSaubDto{
DateTime = now,
AxialLoad = 1,
MseState = 1,
User = tuser,
}
};
// act
var affected = await telemetryDataSaubService.UpdateDataAsync(uuid, newData, CancellationToken.None);
// assert
Assert.Equal(1, affected);
}
}
}

View File

@ -13,7 +13,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests
{
public class TrajectoryVisualizationServiceTest
{
private Mock<T> MakeTrajectoryRepositoryMock<T>(IEnumerable<TrajectoryDto> dateForGetMethod)
private Mock<T> MakeTrajectoryRepositoryMock<T>(IEnumerable<TrajectoryFactDto> dateForGetMethod)
where T : class, ITrajectoryRepository
{
var mock = new Mock<T>();
@ -27,7 +27,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests
[Fact]
public async Task GetTrajectoryAsync_SameCounts()
{
var plannedTrajectory = new TrajectoryDto[]
var plannedTrajectory = new TrajectoryFactDto[]
{
new(0d, 0d, 0d),
new(0d, 0d, 10d),
@ -37,7 +37,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests
new(0d, 0d, 50d),
};
var actualTrajectory = new TrajectoryDto[]
var actualTrajectory = new TrajectoryFactDto[]
{
new(0, 0, 0),
new(30,30,10),
@ -55,7 +55,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests
[Fact]
public async Task GetTrajectoryAsync_StraigthBore()
{
var trajectory = new TrajectoryDto[]
var trajectory = new TrajectoryFactDto[]
{
new(0, 0, 0),
new(0, 0, 0),
@ -84,7 +84,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests
[Fact]
public async Task GetTrajectoryAsync_Match()
{
var trajectory = new TrajectoryDto[]
var trajectory = new TrajectoryFactDto[]
{
new(0, 0, 0),
new(10, 30, 30),

View File

@ -1,6 +1,7 @@
using AsbCloudApp.Data;
using AsbCloudApp.Repositories;
using AsbCloudApp.Services;
using AsbCloudInfrastructure.Services.Trajectory;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
@ -23,12 +24,12 @@ namespace AsbCloudWebApi.Controllers
private readonly IWellService wellService;
private readonly IPlannedTrajectoryImportService plannedTrajectoryImportService;
private readonly IPlannedTrajectoryRepository plannedTrajectoryRepository;
private readonly ITrajectoryVisualizationService trajectoryVisualizationService;
private readonly TrajectoryVisualizationBaseService trajectoryVisualizationService;
public PlannedTrajectoryController(IWellService wellService,
IPlannedTrajectoryImportService plannedTrajectoryImportService,
IPlannedTrajectoryRepository plannedTrajectoryRepository,
ITrajectoryVisualizationService trajectoryVisualizationService)
TrajectoryVisualizationBaseService trajectoryVisualizationService)
{
this.plannedTrajectoryImportService = plannedTrajectoryImportService;
this.wellService = wellService;
@ -231,7 +232,7 @@ namespace AsbCloudWebApi.Controllers
/// <param name="token"></param>
/// <returns></returns>
[HttpGet]
[ProducesResponseType(typeof(PlanFactBase<IEnumerable<TrajectoryVisualizationDto>>), (int)System.Net.HttpStatusCode.OK)]
[ProducesResponseType(typeof(PlanFactBase<IEnumerable<TrajectoryVisualizationPlanDto>, IEnumerable<TrajectoryVisualizationFactDto>>), (int)System.Net.HttpStatusCode.OK)]
public async Task<IActionResult> GetPlanFactTrajectoryAsync(int idWell, CancellationToken token)
{
if (!await CanUserAccessToWellAsync(idWell,

View File

@ -39,47 +39,4 @@ namespace ConsoleApp1
public IConfigurationSection GetSection(string key) => this;
}
internal static class ServiceFactory
{
private static readonly DbContextOptions<AsbCloudDbContext> options = new DbContextOptionsBuilder<AsbCloudDbContext>()
.UseNpgsql("Host=localhost;Database=postgres;Username=postgres;Password=q;Persist Security Info=True")
.Options;
static ConfigurationService ConfigurationService { get; } = new ConfigurationService();
static TimezoneService TimezoneService { get; } = new TimezoneService();
public static AsbCloudDbContext Context { get; } = MakeContext();
public static AsbCloudDbContext MakeContext()
=> MakeContext(options);
public static IMemoryCache MemoryCache = new MemoryCache(new MemoryCacheOptions());
public static AsbCloudDbContext MakeContext(DbContextOptions<AsbCloudDbContext> options)
=> new (options);
public static AsbCloudDbContext MakeContext(string cusomConnectionString)
=> MakeContext(new DbContextOptionsBuilder<AsbCloudDbContext>().UseNpgsql(cusomConnectionString).Options);
public static void MapsterSetup()
=> AsbCloudInfrastructure.DependencyInjection.MapsterSetup();
public static TelemetryTracker MakeTelemetryTracker()
=> new (ConfigurationService, MemoryCache);
public static TelemetryService MakeTelemetryService()
=> new (Context, MemoryCache, MakeTelemetryTracker(), TimezoneService);
public static WellService MakeWellService()
=> new (Context, MemoryCache, MakeTelemetryService(), TimezoneService);
public static WellOperationRepository MakeWellOperationRepository()
=> new (Context, MemoryCache, MakeWellService());
public static OperationsStatService MakeOperationsStatService()
=> new (Context, MemoryCache, MakeWellService());
public static ScheduleReportService MakeScheduleReportService()
=> new(MakeOperationsStatService(), MakeWellService());
}
}