From 792790556cd1cfdc424f92510a88b92a228878eb Mon Sep 17 00:00:00 2001 From: Olga Nemt Date: Fri, 17 May 2024 16:40:31 +0500 Subject: [PATCH] =?UTF-8?q?3=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=B0=20get?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20ProcessMapPlanBaseController?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AsbCloudApp/Data/ChangeLogDto.cs | 64 +++++++++++ .../ProcessMapPlanBaseController.cs | 105 +++++++++++++----- .../ProcessMapPlanDrillingController.cs | 3 +- .../ProcessMapPlanReamController.cs | 3 +- 4 files changed, 147 insertions(+), 28 deletions(-) create mode 100644 AsbCloudApp/Data/ChangeLogDto.cs 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) { }