RED-6543: Adapted license report to new requirements #42

Merged
dominique.eiflaender1 merged 1 commits from RED-6543 into master 2023-07-06 13:03:23 +02:00
3 changed files with 36 additions and 29 deletions

View File

@ -6,8 +6,10 @@ import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -35,56 +37,53 @@ public class LicenseReportService {
public LicenseReport getLicenseReport(LicenseReportRequest licenseReportRequest) {
if(licenseReportRequest.getEndDate().isBefore(licenseReportRequest.getStartDate())){
if (licenseReportRequest.getEndDate().isBefore(licenseReportRequest.getStartDate())) {
throw new BadRequestException("Invalid date period: End date is before start date.");
}
var files = fileStatusService.getStatusesAddedBefore(OffsetDateTime.ofInstant(licenseReportRequest.getEndDate(), UTC_ZONE_ID));
var addDossiers = dossierService.getAllDossiers();
if (files == null || files.isEmpty()) {
return LicenseReport.builder()
.startDate(licenseReportRequest.getStartDate())
.endDate(licenseReportRequest.getEndDate())
.numberOfDossiers(addDossiers.stream()
.filter(dossier -> dossier.getDate().toInstant().isAfter(licenseReportRequest.getStartDate()) && (dossier.getHardDeletedTime() == null || dossier.getHardDeletedTime()
.isAfter(OffsetDateTime.ofInstant(licenseReportRequest.getEndDate(), UTC_ZONE_ID))))
.collect(Collectors.toSet())
.size()).build();
}
files.sort(Comparator.comparing(FileModel::getAdded));
var dossiersById = addDossiers.stream().collect(Collectors.toMap(DossierEntity::getId, Function.identity()));
Map<YearMonth, List<FileModel>> adds = new HashMap<>();
Map<YearMonth, List<FileModel>> softDeletes = new HashMap<>();
Map<YearMonth, List<FileModel>> archives = new HashMap<>();
Map<YearMonth, List<FileModel>> hardDeletes = new HashMap<>();
Map<YearMonth, List<FileModel>> ocrs = new HashMap<>();
Map<YearMonth, Set<FileModel>> adds = new HashMap<>();
Map<YearMonth, Set<FileModel>> softDeletes = new HashMap<>();
Map<YearMonth, Set<FileModel>> archives = new HashMap<>();
Map<YearMonth, Set<FileModel>> hardDeletes = new HashMap<>();
Map<YearMonth, Set<FileModel>> ocrs = new HashMap<>();
for (var file : files) {
adds.computeIfAbsent(YearMonth.from(file.getAdded()), entry -> new ArrayList<>()).add(file);
adds.computeIfAbsent(YearMonth.from(file.getAdded()), entry -> new HashSet<>()).add(file);
if (file.getDeleted() != null && file.getDeleted().toInstant().isBefore(licenseReportRequest.getEndDate())) {
softDeletes.computeIfAbsent(YearMonth.from(file.getDeleted()), entry -> new ArrayList<>()).add(file);
softDeletes.computeIfAbsent(YearMonth.from(file.getDeleted()), entry -> new HashSet<>()).add(file);
}
if(dossiersById.get(file.getDossierId()).getSoftDeletedTime() != null && dossiersById.get(file.getDossierId()).getSoftDeletedTime().toInstant().isBefore(licenseReportRequest.getEndDate())){
softDeletes.computeIfAbsent(YearMonth.from(dossiersById.get(file.getDossierId()).getSoftDeletedTime()), entry -> new HashSet<>()).add(file);
}
if (file.getHardDeletedTime() != null && file.getHardDeletedTime().toInstant().isBefore(licenseReportRequest.getEndDate())) {
hardDeletes.computeIfAbsent(YearMonth.from(file.getHardDeletedTime()), entry -> new ArrayList<>()).add(file);
hardDeletes.computeIfAbsent(YearMonth.from(file.getHardDeletedTime()), entry -> new HashSet<>()).add(file);
}
if(dossiersById.get(file.getDossierId()).getHardDeletedTime() != null && dossiersById.get(file.getDossierId()).getHardDeletedTime().toInstant().isBefore(licenseReportRequest.getEndDate())){
hardDeletes.computeIfAbsent(YearMonth.from(dossiersById.get(file.getDossierId()).getHardDeletedTime()), entry -> new HashSet<>()).add(file);
}
if (dossiersById.get(file.getDossierId()).getArchivedTime() != null && dossiersById.get(file.getDossierId())
.getArchivedTime()
.toInstant()
.isBefore(licenseReportRequest.getEndDate())) {
archives.computeIfAbsent(YearMonth.from(dossiersById.get(file.getDossierId()).getArchivedTime()), entry -> new ArrayList<>()).add(file);
archives.computeIfAbsent(YearMonth.from(dossiersById.get(file.getDossierId()).getArchivedTime()), entry -> new HashSet<>()).add(file);
}
if (file.getOcrStartTime() != null && file.getOcrStartTime().toInstant().isBefore(licenseReportRequest.getEndDate())) {
ocrs.computeIfAbsent(YearMonth.from(file.getOcrStartTime()), entry -> new ArrayList<>()).add(file);
ocrs.computeIfAbsent(YearMonth.from(file.getOcrStartTime()), entry -> new HashSet<>()).add(file);
}
}
YearMonth currentMonth = files.get(0).getAdded().toInstant().isBefore(licenseReportRequest.getStartDate()) ? YearMonth.from(files.get(0).getAdded()) : YearMonth.from(licenseReportRequest.getStartDate().atZone(UTC_ZONE_ID).toLocalDate());
YearMonth currentMonth = !files.isEmpty() && files.get(0).getAdded().toInstant().isBefore(licenseReportRequest.getStartDate()) ? YearMonth.from(files.get(0)
.getAdded()) : YearMonth.from(licenseReportRequest.getStartDate().atZone(UTC_ZONE_ID).toLocalDate());
YearMonth endMonth = YearMonth.from(licenseReportRequest.getEndDate().atZone(UTC_ZONE_ID).toLocalDate());
YearMonth reportStartMonth = YearMonth.from(licenseReportRequest.getStartDate().atZone(UTC_ZONE_ID).toLocalDate());
@ -99,11 +98,13 @@ public class LicenseReportService {
int numberOfAnalyzedPages = 0;
int numberOfOcrPages = 0;
int numberOfAnalyzedFiles = 0;
long analysedFilesBytes = 0;
int numberOfOcrFiles = 0;
while (!currentMonth.isAfter(endMonth)) {
int currentMonthNumberOfAnalyzedPages = 0;
int currentanalysedFilesBytes = 0;
int currentMonthNumberOfOcrPages = 0;
var addedFilesInMonth = adds.get(currentMonth);
@ -116,6 +117,8 @@ public class LicenseReportService {
numberOfAnalyzedPages += add.getNumberOfPages();
currentMonthNumberOfAnalyzedPages += add.getNumberOfPages();
numberOfAnalyzedFiles++;
analysedFilesBytes += add.getFileSize();
currentanalysedFilesBytes += add.getFileSize();
}
}
}
@ -144,7 +147,7 @@ public class LicenseReportService {
var hardDeletedFilesInMonth = hardDeletes.get(currentMonth);
if (hardDeletedFilesInMonth != null) {
for (var hardDeleted : hardDeletedFilesInMonth) {
if (hardDeleted.getDeleted() != null) {
if (hardDeleted.getDeleted() != null || dossiersById.get(hardDeleted.getDossierId()).getSoftDeletedTime() != null) {
trashFilesUploadedBytes -= hardDeleted.getFileSize();
} else {
activeFilesUploadedBytes -= hardDeleted.getFileSize();
@ -177,6 +180,7 @@ public class LicenseReportService {
.totalFilesUploadedBytes(activeFilesUploadedBytes + trashFilesUploadedBytes + archivedFilesUploadedBytes)
.numberOfAnalyzedPages(currentMonthNumberOfAnalyzedPages)
.numberOfOcrPages(currentMonthNumberOfOcrPages)
.analysedFilesBytes(currentanalysedFilesBytes)
.build());
}
@ -191,12 +195,13 @@ public class LicenseReportService {
.numberOfAnalyzedPages(numberOfAnalyzedPages)
.numberOfOcrPages(numberOfOcrPages)
.numberOfAnalyzedFiles(numberOfAnalyzedFiles)
.analysedFilesBytes(analysedFilesBytes)
.numberOfOcrFiles(numberOfOcrFiles)
.numberOfDossiers(addDossiers.stream()
.filter(dossier -> dossier.getDate().toInstant().isAfter(licenseReportRequest.getStartDate()) && (dossier.getHardDeletedTime() == null || dossier.getHardDeletedTime()
.isAfter(OffsetDateTime.ofInstant(licenseReportRequest.getEndDate(), UTC_ZONE_ID))))
.collect(Collectors.toSet())
.size())
.numberOfDossiers(addDossiers.stream().filter(dossier -> //
dossier.getDate().toInstant().isAfter(licenseReportRequest.getStartDate()) //
&& dossier.getDate().toInstant().isBefore(licenseReportRequest.getEndDate()) //
&& (dossier.getHardDeletedTime() == null || dossier.getHardDeletedTime()
.isAfter(OffsetDateTime.ofInstant(licenseReportRequest.getEndDate(), UTC_ZONE_ID)))).collect(Collectors.toSet()).size())
.startDate(licenseReportRequest.getStartDate())
.endDate(licenseReportRequest.getEndDate())
.monthlyData(monthlyData)

View File

@ -23,6 +23,7 @@ public class LicenseReport {
private int numberOfOcrFiles;
private int numberOfDossiers;
private int numberOfAnalyzedPages;
private long analysedFilesBytes;
private int numberOfOcrPages;
private Instant startDate;
private Instant endDate;

View File

@ -20,6 +20,7 @@ public class MonthlyReportData {
private long trashFilesUploadedBytes;
private long archivedFilesUploadedBytes;
private int numberOfAnalyzedPages;
private long analysedFilesBytes;
private int numberOfOcrPages;
}