diff --git a/AsbCloudApp/Data/Subsystems/SubsystemActiveWellStatDto.cs b/AsbCloudApp/Data/Subsystems/SubsystemActiveWellStatDto.cs
index 45bc7147..6cc3186c 100644
--- a/AsbCloudApp/Data/Subsystems/SubsystemActiveWellStatDto.cs
+++ b/AsbCloudApp/Data/Subsystems/SubsystemActiveWellStatDto.cs
@@ -10,27 +10,23 @@ namespace AsbCloudApp.Data.Subsystems
///
/// Активная скважина
///
- public WellDto ActiveWell { get; set; }
- ///
- /// Наработки подсистем
- ///
- public IEnumerable listSubsystemStat { get; set; }
+ public WellDto ActiveWell { get; set; }
///
/// Наработки подсистемы АКБ
///
- public SubsystemStatDto SubsystemAKB { get; set; }
+ public SubsystemStatDto? SubsystemAKB { get; set; }
///
/// Наработки подсистемы МСЕ
///
- public SubsystemStatDto SubsystemMSE { get; set; }
+ public SubsystemStatDto? SubsystemMSE { get; set; }
///
/// Наработки подсистемы СПИН
///
- public SubsystemStatDto SubsystemSpinMaster { get; set; }
+ public SubsystemStatDto? SubsystemSpinMaster { get; set; }
///
/// Наработки подсистемы ТОРК
///
- public SubsystemStatDto SubsystemTorqueMaster { get; set; }
+ public SubsystemStatDto? SubsystemTorqueMaster { get; set; }
}
}
\ No newline at end of file
diff --git a/AsbCloudApp/Services/IDetectedOperationService.cs b/AsbCloudApp/Services/IDetectedOperationService.cs
index 7544f5c3..278b375b 100644
--- a/AsbCloudApp/Services/IDetectedOperationService.cs
+++ b/AsbCloudApp/Services/IDetectedOperationService.cs
@@ -45,10 +45,9 @@ namespace AsbCloudApp.Services
///
///
///
- ///
- ///
+ ///
/// кортеж - ид телеметрии, интервалы глубины забоя
- Task?> GetDepthIntervalAllOperationsAsync(DateTime gtDate, DateTime ltDate, double wellTimezoneHours, CancellationToken token);
+ Task?> GetDepthIntervalAllOperationsAsync(DateTimeOffset gtDate, DateTimeOffset ltDate, CancellationToken token);
///
/// Удалить операции
diff --git a/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationService.cs b/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationService.cs
index 3891af42..bd11afe6 100644
--- a/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationService.cs
+++ b/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationService.cs
@@ -84,24 +84,28 @@ namespace AsbCloudInfrastructure.Services.DetectOperations
return dtos;
}
- public async Task?> GetDepthIntervalAllOperationsAsync(DateTime gtDate, DateTime ltDate, double wellTimezoneHours ,CancellationToken token)
+
+
+ public async Task?> GetDepthIntervalAllOperationsAsync(DateTimeOffset gtDate, DateTimeOffset ltDate, CancellationToken token)
{
var query = db.Set()
.Include(o => o.OperationCategory)
- .Where(o => o.DateStart >= gtDate.ToUtcDateTimeOffset(wellTimezoneHours))
- .Where(o => o.DateEnd <= ltDate.ToUtcDateTimeOffset(wellTimezoneHours));
- if (query is null)
- return null;
+ .Where(o => o.DateStart >= gtDate)
+ .Where(o => o.DateEnd <= ltDate);
var data = await query.ToListAsync(token);
- var result = data.GroupBy(g => g.IdTelemetry)
- .Select(g =>
- (
- g.Key,
- g.Where(o => o.IdCategory == 1).Sum(o => o.DepthEnd - o.DepthStart),
- g.Where(o => o.IdCategory == 3).Sum(o => o.DepthEnd - o.DepthStart)
- ));
- return result;
- }
+ if (data.Any())
+ {
+ var result = data.GroupBy(g => g.IdTelemetry)
+ .Select(g =>
+ (
+ g.Key,
+ g.Where(o => o.IdCategory == 1).Sum(o => o.DepthEnd - o.DepthStart),
+ g.Where(o => o.IdCategory == 3).Sum(o => o.DepthEnd - o.DepthStart)
+ ));
+ return result;
+ }
+ return null;
+ }
private static IEnumerable GetOperationsDrillersStat(IEnumerable operations)
{
@@ -320,6 +324,7 @@ namespace AsbCloudInfrastructure.Services.DetectOperations
var exportService = new DetectedOperationExportService(db, wellService);
return exportService.ExportAsync(idsWells, token);
}
+
}
#nullable disable
}
diff --git a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs
index 05ba770e..e462e7fa 100644
--- a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs
+++ b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs
@@ -25,6 +25,10 @@ namespace AsbCloudInfrastructure.Services.Subsystems
private readonly IWellService wellService;
private readonly ICrudService subsystemService;
private readonly IDetectedOperationService detectedOperationService;
+ public const int IdSubsystemAKB = 1;
+ public const int IdSubsystemMSE = 2;
+ public const int IdSubsystemSpin = 65536;
+ public const int IdSubsystemTorque = 65537;
public SubsystemOperationTimeService(IAsbCloudDbContext db, IWellService wellService, ICrudService subsystemService, IDetectedOperationService detectedOperationService)
{
this.db = db;
@@ -202,30 +206,19 @@ namespace AsbCloudInfrastructure.Services.Subsystems
var query = db.SubsystemOperationTimes
.Where(o => telemetryIds.Contains(o.IdTelemetry))
- .AsNoTracking();
-
+ .AsNoTracking();
+
+ var beginUTC = DateTime.Today.AddDays(-1).ToUtcDateTimeOffset(firstWell.Timezone.Hours);
+ var endUTC = DateTime.Today.ToUtcDateTimeOffset(firstWell.Timezone.Hours);
if (gtDate is not null)
{
- var beginUTC = gtDate.Value.ToUtcDateTimeOffset(firstWell.Timezone.Hours);
- query = query.Where(d => d.DateStart >= beginUTC);
- }
- else
- {
- var beginUTC = DateTime.Today.AddDays(-1).ToUtcDateTimeOffset(firstWell.Timezone.Hours);
- query = query.Where(o => o.DateStart >= beginUTC );
- }
-
- if (ltDate is not null)
- {
- var endUTC = ltDate.Value.ToUtcDateTimeOffset(firstWell.Timezone.Hours);
- query = query.Where(d => d.DateEnd <= endUTC);
- }
- else
- {
- var endUTC = DateTime.Today.ToUtcDateTimeOffset(firstWell.Timezone.Hours);
- query = query.Where(o => o.DateEnd <= endUTC);
+ beginUTC = gtDate.Value.ToUtcDateTimeOffset(firstWell.Timezone.Hours);
}
+ query = query.Where(d => d.DateStart >= beginUTC);
+ query = query.Where(o => o.DateEnd <= endUTC);
+
+ var depthIntervals = await detectedOperationService.GetDepthIntervalAllOperationsAsync(beginUTC, endUTC, token);
var result = new List();
var subsystemsOperationTime = await query.ToListAsync(token);
@@ -238,33 +231,21 @@ namespace AsbCloudInfrastructure.Services.Subsystems
{
var wellStat = new SubsystemActiveWellStatDto()
{
- ActiveWell = well,
- listSubsystemStat = new List()
-
+ ActiveWell = well
};
- var detectedOperationsRequest = new DetectedOperationRequest()
+ if (depthIntervals is not null)
{
- IdWell = well.Id,
- 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);
-
- foreach (var subsystem in groupSubsystem)
- {
- var dto = subsystem.Select(s => s.Adapt());
- var subsystemStat = CalcStat(dto, depthInterval);
- wellStat.listSubsystemStat.Concat(subsystemStat);
- //wellStat.Saub = subsystemStat.FirstOrDefault(s=>s.IdSubsystem == idSubsystemSaub)
- }
-
+ var depthInterval = depthIntervals.Where(o => o.Item1 == well.IdTelemetry).Select(o => (o.Item2, o.Item3)).FirstOrDefault();
+ //var groupSubsystem = group.GroupBy(g => g.IdSubsystem);
+ var dto = group.Select(s => s.Adapt());
+ var subsystemStat = CalcStat(dto, depthInterval);
+ wellStat.SubsystemAKB = subsystemStat.FirstOrDefault(s => s.IdSubsystem == IdSubsystemAKB);
+ wellStat.SubsystemMSE = subsystemStat.FirstOrDefault(s => s.IdSubsystem == IdSubsystemMSE);
+ wellStat.SubsystemSpinMaster = subsystemStat.FirstOrDefault(s => s.IdSubsystem == IdSubsystemSpin);
+ wellStat.SubsystemTorqueMaster = subsystemStat.FirstOrDefault(s => s.IdSubsystem == IdSubsystemTorque);
result.Add(wellStat);
}
+
}
}
return result;