forked from ddrilling/AsbCloudServer
отсутствие статистики за скважину будет возвращать пустую статистику
This commit is contained in:
parent
e8225a375e
commit
f1dea8f10f
@ -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
|
||||
}
|
@ -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())
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user