отсутствие статистики за скважину будет возвращать пустую статистику

This commit is contained in:
eugeniy_ivanov 2022-11-03 17:13:39 +05:00
parent e8225a375e
commit f1dea8f10f
3 changed files with 28 additions and 29 deletions

View File

@ -1,7 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
namespace AsbCloudApp.Data.Subsystems namespace AsbCloudApp.Data.Subsystems
{ {
#nullable enable
/// <summary> /// <summary>
/// Статистика наработки подсистем по активным скважинам /// Статистика наработки подсистем по активным скважинам
/// </summary> /// </summary>
@ -14,19 +14,19 @@ namespace AsbCloudApp.Data.Subsystems
/// <summary> /// <summary>
/// Наработки подсистемы АКБ /// Наработки подсистемы АКБ
/// </summary> /// </summary>
public SubsystemStatDto SubsystemAKB { get; set; } public SubsystemStatDto? SubsystemAKB { get; set; }
/// <summary> /// <summary>
/// Наработки подсистемы МСЕ /// Наработки подсистемы МСЕ
/// </summary> /// </summary>
public SubsystemStatDto SubsystemMSE { get; set; } public SubsystemStatDto? SubsystemMSE { get; set; }
/// <summary> /// <summary>
/// Наработки подсистемы СПИН /// Наработки подсистемы СПИН
/// </summary> /// </summary>
public SubsystemStatDto SubsystemSpinMaster { get; set; } public SubsystemStatDto? SubsystemSpinMaster { get; set; }
/// <summary> /// <summary>
/// Наработки подсистемы ТОРК /// Наработки подсистемы ТОРК
/// </summary> /// </summary>
public SubsystemStatDto SubsystemTorqueMaster { get; set; } public SubsystemStatDto? SubsystemTorqueMaster { get; set; }
} }
#nullable disable
} }

View File

@ -18,7 +18,7 @@ namespace AsbCloudInfrastructure.Services.DetectOperations
#nullable enable #nullable enable
public class DetectedOperationService : IDetectedOperationService public class DetectedOperationService : IDetectedOperationService
{ {
public const int IdOperationRotor = 1; public const int IdOperationRotor = 2;
public const int IdOperationSlide = 3; public const int IdOperationSlide = 3;
public const int IdOperationSlipsTime = 14; public const int IdOperationSlipsTime = 14;
public const int idOperationFlushing = 22; public const int idOperationFlushing = 22;
@ -95,8 +95,8 @@ namespace AsbCloudInfrastructure.Services.DetectOperations
.Select(g => new .Select(g => new
{ {
IdTelemetry = g.Key, IdTelemetry = g.Key,
RotorDepthInterval = g.Where(o => o.IdCategory == 1).Sum(o => o.DepthEnd - o.DepthStart), RotorDepthInterval = g.Where(o => o.IdCategory == IdOperationRotor).Sum(o => o.DepthEnd - o.DepthStart),
SlideDepthInterval = g.Where(o => o.IdCategory == 3).Sum(o => o.DepthEnd - o.DepthStart) SlideDepthInterval = g.Where(o => o.IdCategory == IdOperationSlide).Sum(o => o.DepthEnd - o.DepthStart)
}); });
var data = await query.ToListAsync(token); var data = await query.ToListAsync(token);
if (data.Any()) if (data.Any())

View File

@ -202,7 +202,11 @@ namespace AsbCloudInfrastructure.Services.Subsystems
var telemetryIds = activeWell.Select(w => w.IdTelemetry).Distinct(); var telemetryIds = activeWell.Select(w => w.IdTelemetry).Distinct();
var firstWell = activeWell.FirstOrDefault(); var firstWell = activeWell.FirstOrDefault();
if (firstWell == null) if (firstWell == null)
return null; return Enumerable.Empty<SubsystemActiveWellStatDto>();
var result =activeWell.Select( t => new SubsystemActiveWellStatDto
{
ActiveWell = t
});
var query = db.SubsystemOperationTimes var query = db.SubsystemOperationTimes
.Where(o => telemetryIds.Contains(o.IdTelemetry)) .Where(o => telemetryIds.Contains(o.IdTelemetry))
@ -221,30 +225,25 @@ namespace AsbCloudInfrastructure.Services.Subsystems
query = query.Where(d => d.DateStart >= beginUTC); query = query.Where(d => d.DateStart >= beginUTC);
query = query.Where(o => o.DateEnd <= endUTC); query = query.Where(o => o.DateEnd <= endUTC);
var depthIntervals = await detectedOperationService.GetDepthIntervalAllOperationsAsync(telemetryIds, beginUTC, endUTC, token); var depthIntervals = await detectedOperationService.GetDepthIntervalAllOperationsAsync(telemetryIds, beginUTC, endUTC, token);
var result = new List<SubsystemActiveWellStatDto>(); if (depthIntervals is null)
{
return result;
}
var subsystemsOperationTime = await query.ToListAsync(token); var subsystemsOperationTime = await query.ToListAsync(token);
var groupingSubsystemsOperationTime = subsystemsOperationTime.GroupBy(g => g.IdTelemetry); var groupingSubsystemsOperationTime = subsystemsOperationTime.GroupBy(g => g.IdTelemetry);
foreach (var group in groupingSubsystemsOperationTime) foreach (var group in groupingSubsystemsOperationTime)
{ {
var well = activeWell.Where(w => w.IdTelemetry == group.Key).FirstOrDefault(); var well = result.Where(w => w.ActiveWell.IdTelemetry == group.Key).FirstOrDefault();
if (well != null) if (well is not null)
{ {
var wellStat = new SubsystemActiveWellStatDto() var depthInterval = depthIntervals.Where(o => o.idTelemetry == well.ActiveWell.IdTelemetry).Select(o => (o.depthIntervalRotor, o.depthIntervalSlide)).FirstOrDefault();
{ var dto = group.Select(s => s.Adapt<SubsystemOperationTimeDto>());
ActiveWell = well var subsystemStat = CalcStat(dto, depthInterval);
}; well.SubsystemAKB = subsystemStat.FirstOrDefault(s => s.IdSubsystem == IdSubsystemAKB);
if (depthIntervals is not null) well.SubsystemMSE = subsystemStat.FirstOrDefault(s => s.IdSubsystem == IdSubsystemMSE);
{ well.SubsystemSpinMaster = subsystemStat.FirstOrDefault(s => s.IdSubsystem == IdSubsystemSpin);
var depthInterval = depthIntervals.Where(o => o.Item1 == well.IdTelemetry).Select(o => (o.Item2, o.Item3)).FirstOrDefault(); well.SubsystemTorqueMaster = subsystemStat.FirstOrDefault(s => s.IdSubsystem == IdSubsystemTorque);
var dto = group.Select(s => s.Adapt<SubsystemOperationTimeDto>());
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; return result;