From 4576a40ab00b361cfaffbf07b5c483fa3e299752 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D1=82=D0=B5=D0=BF=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=94?= =?UTF-8?q?=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Mon, 22 Apr 2024 11:40:14 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20Drill=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AsbCloudApp/Repositories/IDrillTestRepository.cs | 4 ++-- .../Repository/DrillTestRepository.cs | 14 +++++++++----- AsbCloudWebApi/Controllers/DrillTestController.cs | 11 ++++++----- .../SignalR/Clients/ITelemetryHubClient.cs | 4 ++-- 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/AsbCloudApp/Repositories/IDrillTestRepository.cs b/AsbCloudApp/Repositories/IDrillTestRepository.cs index 22f11a06..b009273b 100644 --- a/AsbCloudApp/Repositories/IDrillTestRepository.cs +++ b/AsbCloudApp/Repositories/IDrillTestRepository.cs @@ -33,9 +33,9 @@ namespace AsbCloudApp.Repositories /// Сохранить данные drill_test /// /// ключ телеметрии - /// запись drill test + /// записи drill test /// /// - Task SaveDataAsync(int idTelemetry, DrillTestBaseDto dto, CancellationToken token); + Task SaveDataAsync(int idTelemetry, IEnumerable dtos, CancellationToken token); } } diff --git a/AsbCloudInfrastructure/Repository/DrillTestRepository.cs b/AsbCloudInfrastructure/Repository/DrillTestRepository.cs index d8700929..961dd67b 100644 --- a/AsbCloudInfrastructure/Repository/DrillTestRepository.cs +++ b/AsbCloudInfrastructure/Repository/DrillTestRepository.cs @@ -63,16 +63,20 @@ namespace AsbCloudInfrastructure.Repository return dto; } - public async Task SaveDataAsync(int idTelemetry, DrillTestBaseDto dto, CancellationToken token) + public async Task SaveDataAsync(int idTelemetry, IEnumerable dtos, CancellationToken token) { - var entity = dto.Adapt(); - entity.IdTelemetry = idTelemetry; - db.DrillTests.Add(entity); + var entities = dtos.Select(dto => + { + var entity = dto.Adapt(); + entity.IdTelemetry = idTelemetry; + return entity; + }); + db.DrillTests.AddRange(entities); var result = await db.SaveChangesAsync(token); return result; } - private DrillTestDto Convert(DrillTest entity) + private static DrillTestDto Convert(DrillTest entity) { var dto = entity.Adapt(); dto.TimeStampStart = dto.TimeStampStart.ToRemoteDateTime(dto.Telemetry?.TimeZone?.Hours ?? 0); diff --git a/AsbCloudWebApi/Controllers/DrillTestController.cs b/AsbCloudWebApi/Controllers/DrillTestController.cs index 8562e54c..18a30bf4 100644 --- a/AsbCloudWebApi/Controllers/DrillTestController.cs +++ b/AsbCloudWebApi/Controllers/DrillTestController.cs @@ -11,6 +11,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; using System; +using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Net; using System.Threading; @@ -51,27 +52,27 @@ public class DrillTestController : ControllerBase /// Сохраняет в БД. /// /// уникальный идентификатор записи drill_test - /// запись drill test + /// записи drill test /// /// [AllowAnonymous] [HttpPost("api/telemetry/{uid}/[controller]")] public async Task PostDataAsync( - string uid, - [FromBody] DrillTestBaseDto dto, + string uid, + [FromBody] IEnumerable dtos, CancellationToken token) { var telemetry = telemetryService.GetOrCreateTelemetryByUid(uid); if (telemetry is null) throw new Exception($"Telemetry with RemoteUid: {uid} does not exist."); - await drillTestRepository.SaveDataAsync(telemetry.Id, dto, token); + await drillTestRepository.SaveDataAsync(telemetry.Id, dtos, token); var idWell = telemetryService.GetIdWellByTelemetryUid(uid); if (idWell is not null) _ = Task.Run(async () => { var clients = telemetryHubContext.Clients.Group($"well_{idWell}"); - await clients.ReceiveDrilltestData(dto, token); + await clients.ReceiveDrilltestData(dtos, token); }, CancellationToken.None); return Ok(); diff --git a/AsbCloudWebApi/SignalR/Clients/ITelemetryHubClient.cs b/AsbCloudWebApi/SignalR/Clients/ITelemetryHubClient.cs index 2e831d1e..5e8869cf 100644 --- a/AsbCloudWebApi/SignalR/Clients/ITelemetryHubClient.cs +++ b/AsbCloudWebApi/SignalR/Clients/ITelemetryHubClient.cs @@ -17,10 +17,10 @@ namespace AsbCloudWebApi.SignalR.Clients /// Отправка клиенту уведомления о доставке с панели drill test данных. /// Для подписки на метод необходимо отправить сообщение в формате $"well_{idWell}" /// - /// + /// /// /// - Task ReceiveDrilltestData(DrillTestBaseDto dto, CancellationToken token); + Task ReceiveDrilltestData(IEnumerable dtos, CancellationToken token); /// /// Обновление записей РТК