From b63d1ebff8c338c6233e1edd07f749c475bc15f1 Mon Sep 17 00:00:00 2001 From: ngfrolov Date: Fri, 28 Jul 2023 11:14:45 +0500 Subject: [PATCH] =?UTF-8?q?AutoGeneratedDailyReportService=20=D1=84=D0=B8?= =?UTF-8?q?=D0=BA=D1=81=D1=8B=20=D1=84=D0=B8=D0=BA=D1=81=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AutoGeneratedDailyReportDto.cs | 9 ++++++--- .../AutoGeneratedDailyReportService.cs | 19 +++++++++--------- .../LimitingParameterExcelBlockWriter.cs | 17 +++++++--------- .../SubsystemExcelBlockWriter.cs | 17 +++++++--------- .../TimeBalanceExcelBlockWriter.cs | 20 ++++++++----------- 5 files changed, 38 insertions(+), 44 deletions(-) diff --git a/AsbCloudApp/Data/AutogeneratedDailyReport/AutoGeneratedDailyReportDto.cs b/AsbCloudApp/Data/AutogeneratedDailyReport/AutoGeneratedDailyReportDto.cs index ea3b3c53..9554c374 100644 --- a/AsbCloudApp/Data/AutogeneratedDailyReport/AutoGeneratedDailyReportDto.cs +++ b/AsbCloudApp/Data/AutogeneratedDailyReport/AutoGeneratedDailyReportDto.cs @@ -1,3 +1,6 @@ +using System.Collections; +using System.Collections.Generic; + namespace AsbCloudApp.Data.AutogeneratedDailyReport; /// @@ -14,15 +17,15 @@ public class AutoGeneratedDailyReportDto : AutoGeneratedDailyReportInfoDto /// /// Блок подсистем /// - public SubsystemRecordDto[] Subsystems { get; set; } = null!; + public IEnumerable Subsystems { get; set; } = null!; /// /// Блок ограничивающих параметров /// - public LimitingParameterRecordDto[] LimitingParameters { get; set; } = null!; + public IEnumerable LimitingParameters { get; set; } = null!; /// /// Баланс времени /// - public TimeBalanceRecordDto[] TimeBalance { get; set; } = null!; + public IEnumerable TimeBalance { get; set; } = null!; } \ No newline at end of file diff --git a/AsbCloudInfrastructure/Services/AutoGeneratedDailyReports/AutoGeneratedDailyReportService.cs b/AsbCloudInfrastructure/Services/AutoGeneratedDailyReports/AutoGeneratedDailyReportService.cs index 7e92e87b..514b0b66 100644 --- a/AsbCloudInfrastructure/Services/AutoGeneratedDailyReports/AutoGeneratedDailyReportService.cs +++ b/AsbCloudInfrastructure/Services/AutoGeneratedDailyReports/AutoGeneratedDailyReportService.cs @@ -100,7 +100,7 @@ public class AutoGeneratedDailyReportService : IAutoGeneratedDailyReportService { FileName = string.Format(fileNameTemplate, well.Caption, well.Cluster, reportDate), ReportDate = reportDate, - FileSize = GetFileSize(reportDate, idWell) / 1024, + FileSize = GetFileSize(reportDate, idWell), }); } @@ -121,13 +121,13 @@ public class AutoGeneratedDailyReportService : IAutoGeneratedDailyReportService if (!well.IdTelemetry.HasValue) throw new ArgumentInvalidException("Телеметрия для скважины отсутствует", nameof(idWell)); - var factOperations = (await GetFactOperationsAsync(well.Id, startDate, finishDate, - cancellationToken)).ToArray(); + var factOperations = await GetFactOperationsAsync(well.Id, startDate, finishDate, + cancellationToken); var report = new AutoGeneratedDailyReportDto { FileName = string.Format(fileNameTemplate, well.Caption, well.Cluster, reportDate), - FileSize = GetFileSize(reportDate, idWell) / 1024, + FileSize = GetFileSize(reportDate, idWell), ReportDate = reportDate, Head = CreateHeadBlock(well, factOperations), Subsystems = (await CreateSubsystemBlockAsync(idWell, startDate, finishDate, cancellationToken)).ToArray(), @@ -144,18 +144,19 @@ public class AutoGeneratedDailyReportService : IAutoGeneratedDailyReportService return (report.FileName, stream); } - private HeadBlockDto CreateHeadBlock(WellDto well, WellOperationDto[] factOperations) + private HeadBlockDto CreateHeadBlock(WellDto well, IEnumerable factOperations) { var customer = well.Companies.FirstOrDefault(company => company.IdCompanyType == 1); + var sortedFactOperations = factOperations.OrderBy(o => o.DateStart); - return new HeadBlockDto + return new HeadBlockDto { Customer = customer?.Caption ?? string.Empty, Deposit = well.Deposit ?? string.Empty, Cluster = well.Cluster ?? string.Empty, Well = well.Caption, - DepthFrom = factOperations.FirstOrDefault()?.DepthStart ?? 0.00, - DepthTo = factOperations.LastOrDefault()?.DepthEnd ?? 0.00 + DepthFrom = sortedFactOperations.FirstOrDefault()?.DepthStart ?? 0.00, + DepthTo = sortedFactOperations.LastOrDefault()?.DepthEnd ?? 0.00 }; } @@ -242,7 +243,7 @@ public class AutoGeneratedDailyReportService : IAutoGeneratedDailyReportService private int GetFileSize(DateOnly reportDate, int idWell) { const int fileSizeTemplate = 10240; - long ticks = new DateTime(reportDate.Year, reportDate.Month, reportDate.Day).Ticks * idWell; + long ticks = 1L * reportDate.Year * reportDate.Month * reportDate.Day * idWell; int remainder = (int)(ticks % (fileSizeTemplate / 10)); return fileSizeTemplate + remainder; } diff --git a/AsbCloudInfrastructure/Services/AutoGeneratedDailyReports/AutogeneratedDailyReportBlocks/LimitingParameterExcelBlockWriter.cs b/AsbCloudInfrastructure/Services/AutoGeneratedDailyReports/AutogeneratedDailyReportBlocks/LimitingParameterExcelBlockWriter.cs index 8e99e755..30cf36f0 100644 --- a/AsbCloudInfrastructure/Services/AutoGeneratedDailyReports/AutogeneratedDailyReportBlocks/LimitingParameterExcelBlockWriter.cs +++ b/AsbCloudInfrastructure/Services/AutoGeneratedDailyReports/AutogeneratedDailyReportBlocks/LimitingParameterExcelBlockWriter.cs @@ -15,17 +15,14 @@ public class LimitingParameterExcelBlockWriter : IExcelBlockWriter public void Write(IXLWorksheet sheet, AutoGeneratedDailyReportDto report) { - if(!report.LimitingParameters.Any()) - return; - - for (int i = 0; i < report.LimitingParameters.Length; i++) + var i = 1; + foreach (var limitingParameter in report.LimitingParameters) { - var row = sheet.Row(1 + i + rowHeaderBlock); - - row.Cell(columnNameFeedRegulator).Value = report.LimitingParameters[i].NameFeedRegulator; - row.Cell(columnDepth).Value = report.LimitingParameters[i].Depth; - row.Cell(columnTotalHours).Value = report.LimitingParameters[i].Hours; - row.Cell(columnPercentDepth).Value = report.LimitingParameters[i].PercentDepth; + var row = sheet.Row( i++ + rowHeaderBlock); + row.Cell(columnNameFeedRegulator).Value = limitingParameter.NameFeedRegulator; + row.Cell(columnDepth).Value = limitingParameter.Depth; + row.Cell(columnTotalHours).Value = limitingParameter.Hours; + row.Cell(columnPercentDepth).Value = limitingParameter.PercentDepth; } } } \ No newline at end of file diff --git a/AsbCloudInfrastructure/Services/AutoGeneratedDailyReports/AutogeneratedDailyReportBlocks/SubsystemExcelBlockWriter.cs b/AsbCloudInfrastructure/Services/AutoGeneratedDailyReports/AutogeneratedDailyReportBlocks/SubsystemExcelBlockWriter.cs index ec32c60e..a1b25c88 100644 --- a/AsbCloudInfrastructure/Services/AutoGeneratedDailyReports/AutogeneratedDailyReportBlocks/SubsystemExcelBlockWriter.cs +++ b/AsbCloudInfrastructure/Services/AutoGeneratedDailyReports/AutogeneratedDailyReportBlocks/SubsystemExcelBlockWriter.cs @@ -15,17 +15,14 @@ public class SubsystemExcelBlockWriter : IExcelBlockWriter public void Write(IXLWorksheet sheet, AutoGeneratedDailyReportDto report) { - if(!report.Subsystems.Any()) - return; - - for (int i = 0; i < report.Subsystems.Length; i++) + var i = 1; + foreach( var subsystem in report.Subsystems ) { - var row = sheet.Row(1 + i + rowHeaderBlock); - - row.Cell(columnName).Value = report.Subsystems[i].Name; - row.Cell(columnKUsage).Value = report.Subsystems[i].KUsage; - row.Cell(columnDepth).Value = report.Subsystems[i].Depth; - row.Cell(columnUsedTimeHours).Value = report.Subsystems[i].UsedTimeHours; + var row = sheet.Row(i++ + rowHeaderBlock); + row.Cell(columnName).Value = subsystem.Name; + row.Cell(columnKUsage).Value = subsystem.KUsage; + row.Cell(columnDepth).Value = subsystem.Depth; + row.Cell(columnUsedTimeHours).Value = subsystem.UsedTimeHours; } } } \ No newline at end of file diff --git a/AsbCloudInfrastructure/Services/AutoGeneratedDailyReports/AutogeneratedDailyReportBlocks/TimeBalanceExcelBlockWriter.cs b/AsbCloudInfrastructure/Services/AutoGeneratedDailyReports/AutogeneratedDailyReportBlocks/TimeBalanceExcelBlockWriter.cs index c61fed8f..51e4643e 100644 --- a/AsbCloudInfrastructure/Services/AutoGeneratedDailyReports/AutogeneratedDailyReportBlocks/TimeBalanceExcelBlockWriter.cs +++ b/AsbCloudInfrastructure/Services/AutoGeneratedDailyReports/AutogeneratedDailyReportBlocks/TimeBalanceExcelBlockWriter.cs @@ -13,22 +13,18 @@ public class TimeBalanceExcelBlockWriter : IExcelBlockWriter public void Write(IXLWorksheet sheet, AutoGeneratedDailyReportDto report) { - if(!report.TimeBalance.Any()) - return; - - for (int i = 0; i < report.TimeBalance.Length; i++) + var i = 1; + foreach(var timeBalance in report.TimeBalance) { - var row = sheet.Row(1 + i + rowHeaderBlock); - - row.Cell(columnName).Value = report.TimeBalance[i].Name; - row.Cell(columnDurationHours).Value = report.TimeBalance[i].DurationHours; - - AddBorderToCell(row.Cell(columnName)); - AddBorderToCell(row.Cell(columnDurationHours)); + var row = sheet.Row(i++ + rowHeaderBlock); + row.Cell(columnName).Value = timeBalance.Name; + row.Cell(columnDurationHours).Value = timeBalance.DurationHours; + AddBorderToCell(row.Cell(columnName)); + AddBorderToCell(row.Cell(columnDurationHours)); } } - private void AddBorderToCell(IXLCell cell) + private static void AddBorderToCell(IXLCell cell) { cell.Style.Border.TopBorder = XLBorderStyleValues.Thin; cell.Style.Border.BottomBorder = XLBorderStyleValues.Thin;