Исправления после ревью

This commit is contained in:
parent 20d306a24c
commit 5b06b9d557
2 changed files with 30 additions and 29 deletions

View File

@ -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>

View File

@ -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)
{