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")]
|
[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>
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user