diff --git a/AsbCloudApp/Services/ITelemetryService.cs b/AsbCloudApp/Services/ITelemetryService.cs
index c46a32ec..5416baf7 100644
--- a/AsbCloudApp/Services/ITelemetryService.cs
+++ b/AsbCloudApp/Services/ITelemetryService.cs
@@ -1,6 +1,5 @@
using AsbCloudApp.Data;
using AsbCloudApp.Data.SAUB;
-using System;
using System.Threading;
using System.Threading.Tasks;
@@ -28,7 +27,7 @@ namespace AsbCloudApp.Services
///
///
///
- int GetOrCreateTelemetryIdByUid(string uid);
+ TelemetryDto GetOrCreateTelemetryByUid(string uid);
///
/// получить временную зону скважины по idTelemetry
diff --git a/AsbCloudInfrastructure/ReportDataSourcePgCloud.cs b/AsbCloudInfrastructure/ReportDataSourcePgCloud.cs
index cde86686..13a44914 100644
--- a/AsbCloudInfrastructure/ReportDataSourcePgCloud.cs
+++ b/AsbCloudInfrastructure/ReportDataSourcePgCloud.cs
@@ -8,9 +8,9 @@ using System.Linq;
namespace AsbCloudInfrastructure
{
-
public class ReportDataSourcePgCloud : IReportDataSource
{
+ private const string DefaultTimezoneId = "Asia/Yekaterinburg";
private readonly IAsbCloudDbContext context;
private readonly int? idTelemetry;
@@ -36,14 +36,11 @@ namespace AsbCloudInfrastructure
.Include(w => w.RelationCompaniesWells)
.ThenInclude(r => r.Company)
.Include(w => w.Telemetry)
- .FirstOrDefault(w => w.Id == idWell);
+ .FirstOrDefault(w => w.Id == idWell)
+ ?? throw new ArgumentInvalidException("idWell doesn`t exist", nameof(idWell));
- if(well is null)
- throw new ArgumentInvalidException("idWell doesn`t exist", nameof(idWell));
-
- idTelemetry = well?.IdTelemetry;
- if (idTelemetry is null)
- throw new ArgumentInvalidException($"Well {idWell} doesn't contain telemetry", nameof(idWell));
+ idTelemetry = well?.IdTelemetry
+ ?? throw new ArgumentInvalidException($"Well {idWell} doesn't contain telemetry", nameof(idWell));
events = context.TelemetryEvents
.Where(e => e.IdTelemetry == idTelemetry)
@@ -62,7 +59,7 @@ namespace AsbCloudInfrastructure
Well = well.Caption,
Customer = well.RelationCompaniesWells.FirstOrDefault(c => c.Company.IdCompanyType == 1)?.Company.Caption,
DrillingStartDate = well.Telemetry?.Info?.DrillingStartDate.ToRemoteDateTime(timezoneOffset) ?? default,
- TimeZoneId = well.Telemetry?.Info?.TimeZoneId ?? well.Timezone?.TimezoneId ?? default,
+ TimeZoneId = well.Telemetry?.Info?.TimeZoneId ?? well.Timezone?.TimezoneId ?? DefaultTimezoneId,
TimeZoneOffsetTotalHours = timezoneOffset,
};
}
diff --git a/AsbCloudInfrastructure/Repository/TelemetryWirelineRunOutRepository.cs b/AsbCloudInfrastructure/Repository/TelemetryWirelineRunOutRepository.cs
index 410ee78c..81427cf6 100644
--- a/AsbCloudInfrastructure/Repository/TelemetryWirelineRunOutRepository.cs
+++ b/AsbCloudInfrastructure/Repository/TelemetryWirelineRunOutRepository.cs
@@ -31,7 +31,7 @@ namespace AsbCloudInfrastructure.Repository
///
public async Task AddOrUpdateAsync(string uid, TelemetryWirelineRunOutBaseDto dto, CancellationToken token)
{
- var idTelemetry = telemetryService.GetOrCreateTelemetryIdByUid(uid);
+ var idTelemetry = telemetryService.GetOrCreateTelemetryByUid(uid).Id;
var timezoneOffset = telemetryService.GetTimezone(idTelemetry).Hours;
var entity = Convert(idTelemetry, dto, timezoneOffset);
diff --git a/AsbCloudInfrastructure/Services/SAUB/EventService.cs b/AsbCloudInfrastructure/Services/SAUB/EventService.cs
index eb60b691..2d861562 100644
--- a/AsbCloudInfrastructure/Services/SAUB/EventService.cs
+++ b/AsbCloudInfrastructure/Services/SAUB/EventService.cs
@@ -30,12 +30,12 @@ namespace AsbCloudInfrastructure.Services.SAUB
if (!dtos.Any())
return;
- var telemetryId = telemetryService.GetOrCreateTelemetryIdByUid(uid);
+ var telemetry = telemetryService.GetOrCreateTelemetryByUid(uid);
var entities = dtos.Select(dto => new TelemetryEvent
{
IdEvent = dto.Id,
- IdTelemetry = telemetryId,
+ IdTelemetry = telemetry.Id,
IdCategory = dto.IdCategory,
MessageTemplate = dto.Message
});
@@ -43,5 +43,4 @@ namespace AsbCloudInfrastructure.Services.SAUB
memoryCache.DropBasic();
}
}
-
}
diff --git a/AsbCloudInfrastructure/Services/SAUB/MessageService.cs b/AsbCloudInfrastructure/Services/SAUB/MessageService.cs
index a35e5886..7b49d5c8 100644
--- a/AsbCloudInfrastructure/Services/SAUB/MessageService.cs
+++ b/AsbCloudInfrastructure/Services/SAUB/MessageService.cs
@@ -139,14 +139,14 @@ namespace AsbCloudInfrastructure.Services.SAUB
if (!dtos.Any())
return Task.CompletedTask;
- var telemetryId = telemetryService.GetOrCreateTelemetryIdByUid(uid);
- var timezone = telemetryService.GetTimezone(telemetryId);
+ var telemetry = telemetryService.GetOrCreateTelemetryByUid(uid);
+ var timezone = telemetryService.GetTimezone(telemetry.Id);
foreach (var dto in dtos)
{
var entity = dto.Adapt();
entity.Id = 0;
- entity.IdTelemetry = telemetryId;
+ entity.IdTelemetry = telemetry.Id;
entity.DateTime = dto.Date.ToUtcDateTimeOffset(timezone.Hours);
db.TelemetryMessages.Add(entity);
}
diff --git a/AsbCloudInfrastructure/Services/SAUB/TelemetryDataBaseService.cs b/AsbCloudInfrastructure/Services/SAUB/TelemetryDataBaseService.cs
index 359efd18..ffd6416c 100644
--- a/AsbCloudInfrastructure/Services/SAUB/TelemetryDataBaseService.cs
+++ b/AsbCloudInfrastructure/Services/SAUB/TelemetryDataBaseService.cs
@@ -9,7 +9,6 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-
namespace AsbCloudInfrastructure.Services.SAUB
{
public abstract class TelemetryDataBaseService : ITelemetryDataService
@@ -51,15 +50,15 @@ namespace AsbCloudInfrastructure.Services.SAUB
dtosList.Remove(duplicate);
}
- var idTelemetry = telemetryService.GetOrCreateTelemetryIdByUid(uid);
- var timezone = telemetryService.GetTimezone(idTelemetry);
+ var telemetry = telemetryService.GetOrCreateTelemetryByUid(uid);
+ var timezone = telemetryService.GetTimezone(telemetry.Id);
- telemetryDataCache.AddRange(idTelemetry, dtos);
+ telemetryDataCache.AddRange(telemetry.Id, dtos);
var entities = dtosList.Select(dto =>
{
var entity = Convert(dto, timezone.Hours);
- entity.IdTelemetry = idTelemetry;
+ entity.IdTelemetry = telemetry.Id;
return entity;
});
@@ -76,7 +75,7 @@ namespace AsbCloudInfrastructure.Services.SAUB
stopwatch.Stop();
Trace.WriteLine($"Fail to save data telemetry " +
$"uid: {uid}, " +
- $"idTelemetry {idTelemetry}, " +
+ $"idTelemetry {telemetry.Id}, " +
$"count: {entities.Count()}, " +
$"dataDate: {entities.FirstOrDefault()?.DateTime}, " +
$"dbSaveDurationTime:{stopwatch.ElapsedMilliseconds}ms. " +
diff --git a/AsbCloudInfrastructure/Services/SAUB/TelemetryService.cs b/AsbCloudInfrastructure/Services/SAUB/TelemetryService.cs
index 8728cdaf..1ec0b0cf 100644
--- a/AsbCloudInfrastructure/Services/SAUB/TelemetryService.cs
+++ b/AsbCloudInfrastructure/Services/SAUB/TelemetryService.cs
@@ -14,7 +14,6 @@ using System.Threading.Tasks;
namespace AsbCloudInfrastructure.Services.SAUB
{
-
public class TelemetryService : ITelemetryService
{
private readonly IAsbCloudDbContext db;
@@ -53,16 +52,13 @@ namespace AsbCloudInfrastructure.Services.SAUB
return cacheDataRange;
}
- public int GetOrCreateTelemetryIdByUid(string uid)
- => GetOrCreateTelemetryByUid(uid).Id;
-
public int? GetIdWellByTelemetryUid(string uid)
=> GetWellByTelemetryUid(uid)?.Id;
public async Task UpdateInfoAsync(string uid, TelemetryInfoDto info,
CancellationToken token)
{
- var telemetry = GetOrCreateTelemetryByUid(uid);
+ var telemetry = GetOrCreateTelemetry(uid);
telemetry.Info = info.Adapt();
if (!string.IsNullOrEmpty(info.TimeZoneId) &&
@@ -78,6 +74,7 @@ namespace AsbCloudInfrastructure.Services.SAUB
DropTelemetryCache();
}
+ [Obsolete("This method will be private. Use TelemetryDto.TimeZone prop.")]
public SimpleTimezoneDto GetTimezone(int idTelemetry)
{
var telemetry = GetTelemetryCache().FirstOrDefault(t => t.Id == idTelemetry);
@@ -85,41 +82,37 @@ 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();
+ if (telemetry.Well?.Timezone is not null)
return telemetry.TimeZone.Adapt();
- }
-
- if (telemetry.TimeZone is not null)
+
+ if (telemetry.TimeZone is not null)
return telemetry.TimeZone.Adapt();
-
- if (telemetry.Info is not null)
- {
- telemetry.TimeZone = new SimpleTimezone
- {
- Hours = telemetry.Info.TimeZoneOffsetTotalHours,
- IsOverride = false,
- TimezoneId = telemetry.Info.TimeZoneId,
- };
- db.Telemetries.Upsert(telemetry);
- db.SaveChanges();
- DropTelemetryCache();
- return telemetry.TimeZone.Adapt();
- }
-
-
+
throw new Exception($"Telemetry id: {idTelemetry} can't find timezone.");
}
public TelemetryBaseDto? GetOrDefaultTelemetryByIdWell(int idWell)
{
- var telemetry = GetTelemetryCache()
+ var entity = GetTelemetryCache()
.FirstOrDefault(t => t.Well?.Id == idWell);
- return telemetry?.Adapt();
+ if (entity.Well?.Timezone is not null && entity.TimeZone.Hours != entity.Well.Timezone.Hours)
+ {
+ entity.TimeZone = entity.Well.Timezone;
+ //TODO: выдаем предупреждение!
+ }
+ return entity?.Adapt();
+ }
+
+ public TelemetryDto GetOrCreateTelemetryByUid(string uid)
+ {
+ var entity = GetOrCreateTelemetry(uid);
+ if(entity.Well?.Timezone is not null && entity.TimeZone.Hours != entity.Well.Timezone.Hours)
+ {
+ entity.TimeZone = entity.Well.Timezone;
+ //TODO: выдаем предупреждение!
+ }
+ var dto = entity.Adapt();
+ return dto;
}
private Well? GetWellByTelemetryUid(string uid)
@@ -134,7 +127,7 @@ namespace AsbCloudInfrastructure.Services.SAUB
return telemetry;
}
- private Telemetry GetOrCreateTelemetryByUid(string uid)
+ private Telemetry GetOrCreateTelemetry(string uid)
{
var telemetry = GetOrDefaultTelemetryByUid(uid);
if (telemetry is null)
@@ -320,5 +313,4 @@ namespace AsbCloudInfrastructure.Services.SAUB
return affected;
}
}
-
}
diff --git a/AsbCloudInfrastructure/Services/SAUB/TelemetryUserService.cs b/AsbCloudInfrastructure/Services/SAUB/TelemetryUserService.cs
index 70614a88..20b53c43 100644
--- a/AsbCloudInfrastructure/Services/SAUB/TelemetryUserService.cs
+++ b/AsbCloudInfrastructure/Services/SAUB/TelemetryUserService.cs
@@ -63,12 +63,12 @@ namespace AsbCloudInfrastructure.Services.SAUB
if (!dtos.Any())
return;
- var telemetryId = telemetryService.GetOrCreateTelemetryIdByUid(uid);
+ var telemetry = telemetryService.GetOrCreateTelemetryByUid(uid);
var entities = dtos.Distinct(new TelemetryUserDtoComparer()).Select(dto => {
var entity = dto.Adapt();
entity.IdUser = dto.Id;
- entity.IdTelemetry = telemetryId;
+ entity.IdTelemetry = telemetry.Id;
return entity;
});
var result = await db.Database.ExecInsertOrUpdateAsync(db.TelemetryUsers, entities, token);
diff --git a/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs b/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs
index 547b53c0..1209ea65 100644
--- a/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs
+++ b/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs
@@ -109,8 +109,8 @@ namespace AsbCloudWebApi.Controllers.SAUB
[FromBody] IEnumerable dtos,
CancellationToken token = default)
{
- var idTelemetry = telemetryService.GetOrCreateTelemetryIdByUid(uid);
- await gtrRepository.SaveDataAsync(idTelemetry, dtos, token).ConfigureAwait(false);
+ var telemetry = telemetryService.GetOrCreateTelemetryByUid(uid);
+ await gtrRepository.SaveDataAsync(telemetry.Id, dtos, token).ConfigureAwait(false);
var idWell = telemetryService.GetIdWellByTelemetryUid(uid);
if (idWell is not null && dtos is not null)
_ = Task.Run(() => telemetryHubContext.Clients.Group($"well_{idWell}_gtr")
diff --git a/AsbCloudWebApi/Controllers/WITS/WitsControllerAbstract.cs b/AsbCloudWebApi/Controllers/WITS/WitsControllerAbstract.cs
index 778ee67b..3e6a46ef 100644
--- a/AsbCloudWebApi/Controllers/WITS/WitsControllerAbstract.cs
+++ b/AsbCloudWebApi/Controllers/WITS/WitsControllerAbstract.cs
@@ -49,8 +49,8 @@ namespace AsbCloudWebApi.Controllers.WITS
[FromServices] IWitsRecordRepository witsRecordRepository,
CancellationToken token = default)
{
- var idTelemetry = telemetryService.GetOrCreateTelemetryIdByUid(uid);
- await witsRecordRepository.SaveDataAsync(idTelemetry, dtos, token).ConfigureAwait(false);
+ var telemetry = telemetryService.GetOrCreateTelemetryByUid(uid);
+ await witsRecordRepository.SaveDataAsync(telemetry.Id, dtos, token).ConfigureAwait(false);
var idWell = telemetryService.GetIdWellByTelemetryUid(uid);
if (idWell != null && dtos.Any())
_ = Task.Run(() => telemetryHubContext.Clients.Group($"well_{idWell}_wits")