Исправления суточного отчёта.

1. Мелкие фиксы в сервисе + сделал более предсказуемый размер файлов отчёта.
2. Исправил получение ограничивающих параметров. Теперь не учитываются ограничивающие параметры если их начальная глубина больше конечной.
This commit is contained in:
parent 84d84fb504
commit 56b90e0952
2 changed files with 23 additions and 17 deletions

View File

@ -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++) 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)), FileName = string.Format(fileNameTemplate, well.Caption, well.Cluster, reportDate),
ReportDate = DateOnly.FromDateTime(dateFrom), ReportDate = reportDate,
FileSize = GetFileSize() / 1024, FileSize = GetFileSize(reportDate, idWell) / 1024,
}); });
} }
@ -127,9 +127,9 @@ public class AutoGeneratedDailyReportService : IAutoGeneratedDailyReportService
var report = new AutoGeneratedDailyReportDto var report = new AutoGeneratedDailyReportDto
{ {
FileName = string.Format(fileNameTemplate, well.Caption, well.Cluster, reportDate), FileName = string.Format(fileNameTemplate, well.Caption, well.Cluster, reportDate),
FileSize = GetFileSize() / 1024, FileSize = GetFileSize(reportDate, idWell) / 1024,
ReportDate = reportDate, ReportDate = reportDate,
Head = CreateHeadBlock(well, reportDate, factOperations), Head = CreateHeadBlock(well, factOperations),
Subsystems = (await CreateSubsystemBlockAsync(idWell, startDate, finishDate, cancellationToken)).ToArray(), Subsystems = (await CreateSubsystemBlockAsync(idWell, startDate, finishDate, cancellationToken)).ToArray(),
LimitingParameters = (await CreateLimitingParameterBlockAsync(idWell, startDate, finishDate, cancellationToken)).ToArray(), LimitingParameters = (await CreateLimitingParameterBlockAsync(idWell, startDate, finishDate, cancellationToken)).ToArray(),
TimeBalance = factOperations.GroupBy(w => w.CategoryName).Select(x => new TimeBalanceRecordDto TimeBalance = factOperations.GroupBy(w => w.CategoryName).Select(x => new TimeBalanceRecordDto
@ -144,7 +144,7 @@ public class AutoGeneratedDailyReportService : IAutoGeneratedDailyReportService
return (report.FileName, stream); 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); var customer = well.Companies.FirstOrDefault(company => company.IdCompanyType == 1);
@ -188,12 +188,12 @@ public class AutoGeneratedDailyReportService : IAutoGeneratedDailyReportService
startDate, finishDate, cancellationToken)).ToArray(); startDate, finishDate, cancellationToken)).ToArray();
var sumDepths = limitingParameterStats.Sum(x => x.Depth); var sumDepths = limitingParameterStats.Sum(x => x.Depth);
return limitingParameterStats.Select(l => new LimitingParameterRecordDto return limitingParameterStats.Select(l => new LimitingParameterRecordDto
{ {
NameFeedRegulator = l.NameFeedRegulator, NameFeedRegulator = l.NameFeedRegulator,
Hours = l.TotalMinutes, Hours = l.TotalMinutes,
PercentDepth = l.Depth / sumDepths, PercentDepth = sumDepths != 0 ? l.Depth / sumDepths : 0,
Depth = l.Depth, Depth = l.Depth,
}); });
} }
@ -239,10 +239,11 @@ public class AutoGeneratedDailyReportService : IAutoGeneratedDailyReportService
return limitingParameterService.GetStatAsync(request, cancellationToken); return limitingParameterService.GetStatAsync(request, cancellationToken);
} }
private int GetFileSize() private int GetFileSize(DateOnly reportDate, int idWell)
{ {
const int fileSizeTemplate = 10240; const int fileSizeTemplate = 10240;
// TODO: Добавку размера сделать более предсказуемой на основе даты рапорта. что то типа `(Date.Ticks * idWell) % (fileSizeTemplate / 10)` long ticks = new DateTime(reportDate.Year, reportDate.Month, reportDate.Day).Ticks * idWell;
return new Random().Next(1, 8193) + fileSizeTemplate; int remainder = (int)(ticks % (fileSizeTemplate / 10));
return fileSizeTemplate + remainder;
} }
} }

View File

@ -43,10 +43,15 @@ namespace AsbCloudInfrastructure.Services
List<LimitingParameterDto> result = new List<LimitingParameterDto>(data.Count()); List<LimitingParameterDto> result = new List<LimitingParameterDto>(data.Count());
foreach (var item in data) foreach (var item in data)
{ {
var trimData = TrimLimitingParameters(item, request); var trimData = TrimLimitingParameters(item, request).ToArray();
var allItemDepths = trimData.Sum(x => x.DepthEnd - x.DepthStart); //TODO: временный фикс, нужно избежать отрицательных значений в ограничивающих параметрах.
var allItemDates = trimData.Sum(x => (x.DateEnd - x.DateStart).TotalMinutes); //Проблема возникает при при формировании 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 result.Add(new LimitingParameterDto
{ {