forked from ddrilling/AsbCloudServer
добавлен контроллер для получения диапозона
изменен аргумент метода перестроена логика работы метода и возвращаемое значение
This commit is contained in:
parent
87805a7104
commit
dd711c4aa5
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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>
|
||||||
|
Loading…
Reference in New Issue
Block a user