forked from ddrilling/AsbCloudServer
CS2-119: Added dates change to well timezone if requested
This commit is contained in:
parent
c273a9eb5c
commit
4bed0623f1
@ -9,9 +9,10 @@ namespace AsbCloudApp.Services
|
||||
public interface IMessageService
|
||||
{
|
||||
Task<PaginationContainer<MessageDto>> GetMessagesAsync(int idWell,
|
||||
IEnumerable<int> categoryids = null, DateTime begin = default,
|
||||
IEnumerable<int> categoryids = default, DateTime begin = default,
|
||||
DateTime end = default, string searchString = default,
|
||||
int skip = 0, int take = 32, CancellationToken token = default);
|
||||
int skip = 0, int take = 32, bool isUtc = true,
|
||||
CancellationToken token = default);
|
||||
Task<DatesRangeDto> GetMessagesDatesRangeAsync(int idWell,
|
||||
CancellationToken token = default);
|
||||
Task InsertAsync(string uid, IEnumerable<TelemetryMessageDto> dtos,
|
||||
|
@ -8,8 +8,11 @@ namespace AsbCloudApp.Services
|
||||
{
|
||||
public interface ITelemetryDataService<TDto> where TDto : ITelemetryData
|
||||
{
|
||||
Task<IEnumerable<TDto>> GetAsync(int idWell, DateTime dateBegin = default, double intervalSec = 600, int approxPointsCount = 1024, CancellationToken token = default);
|
||||
Task<DatesRangeDto> GetDataDatesRangeAsync(int idWell, CancellationToken token = default);
|
||||
Task<IEnumerable<TDto>> GetAsync(int idWell,
|
||||
DateTime dateBegin = default, double intervalSec = 600d,
|
||||
int approxPointsCount = 1024, bool isUtc = false, CancellationToken token = default);
|
||||
Task<DatesRangeDto> GetDataDatesRangeAsync(int idWell, bool isUtc,
|
||||
CancellationToken token = default);
|
||||
Task<int> UpdateDataAsync(string uid, IEnumerable<TDto> dtos, CancellationToken token = default);
|
||||
}
|
||||
}
|
@ -16,6 +16,7 @@ namespace AsbCloudInfrastructure.Services
|
||||
{
|
||||
private readonly IAsbCloudDbContext db;
|
||||
private readonly ITelemetryService telemetryService;
|
||||
private readonly CacheTable<Telemetry> cacheTelemetry;
|
||||
private readonly CacheTable<TelemetryEvent> cacheEvents;
|
||||
private readonly CacheTable<TelemetryUser> cacheTUsers;
|
||||
|
||||
@ -23,6 +24,7 @@ namespace AsbCloudInfrastructure.Services
|
||||
{
|
||||
this.db = db;
|
||||
this.telemetryService = telemetryService;
|
||||
cacheTelemetry = cacheDb.GetCachedTable<Telemetry>((AsbCloudDbContext)db);
|
||||
cacheEvents = cacheDb.GetCachedTable<TelemetryEvent>((AsbCloudDbContext)db);
|
||||
cacheTUsers = cacheDb.GetCachedTable<TelemetryUser>((AsbCloudDbContext)db);
|
||||
}
|
||||
@ -35,6 +37,7 @@ namespace AsbCloudInfrastructure.Services
|
||||
string searchString = default,
|
||||
int skip = 0,
|
||||
int take = 32,
|
||||
bool isUtc = true,
|
||||
CancellationToken token = default)
|
||||
{
|
||||
var telemetryId = telemetryService.GetIdTelemetryByIdWell(idWell);
|
||||
@ -121,6 +124,21 @@ namespace AsbCloudInfrastructure.Services
|
||||
result.Items.Add(messageDto);
|
||||
}
|
||||
|
||||
if (isUtc)
|
||||
return result;
|
||||
|
||||
var telemetry = await cacheTelemetry.FirstOrDefaultAsync(t => t.Id == telemetryId,
|
||||
token).ConfigureAwait(false);
|
||||
|
||||
if (telemetry?.TelemetryTimeZone is null)
|
||||
return result;
|
||||
|
||||
result.Items = result.Items.Select(m =>
|
||||
{
|
||||
m.Date = m.Date.AddHours(telemetry.TelemetryTimeZone.Hours);
|
||||
return m;
|
||||
}).ToList();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -84,7 +84,7 @@ namespace AsbCloudInfrastructure.Services
|
||||
|
||||
public virtual async Task<IEnumerable<TDto>> GetAsync(int idWell,
|
||||
DateTime dateBegin = default, double intervalSec = 600d,
|
||||
int approxPointsCount = 1024, CancellationToken token = default)
|
||||
int approxPointsCount = 1024, bool isUtc = true, CancellationToken token = default)
|
||||
{
|
||||
var well = cacheWells.FirstOrDefault(w => w.Id == idWell);
|
||||
if (well?.IdTelemetry is null)
|
||||
@ -132,10 +132,25 @@ namespace AsbCloudInfrastructure.Services
|
||||
|
||||
var dtos = entities.Select(e => Convert(e));
|
||||
|
||||
if (isUtc)
|
||||
return dtos;
|
||||
|
||||
var telemetry = await cacheTelemetry.FirstOrDefaultAsync(t => t.Id == well.IdTelemetry,
|
||||
token).ConfigureAwait(false);
|
||||
|
||||
if (telemetry?.TelemetryTimeZone is null)
|
||||
return dtos;
|
||||
|
||||
dtos = dtos.Select(d =>
|
||||
{
|
||||
d.Date = d.Date.AddHours(telemetry.TelemetryTimeZone.Hours);
|
||||
return d;
|
||||
});
|
||||
|
||||
return dtos;
|
||||
}
|
||||
|
||||
public virtual async Task<DatesRangeDto> GetDataDatesRangeAsync(int idWell,
|
||||
public virtual async Task<DatesRangeDto> GetDataDatesRangeAsync(int idWell, bool isUtc,
|
||||
CancellationToken token = default)
|
||||
{
|
||||
var telemetryId = telemetryService.GetIdTelemetryByIdWell(idWell);
|
||||
@ -145,7 +160,25 @@ namespace AsbCloudInfrastructure.Services
|
||||
var (From, To) = await db.GetDatesRangeAsync<TModel>((int)telemetryId, token)
|
||||
.ConfigureAwait(false);
|
||||
|
||||
return new DatesRangeDto { From = From, To = To };
|
||||
var result = new DatesRangeDto {From = From, To = To};
|
||||
|
||||
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)
|
||||
};
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
public abstract TDto Convert(TModel src);
|
||||
|
@ -31,6 +31,7 @@ namespace AsbCloudWebApi.Controllers
|
||||
/// <param name="skip">для пагинации кол-во записей пропустить</param>
|
||||
/// <param name="take">для пагинации кол-во записей </param>
|
||||
/// <param name="searchString"> Строка поиска </param>
|
||||
/// <param name="isUtc">Даты в формате UTC или часового пояса скважины</param>
|
||||
/// <param name="token">Токен для отмены задачи</param>
|
||||
/// <returns>список сообщений по скважине</returns>
|
||||
[HttpGet]
|
||||
@ -39,6 +40,7 @@ namespace AsbCloudWebApi.Controllers
|
||||
[FromQuery] IEnumerable<int> categoryids = default,
|
||||
DateTime begin = default, DateTime end = default,
|
||||
string searchString = default,
|
||||
bool isUtc = true,
|
||||
CancellationToken token = default)
|
||||
{
|
||||
if (take > 1024)
|
||||
@ -49,7 +51,7 @@ namespace AsbCloudWebApi.Controllers
|
||||
|
||||
var result = await messageService.GetMessagesAsync(idWell,
|
||||
categoryids, begin, end, searchString,
|
||||
skip, take, token).ConfigureAwait(false);
|
||||
skip, take, isUtc, token).ConfigureAwait(false);
|
||||
|
||||
if (result is null || result.Count == 0)
|
||||
return NoContent();
|
||||
|
@ -68,11 +68,12 @@ namespace AsbCloudWebApi.Controllers
|
||||
/// <param name="begin">дата начала выборки. По умолчанию: текущее время - intervalSec</param>
|
||||
/// <param name="intervalSec">интервал времени даты начала выборки, секунды</param>
|
||||
/// <param name="approxPointsCount">желаемое количество точек. Если в выборке точек будет больше, то выборка будет прорежена.</param>
|
||||
/// <param name="isUtc">Даты в формате UTC или часового пояса скважины</param>
|
||||
/// <param name="token">Токен завершения задачи</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{idWell}")]
|
||||
public virtual async Task<ActionResult<TDto>> GetDataAsync(int idWell, DateTime begin = default,
|
||||
int intervalSec = 600, int approxPointsCount = 1024, CancellationToken token = default)
|
||||
int intervalSec = 600, int approxPointsCount = 1024, bool isUtc = true, CancellationToken token = default)
|
||||
{
|
||||
int? idCompany = User.GetCompanyId();
|
||||
|
||||
@ -86,7 +87,7 @@ namespace AsbCloudWebApi.Controllers
|
||||
return Forbid();
|
||||
|
||||
var content = await telemetryDataService.GetAsync(idWell, begin,
|
||||
intervalSec, approxPointsCount, token).ConfigureAwait(false);
|
||||
intervalSec, approxPointsCount, isUtc, token).ConfigureAwait(false);
|
||||
|
||||
return Ok(content);
|
||||
}
|
||||
@ -95,12 +96,13 @@ namespace AsbCloudWebApi.Controllers
|
||||
/// Возвращает диапазон дат сохраненных данных.
|
||||
/// </summary>
|
||||
/// <param name="idWell">id скважины</param>
|
||||
/// <param name="isUtc">Даты в формате UTC или часового пояса скважины</param>
|
||||
/// <param name="token">Токен завершения задачи</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
[Route("{idWell}/datesRange")]
|
||||
[ProducesResponseType(typeof(DatesRangeDto), (int)System.Net.HttpStatusCode.OK)]
|
||||
public virtual async Task<IActionResult> GetDataDatesRangeAsync(int idWell,
|
||||
public virtual async Task<IActionResult> GetDataDatesRangeAsync(int idWell, bool isUtc = true,
|
||||
CancellationToken token = default)
|
||||
{
|
||||
int? idCompany = User.GetCompanyId();
|
||||
@ -114,7 +116,7 @@ namespace AsbCloudWebApi.Controllers
|
||||
if (!isCompanyOwnsWell)
|
||||
return Forbid();
|
||||
|
||||
var dataDatesRange = await telemetryDataService.GetDataDatesRangeAsync(idWell,
|
||||
var dataDatesRange = await telemetryDataService.GetDataDatesRangeAsync(idWell, isUtc,
|
||||
token).ConfigureAwait(false);
|
||||
|
||||
return Ok(dataDatesRange);
|
||||
|
Loading…
Reference in New Issue
Block a user