diff --git a/AsbCloudApp/Requests/SubsystemOperationTimeRequest.cs b/AsbCloudApp/Requests/SubsystemOperationTimeRequest.cs
index 3a4c3e56..567e11cf 100644
--- a/AsbCloudApp/Requests/SubsystemOperationTimeRequest.cs
+++ b/AsbCloudApp/Requests/SubsystemOperationTimeRequest.cs
@@ -14,7 +14,7 @@ namespace AsbCloudApp.Requests
public class SubsystemOperationTimeRequest: RequestBase
{
///
- /// идентификатор скважины, может не указыватся пользователем
+ /// идентификатор скважины
///
[Required]
public int IdWell { get; set; }
diff --git a/AsbCloudApp/Services/Subsystems/ISubsystemOperationTimeService.cs b/AsbCloudApp/Services/Subsystems/ISubsystemOperationTimeService.cs
index 07e41895..62ade194 100644
--- a/AsbCloudApp/Services/Subsystems/ISubsystemOperationTimeService.cs
+++ b/AsbCloudApp/Services/Subsystems/ISubsystemOperationTimeService.cs
@@ -1,5 +1,7 @@
-using AsbCloudApp.Data.Subsystems;
+using AsbCloudApp.Data;
+using AsbCloudApp.Data.Subsystems;
using AsbCloudApp.Requests;
+using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
@@ -36,7 +38,15 @@ namespace AsbCloudApp.Services.Subsystems
///
///
///
- Task?> GetOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token);
+ Task?> GetOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token);
+
+ ///
+ /// Временной диапазон за который есть статистика работы подсистем
+ ///
+ ///
+ ///
+ ///
+ Task GetDateRangeOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token);
}
#nullable disable
}
diff --git a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs
index 18566010..cbef2343 100644
--- a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs
+++ b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs
@@ -185,6 +185,25 @@ namespace AsbCloudInfrastructure.Services.Subsystems
}
+ ///
+ public async Task 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? BuildQuery(SubsystemOperationTimeRequest request)
{
var well = wellService.GetOrDefault(request.IdWell);
@@ -249,6 +268,8 @@ namespace AsbCloudInfrastructure.Services.Subsystems
dto.DateEnd = operationTime.DateEnd.ToRemoteDateTime(well.Timezone.Hours);
return dto;
}
+
+
}
#nullable disable
}
diff --git a/AsbCloudWebApi/Controllers/Subsystems/SubsystemOperationTimeController.cs b/AsbCloudWebApi/Controllers/Subsystems/SubsystemOperationTimeController.cs
index e4466d9d..d86a411f 100644
--- a/AsbCloudWebApi/Controllers/Subsystems/SubsystemOperationTimeController.cs
+++ b/AsbCloudWebApi/Controllers/Subsystems/SubsystemOperationTimeController.cs
@@ -10,6 +10,7 @@ using System.Threading;
using System.Threading.Tasks;
using AsbCloudInfrastructure;
using System;
+using AsbCloudApp.Data;
namespace AsbCloudWebApi.Controllers.Subsystems
{
@@ -59,6 +60,19 @@ namespace AsbCloudWebApi.Controllers.Subsystems
return Ok(result);
}
+ ///
+ /// получить доступный диапазон дат наработки подсистемы.
+ ///
+ [HttpGet("datesRange")]
+ [ProducesResponseType(typeof(DatesRangeDto), (int)System.Net.HttpStatusCode.OK)]
+ public async Task 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);
+ }
+
///
/// получить список наработок подсистем
///