Fixed WellDto creation in WellService (fixed LastTelemetryDate field)

This commit is contained in:
KharchenkoVladimir 2021-10-21 15:57:20 +05:00
parent d19a62c041
commit 5b82229a94
3 changed files with 47 additions and 41 deletions

View File

@ -16,8 +16,7 @@ namespace AsbCloudApp.Services
int? GetIdTelemetryByIdWell(int idWell);
int Merge(IEnumerable<int> telemetryIds);
IEnumerable<(string Key, int[] Ids)> GetRedundentRemoteUids();
Task<IEnumerable<WellDto>> GetTransmittingWellsAsync(int idCompany,
CancellationToken token);
IEnumerable<TelemetryDto> GetTransmittingTelemetriesAsync(int idCompany);
DateTime GetLastTelemetryDate(string telemetryUid);
DateTime GetLastTelemetryDate(int telemetryId);
}

View File

@ -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<IEnumerable<WellDto>> GetTransmittingWellsAsync(int idCompany, CancellationToken token)
public IEnumerable<TelemetryDto> GetTransmittingTelemetriesAsync(int idCompany)
{
var wells = new List<Well>();
var telemetryDtos = new List<TelemetryDto>();
IEnumerable<string> 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<TelemetryDto>().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) =>

View File

@ -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<IEnumerable<WellDto>> GetTransmittingWellsAsync(int idCompany,
CancellationToken token) =>
await telemetryService.GetTransmittingWellsAsync(idCompany, token);
public async Task<IEnumerable<WellDto>> 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<IEnumerable<WellDto>> 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<int?> UpdateWellAsync(int idWell, WellParamsDto dto,
@ -97,20 +105,17 @@ namespace AsbCloudInfrastructure.Services
.FirstOrDefaultAsync(w => w.Id == idWell, token)
.ConfigureAwait(false);
var dto = entity.Adapt<WellDto>();
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<string> GetWellCaptionByIdAsync(int idWell, CancellationToken token)
{
var entity = await cacheWells.FirstOrDefaultAsync(w => w.Id == idWell, token).ConfigureAwait(false);
var dto = entity.Adapt<WellDto>();
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)
};
}
}
}