изменена модель возвращаемая методом

изменен алгоритм внутри метоа
This commit is contained in:
eugeniy_ivanov 2022-10-25 09:42:08 +05:00
parent cc75bcf4f9
commit 17c7392542
4 changed files with 21 additions and 25 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,4 +1,5 @@
using AsbCloudApp.Data.Subsystems; using AsbCloudApp.Data;
using AsbCloudApp.Data.Subsystems;
using AsbCloudApp.Requests; using AsbCloudApp.Requests;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -45,7 +46,7 @@ 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<(DateTimeOffset, DateTimeOffset)>?> GetDateRangeOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token); Task<DatesRangeDto?> GetDateRangeOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token);
} }
#nullable disable #nullable disable
} }

View File

@ -186,28 +186,22 @@ namespace AsbCloudInfrastructure.Services.Subsystems
} }
/// <inheritdoc/> /// <inheritdoc/>
public async Task<IEnumerable<(DateTimeOffset, DateTimeOffset)>?> GetDateRangeOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token) public async Task<DatesRangeDto?> GetDateRangeOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token)
{ {
if (request.IdsSubsystems is null) var query = BuildQuery(request);
return null; if (query is not null)
List<(DateTimeOffset dateFirst, DateTimeOffset dateLast)> result = new();
var dateRanges = await db.SubsystemOperationTimes
.Where(o => request.IdsSubsystems.Contains(o.IdSubsystem))
.GroupBy(o => o.IdSubsystem)
.Select(g => new
{
DateFirst = g.Min(o => o.DateStart),
DateLast = g.Max(o => o.DateEnd)
})
.ToListAsync(token);
if (dateRanges.Any() != true)
return null;
foreach (var dateRange in dateRanges)
{ {
var resultItem = (dateRange.DateFirst, dateRange.DateLast); var result = await query
result.Add(resultItem); .GroupBy(o => o.IdSubsystem)
.Select(g => new DatesRangeDto
{
From = g.Min(o => o.DateStart).DateTime,
To = g.Max(o => o.DateEnd).DateTime
})
.FirstOrDefaultAsync(token);
return result;
} }
return result; return null;
} }
private IQueryable<SubsystemOperationTime>? BuildQuery(SubsystemOperationTimeRequest request) private IQueryable<SubsystemOperationTime>? BuildQuery(SubsystemOperationTimeRequest request)

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
{ {
@ -63,11 +64,11 @@ namespace AsbCloudWebApi.Controllers.Subsystems
/// получить доступный диапазон дат наработки подсистемы. /// получить доступный диапазон дат наработки подсистемы.
/// </summary> /// </summary>
[HttpGet("rangeDate")] [HttpGet("rangeDate")]
[ProducesResponseType(typeof(IEnumerable<(DateTimeOffset,DateTimeOffset)>), (int)System.Net.HttpStatusCode.OK)] [ProducesResponseType(typeof(DatesRangeDto), (int)System.Net.HttpStatusCode.OK)]
public async Task<IActionResult> GetDateRangeOperationTimeAsync([FromQuery] SubsystemOperationTimeRequest request, CancellationToken token = default) public async Task<IActionResult> GetDateRangeOperationTimeAsync([FromQuery] SubsystemOperationTimeRequest request, CancellationToken token = default)
{ {
if (!await UserHasAccesToWellAsync(request.IdWell, token)) if (!await UserHasAccesToWellAsync(request.IdWell, token))
return Forbid(); return Forbid();
var result = await subsystemOperationTimeService.GetDateRangeOperationTimeAsync(request, token); var result = await subsystemOperationTimeService.GetDateRangeOperationTimeAsync(request, token);
return Ok(result); return Ok(result);
} }