diff --git a/AsbCloudApp/Data/ChangeLogDto.cs b/AsbCloudApp/Data/ChangeLogDto.cs
new file mode 100644
index 00000000..c9b94508
--- /dev/null
+++ b/AsbCloudApp/Data/ChangeLogDto.cs
@@ -0,0 +1,64 @@
+using AsbCloudApp.Data.User;
+using System;
+
+namespace AsbCloudApp.Data;
+
+///
+/// Часть записи описывающая изменение
+///
+public class ChangeLogDto
+{
+ ///
+ /// Запись
+ ///
+ public required T Item { get; set; }
+
+ ///
+ /// ИД записи
+ ///
+ public int Id { get; set; }
+
+ ///
+ /// Автор
+ ///
+ public UserDto? Author { get; set; }
+
+ ///
+ /// Автор
+ ///
+ public UserDto? Editor { get; set; }
+
+ ///
+ /// Дата создания записи
+ ///
+ public DateTimeOffset Creation { get; set; }
+
+ ///
+ /// Дата устаревания (например при удалении)
+ ///
+ public DateTimeOffset? Obsolete { get; set; }
+
+ ///
+ /// ИД состояния записи:
+ ///
+ /// -
+ /// 0
+ /// актуальная запись
+ ///
+ /// -
+ /// 1
+ /// замененная запись
+ ///
+ /// -
+ /// 2
+ /// удаленная запись
+ ///
+ ///
+ ///
+ public int IdState { get; set; }
+
+ ///
+ /// Id заменяемой записи
+ ///
+ public int? IdPrevious { get; set; }
+}
diff --git a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanBaseController.cs b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanBaseController.cs
index f4df65cc..f1c951bf 100644
--- a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanBaseController.cs
+++ b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanBaseController.cs
@@ -1,23 +1,23 @@
-using AsbCloudApp.Repositories;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using System.Collections.Generic;
-using System.Threading.Tasks;
-using System.Threading;
-using Microsoft.AspNetCore.Http;
-using AsbCloudApp.Exceptions;
-using AsbCloudApp.Requests;
-using System;
-using System.IO;
-using AsbCloudApp.Services;
-using System.Linq;
-using AsbCloudApp.Data;
-using AsbCloudApp.Requests.ParserOptions;
+using AsbCloudApp.Data;
using AsbCloudApp.Data.ProcessMaps;
-using System.ComponentModel.DataAnnotations;
+using AsbCloudApp.Exceptions;
+using AsbCloudApp.Repositories;
+using AsbCloudApp.Requests;
using AsbCloudApp.Requests.ExportOptions;
+using AsbCloudApp.Requests.ParserOptions;
+using AsbCloudApp.Services;
using AsbCloudApp.Services.Export;
using AsbCloudApp.Services.Parsers;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.IO;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
namespace AsbCloudWebApi.Controllers.ProcessMaps;
@@ -33,16 +33,19 @@ public abstract class ProcessMapPlanBaseController : ControllerBase
private readonly IChangeLogRepository repository;
private readonly IWellService wellService;
private readonly IParserService parserService;
+ private readonly ITelemetryService telemetryService;
private readonly IExportService processMapPlanExportService;
protected ProcessMapPlanBaseController(IChangeLogRepository repository,
IWellService wellService,
IParserService parserService,
- IExportService processMapPlanExportService)
+ IExportService processMapPlanExportService,
+ ITelemetryService telemetryService)
{
this.repository = repository;
this.wellService = wellService;
this.parserService = parserService;
+ this.telemetryService = telemetryService;
this.processMapPlanExportService = processMapPlanExportService;
}
@@ -58,7 +61,7 @@ public abstract class ProcessMapPlanBaseController : ControllerBase
[HttpPost]
[ProducesResponseType(typeof(int), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)]
- public async Task InsertRange([FromRoute][Range(0,int.MaxValue)] int idWell, IEnumerable dtos, CancellationToken token)
+ public async Task InsertRange([FromRoute][Range(0, int.MaxValue)] int idWell, IEnumerable dtos, CancellationToken token)
{
var idUser = await AssertUserHasAccessToWell(idWell, token);
@@ -131,21 +134,71 @@ public abstract class ProcessMapPlanBaseController : ControllerBase
/// Получение
///
///
- ///
///
///
[HttpGet]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)]
- public async Task>> Get([FromRoute] int idWell, [FromQuery] ProcessMapPlanBaseRequest request, CancellationToken token)
+ public async Task>> Get([FromRoute] int idWell, CancellationToken token)
{
await AssertUserHasAccessToWell(idWell, token);
- var serviceRequest = new ProcessMapPlanBaseRequestWithWell(request, idWell);
+ var serviceRequest = new ProcessMapPlanBaseRequestWithWell(idWell);
var result = await repository.Get(serviceRequest, token);
return Ok(result);
}
+ ///
+ /// Получение
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpGet("history")]
+ [ProducesResponseType(StatusCodes.Status200OK)]
+ [ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)]
+ public async Task>>> Get([FromRoute] int idWell, DateTimeOffset? moment, CancellationToken token)
+ {
+ await AssertUserHasAccessToWell(idWell, token);
+
+ var serviceRequest = new ProcessMapPlanBaseRequestWithWell(new ProcessMapPlanBaseRequest()
+ {
+ Moment = moment,
+ }, idWell);
+
+ var result = await repository.GetChangeLog(serviceRequest, null, token);
+ return Ok(result);
+ }
+
+ ///
+ /// Получение
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpGet("/api/telemetry/{uid}/[controller]")]
+ [ProducesResponseType(StatusCodes.Status200OK)]
+ [ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)]
+ public async Task>>> Get(string uid, DateTimeOffset? updateFrom, CancellationToken token)
+ {
+ var idWell = telemetryService.GetIdWellByTelemetryUid(uid) ?? -1;
+
+ if (idWell < 0)
+ return this.ValidationBadRequest(nameof(uid), "Скважина по uid не найдена");
+
+ await AssertUserHasAccessToWell(idWell, token);
+
+ var serviceRequest = new ProcessMapPlanBaseRequestWithWell(new ProcessMapPlanBaseRequest()
+ {
+ UpdateFrom = updateFrom,
+ }, idWell);
+
+ var result = await repository.GetChangeLog(serviceRequest, null, token);
+ return Ok(result);
+ }
+
///
/// Изменения за определенную дату
///
@@ -156,7 +209,7 @@ public abstract class ProcessMapPlanBaseController : ControllerBase
[HttpGet("changeLog")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)]
- public async Task>> GetChangeLog([FromRoute] int idWell, [FromQuery] DateOnly? date, CancellationToken token)
+ public async Task>>> GetChangeLog([FromRoute] int idWell, [FromQuery] DateOnly? date, CancellationToken token)
{
await AssertUserHasAccessToWell(idWell, token);
@@ -197,7 +250,7 @@ public abstract class ProcessMapPlanBaseController : ControllerBase
{
if (!dtos.Any())
return NoContent();
-
+
var idUser = await AssertUserHasAccessToWell(idWell, token);
foreach (var dto in dtos)
@@ -218,7 +271,7 @@ public abstract class ProcessMapPlanBaseController : ControllerBase
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)]
public async Task>> Parse(int idWell,
- [Required] IFormFile file,
+ [Required] IFormFile file,
CancellationToken token)
{
await AssertUserHasAccessToWell(idWell, token);
@@ -229,7 +282,7 @@ public abstract class ProcessMapPlanBaseController : ControllerBase
{
var options = new WellRelatedParserRequest(idWell);
var dto = parserService.Parse(stream, options);
-
+
return Ok(dto);
}
catch (FileFormatException ex)
@@ -271,7 +324,7 @@ public abstract class ProcessMapPlanBaseController : ControllerBase
throw new ForbidException("Нет доступа к скважине");
return idUser;
}
-
+
///
/// Формируем excel файл с текущими строками РТК
///
diff --git a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanDrillingController.cs b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanDrillingController.cs
index 241be301..e2193a58 100644
--- a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanDrillingController.cs
+++ b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanDrillingController.cs
@@ -15,8 +15,9 @@ public class ProcessMapPlanDrillingController : ProcessMapPlanBaseController repository,
IWellService wellService,
ProcessMapPlanDrillingParser parserService,
+ ITelemetryService telemetryService,
ProcessMapPlanDrillingExportService processMapPlanExportService)
- : base(repository, wellService, parserService, processMapPlanExportService)
+ : base(repository, wellService, parserService, processMapPlanExportService, telemetryService)
{
}
diff --git a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanReamController.cs b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanReamController.cs
index 9c103f06..7482686a 100644
--- a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanReamController.cs
+++ b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanReamController.cs
@@ -15,8 +15,9 @@ public class ProcessMapPlanReamController : ProcessMapPlanBaseController repository,
IWellService wellService,
ProcessMapPlanReamParser parserService,
+ ITelemetryService telemetryService,
ProcessMapPlanReamExportService processMapPlanExportService)
- : base(repository, wellService, parserService, processMapPlanExportService)
+ : base(repository, wellService, parserService, processMapPlanExportService, telemetryService)
{
}