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 {