forked from ddrilling/AsbCloudServer
Исправления после ревью
This commit is contained in:
parent
20d306a24c
commit
5b06b9d557
@ -89,11 +89,6 @@ namespace AsbCloudApp.Data
|
||||
[DateValidation(GtDate = "2010-01-01T00:00:00")]
|
||||
public DateTime DateStart { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Дата окончания операции
|
||||
/// </summary>
|
||||
public DateTime DateEnd => DateStart.AddHours(DurationHours);
|
||||
|
||||
/// <summary>
|
||||
/// Продолжительность, часы
|
||||
/// </summary>
|
||||
|
@ -173,43 +173,49 @@ namespace AsbCloudInfrastructure.Services.WellOperationService
|
||||
var timezoneOffsetH = wellService.GetTimezone(well.Id).Hours;
|
||||
statWellDto.Sections = CalcSectionsStats(wellOperations, timezoneOffsetH);
|
||||
statWellDto.Total = GetStatTotal(wellOperations, well.IdState, timezoneOffsetH);
|
||||
statWellDto.TvdLagPercent = CalcTvdLagPercent(well.IdTelemetry, wellOperations
|
||||
.Select(x => x.Adapt<WellOperationDto>()));
|
||||
statWellDto.TvdLagPercent = CalcTvdLagPercent(well.IdTelemetry, wellOperations);
|
||||
|
||||
return statWellDto;
|
||||
}
|
||||
|
||||
private double? CalcTvdLagPercent(int? idTelemetry, IEnumerable<WellOperationDto> wellOperations)
|
||||
{
|
||||
if (!idTelemetry.HasValue)
|
||||
return null;
|
||||
|
||||
private double? CalcTvdLagPercent(int? idTelemetry, IOrderedEnumerable<WellOperation> wellOperations)
|
||||
{
|
||||
var currentDate = DateTime.UtcNow;
|
||||
|
||||
var wellDepth = wellOperations
|
||||
.LastOrDefault(o => o.IdType == WellOperation.IdOperationTypeFact)?.DepthEnd;
|
||||
|
||||
if (idTelemetry.HasValue)
|
||||
wellDepth = telemetryDataCache.GetLastOrDefault(idTelemetry.Value)?.WellDepth;
|
||||
|
||||
var lastFactOperation = telemetryDataCache.GetLastOrDefault(idTelemetry.Value);
|
||||
|
||||
wellOperations = wellOperations
|
||||
.Where(o => o.IdType == WellOperation.IdOperationTypePlan)
|
||||
.OrderBy(o => o.DateEnd);
|
||||
var planOperations = wellOperations
|
||||
.Where(o => o.IdType == WellOperation.IdOperationTypePlan)
|
||||
.OrderBy(o => o.DateStart.AddHours(o.DurationHours));
|
||||
|
||||
var wellOperationFrom = wellOperations
|
||||
.LastOrDefault(o => o.DateEnd <= currentDate);
|
||||
var wellOperationFrom = planOperations
|
||||
.LastOrDefault(o => o.DateStart.AddHours(o.DurationHours) <= currentDate);
|
||||
|
||||
var wellOperationTo = wellOperations
|
||||
.FirstOrDefault(o => o.DateEnd >= currentDate);
|
||||
var wellOperationTo = planOperations
|
||||
.FirstOrDefault(o => o.DateStart >= currentDate);
|
||||
|
||||
var wellOperationDepthFrom = wellOperationFrom?.DepthEnd;
|
||||
var wellOperationDepthTo = wellOperationTo?.DepthStart ?? wellOperationDepthFrom;
|
||||
var wellOperationDepthTo = wellOperationTo?.DepthStart ?? wellOperationDepthFrom;
|
||||
|
||||
var wellOperationDateFrom = wellOperationFrom?.DateEnd;
|
||||
var wellOperationDateTo = wellOperationTo?.DateStart ?? wellOperationDateFrom;
|
||||
var wellOperationDateFrom = wellOperationFrom?.DateStart.AddHours(wellOperationFrom.DurationHours);
|
||||
var wellOperationDateTo = wellOperationTo?.DateStart ?? currentDate;
|
||||
|
||||
var planDepth = (wellOperationDateTo - wellOperationDateFrom)?.TotalHours *
|
||||
(wellOperationDepthTo - wellOperationDepthFrom) /
|
||||
(currentDate - wellOperationDateFrom)?.TotalHours + wellOperationDepthFrom;
|
||||
if (wellOperationDateTo <= wellOperationDateFrom ||
|
||||
currentDate <= wellOperationDateFrom ||
|
||||
(wellOperationDateTo - wellOperationDateFrom)?.TotalHours is null or 0)
|
||||
return null;
|
||||
|
||||
return (1 - lastFactOperation?.WellDepth / planDepth) * 100;
|
||||
}
|
||||
var planDepth = (currentDate - wellOperationDateFrom)?.TotalHours *
|
||||
(wellOperationDepthTo - wellOperationDepthFrom) /
|
||||
(wellOperationDateTo - wellOperationDateFrom)?.TotalHours +
|
||||
wellOperationDepthFrom;
|
||||
|
||||
return (1 - wellDepth / planDepth) * 100;
|
||||
}
|
||||
|
||||
private IEnumerable<StatSectionDto> CalcSectionsStats(IEnumerable<WellOperation> operations, double timezoneOffsetH)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user