внесение правок согласно код-ревью

This commit is contained in:
eugeniy_ivanov 2022-11-03 12:42:26 +05:00
parent 494fd2a107
commit bcdfb1933e
4 changed files with 66 additions and 30 deletions

View File

@ -15,6 +15,22 @@ namespace AsbCloudApp.Data.Subsystems
/// Наработки подсистем
/// </summary>
public IEnumerable<SubsystemStatDto> listSubsystemStat { get; set; }
/// <summary>
/// Наработки подсистемы АКБ
/// </summary>
public SubsystemStatDto SubsystemAKB { get; set; }
/// <summary>
/// Наработки подсистемы МСЕ
/// </summary>
public SubsystemStatDto SubsystemMSE { get; set; }
/// <summary>
/// Наработки подсистемы СПИН
/// </summary>
public SubsystemStatDto SubsystemSpinMaster { get; set; }
/// <summary>
/// Наработки подсистемы ТОРК
/// </summary>
public SubsystemStatDto SubsystemTorqueMaster { get; set; }
}
}

View File

@ -1,6 +1,7 @@
using AsbCloudApp.Data;
using AsbCloudApp.Data.DetectedOperation;
using AsbCloudApp.Requests;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
@ -39,6 +40,16 @@ namespace AsbCloudApp.Services
/// <returns></returns>
Task<IEnumerable<DetectedOperationDto>?> GetOperationsAsync(DetectedOperationRequest request, CancellationToken token);
/// <summary>
/// Удалить операции
/// </summary>
/// <param name="gtDate"></param>
/// <param name="ltDate"></param>
/// <param name="token"></param>
/// <param name="wellTimezoneHours"></param>
/// <returns>кортеж - ид телеметрии, интервалы глубины забоя </returns>
Task<IEnumerable<(int, double, double)>?> GetDepthIntervalAllOperationsAsync(DateTime gtDate, DateTime ltDate, double wellTimezoneHours, CancellationToken token);
/// <summary>
/// Удалить операции
/// </summary>

View File

@ -84,6 +84,25 @@ namespace AsbCloudInfrastructure.Services.DetectOperations
return dtos;
}
public async Task<IEnumerable<(int, double, double)>?> GetDepthIntervalAllOperationsAsync(DateTime gtDate, DateTime ltDate, double wellTimezoneHours ,CancellationToken token)
{
var query = db.Set<DetectedOperation>()
.Include(o => o.OperationCategory)
.Where(o => o.DateStart >= gtDate.ToUtcDateTimeOffset(wellTimezoneHours))
.Where(o => o.DateEnd <= ltDate.ToUtcDateTimeOffset(wellTimezoneHours));
if (query is null)
return null;
var data = await query.ToListAsync(token);
var result = data.GroupBy(g => g.IdTelemetry)
.Select(g =>
(
g.Key,
g.Where(o => o.IdCategory == 1).Sum(o => o.DepthEnd - o.DepthStart),
g.Where(o => o.IdCategory == 3).Sum(o => o.DepthEnd - o.DepthStart)
));
return result;
}
private static IEnumerable<DetectedOperationDrillersStatDto> GetOperationsDrillersStat(IEnumerable<DetectedOperationDto> operations)
{
var groups = operations.GroupBy(o => o.Driller);

View File

@ -183,15 +183,7 @@ namespace AsbCloudInfrastructure.Services.Subsystems
return depthIntervalSubsystem;
}
//TODO:
// скорее всего нужно доработать wellService - первое это метод
// GetWellsByCompanyAsync (получать сразу активные скважины ,а не вытягивать сначала все)
// второе - метод GetOperationsAsync - по умолчанию если не указан
// ИД скважины он заполняется как 0 , в нашем случае нужно получить опред операции по ВСЕМ
// скважинам
private async Task<IEnumerable<WellDto>> GetActiveWellByCompany(int idCompany, CancellationToken token)
{
var listWell = await wellService.GetWellsByCompanyAsync(idCompany, token);
@ -207,39 +199,35 @@ namespace AsbCloudInfrastructure.Services.Subsystems
var firstWell = activeWell.FirstOrDefault();
if (firstWell == null)
return null;
var _well = wellService.GetOrDefault(firstWell.Id);
if (_well is null || _well.Timezone is null)
return null;
DateTimeOffset ExtractDate(DateTime dateTime)
{
var dateTimeOffset = dateTime.ToUtcDateTimeOffset(_well!.Timezone.Hours);
var date = new DateTimeOffset(dateTimeOffset.Year, dateTimeOffset.Month, dateTimeOffset.Day, 0, 0, 0, TimeSpan.Zero);
return date;
}
var query = db.SubsystemOperationTimes
.Where(o => telemetryIds.Contains(o.IdTelemetry))
.AsNoTracking();
.AsNoTracking();
if (gtDate is not null)
if (gtDate is not null)
{
var beginUTC = ExtractDate(gtDate.Value);
var beginUTC = gtDate.Value.ToUtcDateTimeOffset(firstWell.Timezone.Hours);
query = query.Where(d => d.DateStart >= beginUTC);
}
//query = query.Where(o => o.DateStart >= DateTime.Today.ToUtcDateTimeOffset(_well.Timezone.Hours));
if (ltDate is not null)
else
{
var endUTC = ExtractDate(ltDate.Value);
var beginUTC = DateTime.Today.AddDays(-1).ToUtcDateTimeOffset(firstWell.Timezone.Hours);
query = query.Where(o => o.DateStart >= beginUTC );
}
if (ltDate is not null)
{
var endUTC = ltDate.Value.ToUtcDateTimeOffset(firstWell.Timezone.Hours);
query = query.Where(d => d.DateEnd <= endUTC);
}
//query = query.Where(o => o.DateEnd <= DateTime.Today.AddDays(-1).ToUtcDateTimeOffset(_well.Timezone.Hours));
else
{
var endUTC = DateTime.Today.ToUtcDateTimeOffset(firstWell.Timezone.Hours);
query = query.Where(o => o.DateEnd <= endUTC);
}
var result = new List<SubsystemActiveWellStatDto>();
if (query is null)
{
return null;
}
var subsystemsOperationTime = await query.ToListAsync(token);
var groupingSubsystemsOperationTime = subsystemsOperationTime.GroupBy(g => g.IdTelemetry);
@ -272,7 +260,9 @@ namespace AsbCloudInfrastructure.Services.Subsystems
var dto = subsystem.Select(s => s.Adapt<SubsystemOperationTimeDto>());
var subsystemStat = CalcStat(dto, depthInterval);
wellStat.listSubsystemStat.Concat(subsystemStat);
//wellStat.Saub = subsystemStat.FirstOrDefault(s=>s.IdSubsystem == idSubsystemSaub)
}
result.Add(wellStat);
}
}