RED-6543: Adapted license report to new requirements #42
@ -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)
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -20,6 +20,7 @@ public class MonthlyReportData {
|
||||
private long trashFilesUploadedBytes;
|
||||
private long archivedFilesUploadedBytes;
|
||||
private int numberOfAnalyzedPages;
|
||||
private long analysedFilesBytes;
|
||||
private int numberOfOcrPages;
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user