Фикс Drill test

This commit is contained in:
Степанов Дмитрий 2024-04-22 11:40:14 +03:00
parent 01e953c10f
commit 4576a40ab0
4 changed files with 19 additions and 14 deletions

View File

@ -33,9 +33,9 @@ namespace AsbCloudApp.Repositories
/// Сохранить данные drill_test
/// </summary>
/// <param name="idTelemetry">ключ телеметрии</param>
/// <param name="dto">запись drill test</param>
/// <param name="dtos">записи drill test</param>
/// <param name="token"></param>
/// <returns></returns>
Task<int> SaveDataAsync(int idTelemetry, DrillTestBaseDto dto, CancellationToken token);
Task<int> SaveDataAsync(int idTelemetry, IEnumerable<DrillTestBaseDto> dtos, CancellationToken token);
}
}

View File

@ -63,16 +63,20 @@ namespace AsbCloudInfrastructure.Repository
return dto;
}
public async Task<int> SaveDataAsync(int idTelemetry, DrillTestBaseDto dto, CancellationToken token)
public async Task<int> SaveDataAsync(int idTelemetry, IEnumerable<DrillTestBaseDto> dtos, CancellationToken token)
{
var entity = dto.Adapt<DrillTest>();
entity.IdTelemetry = idTelemetry;
db.DrillTests.Add(entity);
var entities = dtos.Select(dto =>
{
var entity = dto.Adapt<DrillTest>();
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<DrillTestDto>();
dto.TimeStampStart = dto.TimeStampStart.ToRemoteDateTime(dto.Telemetry?.TimeZone?.Hours ?? 0);

View File

@ -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
/// Сохраняет в БД.
/// </summary>
/// <param name="uid">уникальный идентификатор записи drill_test</param>
/// <param name="dto">запись drill test</param>
/// <param name="dtos">записи drill test</param>
/// <param name="token"></param>
/// <returns></returns>
[AllowAnonymous]
[HttpPost("api/telemetry/{uid}/[controller]")]
public async Task<IActionResult> PostDataAsync(
string uid,
[FromBody] DrillTestBaseDto dto,
string uid,
[FromBody] IEnumerable<DrillTestBaseDto> 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();

View File

@ -17,10 +17,10 @@ namespace AsbCloudWebApi.SignalR.Clients
/// Отправка клиенту уведомления о доставке с панели drill test данных.
/// Для подписки на метод необходимо отправить сообщение в формате $"well_{idWell}"
/// </summary>
/// <param name="dto"></param>
/// <param name="dtos"></param>
/// <param name="token"></param>
/// <returns></returns>
Task ReceiveDrilltestData(DrillTestBaseDto dto, CancellationToken token);
Task ReceiveDrilltestData(IEnumerable<DrillTestBaseDto> dtos, CancellationToken token);
/// <summary>
/// Обновление записей РТК