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