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

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;
namespace AsbCloudApp.Data.Subsystems
{
#nullable enable
/// <summary>
/// Статистика наработки подсистем по активным скважинам
/// </summary>
@ -14,19 +14,19 @@ namespace AsbCloudApp.Data.Subsystems
/// <summary>
/// Наработки подсистемы АКБ
/// </summary>
public SubsystemStatDto SubsystemAKB { get; set; }
public SubsystemStatDto? SubsystemAKB { get; set; }
/// <summary>
/// Наработки подсистемы МСЕ
/// </summary>
public SubsystemStatDto SubsystemMSE { get; set; }
public SubsystemStatDto? SubsystemMSE { get; set; }
/// <summary>
/// Наработки подсистемы СПИН
/// </summary>
public SubsystemStatDto SubsystemSpinMaster { get; set; }
public SubsystemStatDto? SubsystemSpinMaster { get; set; }
/// <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
public class DetectedOperationService : IDetectedOperationService
{
public const int IdOperationRotor = 1;
public const int IdOperationRotor = 2;
public const int IdOperationSlide = 3;
public const int IdOperationSlipsTime = 14;
public const int idOperationFlushing = 22;
@ -95,8 +95,8 @@ namespace AsbCloudInfrastructure.Services.DetectOperations
.Select(g => new
{
IdTelemetry = g.Key,
RotorDepthInterval = g.Where(o => o.IdCategory == 1).Sum(o => o.DepthEnd - o.DepthStart),
SlideDepthInterval = g.Where(o => o.IdCategory == 3).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 == IdOperationSlide).Sum(o => o.DepthEnd - o.DepthStart)
});
var data = await query.ToListAsync(token);
if (data.Any())

View File

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