From 5b82229a94e63bffa7fa3b15136c956098cdd43e Mon Sep 17 00:00:00 2001 From: KharchenkoVladimir Date: Thu, 21 Oct 2021 15:57:20 +0500 Subject: [PATCH] Fixed WellDto creation in WellService (fixed LastTelemetryDate field) --- AsbCloudApp/Services/ITelemetryService.cs | 3 +- .../Services/TelemetryService.cs | 24 +++----- .../Services/WellService.cs | 61 ++++++++++++------- 3 files changed, 47 insertions(+), 41 deletions(-) diff --git a/AsbCloudApp/Services/ITelemetryService.cs b/AsbCloudApp/Services/ITelemetryService.cs index 73c5bae6..64d8acec 100644 --- a/AsbCloudApp/Services/ITelemetryService.cs +++ b/AsbCloudApp/Services/ITelemetryService.cs @@ -16,8 +16,7 @@ namespace AsbCloudApp.Services int? GetIdTelemetryByIdWell(int idWell); int Merge(IEnumerable telemetryIds); IEnumerable<(string Key, int[] Ids)> GetRedundentRemoteUids(); - Task> GetTransmittingWellsAsync(int idCompany, - CancellationToken token); + IEnumerable GetTransmittingTelemetriesAsync(int idCompany); DateTime GetLastTelemetryDate(string telemetryUid); DateTime GetLastTelemetryDate(int telemetryId); } diff --git a/AsbCloudInfrastructure/Services/TelemetryService.cs b/AsbCloudInfrastructure/Services/TelemetryService.cs index 6d23f904..7b8dcf9c 100644 --- a/AsbCloudInfrastructure/Services/TelemetryService.cs +++ b/AsbCloudInfrastructure/Services/TelemetryService.cs @@ -5,10 +5,7 @@ using AsbCloudInfrastructure.Services.Cache; using Mapster; using System.Collections.Generic; using System.Linq; -using System.Threading; -using System.Threading.Tasks; using System; -using System.Diagnostics; using Microsoft.EntityFrameworkCore; namespace AsbCloudInfrastructure.Services @@ -29,25 +26,18 @@ namespace AsbCloudInfrastructure.Services this.telemetryTracker = telemetryTracker; } - public async Task> GetTransmittingWellsAsync(int idCompany, CancellationToken token) + public IEnumerable GetTransmittingTelemetriesAsync(int idCompany) { - var wells = new List(); + var telemetryDtos = new List(); IEnumerable activeTelemetriesUids = telemetryTracker.GetTransmittingTelemetryUids(); if (activeTelemetriesUids.Any()) { - wells = await db.GetWellsForCompany(idCompany) - .Where(w => activeTelemetriesUids.Contains(w.Telemetry.RemoteUid)) - .AsNoTracking() - .ToListAsync(token) - .ConfigureAwait(false); + var telemetries = cacheTelemetry + .Where(t => activeTelemetriesUids.Contains(t.RemoteUid)); + telemetryDtos = telemetries.Adapt().ToList(); } - return wells.Select(w => new WellDto - { - Id = w.Id, - Caption = w.Caption, - Cluster = w.Cluster.Caption, - Deposit = w.Cluster.Deposit.Caption, - }); + + return telemetryDtos; } public void SaveRequestDate(string uid) => diff --git a/AsbCloudInfrastructure/Services/WellService.cs b/AsbCloudInfrastructure/Services/WellService.cs index cd194caa..71c2e0ba 100644 --- a/AsbCloudInfrastructure/Services/WellService.cs +++ b/AsbCloudInfrastructure/Services/WellService.cs @@ -29,30 +29,38 @@ namespace AsbCloudInfrastructure.Services public DateTime GetLastTelemetryDate(int idWell) { - var lastTelemetryDate = DateTime.MinValue; + var defaultDate = DateTime.MinValue; var well = cacheWells.FirstOrDefault(w => w.Id == idWell); - if (well is null || well.IdTelemetry is null) - return lastTelemetryDate; + if (well?.IdTelemetry is null) + return defaultDate; - lastTelemetryDate = telemetryService.GetLastTelemetryDate(well.IdTelemetry??0); - return lastTelemetryDate; + var lastTelemetry = db.TelemetryDataSaub + .FirstOrDefault(t => t.Id == well.IdTelemetry); + return lastTelemetry?.Date ?? defaultDate; } - public async Task> GetTransmittingWellsAsync(int idCompany, - CancellationToken token) => - await telemetryService.GetTransmittingWellsAsync(idCompany, token); + public async Task> GetTransmittingWellsAsync(int idCompany, + CancellationToken token) + { + var activeTelemetryIds = telemetryService.GetTransmittingTelemetriesAsync(idCompany) + .Select(t => t.Id); + + var wells = await (from w in db.GetWellsForCompany(idCompany) + where w.IdTelemetry != null && + activeTelemetryIds.Contains((int)w.IdTelemetry) + select w) + .AsNoTracking() + .ToListAsync(token) + .ConfigureAwait(false); + + return wells.Select(Convert); + } public async Task> GetWellsByCompanyAsync(int idCompany, CancellationToken token) { var wells = await db.GetWellsForCompany(idCompany).ToListAsync(token); - return wells.Select(w => new WellDto - { - Id = w.Id, - Caption = w.Caption, - Cluster = w.Cluster.Caption, - Deposit = w.Cluster.Deposit.Caption, - }); + return wells.Select(Convert); } public async Task UpdateWellAsync(int idWell, WellParamsDto dto, @@ -97,20 +105,17 @@ namespace AsbCloudInfrastructure.Services .FirstOrDefaultAsync(w => w.Id == idWell, token) .ConfigureAwait(false); - var dto = entity.Adapt(); - - if (dto is null) - return dto; + if (entity is null) + return null; - dto.Cluster = entity.Cluster?.Caption; - dto.Deposit = entity.Cluster?.Deposit?.Caption; + var dto = Convert(entity); return dto; } public async Task GetWellCaptionByIdAsync(int idWell, CancellationToken token) { var entity = await cacheWells.FirstOrDefaultAsync(w => w.Id == idWell, token).ConfigureAwait(false); - var dto = entity.Adapt(); + var dto = Convert(entity); return dto.Caption; } @@ -134,5 +139,17 @@ namespace AsbCloudInfrastructure.Services _ => "Незвестно", }; } + + private WellDto Convert(Well well) + { + return new WellDto + { + Id = well.Id, + Caption = well.Caption, + Cluster = well.Cluster.Caption, + Deposit = well.Cluster.Deposit.Caption, + LastTelemetryDate = GetLastTelemetryDate(well.Id) + }; + } } }