forked from ddrilling/AsbCloudServer
CS2-119: Fixed incoming telemetry date transform
This commit is contained in:
parent
e62ac96bd7
commit
6b7f589ddc
@ -13,7 +13,8 @@ namespace AsbCloudApp.Services
|
|||||||
int GetOrCreateTemetryIdByUid(string uid);
|
int GetOrCreateTemetryIdByUid(string uid);
|
||||||
double GetTimezoneOffsetByTelemetryId(int idTelemetry);
|
double GetTimezoneOffsetByTelemetryId(int idTelemetry);
|
||||||
Task UpdateInfoAsync(string uid, TelemetryInfoDto info, CancellationToken token);
|
Task UpdateInfoAsync(string uid, TelemetryInfoDto info, CancellationToken token);
|
||||||
Task<DateTime> FixDateToTimeZoneAsync(int idTelemetry, DateTime date,
|
Task<double?> GetTelemetryTimeZoneOffsetAsync(int idTelemetry, CancellationToken token);
|
||||||
|
DateTime FixDateToTimeZone(DateTime date, double offsetHours,
|
||||||
CancellationToken token);
|
CancellationToken token);
|
||||||
Task<DatesRangeDto> FixDatesRangeByTimeZoneAsync(int telemetryId, DatesRangeDto result,
|
Task<DatesRangeDto> FixDatesRangeByTimeZoneAsync(int telemetryId, DatesRangeDto result,
|
||||||
CancellationToken token);
|
CancellationToken token);
|
||||||
|
@ -60,16 +60,16 @@ namespace AsbCloudInfrastructure.Services
|
|||||||
dtosList.Remove(duplicate);
|
dtosList.Remove(duplicate);
|
||||||
}
|
}
|
||||||
|
|
||||||
var tasks = dtosList.Select(async d => {
|
var offsetHours = await telemetryService.GetTelemetryTimeZoneOffsetAsync(idTelemetry, token);
|
||||||
|
|
||||||
|
var entities = dtosList.Select(d => {
|
||||||
var e = Convert(d);
|
var e = Convert(d);
|
||||||
e.IdTelemetry = idTelemetry;
|
e.IdTelemetry = idTelemetry;
|
||||||
e.Date = await telemetryService.FixDateToTimeZoneAsync(idTelemetry, d.Date, token)
|
if(offsetHours is not null)
|
||||||
.ConfigureAwait(false);
|
e.Date = telemetryService.FixDateToTimeZone(d.Date, (double)offsetHours, token);
|
||||||
return e;
|
return e;
|
||||||
});
|
});
|
||||||
|
|
||||||
var entities = await Task.WhenAll(tasks);
|
|
||||||
|
|
||||||
var dbset = db.Set<TModel>();
|
var dbset = db.Set<TModel>();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -31,6 +31,8 @@ namespace AsbCloudInfrastructure.Services
|
|||||||
{
|
{
|
||||||
cacheTelemetry = cacheDb.GetCachedTable<Telemetry>((AsbCloudDbContext)db);
|
cacheTelemetry = cacheDb.GetCachedTable<Telemetry>((AsbCloudDbContext)db);
|
||||||
cacheWells = cacheDb.GetCachedTable<Well>((AsbCloudDbContext)db);
|
cacheWells = cacheDb.GetCachedTable<Well>((AsbCloudDbContext)db);
|
||||||
|
cacheClusters = cacheDb.GetCachedTable<Cluster>((AsbCloudDbContext)db);
|
||||||
|
cacheDeposits = cacheDb.GetCachedTable<Deposit>((AsbCloudDbContext)db);
|
||||||
this.db = db;
|
this.db = db;
|
||||||
this.telemetryTracker = telemetryTracker;
|
this.telemetryTracker = telemetryTracker;
|
||||||
}
|
}
|
||||||
@ -99,46 +101,46 @@ namespace AsbCloudInfrastructure.Services
|
|||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<DateTime> FixDateToTimeZoneAsync(int idTelemetry, DateTime date,
|
public async Task<double?> GetTelemetryTimeZoneOffsetAsync(int idTelemetry, CancellationToken token)
|
||||||
CancellationToken token)
|
|
||||||
{
|
{
|
||||||
if(date.Kind == DateTimeKind.Utc)
|
|
||||||
return date;
|
|
||||||
|
|
||||||
if (date.Kind == DateTimeKind.Local)
|
|
||||||
return date.ToUniversalTime();
|
|
||||||
|
|
||||||
var telemetry =
|
var telemetry =
|
||||||
await cacheTelemetry.FirstOrDefaultAsync(t => t.Id == idTelemetry, token);
|
await cacheTelemetry.FirstOrDefaultAsync(t => t.Id == idTelemetry, token);
|
||||||
|
|
||||||
if (telemetry is null)
|
if (telemetry.TelemetryTimeZone is not null)
|
||||||
return date;
|
return telemetry.TelemetryTimeZone.Hours;
|
||||||
|
|
||||||
if (telemetry.TelemetryTimeZone is null)
|
var well = await cacheWells.FirstOrDefaultAsync(w => w.IdTelemetry == telemetry.Id, token)
|
||||||
|
.ConfigureAwait(false);
|
||||||
|
|
||||||
|
if (well is null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
var requestedTimeZoneInfo = await GetTimeZoneInfoAsync(well.Id, token)
|
||||||
|
.ConfigureAwait(false);
|
||||||
|
|
||||||
|
if (requestedTimeZoneInfo.TimezoneId is null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
telemetry.TelemetryTimeZone = new TelemetryTimeZone()
|
||||||
{
|
{
|
||||||
var well = await cacheWells.FirstOrDefaultAsync(w => w.IdTelemetry == telemetry.Id, token)
|
Hours = requestedTimeZoneInfo.GmtOffset,
|
||||||
.ConfigureAwait(false);
|
TimeZoneId = requestedTimeZoneInfo.TimezoneId
|
||||||
|
};
|
||||||
|
|
||||||
if (well is null)
|
await cacheTelemetry.UpsertAsync(telemetry, token).ConfigureAwait(false);
|
||||||
return date;
|
|
||||||
|
|
||||||
var requestedTimeZoneInfo = await GetTimeZoneInfoAsync(well.Id, token)
|
return telemetry.TelemetryTimeZone.Hours;
|
||||||
.ConfigureAwait(false);
|
}
|
||||||
|
|
||||||
if (requestedTimeZoneInfo.TimezoneId is null)
|
public DateTime FixDateToTimeZone(DateTime date, double offsetHours,
|
||||||
return date;
|
CancellationToken token)
|
||||||
|
{
|
||||||
telemetry.TelemetryTimeZone = new TelemetryTimeZone()
|
return date.Kind switch
|
||||||
{
|
{
|
||||||
Hours = requestedTimeZoneInfo.GmtOffset,
|
DateTimeKind.Utc => date,
|
||||||
TimeZoneId = requestedTimeZoneInfo.TimezoneId
|
DateTimeKind.Local => date.ToUniversalTime(),
|
||||||
};
|
_ => date.AddHours(-offsetHours)
|
||||||
|
};
|
||||||
await cacheTelemetry.UpsertAsync(telemetry, token).ConfigureAwait(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
var offsetHours = telemetry.TelemetryTimeZone.Hours;
|
|
||||||
return date.AddHours(offsetHours * -1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<DatesRangeDto> FixDatesRangeByTimeZoneAsync(int telemetryId, DatesRangeDto result,
|
public async Task<DatesRangeDto> FixDatesRangeByTimeZoneAsync(int telemetryId, DatesRangeDto result,
|
||||||
|
Loading…
Reference in New Issue
Block a user