Merge branch 'RangeDataOperationTime' into dev

This commit is contained in:
ngfrolov 2022-10-26 10:31:41 +05:00
commit 0bab711eb8
4 changed files with 48 additions and 3 deletions

View File

@ -14,7 +14,7 @@ namespace AsbCloudApp.Requests
public class SubsystemOperationTimeRequest: RequestBase public class SubsystemOperationTimeRequest: RequestBase
{ {
/// <summary> /// <summary>
/// идентификатор скважины, может не указыватся пользователем /// идентификатор скважины
/// </summary> /// </summary>
[Required] [Required]
public int IdWell { get; set; } public int IdWell { get; set; }

View File

@ -1,5 +1,7 @@
using AsbCloudApp.Data.Subsystems; using AsbCloudApp.Data;
using AsbCloudApp.Data.Subsystems;
using AsbCloudApp.Requests; using AsbCloudApp.Requests;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -36,7 +38,15 @@ namespace AsbCloudApp.Services.Subsystems
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="token"></param> /// <param name="token"></param>
/// <returns></returns> /// <returns></returns>
Task<IEnumerable<SubsystemOperationTimeDto>?> GetOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token); Task<IEnumerable<SubsystemOperationTimeDto>?> GetOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token);
/// <summary>
/// Временной диапазон за который есть статистика работы подсистем
/// </summary>
/// <param name="request"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<DatesRangeDto?> GetDateRangeOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token);
} }
#nullable disable #nullable disable
} }

View File

@ -185,6 +185,25 @@ namespace AsbCloudInfrastructure.Services.Subsystems
} }
/// <inheritdoc/>
public async Task<DatesRangeDto?> GetDateRangeOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token)
{
var query = BuildQuery(request);
if (query is null)
{
return null;
}
var result = await query
.GroupBy(o => o.IdTelemetry)
.Select(g => new DatesRangeDto
{
From = g.Min(o => o.DateStart).DateTime,
To = g.Max(o => o.DateEnd).DateTime
})
.FirstOrDefaultAsync(token);
return result;
}
private IQueryable<SubsystemOperationTime>? BuildQuery(SubsystemOperationTimeRequest request) private IQueryable<SubsystemOperationTime>? BuildQuery(SubsystemOperationTimeRequest request)
{ {
var well = wellService.GetOrDefault(request.IdWell); var well = wellService.GetOrDefault(request.IdWell);
@ -249,6 +268,8 @@ namespace AsbCloudInfrastructure.Services.Subsystems
dto.DateEnd = operationTime.DateEnd.ToRemoteDateTime(well.Timezone.Hours); dto.DateEnd = operationTime.DateEnd.ToRemoteDateTime(well.Timezone.Hours);
return dto; return dto;
} }
} }
#nullable disable #nullable disable
} }

View File

@ -10,6 +10,7 @@ using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using AsbCloudInfrastructure; using AsbCloudInfrastructure;
using System; using System;
using AsbCloudApp.Data;
namespace AsbCloudWebApi.Controllers.Subsystems namespace AsbCloudWebApi.Controllers.Subsystems
{ {
@ -59,6 +60,19 @@ namespace AsbCloudWebApi.Controllers.Subsystems
return Ok(result); return Ok(result);
} }
/// <summary>
/// получить доступный диапазон дат наработки подсистемы.
/// </summary>
[HttpGet("datesRange")]
[ProducesResponseType(typeof(DatesRangeDto), (int)System.Net.HttpStatusCode.OK)]
public async Task<IActionResult> GetDateRangeOperationTimeAsync([FromQuery] SubsystemOperationTimeRequest request, CancellationToken token = default)
{
if (!await UserHasAccesToWellAsync(request.IdWell, token))
return Forbid();
var result = await subsystemOperationTimeService.GetDateRangeOperationTimeAsync(request, token);
return Ok(result);
}
/// <summary> /// <summary>
/// получить список наработок подсистем /// получить список наработок подсистем
/// </summary> /// </summary>