добавлен контроллер для получения диапозона

изменен аргумент метода
перестроена логика работы метода и возвращаемое значение
This commit is contained in:
eugeniy_ivanov 2022-10-21 15:52:51 +05:00
parent 87805a7104
commit dd711c4aa5
3 changed files with 37 additions and 15 deletions

View File

@ -1,5 +1,6 @@
using AsbCloudApp.Data.Subsystems; 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;
@ -41,10 +42,10 @@ namespace AsbCloudApp.Services.Subsystems
/// <summary> /// <summary>
/// Временной диапазон за который есть статистика работы подсистем /// Временной диапазон за который есть статистика работы подсистем
/// </summary> /// </summary>
/// <param name="idSubsystem"></param> /// <param name="request"></param>
/// <param name="token"></param> /// <param name="token"></param>
/// <returns></returns> /// <returns></returns>
Task<IEnumerable<SubsystemOperationTimeDto>?> GetDateRangeOperationTimeAsync(int idSubsystem, CancellationToken token); Task<IEnumerable<(DateTimeOffset, DateTimeOffset)>?> GetDateRangeOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token);
} }
#nullable disable #nullable disable
} }

View File

@ -185,22 +185,28 @@ namespace AsbCloudInfrastructure.Services.Subsystems
} }
private async Task<(DateTimeOffset, DateTimeOffset)?> GetDateRangeOperationTime(int idSubsystem, CancellationToken token) /// <inheritdoc/>
public async Task<IEnumerable<(DateTimeOffset, DateTimeOffset)>?> GetDateRangeOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token)
{ {
var dateRange = await db.SubsystemOperationTimes if (request.IdsSubsystems is null)
.Where(o => o.Id == idSubsystem) return null;
List<(DateTimeOffset dateFirst, DateTimeOffset dateLast)> result = new();
var dateRanges = await db.SubsystemOperationTimes
.Where(o => request.IdsSubsystems.Contains(o.IdSubsystem))
.GroupBy(o => o.IdSubsystem) .GroupBy(o => o.IdSubsystem)
.Select(g => new .Select(g => new
{ {
DateFirst = g.Min(o => o.DateStart), DateFirst = g.Min(o => o.DateStart),
DateLast = g.Max(o => o.DateEnd) DateLast = g.Max(o => o.DateEnd)
}) })
.FirstOrDefaultAsync(token); .ToListAsync(token);
if (dateRange == null) if (dateRanges.Any() != true)
{
return null; return null;
foreach (var dateRange in dateRanges)
{
var resultItem = (dateRange.DateFirst, dateRange.DateLast);
result.Add(resultItem);
} }
(DateTimeOffset dateFirst, DateTimeOffset dateLast) result = (dateRange.DateFirst, dateRange.DateLast);
return result; return result;
} }
@ -268,6 +274,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

@ -59,6 +59,19 @@ namespace AsbCloudWebApi.Controllers.Subsystems
return Ok(result); return Ok(result);
} }
/// <summary>
/// получить доступный диапазон дат наработки подсистемы.
/// </summary>
[HttpGet("rangeDate")]
[ProducesResponseType(typeof(IEnumerable<SubsystemDto>), (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>