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