From 56b90e0952cdb2dc0f51f77f5ce32acf0a2d1ef8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D1=82=D0=B5=D0=BF=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=94?= =?UTF-8?q?=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9=20=D0=90=D0=BB=D0=B5=D0=BA?= =?UTF-8?q?=D1=81=D0=B0=D0=BD=D0=B4=D1=80=D0=BE=D0=B2=D0=B8=D1=87?= Date: Thu, 27 Jul 2023 11:43:21 +0500 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=81=D1=83=D1=82=D0=BE=D1=87=D0=BD?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D0=BE=D1=82=D1=87=D1=91=D1=82=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Мелкие фиксы в сервисе + сделал более предсказуемый размер файлов отчёта. 2. Исправил получение ограничивающих параметров. Теперь не учитываются ограничивающие параметры если их начальная глубина больше конечной. --- .../AutoGeneratedDailyReportService.cs | 27 ++++++++++--------- .../Services/LimitingParameterService.cs | 13 ++++++--- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/AsbCloudInfrastructure/Services/AutoGeneratedDailyReports/AutoGeneratedDailyReportService.cs b/AsbCloudInfrastructure/Services/AutoGeneratedDailyReports/AutoGeneratedDailyReportService.cs index 4012ebdf..7e92e87b 100644 --- a/AsbCloudInfrastructure/Services/AutoGeneratedDailyReports/AutoGeneratedDailyReportService.cs +++ b/AsbCloudInfrastructure/Services/AutoGeneratedDailyReports/AutoGeneratedDailyReportService.cs @@ -94,13 +94,13 @@ public class AutoGeneratedDailyReportService : IAutoGeneratedDailyReportService for (int day = result.Skip; (day - result.Skip) < result.Take && (datesRange.From.AddDays(day)) <= datesRange.To; day++) { - var dateFrom = datesRange.From.AddDays(day); + var reportDate = DateOnly.FromDateTime(datesRange.From.AddDays(day)); - reports.Add(new AutoGeneratedDailyReportDto + reports.Add(new AutoGeneratedDailyReportInfoDto { - FileName = string.Format(fileNameTemplate, well.Caption, well.Cluster, DateOnly.FromDateTime(dateFrom)), - ReportDate = DateOnly.FromDateTime(dateFrom), - FileSize = GetFileSize() / 1024, + FileName = string.Format(fileNameTemplate, well.Caption, well.Cluster, reportDate), + ReportDate = reportDate, + FileSize = GetFileSize(reportDate, idWell) / 1024, }); } @@ -127,9 +127,9 @@ public class AutoGeneratedDailyReportService : IAutoGeneratedDailyReportService var report = new AutoGeneratedDailyReportDto { FileName = string.Format(fileNameTemplate, well.Caption, well.Cluster, reportDate), - FileSize = GetFileSize() / 1024, + FileSize = GetFileSize(reportDate, idWell) / 1024, ReportDate = reportDate, - Head = CreateHeadBlock(well, reportDate, factOperations), + Head = CreateHeadBlock(well, factOperations), Subsystems = (await CreateSubsystemBlockAsync(idWell, startDate, finishDate, cancellationToken)).ToArray(), LimitingParameters = (await CreateLimitingParameterBlockAsync(idWell, startDate, finishDate, cancellationToken)).ToArray(), TimeBalance = factOperations.GroupBy(w => w.CategoryName).Select(x => new TimeBalanceRecordDto @@ -144,7 +144,7 @@ public class AutoGeneratedDailyReportService : IAutoGeneratedDailyReportService return (report.FileName, stream); } - private HeadBlockDto CreateHeadBlock(WellDto well, DateOnly reportDate, WellOperationDto[] factOperations) + private HeadBlockDto CreateHeadBlock(WellDto well, WellOperationDto[] factOperations) { var customer = well.Companies.FirstOrDefault(company => company.IdCompanyType == 1); @@ -188,12 +188,12 @@ public class AutoGeneratedDailyReportService : IAutoGeneratedDailyReportService startDate, finishDate, cancellationToken)).ToArray(); var sumDepths = limitingParameterStats.Sum(x => x.Depth); - + return limitingParameterStats.Select(l => new LimitingParameterRecordDto { NameFeedRegulator = l.NameFeedRegulator, Hours = l.TotalMinutes, - PercentDepth = l.Depth / sumDepths, + PercentDepth = sumDepths != 0 ? l.Depth / sumDepths : 0, Depth = l.Depth, }); } @@ -239,10 +239,11 @@ public class AutoGeneratedDailyReportService : IAutoGeneratedDailyReportService return limitingParameterService.GetStatAsync(request, cancellationToken); } - private int GetFileSize() + private int GetFileSize(DateOnly reportDate, int idWell) { const int fileSizeTemplate = 10240; - // TODO: Добавку размера сделать более предсказуемой на основе даты рапорта. что то типа `(Date.Ticks * idWell) % (fileSizeTemplate / 10)` - return new Random().Next(1, 8193) + fileSizeTemplate; + long ticks = new DateTime(reportDate.Year, reportDate.Month, reportDate.Day).Ticks * idWell; + int remainder = (int)(ticks % (fileSizeTemplate / 10)); + return fileSizeTemplate + remainder; } } \ No newline at end of file diff --git a/AsbCloudInfrastructure/Services/LimitingParameterService.cs b/AsbCloudInfrastructure/Services/LimitingParameterService.cs index b3aa7710..78587efb 100644 --- a/AsbCloudInfrastructure/Services/LimitingParameterService.cs +++ b/AsbCloudInfrastructure/Services/LimitingParameterService.cs @@ -43,10 +43,15 @@ namespace AsbCloudInfrastructure.Services List result = new List(data.Count()); foreach (var item in data) { - var trimData = TrimLimitingParameters(item, request); - - var allItemDepths = trimData.Sum(x => x.DepthEnd - x.DepthStart); - var allItemDates = trimData.Sum(x => (x.DateEnd - x.DateStart).TotalMinutes); + var trimData = TrimLimitingParameters(item, request).ToArray(); + + //TODO: временный фикс, нужно избежать отрицательных значений в ограничивающих параметрах. + //Проблема возникает при при формировании LimitingParameter в LimitingParameterCalcWorkFactory. + //Начальная глубина ограничивающего параметра не может быть больше конечной. + var allItemDepths = trimData.Where(x => x.DepthStart < x.DepthEnd) + .Sum(x => x.DepthEnd - x.DepthStart); + var allItemDates = trimData.Where(x => x.DepthStart < x.DepthEnd) + .Sum(x => (x.DateEnd - x.DateStart).TotalMinutes); result.Add(new LimitingParameterDto {