diff --git a/AsbCloudApp/Data/Subsystems/SubsystemActiveWellStatDto.cs b/AsbCloudApp/Data/Subsystems/SubsystemActiveWellStatDto.cs index a06f1064..45bc7147 100644 --- a/AsbCloudApp/Data/Subsystems/SubsystemActiveWellStatDto.cs +++ b/AsbCloudApp/Data/Subsystems/SubsystemActiveWellStatDto.cs @@ -15,6 +15,22 @@ namespace AsbCloudApp.Data.Subsystems /// Наработки подсистем /// public IEnumerable listSubsystemStat { get; set; } + /// + /// Наработки подсистемы АКБ + /// + public SubsystemStatDto SubsystemAKB { get; set; } + /// + /// Наработки подсистемы МСЕ + /// + public SubsystemStatDto SubsystemMSE { get; set; } + /// + /// Наработки подсистемы СПИН + /// + public SubsystemStatDto SubsystemSpinMaster { get; set; } + /// + /// Наработки подсистемы ТОРК + /// + public SubsystemStatDto SubsystemTorqueMaster { get; set; } } } \ No newline at end of file diff --git a/AsbCloudApp/Services/IDetectedOperationService.cs b/AsbCloudApp/Services/IDetectedOperationService.cs index 14a05665..7544f5c3 100644 --- a/AsbCloudApp/Services/IDetectedOperationService.cs +++ b/AsbCloudApp/Services/IDetectedOperationService.cs @@ -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 /// Task?> GetOperationsAsync(DetectedOperationRequest request, CancellationToken token); + /// + /// Удалить операции + /// + /// + /// + /// + /// + /// кортеж - ид телеметрии, интервалы глубины забоя + Task?> GetDepthIntervalAllOperationsAsync(DateTime gtDate, DateTime ltDate, double wellTimezoneHours, CancellationToken token); + /// /// Удалить операции /// diff --git a/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationService.cs b/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationService.cs index 3e8b3df2..3891af42 100644 --- a/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationService.cs +++ b/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationService.cs @@ -84,6 +84,25 @@ namespace AsbCloudInfrastructure.Services.DetectOperations return dtos; } + public async Task?> GetDepthIntervalAllOperationsAsync(DateTime gtDate, DateTime ltDate, double wellTimezoneHours ,CancellationToken token) + { + var query = db.Set() + .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 GetOperationsDrillersStat(IEnumerable operations) { var groups = operations.GroupBy(o => o.Driller); diff --git a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs index 2852a52e..05ba770e 100644 --- a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs +++ b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs @@ -183,15 +183,7 @@ namespace AsbCloudInfrastructure.Services.Subsystems return depthIntervalSubsystem; } - - //TODO: - // скорее всего нужно доработать wellService - первое это метод - // GetWellsByCompanyAsync (получать сразу активные скважины ,а не вытягивать сначала все) - // второе - метод GetOperationsAsync - по умолчанию если не указан - // ИД скважины он заполняется как 0 , в нашем случае нужно получить опред операции по ВСЕМ - // скважинам - - + private async Task> 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(); - 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()); var subsystemStat = CalcStat(dto, depthInterval); wellStat.listSubsystemStat.Concat(subsystemStat); + //wellStat.Saub = subsystemStat.FirstOrDefault(s=>s.IdSubsystem == idSubsystemSaub) } + result.Add(wellStat); } }