diff --git a/AsbCloudInfrastructure/Services/SAUB/TelemetryService.cs b/AsbCloudInfrastructure/Services/SAUB/TelemetryService.cs index 1f841aad..8728cdaf 100644 --- a/AsbCloudInfrastructure/Services/SAUB/TelemetryService.cs +++ b/AsbCloudInfrastructure/Services/SAUB/TelemetryService.cs @@ -85,6 +85,15 @@ namespace AsbCloudInfrastructure.Services.SAUB if (telemetry is null) throw new Exception($"Telemetry id: {idTelemetry} does not exist."); + if (telemetry.Well?.Timezone is not null) + { + telemetry.TimeZone = telemetry.Well.Timezone; + db.Telemetries.Upsert(telemetry); + db.SaveChanges(); + DropTelemetryCache(); + return telemetry.TimeZone.Adapt(); + } + if (telemetry.TimeZone is not null) return telemetry.TimeZone.Adapt(); @@ -102,14 +111,6 @@ namespace AsbCloudInfrastructure.Services.SAUB return telemetry.TimeZone.Adapt(); } - if (telemetry.Well?.Timezone is not null) - { - telemetry.TimeZone = telemetry.Well.Timezone; - db.Telemetries.Upsert(telemetry); - db.SaveChanges(); - DropTelemetryCache(); - return telemetry.TimeZone.Adapt(); - } throw new Exception($"Telemetry id: {idTelemetry} can't find timezone."); } diff --git a/AsbCloudWebApi/Controllers/ProcessMapController.cs b/AsbCloudWebApi/Controllers/ProcessMapController.cs index 1f6ce9a0..89ce8cd5 100644 --- a/AsbCloudWebApi/Controllers/ProcessMapController.cs +++ b/AsbCloudWebApi/Controllers/ProcessMapController.cs @@ -1,17 +1,17 @@ using AsbCloudApp.Data.ProcessMap; using AsbCloudApp.Repositories; using AsbCloudApp.Services; +using AsbCloudWebApi.SignalR; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.SignalR; using System; using System.Collections.Generic; -using System.Linq; using System.Threading; using System.Threading.Tasks; namespace AsbCloudWebApi.Controllers { - /// /// РТК /// @@ -21,18 +21,23 @@ namespace AsbCloudWebApi.Controllers public class ProcessMapController : CrudWellRelatedController { private readonly ITelemetryService telemetryService; + private readonly IHubContext telemetryHubContext; private readonly IProcessMapReportMakerService processMapReportService; private readonly IProcessMapReportService processMapService; + private const string SirnalRMethodGetDataName = "UpdateProcessMap"; + public ProcessMapController( IWellService wellService, IProcessMapPlanRepository repository, IProcessMapReportMakerService processMapReportService, IProcessMapReportService processMapService, - ITelemetryService telemetryService) + ITelemetryService telemetryService, + IHubContext telemetryHubContext) : base(wellService, repository) { this.telemetryService = telemetryService; + this.telemetryHubContext = telemetryHubContext; this.processMapReportService = processMapReportService; this.processMapService = processMapService; @@ -56,8 +61,7 @@ namespace AsbCloudWebApi.Controllers if (idWell is null) return BadRequest($"Wrong uid {uid}"); - var dto = Enumerable.Empty(); - return Ok(dto); + throw new NotImplementedException(); } /// @@ -136,7 +140,9 @@ namespace AsbCloudWebApi.Controllers public override async Task> InsertAsync([FromBody] ProcessMapPlanDto value, CancellationToken token) { value.IdUser = User.GetUserId() ?? -1; - return await base.InsertAsync(value, token); + var result = await base.InsertAsync(value, token); + await NotifyUsersBySignalR(value.IdWell, token); + return result; } /// @@ -149,8 +155,16 @@ namespace AsbCloudWebApi.Controllers public override async Task> UpdateAsync([FromBody] ProcessMapPlanDto value, CancellationToken token) { value.IdUser = User.GetUserId() ?? -1; - return await base.UpdateAsync(value, token); + var result = await base.UpdateAsync(value, token); + await NotifyUsersBySignalR(value.IdWell, token); + return result; + } + + private async Task NotifyUsersBySignalR(int idWell, CancellationToken token) + { + var dtos = await service.GetAllAsync(idWell, null, token); + _ = Task.Run(() => telemetryHubContext.Clients.Group($"well_{idWell}") + .SendAsync(SirnalRMethodGetDataName, dtos), CancellationToken.None); } } - } \ No newline at end of file