From e62ac96bd7267a0c1f7d3f5d7da9a2cde340ffd3 Mon Sep 17 00:00:00 2001 From: KharchenkoVladimir Date: Thu, 18 Nov 2021 12:03:59 +0500 Subject: [PATCH] CS2-119: Added .FixDatesRangeByTimeZoneAsync() to fix dates ranges to well timezone everywhere --- AsbCloudApp/Services/IMessageService.cs | 2 +- AsbCloudApp/Services/IReportService.cs | 5 ++--- .../Services/ITelemetryAnalyticsService.cs | 2 +- AsbCloudApp/Services/ITelemetryService.cs | 2 ++ .../Analysis/TelemetryAnalyticsService.cs | 12 ++++++++++-- .../Services/MessageService.cs | 12 ++++++++++-- AsbCloudInfrastructure/Services/ReportService.cs | 12 ++++++++++-- .../Services/TelemetryDataBaseService.cs | 13 ++----------- .../Services/TelemetryService.cs | 16 ++++++++++++++++ AsbCloudWebApi/Controllers/MessageController.cs | 7 ++++--- AsbCloudWebApi/Controllers/ReportController.cs | 5 +++-- .../Controllers/TelemetryAnalyticsController.cs | 7 ++++--- .../Controllers/TelemetryDataBaseController.cs | 2 +- 13 files changed, 66 insertions(+), 31 deletions(-) diff --git a/AsbCloudApp/Services/IMessageService.cs b/AsbCloudApp/Services/IMessageService.cs index 5909a89a..9b4221c9 100644 --- a/AsbCloudApp/Services/IMessageService.cs +++ b/AsbCloudApp/Services/IMessageService.cs @@ -13,7 +13,7 @@ namespace AsbCloudApp.Services DateTime end = default, string searchString = default, int skip = 0, int take = 32, bool isUtc = true, CancellationToken token = default); - Task GetMessagesDatesRangeAsync(int idWell, + Task GetMessagesDatesRangeAsync(int idWell, bool isUtc, CancellationToken token = default); Task InsertAsync(string uid, IEnumerable dtos, CancellationToken token); diff --git a/AsbCloudApp/Services/IReportService.cs b/AsbCloudApp/Services/IReportService.cs index 0d7d80b4..7de24ed1 100644 --- a/AsbCloudApp/Services/IReportService.cs +++ b/AsbCloudApp/Services/IReportService.cs @@ -14,12 +14,11 @@ namespace AsbCloudApp.Services Action handleReportProgress); int GetReportPagesCount(int idWell, DateTime begin, DateTime end, int stepSeconds, int format); - Task> GetSuitableReportsAsync(int idWell, DateTime begin, DateTime end, int stepSeconds, int format, CancellationToken token); - Task GetReportsDatesRangeAsync(int idWell, - CancellationToken token); + Task GetReportsDatesRangeAsync(int idWell, bool isUtc, + CancellationToken token = default); Task> GetAllReportsByWellAsync(int idWell, CancellationToken token); } } diff --git a/AsbCloudApp/Services/ITelemetryAnalyticsService.cs b/AsbCloudApp/Services/ITelemetryAnalyticsService.cs index e8753c02..18994812 100644 --- a/AsbCloudApp/Services/ITelemetryAnalyticsService.cs +++ b/AsbCloudApp/Services/ITelemetryAnalyticsService.cs @@ -24,7 +24,7 @@ namespace AsbCloudApp.Services int intervalHoursTimestamp, int workBeginTimestamp, CancellationToken token = default); Task AnalyzeAndSaveTelemetriesAsync(CancellationToken token = default); - Task GetOperationsDateRangeAsync(int idWell, + Task GetOperationsDateRangeAsync(int idWell, bool isUtc, CancellationToken token = default); } } diff --git a/AsbCloudApp/Services/ITelemetryService.cs b/AsbCloudApp/Services/ITelemetryService.cs index ff3605a5..2eac845f 100644 --- a/AsbCloudApp/Services/ITelemetryService.cs +++ b/AsbCloudApp/Services/ITelemetryService.cs @@ -15,6 +15,8 @@ namespace AsbCloudApp.Services Task UpdateInfoAsync(string uid, TelemetryInfoDto info, CancellationToken token); Task FixDateToTimeZoneAsync(int idTelemetry, DateTime date, CancellationToken token); + Task FixDatesRangeByTimeZoneAsync(int telemetryId, DatesRangeDto result, + CancellationToken token); Task GetTimeZoneInfoAsync(int idWell, CancellationToken token); Task UpdateTimeZoneAsync(string uid, TelemetryTimeZoneDto telemetryTimeZoneInfo, CancellationToken token); int? GetIdTelemetryByIdWell(int idWell); diff --git a/AsbCloudInfrastructure/Services/Analysis/TelemetryAnalyticsService.cs b/AsbCloudInfrastructure/Services/Analysis/TelemetryAnalyticsService.cs index ff86b651..42d60940 100644 --- a/AsbCloudInfrastructure/Services/Analysis/TelemetryAnalyticsService.cs +++ b/AsbCloudInfrastructure/Services/Analysis/TelemetryAnalyticsService.cs @@ -294,7 +294,7 @@ namespace AsbCloudInfrastructure.Services.Analysis } } - public async Task GetOperationsDateRangeAsync(int idWell, + public async Task GetOperationsDateRangeAsync(int idWell, bool isUtc, CancellationToken token = default) { var telemetryId = telemetryService.GetIdTelemetryByIdWell(idWell); @@ -315,13 +315,21 @@ namespace AsbCloudInfrastructure.Services.Analysis .FirstOrDefaultAsync(token) .ConfigureAwait(false); - return new DatesRangeDto + var result = new DatesRangeDto { From = DateTimeOffset.FromUnixTimeSeconds(datesRange.From).DateTime, To = datesRange.To == default ? DateTime.MaxValue : DateTimeOffset.FromUnixTimeSeconds(datesRange.To).DateTime }; + + if (isUtc) + return result; + + result = await telemetryService.FixDatesRangeByTimeZoneAsync((int)telemetryId, result, token) + .ConfigureAwait(false); + + return result; } private async Task GetLastAnalysisDateAsync(int idTelemetry, CancellationToken token = default) diff --git a/AsbCloudInfrastructure/Services/MessageService.cs b/AsbCloudInfrastructure/Services/MessageService.cs index 6b79043b..355b25e2 100644 --- a/AsbCloudInfrastructure/Services/MessageService.cs +++ b/AsbCloudInfrastructure/Services/MessageService.cs @@ -142,7 +142,7 @@ namespace AsbCloudInfrastructure.Services return result; } - public async Task GetMessagesDatesRangeAsync(int idWell, + public async Task GetMessagesDatesRangeAsync(int idWell, bool isUtc, CancellationToken token = default) { var telemetryId = telemetryService.GetIdTelemetryByIdWell(idWell); @@ -152,7 +152,15 @@ namespace AsbCloudInfrastructure.Services var (From, To) = await db.GetDatesRangeAsync((int)telemetryId, token) .ConfigureAwait(false); - return new DatesRangeDto { From = From, To = To }; + var result = new DatesRangeDto { From = From, To = To }; + + if (isUtc) + return result; + + result = await telemetryService.FixDatesRangeByTimeZoneAsync((int)telemetryId, result, token) + .ConfigureAwait(false); + + return result; } public Task InsertAsync(string uid, IEnumerable dtos, diff --git a/AsbCloudInfrastructure/Services/ReportService.cs b/AsbCloudInfrastructure/Services/ReportService.cs index 931fd344..949f613c 100644 --- a/AsbCloudInfrastructure/Services/ReportService.cs +++ b/AsbCloudInfrastructure/Services/ReportService.cs @@ -97,7 +97,7 @@ namespace AsbCloudInfrastructure.Services return generator.GetPagesCount(); } - public async Task GetReportsDatesRangeAsync(int idWell, + public async Task GetReportsDatesRangeAsync(int idWell, bool isUtc, CancellationToken token = default) { var telemetryId = telemetryService.GetIdTelemetryByIdWell(idWell); @@ -121,11 +121,19 @@ namespace AsbCloudInfrastructure.Services .FirstOrDefaultAsync(token) .ConfigureAwait(false); - return new DatesRangeDto + var result = new DatesRangeDto { From = datesRange.From, To = datesRange.To.Year == 1 ? DateTime.MaxValue : datesRange.To }; + + if (isUtc) + return result; + + result = await telemetryService.FixDatesRangeByTimeZoneAsync((int)telemetryId, result, token) + .ConfigureAwait(false); + + return result; } public Task> GetSuitableReportsAsync(int idWell, DateTime begin, DateTime end, int stepSeconds, int format, CancellationToken token) => diff --git a/AsbCloudInfrastructure/Services/TelemetryDataBaseService.cs b/AsbCloudInfrastructure/Services/TelemetryDataBaseService.cs index 3f92febc..c39ea5ab 100644 --- a/AsbCloudInfrastructure/Services/TelemetryDataBaseService.cs +++ b/AsbCloudInfrastructure/Services/TelemetryDataBaseService.cs @@ -164,18 +164,9 @@ namespace AsbCloudInfrastructure.Services if (isUtc) return result; - - var telemetry = await cacheTelemetry.FirstOrDefaultAsync(t => t.Id == telemetryId, - token).ConfigureAwait(false); - if (telemetry?.TelemetryTimeZone is null) - return result; - - result = new DatesRangeDto() - { - From = From.AddHours(telemetry.TelemetryTimeZone.Hours), - To = To.AddHours(telemetry.TelemetryTimeZone.Hours) - }; + result = await telemetryService.FixDatesRangeByTimeZoneAsync((int)telemetryId, result, token) + .ConfigureAwait(false); return result; diff --git a/AsbCloudInfrastructure/Services/TelemetryService.cs b/AsbCloudInfrastructure/Services/TelemetryService.cs index b0b4945c..1adf88d7 100644 --- a/AsbCloudInfrastructure/Services/TelemetryService.cs +++ b/AsbCloudInfrastructure/Services/TelemetryService.cs @@ -141,6 +141,22 @@ namespace AsbCloudInfrastructure.Services return date.AddHours(offsetHours * -1); } + public async Task FixDatesRangeByTimeZoneAsync(int telemetryId, DatesRangeDto result, + CancellationToken token) + { + var telemetry = await cacheTelemetry.FirstOrDefaultAsync(t => t.Id == telemetryId, + token).ConfigureAwait(false); + + if (telemetry?.TelemetryTimeZone is null) + return result; + + return new DatesRangeDto() + { + From = result.From.AddHours(telemetry.TelemetryTimeZone.Hours), + To = result.To.AddHours(telemetry.TelemetryTimeZone.Hours) + }; + } + public async Task GetTimeZoneInfoAsync(int idWell, CancellationToken token) { var coordinates = await GetWellCoordinatesAsync(idWell, token); diff --git a/AsbCloudWebApi/Controllers/MessageController.cs b/AsbCloudWebApi/Controllers/MessageController.cs index 6dcc9321..b4bbd35d 100644 --- a/AsbCloudWebApi/Controllers/MessageController.cs +++ b/AsbCloudWebApi/Controllers/MessageController.cs @@ -64,11 +64,12 @@ namespace AsbCloudWebApi.Controllers /// /// id скважины /// Токен для отмены задачи + /// Смена дат с UTC формата на часовой пояс скважины /// список сообщений по скважине [HttpGet] [Route("datesRange")] [ProducesResponseType(typeof(DatesRangeDto), (int)System.Net.HttpStatusCode.OK)] - public async Task GetMessagesDateRangeAsync(int idWell, + public async Task GetMessagesDateRangeAsync(int idWell, bool isUtc = true, CancellationToken token = default) { int? idCompany = User.GetCompanyId(); @@ -82,8 +83,8 @@ namespace AsbCloudWebApi.Controllers if (!isCompanyOwnsWell) return Forbid(); - DatesRangeDto wellMessagesDatesRange = await messageService.GetMessagesDatesRangeAsync(idWell, - token); + var wellMessagesDatesRange = await messageService.GetMessagesDatesRangeAsync(idWell, + isUtc, token); return Ok(wellMessagesDatesRange); } diff --git a/AsbCloudWebApi/Controllers/ReportController.cs b/AsbCloudWebApi/Controllers/ReportController.cs index 121739a5..5777ce4f 100644 --- a/AsbCloudWebApi/Controllers/ReportController.cs +++ b/AsbCloudWebApi/Controllers/ReportController.cs @@ -167,11 +167,12 @@ namespace AsbCloudWebApi.Controllers /// /// id скважины /// Токен для отмены задачи + /// Смена дат с UTC формата на часовой пояс скважины /// Даты самого старого и самого свежего отчетов в БД [HttpGet] [Route("datesRange")] [ProducesResponseType(typeof(DatesRangeDto), (int)System.Net.HttpStatusCode.OK)] - public async Task GetReportsDateRangeAsync(int idWell, + public async Task GetReportsDateRangeAsync(int idWell, bool isUtc = true, CancellationToken token = default) { int? idCompany = User.GetCompanyId(); @@ -183,7 +184,7 @@ namespace AsbCloudWebApi.Controllers idWell, token).ConfigureAwait(false)) return Forbid(); - DatesRangeDto wellReportsDatesRange = await reportService.GetReportsDatesRangeAsync(idWell, + var wellReportsDatesRange = await reportService.GetReportsDatesRangeAsync(idWell, isUtc, token).ConfigureAwait(false); return Ok(wellReportsDatesRange); diff --git a/AsbCloudWebApi/Controllers/TelemetryAnalyticsController.cs b/AsbCloudWebApi/Controllers/TelemetryAnalyticsController.cs index 7880e039..f6f86485 100644 --- a/AsbCloudWebApi/Controllers/TelemetryAnalyticsController.cs +++ b/AsbCloudWebApi/Controllers/TelemetryAnalyticsController.cs @@ -176,11 +176,12 @@ namespace AsbCloudWebApi.Controllers /// /// id скважины /// Токен для отмены задачи + /// Смена дат с UTC формата на часовой пояс скважины /// Даты самой первой и самой последней операций на скважине [HttpGet] [Route("datesRange")] [ProducesResponseType(typeof(DatesRangeDto), (int)System.Net.HttpStatusCode.OK)] - public async Task GetOperationsDateRangeAsync(int idWell, + public async Task GetOperationsDateRangeAsync(int idWell, bool isUtc = true, CancellationToken token = default) { int? idCompany = User.GetCompanyId(); @@ -192,8 +193,8 @@ namespace AsbCloudWebApi.Controllers idWell, token).ConfigureAwait(false)) return Forbid(); - DatesRangeDto wellOperationsDatesRange = await analyticsService.GetOperationsDateRangeAsync(idWell, - token).ConfigureAwait(false); + var wellOperationsDatesRange = await analyticsService.GetOperationsDateRangeAsync(idWell, + isUtc, token).ConfigureAwait(false); return Ok(wellOperationsDatesRange); } diff --git a/AsbCloudWebApi/Controllers/TelemetryDataBaseController.cs b/AsbCloudWebApi/Controllers/TelemetryDataBaseController.cs index 1b201cd8..0a1d46f2 100644 --- a/AsbCloudWebApi/Controllers/TelemetryDataBaseController.cs +++ b/AsbCloudWebApi/Controllers/TelemetryDataBaseController.cs @@ -96,7 +96,7 @@ namespace AsbCloudWebApi.Controllers /// Возвращает диапазон дат сохраненных данных. /// /// id скважины - /// Даты в формате UTC или часового пояса скважины + /// Смена дат с UTC формата на часовой пояс скважины /// Токен завершения задачи /// [HttpGet]