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

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")] [DateValidation(GtDate = "2010-01-01T00:00:00")]
public DateTime DateStart { get; set; } public DateTime DateStart { get; set; }
/// <summary>
/// Дата окончания операции
/// </summary>
public DateTime DateEnd => DateStart.AddHours(DurationHours);
/// <summary> /// <summary>
/// Продолжительность, часы /// Продолжительность, часы
/// </summary> /// </summary>

View File

@ -173,43 +173,49 @@ namespace AsbCloudInfrastructure.Services.WellOperationService
var timezoneOffsetH = wellService.GetTimezone(well.Id).Hours; var timezoneOffsetH = wellService.GetTimezone(well.Id).Hours;
statWellDto.Sections = CalcSectionsStats(wellOperations, timezoneOffsetH); statWellDto.Sections = CalcSectionsStats(wellOperations, timezoneOffsetH);
statWellDto.Total = GetStatTotal(wellOperations, well.IdState, timezoneOffsetH); statWellDto.Total = GetStatTotal(wellOperations, well.IdState, timezoneOffsetH);
statWellDto.TvdLagPercent = CalcTvdLagPercent(well.IdTelemetry, wellOperations statWellDto.TvdLagPercent = CalcTvdLagPercent(well.IdTelemetry, wellOperations);
.Select(x => x.Adapt<WellOperationDto>()));
return statWellDto; return statWellDto;
} }
private double? CalcTvdLagPercent(int? idTelemetry, IEnumerable<WellOperationDto> wellOperations) private double? CalcTvdLagPercent(int? idTelemetry, IOrderedEnumerable<WellOperation> wellOperations)
{ {
if (!idTelemetry.HasValue)
return null;
var currentDate = DateTime.UtcNow; 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); var planOperations = wellOperations
.Where(o => o.IdType == WellOperation.IdOperationTypePlan)
wellOperations = wellOperations .OrderBy(o => o.DateStart.AddHours(o.DurationHours));
.Where(o => o.IdType == WellOperation.IdOperationTypePlan)
.OrderBy(o => o.DateEnd);
var wellOperationFrom = wellOperations var wellOperationFrom = planOperations
.LastOrDefault(o => o.DateEnd <= currentDate); .LastOrDefault(o => o.DateStart.AddHours(o.DurationHours) <= currentDate);
var wellOperationTo = wellOperations var wellOperationTo = planOperations
.FirstOrDefault(o => o.DateEnd >= currentDate); .FirstOrDefault(o => o.DateStart >= currentDate);
var wellOperationDepthFrom = wellOperationFrom?.DepthEnd; var wellOperationDepthFrom = wellOperationFrom?.DepthEnd;
var wellOperationDepthTo = wellOperationTo?.DepthStart ?? wellOperationDepthFrom; var wellOperationDepthTo = wellOperationTo?.DepthStart ?? wellOperationDepthFrom;
var wellOperationDateFrom = wellOperationFrom?.DateEnd; var wellOperationDateFrom = wellOperationFrom?.DateStart.AddHours(wellOperationFrom.DurationHours);
var wellOperationDateTo = wellOperationTo?.DateStart ?? wellOperationDateFrom; var wellOperationDateTo = wellOperationTo?.DateStart ?? currentDate;
var planDepth = (wellOperationDateTo - wellOperationDateFrom)?.TotalHours * if (wellOperationDateTo <= wellOperationDateFrom ||
(wellOperationDepthTo - wellOperationDepthFrom) / currentDate <= wellOperationDateFrom ||
(currentDate - wellOperationDateFrom)?.TotalHours + wellOperationDepthFrom; (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) private IEnumerable<StatSectionDto> CalcSectionsStats(IEnumerable<WellOperation> operations, double timezoneOffsetH)
{ {