diff --git a/AsbCloudApp/Data/Subsystems/SubsystemActiveWellStatDto.cs b/AsbCloudApp/Data/Subsystems/SubsystemActiveWellStatDto.cs
index fd3c1054..f940bfb1 100644
--- a/AsbCloudApp/Data/Subsystems/SubsystemActiveWellStatDto.cs
+++ b/AsbCloudApp/Data/Subsystems/SubsystemActiveWellStatDto.cs
@@ -14,7 +14,7 @@ namespace AsbCloudApp.Data.Subsystems
///
/// Наработки подсистем
///
- public IEnumerable listSubsystemStat { get; set; }
+ public List listSubsystemStat { get; set; }
}
}
\ No newline at end of file
diff --git a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs
index 9aa1dd77..9add54b0 100644
--- a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs
+++ b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs
@@ -184,71 +184,79 @@ namespace AsbCloudInfrastructure.Services.Subsystems
}
-
+ //TODO:
+ // скорее всего нужно доработать wellService - первое это метод
+ // GetWellsByCompanyAsync (получать сразу активные скважины ,а не вытягивать сначала все)
+ // второе - метод GetOperationsAsync - по умолчанию если не указан
+ // ИД скважины он заполняется как 0 , в нашем случае нужно получить опред операции по ВСЕМ
+ // скважинам
+
private async Task> GetSubsystemOperationTimeAll(int idCompany, CancellationToken token)
- {
+ {
var listWell = await wellService.GetWellsByCompanyAsync(idCompany, token);
var active = listWell.Where(w => w.IdState == 1);
return active;
}
-
-
public async Task?> GetStatByActiveWell(int idCompany, DateTime? gtDate, DateTime? ltDate, CancellationToken token)
{
var activeWell = await GetSubsystemOperationTimeAll(idCompany, token);
- var telemetryIds = activeWell.Select(w => w.IdTelemetry);
+ var telemetryIds = activeWell.Select(w => w.IdTelemetry).Distinct();
var query = db.SubsystemOperationTimes
- .Include(o => o.Subsystem)
.Where(o => telemetryIds.Contains(o.IdTelemetry))
- .AsNoTracking();
-
+ .AsNoTracking();
+
if (query is null)
{
return null;
}
DateTime today = DateTime.Today;
- if (gtDate.HasValue)
- {
- query = query.Where(o => o.DateEnd >= gtDate);
- }
- else
+ if (!gtDate.HasValue)
{
- gtDate = today;
- query = query.Where(o => o.DateEnd == gtDate);
- }
+ gtDate = today;
+ }
+ query = query.Where(o => o.DateStart >= gtDate.Value.ToUniversalTime());
- if (ltDate.HasValue)
- {
- query = query.Where(o => o.DateStart <= ltDate);
- }
- else
+ if (!ltDate.HasValue)
{
ltDate = today.AddDays(-1);
- query = query.Where(o => o.DateStart == ltDate );
- }
- var detectedOperationsRequest = new DetectedOperationRequest()
- {
- IdsCategories = new List() {
- 1,3
- },
- LtDate = ltDate,
- GtDate = gtDate,
- };
- var detectedOperations = await detectedOperationService.GetOperationsAsync(detectedOperationsRequest, token);
- var groupData = query.GroupBy(g => g.IdTelemetry);
- var result = new List();
- foreach (var group in groupData)
- {
- var wellStat = new SubsystemActiveWellStatDto();
- wellStat.IdWell = activeWell.Where(w => w.IdTelemetry == group.Key).Select(w => w.Id).FirstOrDefault();
- var groupSubsystem = (IEnumerable>)group.GroupBy(g => g.IdSubsystem);
- var detectedOperationsById = detectedOperations.Where(d => d.IdWell == wellStat.IdWell).ToList();
- var depthInterval = GetDepthInterval(detectedOperationsById);
- wellStat.listSubsystemStat = CalcStat((IEnumerable)groupSubsystem, depthInterval);
- result.Add(wellStat);
- }
+ }
+ query = query.Where(o => o.DateEnd <= ltDate.Value.ToUniversalTime());
+ var result = new List();
+ var subsystemsOperationTime = query.ToList();
+ var groupingSubsystemsOperationTime = subsystemsOperationTime.GroupBy(g => g.IdTelemetry).ToList();
+ foreach (var group in groupingSubsystemsOperationTime)
+ {
+ var idWell = activeWell.Where(w => w.IdTelemetry == group.Key).Select(w => w.Id).FirstOrDefault();
+ var wellStat = new SubsystemActiveWellStatDto()
+ {
+ IdWell = idWell,
+ listSubsystemStat = new List()
+
+ };
+ var detectedOperationsRequest = new DetectedOperationRequest()
+ {
+ IdWell = idWell,
+ IdsCategories = new List() {1,3},
+ LtDate = ltDate,
+ GtDate = gtDate,
+ };
+ var detectedOperations = await detectedOperationService.GetOperationsAsync(detectedOperationsRequest, token);
+ if (detectedOperations is not null && detectedOperations.Any())
+ {
+ var depthInterval = GetDepthInterval(detectedOperations);
+ var groupSubsystem = group.GroupBy(g => g.IdSubsystem).ToList();
+
+ foreach (var subsystem in groupSubsystem)
+ {
+ var dto = subsystem.Select(s => s.Adapt());
+ var subsystemStat = CalcStat(dto, depthInterval);
+ wellStat.listSubsystemStat.AddRange(subsystemStat);
+ }
+ result.Add(wellStat);
+ }
+ }
return result;
}