diff --git a/AsbCloudApp/Data/Subsystems/SubsystemActiveWellStatDto.cs b/AsbCloudApp/Data/Subsystems/SubsystemActiveWellStatDto.cs index 45bc7147..6cc3186c 100644 --- a/AsbCloudApp/Data/Subsystems/SubsystemActiveWellStatDto.cs +++ b/AsbCloudApp/Data/Subsystems/SubsystemActiveWellStatDto.cs @@ -10,27 +10,23 @@ namespace AsbCloudApp.Data.Subsystems /// /// Активная скважина /// - public WellDto ActiveWell { get; set; } - /// - /// Наработки подсистем - /// - public IEnumerable listSubsystemStat { get; set; } + public WellDto ActiveWell { get; set; } /// /// Наработки подсистемы АКБ /// - public SubsystemStatDto SubsystemAKB { get; set; } + public SubsystemStatDto? SubsystemAKB { get; set; } /// /// Наработки подсистемы МСЕ /// - public SubsystemStatDto SubsystemMSE { get; set; } + public SubsystemStatDto? SubsystemMSE { get; set; } /// /// Наработки подсистемы СПИН /// - public SubsystemStatDto SubsystemSpinMaster { get; set; } + public SubsystemStatDto? SubsystemSpinMaster { get; set; } /// /// Наработки подсистемы ТОРК /// - public SubsystemStatDto SubsystemTorqueMaster { 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 7544f5c3..278b375b 100644 --- a/AsbCloudApp/Services/IDetectedOperationService.cs +++ b/AsbCloudApp/Services/IDetectedOperationService.cs @@ -45,10 +45,9 @@ namespace AsbCloudApp.Services /// /// /// - /// - /// + /// /// кортеж - ид телеметрии, интервалы глубины забоя - Task?> GetDepthIntervalAllOperationsAsync(DateTime gtDate, DateTime ltDate, double wellTimezoneHours, CancellationToken token); + Task?> GetDepthIntervalAllOperationsAsync(DateTimeOffset gtDate, DateTimeOffset ltDate, CancellationToken token); /// /// Удалить операции diff --git a/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationService.cs b/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationService.cs index 3891af42..bd11afe6 100644 --- a/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationService.cs +++ b/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationService.cs @@ -84,24 +84,28 @@ namespace AsbCloudInfrastructure.Services.DetectOperations return dtos; } - public async Task?> GetDepthIntervalAllOperationsAsync(DateTime gtDate, DateTime ltDate, double wellTimezoneHours ,CancellationToken token) + + + public async Task?> GetDepthIntervalAllOperationsAsync(DateTimeOffset gtDate, DateTimeOffset ltDate, 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; + .Where(o => o.DateStart >= gtDate) + .Where(o => o.DateEnd <= ltDate); 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; - } + if (data.Any()) + { + 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; + } + return null; + } private static IEnumerable GetOperationsDrillersStat(IEnumerable operations) { @@ -320,6 +324,7 @@ namespace AsbCloudInfrastructure.Services.DetectOperations var exportService = new DetectedOperationExportService(db, wellService); return exportService.ExportAsync(idsWells, token); } + } #nullable disable } diff --git a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs index 05ba770e..e462e7fa 100644 --- a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs +++ b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs @@ -25,6 +25,10 @@ namespace AsbCloudInfrastructure.Services.Subsystems private readonly IWellService wellService; private readonly ICrudService subsystemService; private readonly IDetectedOperationService detectedOperationService; + public const int IdSubsystemAKB = 1; + public const int IdSubsystemMSE = 2; + public const int IdSubsystemSpin = 65536; + public const int IdSubsystemTorque = 65537; public SubsystemOperationTimeService(IAsbCloudDbContext db, IWellService wellService, ICrudService subsystemService, IDetectedOperationService detectedOperationService) { this.db = db; @@ -202,30 +206,19 @@ namespace AsbCloudInfrastructure.Services.Subsystems var query = db.SubsystemOperationTimes .Where(o => telemetryIds.Contains(o.IdTelemetry)) - .AsNoTracking(); - + .AsNoTracking(); + + var beginUTC = DateTime.Today.AddDays(-1).ToUtcDateTimeOffset(firstWell.Timezone.Hours); + var endUTC = DateTime.Today.ToUtcDateTimeOffset(firstWell.Timezone.Hours); if (gtDate is not null) { - var beginUTC = gtDate.Value.ToUtcDateTimeOffset(firstWell.Timezone.Hours); - query = query.Where(d => d.DateStart >= beginUTC); - } - else - { - 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); - } - else - { - var endUTC = DateTime.Today.ToUtcDateTimeOffset(firstWell.Timezone.Hours); - query = query.Where(o => o.DateEnd <= endUTC); + beginUTC = gtDate.Value.ToUtcDateTimeOffset(firstWell.Timezone.Hours); } + query = query.Where(d => d.DateStart >= beginUTC); + query = query.Where(o => o.DateEnd <= endUTC); + + var depthIntervals = await detectedOperationService.GetDepthIntervalAllOperationsAsync(beginUTC, endUTC, token); var result = new List(); var subsystemsOperationTime = await query.ToListAsync(token); @@ -238,33 +231,21 @@ namespace AsbCloudInfrastructure.Services.Subsystems { var wellStat = new SubsystemActiveWellStatDto() { - ActiveWell = well, - listSubsystemStat = new List() - + ActiveWell = well }; - var detectedOperationsRequest = new DetectedOperationRequest() + if (depthIntervals is not null) { - IdWell = well.Id, - IdsCategories = new List() { 1, 3 }, - LtDate = ltDate, - GtDate = gtDate, - }; - var detectedOperations = await detectedOperationService.GetOperationsAsync(detectedOperationsRequest, token); - if (detectedOperations is not null && detectedOperations.Any()) - { - var depthInterval = GetDepthInterval(detectedOperations); - var groupSubsystem = group.GroupBy(g => g.IdSubsystem); - - foreach (var subsystem in groupSubsystem) - { - var dto = subsystem.Select(s => s.Adapt()); - var subsystemStat = CalcStat(dto, depthInterval); - wellStat.listSubsystemStat.Concat(subsystemStat); - //wellStat.Saub = subsystemStat.FirstOrDefault(s=>s.IdSubsystem == idSubsystemSaub) - } - + var depthInterval = depthIntervals.Where(o => o.Item1 == well.IdTelemetry).Select(o => (o.Item2, o.Item3)).FirstOrDefault(); + //var groupSubsystem = group.GroupBy(g => g.IdSubsystem); + var dto = group.Select(s => s.Adapt()); + var subsystemStat = CalcStat(dto, depthInterval); + wellStat.SubsystemAKB = subsystemStat.FirstOrDefault(s => s.IdSubsystem == IdSubsystemAKB); + wellStat.SubsystemMSE = subsystemStat.FirstOrDefault(s => s.IdSubsystem == IdSubsystemMSE); + wellStat.SubsystemSpinMaster = subsystemStat.FirstOrDefault(s => s.IdSubsystem == IdSubsystemSpin); + wellStat.SubsystemTorqueMaster = subsystemStat.FirstOrDefault(s => s.IdSubsystem == IdSubsystemTorque); result.Add(wellStat); } + } } return result;