Pull request #77: RED-2187: Splitted processing status from workflow status

Merge in RED/persistence-service from RED-2187 to master

* commit '2c06826c52665f28b2b6b7b932fc90b819e3064d':
  RED-2187: Splitted processing status from workflow status
This commit is contained in:
Dominique Eiflaender 2021-10-20 13:05:50 +02:00 committed by Philipp Schramm
commit e3f2e44a39
24 changed files with 190 additions and 186 deletions

View File

@ -1,7 +1,5 @@
package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier; package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@ -9,6 +7,9 @@ import lombok.NoArgsConstructor;
import java.util.Map; import java.util.Map;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
@Data @Data
@Builder @Builder
@NoArgsConstructor @NoArgsConstructor
@ -22,5 +23,6 @@ public class DossierStats {
private boolean hasSuggestionsFilePresent; // true if at least one file in the dossier has suggestions private boolean hasSuggestionsFilePresent; // true if at least one file in the dossier has suggestions
private boolean hasUpdatesFilePresent; //true if at least one file in the dossier has updates private boolean hasUpdatesFilePresent; //true if at least one file in the dossier has updates
private boolean hasNoFlagsFilePresent; // true if at least one file in the dossier has none of the other flags private boolean hasNoFlagsFilePresent; // true if at least one file in the dossier has none of the other flags
private Map<FileStatus,Integer> fileCountPerStatus; private Map<ProcessingStatus,Integer> fileCountPerProcessingStatus;
private Map<WorkflowStatus,Integer> fileCountPerWorkflowStatus;
} }

View File

@ -21,8 +21,8 @@ public class FileModel {
@JsonProperty("fileId") @JsonProperty("fileId")
private String id; private String id;
private String filename; private String filename;
private FileStatus status; private ProcessingStatus processingStatus;
private FileStatus lastSuccessfulStatus; private WorkflowStatus workflowStatus;
private int numberOfPages; private int numberOfPages;
private OffsetDateTime added; private OffsetDateTime added;
private OffsetDateTime lastUpdated; private OffsetDateTime lastUpdated;

View File

@ -1,5 +0,0 @@
package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file;
public enum FileStatus {
UNPROCESSED, REPROCESS, PROCESSING, ERROR, DELETED, UNASSIGNED, UNDER_REVIEW, UNDER_APPROVAL, APPROVED, FULLREPROCESS, OCR_PROCESSING, INDEXING
}

View File

@ -0,0 +1,5 @@
package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file;
public enum ProcessingStatus {
UNPROCESSED, REPROCESS, PROCESSING, PROCESSED, ERROR, DELETED, FULLREPROCESS, OCR_PROCESSING, INDEXING
}

View File

@ -0,0 +1,5 @@
package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file;
public enum WorkflowStatus {
UNASSIGNED, UNDER_REVIEW, UNDER_APPROVAL, APPROVED
}

View File

@ -1,6 +1,5 @@
package com.iqser.red.service.persistence.service.v1.api.model.license; package com.iqser.red.service.persistence.service.v1.api.model.license;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@ -8,6 +7,8 @@ import lombok.NoArgsConstructor;
import java.time.Instant; import java.time.Instant;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
@Data @Data
@Builder @Builder
@AllArgsConstructor @AllArgsConstructor
@ -21,7 +22,7 @@ public class ReportData {
private Instant deletedDate; private Instant deletedDate;
private int numberOfAnalyzedPages; private int numberOfAnalyzedPages;
private int numberOfOcrPages; private int numberOfOcrPages;
private FileStatus status; private WorkflowStatus workflowStatus;
private int analysisCount; private int analysisCount;
} }

View File

@ -1,7 +1,9 @@
package com.iqser.red.service.persistence.management.v1.processor.entity.dossier; package com.iqser.red.service.persistence.management.v1.processor.entity.dossier;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@ -30,11 +32,11 @@ public class FileEntity {
@Column @Column
@Enumerated(EnumType.STRING) @Enumerated(EnumType.STRING)
private FileStatus status; private ProcessingStatus processingStatus;
@Column @Column
@Enumerated(EnumType.STRING) @Enumerated(EnumType.STRING)
private FileStatus lastSuccessfulStatus; private WorkflowStatus workflowStatus;
@Column @Column
private int numberOfPages; private int numberOfPages;

View File

@ -19,7 +19,8 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.NotFo
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileAttributesRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileAttributesRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileRepository;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -40,7 +41,8 @@ public class FileStatusPersistenceService {
file.setId(fileId); file.setId(fileId);
file.setDossier(dossierRepository.getOne(dossierId)); file.setDossier(dossierRepository.getOne(dossierId));
file.setFilename(filename); file.setFilename(filename);
file.setStatus(FileStatus.UNPROCESSED); file.setProcessingStatus(ProcessingStatus.UNPROCESSED);
file.setWorkflowStatus(WorkflowStatus.UNASSIGNED);
file.setNumberOfPages(0); file.setNumberOfPages(0);
file.setAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
file.setUploader(uploader); file.setUploader(uploader);
@ -51,14 +53,13 @@ public class FileStatusPersistenceService {
@Transactional @Transactional
public void updateStatusSuccessful(String fileId, int numberOfPages, FileStatus status, long dictionaryVersion, long rulesVersion, public void updateWorkflowStatus(String fileId, int numberOfPages, long dictionaryVersion, long rulesVersion,
long legalBasisVersion, long duration, long dossierDictionaryVersion, long legalBasisVersion, long duration, long dossierDictionaryVersion,
int analysisVersion) { int analysisVersion) {
fileRepository.findById(fileId).ifPresentOrElse((file) -> { fileRepository.findById(fileId).ifPresentOrElse((file) -> {
file.setNumberOfPages(numberOfPages); file.setNumberOfPages(numberOfPages);
file.setStatus(status); file.setProcessingStatus(ProcessingStatus.PROCESSED);
file.setLastSuccessfulStatus(status);
file.setDictionaryVersion(dictionaryVersion); file.setDictionaryVersion(dictionaryVersion);
file.setRulesVersion(rulesVersion); file.setRulesVersion(rulesVersion);
file.setLegalBasisVersion(legalBasisVersion); file.setLegalBasisVersion(legalBasisVersion);
@ -91,11 +92,10 @@ public class FileStatusPersistenceService {
@Transactional @Transactional
public void updateStatusSuccessful(String fileId, FileStatus status, boolean approval) { public void updateWorkflowStatus(String fileId, WorkflowStatus workflowStatus, boolean approval) {
fileRepository.findById(fileId).ifPresentOrElse((file) -> { fileRepository.findById(fileId).ifPresentOrElse((file) -> {
file.setStatus(status); file.setWorkflowStatus(workflowStatus);
file.setLastSuccessfulStatus(status);
file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
file.setApprovalDate(approval ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : null); file.setApprovalDate(approval ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : null);
}, () -> { }, () -> {
@ -107,27 +107,9 @@ public class FileStatusPersistenceService {
@Transactional @Transactional
public void updateStatus(String fileId, FileStatus status, String uploader) { public void updateProcessingStatus(String fileId, ProcessingStatus processingStatus) {
if (status.equals(FileStatus.UNASSIGNED) || status.equals(FileStatus.UNPROCESSED)) {
throw new IllegalArgumentException("please use specific methods for these calls!");
}
fileRepository.findById(fileId).ifPresentOrElse((file) -> { fileRepository.findById(fileId).ifPresentOrElse((file) -> {
file.setStatus(status); file.setProcessingStatus(processingStatus);
file.setUploader(uploader);
file.setLastUploaded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
}, () -> {
throw new NotFoundException("Unknown file=" + fileId);
});
}
@Transactional
public void updateStatus(String fileId, FileStatus status) {
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
file.setStatus(status);
file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
}, () -> { }, () -> {
throw new NotFoundException("Unknown file=" + fileId); throw new NotFoundException("Unknown file=" + fileId);
@ -135,10 +117,10 @@ public class FileStatusPersistenceService {
} }
@Transactional @Transactional
public void setUpdateStatusIndexingSuccessful(String fileId, FileStatus status) { public void setUpdateStatusIndexingSuccessful(String fileId) {
fileRepository.findById(fileId).ifPresentOrElse((file) -> { fileRepository.findById(fileId).ifPresentOrElse((file) -> {
file.setStatus(status); file.setProcessingStatus(ProcessingStatus.PROCESSED);
file.setLastIndexed(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setLastIndexed(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
}, () -> { }, () -> {
throw new NotFoundException("Unknown file=" + fileId); throw new NotFoundException("Unknown file=" + fileId);
@ -238,7 +220,7 @@ public class FileStatusPersistenceService {
public void softDelete(String fileId, OffsetDateTime softDeletedTime) { public void softDelete(String fileId, OffsetDateTime softDeletedTime) {
fileRepository.findById(fileId).ifPresentOrElse((file) -> { fileRepository.findById(fileId).ifPresentOrElse((file) -> {
file.setStatus(FileStatus.DELETED); file.setProcessingStatus(ProcessingStatus.DELETED);
file.setDeleted(softDeletedTime); file.setDeleted(softDeletedTime);
}, () -> { }, () -> {
throw new NotFoundException("Unknown file=" + fileId); throw new NotFoundException("Unknown file=" + fileId);
@ -251,7 +233,7 @@ public class FileStatusPersistenceService {
public void hardDelete(String fileId) { public void hardDelete(String fileId) {
fileRepository.findById(fileId).ifPresentOrElse((file) -> { fileRepository.findById(fileId).ifPresentOrElse((file) -> {
file.setStatus(FileStatus.DELETED); file.setProcessingStatus(ProcessingStatus.DELETED);
file.setDeleted(file.getDeleted() == null ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : file.getDeleted()); file.setDeleted(file.getDeleted() == null ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : file.getDeleted());
file.setHardDeletedTime(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setHardDeletedTime(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
@ -263,13 +245,13 @@ public class FileStatusPersistenceService {
} }
@Transactional @Transactional
public void undelete(String fileId, FileStatus statusBefore) { public void undelete(String fileId) {
fileRepository.findById(fileId).ifPresentOrElse((file) -> { fileRepository.findById(fileId).ifPresentOrElse((file) -> {
if (file.getHardDeletedTime() != null) { if (file.getHardDeletedTime() != null) {
throw new BadRequestException("Cannot undelete a hard-deleted dossier file!"); throw new BadRequestException("Cannot undelete a hard-deleted dossier file!");
} }
file.setStatus(statusBefore != null ? statusBefore : FileStatus.UNASSIGNED); file.setProcessingStatus(ProcessingStatus.PROCESSED);
file.setDeleted(null); file.setDeleted(null);
}, () -> { }, () -> {
throw new NotFoundException("Unknown file=" + fileId); throw new NotFoundException("Unknown file=" + fileId);
@ -282,7 +264,7 @@ public class FileStatusPersistenceService {
fileRepository.findById(fileId).ifPresentOrElse((file) -> { fileRepository.findById(fileId).ifPresentOrElse((file) -> {
file.setCurrentReviewer(currentReviewer); file.setCurrentReviewer(currentReviewer);
file.setLastReviewer(lastReviewer); file.setLastReviewer(lastReviewer);
file.setStatus(currentReviewer == null ? FileStatus.UNASSIGNED :FileStatus.UNDER_REVIEW); file.setWorkflowStatus(currentReviewer == null ? WorkflowStatus.UNASSIGNED :WorkflowStatus.UNDER_REVIEW);
}, () -> { }, () -> {
throw new NotFoundException("Unknown file=" + fileId); throw new NotFoundException("Unknown file=" + fileId);
}); });
@ -319,8 +301,8 @@ public class FileStatusPersistenceService {
fileRepository.findById(fileId).ifPresentOrElse((file) -> { fileRepository.findById(fileId).ifPresentOrElse((file) -> {
file.setFilename(filename); file.setFilename(filename);
file.setUploader(uploader); file.setUploader(uploader);
file.setStatus(FileStatus.FULLREPROCESS); file.setProcessingStatus(ProcessingStatus.FULLREPROCESS);
file.setLastSuccessfulStatus(null); file.setWorkflowStatus(WorkflowStatus.UNASSIGNED);
file.setLastUploaded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setLastUploaded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
file.setLastOCRTime(null); file.setLastOCRTime(null);

View File

@ -12,7 +12,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ImportCsvRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ImportCsvRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ImportCsvResponse; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ImportCsvResponse;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.resources.FileAttributesResource; import com.iqser.red.service.persistence.service.v1.api.resources.FileAttributesResource;
import com.iqser.red.service.persistence.service.v1.api.utils.SuppressFBWarnings; import com.iqser.red.service.persistence.service.v1.api.utils.SuppressFBWarnings;
import com.opencsv.CSVParser; import com.opencsv.CSVParser;
@ -58,7 +58,7 @@ public class FileAttributesController implements FileAttributesResource {
Map<String, FileEntity> fileStatusByFilename = fileStatusService.getDossierStatus(dossierId) Map<String, FileEntity> fileStatusByFilename = fileStatusService.getDossierStatus(dossierId)
.stream() .stream()
.filter(f -> !f.getStatus().equals(FileStatus.DELETED)) .filter(f -> !f.getProcessingStatus().equals(ProcessingStatus.DELETED))
.collect(Collectors.toMap(FileEntity::getFilename, Function.identity())); .collect(Collectors.toMap(FileEntity::getFilename, Function.identity()));
List<List<String>> rows = getCsvRecords(importCsvRequest.getCsvFile(), generalConfiguration.getDelimiter()); List<List<String>> rows = getCsvRecords(importCsvRequest.getCsvFile(), generalConfiguration.getDelimiter());

View File

@ -4,7 +4,8 @@ import com.iqser.red.service.peristence.v1.server.service.*;
import com.iqser.red.service.peristence.v1.server.utils.FileModelMapper; import com.iqser.red.service.peristence.v1.server.utils.FileModelMapper;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import com.iqser.red.service.persistence.service.v1.api.resources.StatusResource; import com.iqser.red.service.persistence.service.v1.api.resources.StatusResource;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
@ -32,7 +33,7 @@ public class FileStatusController implements StatusResource {
return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convert(fileStatusService.getAllStatuses() return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convert(fileStatusService.getAllStatuses()
.stream() .stream()
.filter(f -> !f.getStatus().equals(FileStatus.DELETED)) .filter(f -> !f.getProcessingStatus().equals(ProcessingStatus.DELETED))
.collect(Collectors.toList()), FileModel.class, new FileModelMapper())); .collect(Collectors.toList()), FileModel.class, new FileModelMapper()));
} }
@ -42,7 +43,7 @@ public class FileStatusController implements StatusResource {
return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convert(fileStatusService.getDossierStatus(dossierId) return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convert(fileStatusService.getDossierStatus(dossierId)
.stream() .stream()
.filter(f -> !f.getStatus().equals(FileStatus.DELETED)) .filter(f -> !f.getProcessingStatus().equals(ProcessingStatus.DELETED))
.collect(Collectors.toList()), FileModel.class, new FileModelMapper())); .collect(Collectors.toList()), FileModel.class, new FileModelMapper()));
} }
@ -51,7 +52,7 @@ public class FileStatusController implements StatusResource {
return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convert(fileStatusService.getDossierStatus(dossierId) return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convert(fileStatusService.getDossierStatus(dossierId)
.stream() .stream()
.filter(f -> f.getStatus().equals(FileStatus.DELETED) && f.getHardDeletedTime() == null) .filter(f -> f.getProcessingStatus().equals(ProcessingStatus.DELETED) && f.getHardDeletedTime() == null)
.collect(Collectors.toList()), FileModel.class, new FileModelMapper())); .collect(Collectors.toList()), FileModel.class, new FileModelMapper()));
} }
@ -71,7 +72,7 @@ public class FileStatusController implements StatusResource {
@RequestParam(value = REVIEWER_ID_REQUEST_PARAM, required = false) String reviewerId) { @RequestParam(value = REVIEWER_ID_REQUEST_PARAM, required = false) String reviewerId) {
fileStatusService.setCurrentReviewer(dossierId, fileId, reviewerId); fileStatusService.setCurrentReviewer(dossierId, fileId, reviewerId);
fileStatusService.setStatusSuccessful(fileId, reviewerId != null ? FileStatus.UNDER_REVIEW : FileStatus.UNASSIGNED); fileStatusService.setStatusSuccessful(fileId, reviewerId != null ? WorkflowStatus.UNDER_REVIEW : WorkflowStatus.UNASSIGNED);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId); analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
} }
@ -83,7 +84,7 @@ public class FileStatusController implements StatusResource {
FileEntity fileStatus = fileStatusService.getStatus(fileId); FileEntity fileStatus = fileStatusService.getStatus(fileId);
String lastReviewer = fileStatus.getLastReviewer(); String lastReviewer = fileStatus.getLastReviewer();
fileStatusService.setCurrentReviewer(dossierId, fileId, lastReviewer); fileStatusService.setCurrentReviewer(dossierId, fileId, lastReviewer);
fileStatusService.setStatusSuccessful(fileId, lastReviewer != null ? FileStatus.UNDER_REVIEW : FileStatus.UNASSIGNED); fileStatusService.setStatusSuccessful(fileId, lastReviewer != null ? WorkflowStatus.UNDER_REVIEW : WorkflowStatus.UNASSIGNED);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId); analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
} }
@ -93,7 +94,7 @@ public class FileStatusController implements StatusResource {
@RequestParam(value = APPROVER_ID_REQUEST_PARAM, required = false) String approverId) { @RequestParam(value = APPROVER_ID_REQUEST_PARAM, required = false) String approverId) {
fileStatusService.setCurrentReviewer(dossierId, fileId, approverId); fileStatusService.setCurrentReviewer(dossierId, fileId, approverId);
fileStatusService.setStatusSuccessful(fileId, approverId != null ? FileStatus.UNDER_APPROVAL : FileStatus.UNASSIGNED); fileStatusService.setStatusSuccessful(fileId, approverId != null ? WorkflowStatus.UNDER_APPROVAL : WorkflowStatus.UNASSIGNED);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId); analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
} }
@ -101,7 +102,7 @@ public class FileStatusController implements StatusResource {
public void setStatusApproved(@PathVariable(DOSSIER_ID_PARAM) String dossierId, public void setStatusApproved(@PathVariable(DOSSIER_ID_PARAM) String dossierId,
@PathVariable(FILE_ID) String fileId) { @PathVariable(FILE_ID) String fileId) {
fileStatusService.setApprovalStatusSuccessful(fileId, FileStatus.APPROVED); fileStatusService.setApprovalStatusSuccessful(fileId, WorkflowStatus.APPROVED);
} }
public void toggleExclusion(@PathVariable(DOSSIER_ID_PARAM) String dossierId, public void toggleExclusion(@PathVariable(DOSSIER_ID_PARAM) String dossierId,

View File

@ -10,7 +10,8 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.BadRe
import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import com.iqser.red.service.persistence.service.v1.api.resources.ReanalysisResource; import com.iqser.red.service.persistence.service.v1.api.resources.ReanalysisResource;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -103,7 +104,7 @@ public class ReanalysisController implements ReanalysisResource {
fileStatusService.setStatusOcrProcessing(dossierId, fileId); fileStatusService.setStatusOcrProcessing(dossierId, fileId);
} else { } else {
FileEntity dossierFile = fileStatusService.getStatus(fileId); FileEntity dossierFile = fileStatusService.getStatus(fileId);
if (dossierFile.getStatus().equals(FileStatus.DELETED) || dossierFile.getStatus().equals(FileStatus.APPROVED)) { if (dossierFile.getProcessingStatus().equals(ProcessingStatus.DELETED) || dossierFile.getWorkflowStatus().equals(WorkflowStatus.APPROVED)) {
throw new ConflictException("Cannot analyse a deleted/approved file"); throw new ConflictException("Cannot analyse a deleted/approved file");
} }
if (dossierFile.getLastOCRTime() != null) { if (dossierFile.getLastOCRTime() != null) {
@ -119,8 +120,8 @@ public class ReanalysisController implements ReanalysisResource {
var dossier = dossierPersistenceService.getAndValidateDossier(dossierId); var dossier = dossierPersistenceService.getAndValidateDossier(dossierId);
return fileStatusService.getDossierStatus(dossier.getId()) return fileStatusService.getDossierStatus(dossier.getId())
.stream() .stream()
.filter(fileStatus -> !fileStatus.getStatus().equals(FileStatus.DELETED)) .filter(fileStatus -> !fileStatus.getProcessingStatus().equals(ProcessingStatus.DELETED))
.filter(fileStatus -> !fileStatus.getStatus().equals(FileStatus.APPROVED)) .filter(fileStatus -> !fileStatus.getWorkflowStatus().equals(WorkflowStatus.APPROVED))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
@ -139,7 +140,7 @@ public class ReanalysisController implements ReanalysisResource {
var dossierFile = dossierFileOptional.get(); var dossierFile = dossierFileOptional.get();
if (dossierFile.getStatus().equals(FileStatus.DELETED) || dossierFile.getStatus().equals(FileStatus.APPROVED)) { if (dossierFile.getProcessingStatus().equals(ProcessingStatus.DELETED) || dossierFile.getWorkflowStatus().equals(WorkflowStatus.APPROVED)) {
throw new ConflictException("Cannot analyse a deleted/approved file"); throw new ConflictException("Cannot analyse a deleted/approved file");
} }

View File

@ -5,7 +5,7 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.
import com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException; import com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStats; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStats;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -55,8 +55,11 @@ public class DossierStatsService {
.findAny().ifPresent( .findAny().ifPresent(
(v) -> dossierStats.setHasNoFlagsFilePresent(true) (v) -> dossierStats.setHasNoFlagsFilePresent(true)
); );
Map<FileStatus, Integer> fileCountPerStatus = files.stream().collect(Collectors.toMap(FileEntity::getStatus, e -> 1, Math::addExact)); var fileCountPerProcessingStatus = files.stream().collect(Collectors.toMap(FileEntity::getProcessingStatus, e -> 1, Math::addExact));
dossierStats.setFileCountPerStatus(fileCountPerStatus); dossierStats.setFileCountPerProcessingStatus(fileCountPerProcessingStatus);
var fileCountPerWorkflowStatus = files.stream().collect(Collectors.toMap(FileEntity::getWorkflowStatus, e -> 1, Math::addExact));
dossierStats.setFileCountPerWorkflowStatus(fileCountPerWorkflowStatus);
return dossierStats; return dossierStats;
} }

View File

@ -1,18 +1,16 @@
package com.iqser.red.service.peristence.v1.server.service; package com.iqser.red.service.peristence.v1.server.service;
import com.google.common.collect.Sets;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Set; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import lombok.RequiredArgsConstructor;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class ExcludeFromAnalysisService { public class ExcludeFromAnalysisService {
private final static Set<FileStatus> VALID_STATES_FOR_EXCLUSION = Sets.newHashSet(FileStatus.UNASSIGNED, FileStatus.UNDER_REVIEW, FileStatus.UNDER_APPROVAL);
private final FileStatusService fileStatusService; private final FileStatusService fileStatusService;
@ -21,8 +19,8 @@ public class ExcludeFromAnalysisService {
var status = fileStatusService.getStatus(fileId); var status = fileStatusService.getStatus(fileId);
if (!VALID_STATES_FOR_EXCLUSION.contains(status.getStatus())) { if (WorkflowStatus.APPROVED.equals(status.getWorkflowStatus())) {
throw new BadRequestException("Files in status " + status.getStatus() + " cannot be excluded/included"); throw new BadRequestException("File in workflow status " + status.getWorkflowStatus() + " cannot be excluded/included");
} }
// toggle status // toggle status

View File

@ -13,6 +13,8 @@ import com.iqser.red.service.persistence.service.v1.api.model.annotations.Annota
import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.BinaryFileRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.BinaryFileRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -53,7 +55,7 @@ public class FileService {
var existingStatus = retrieveStatus(fileId); var existingStatus = retrieveStatus(fileId);
if (existingStatus != null) { if (existingStatus != null) {
if (existingStatus.getStatus().name().equals(AnnotationStatus.APPROVED.name())) { if (existingStatus.getWorkflowStatus().equals(WorkflowStatus.APPROVED)) {
throw new ConflictException("File already exists in status APPROVED"); throw new ConflictException("File already exists in status APPROVED");
} }

View File

@ -1,7 +1,6 @@
package com.iqser.red.service.peristence.v1.server.service; package com.iqser.red.service.peristence.v1.server.service;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus;
import com.iqser.red.service.redaction.v1.model.AnalyzeResult; import com.iqser.red.service.redaction.v1.model.AnalyzeResult;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -25,12 +24,11 @@ public class FileStatusProcessingUpdateService {
public void analysisSuccessful(String dossierId, String fileId, AnalyzeResult analyzeResult) { public void analysisSuccessful(String dossierId, String fileId, AnalyzeResult analyzeResult) {
var dossier = dossierPersistenceService.getAndValidateDossier(dossierId); var dossier = dossierPersistenceService.getAndValidateDossier(dossierId);
var lastSuccessfulStatus = fileStatusService.getStatus(fileId).getLastSuccessfulStatus();
retryTemplate.execute(retryContext -> { retryTemplate.execute(retryContext -> {
log.info("Analysis Successful for dossier {} and file {}, Attempt to update status: {}", dossierId, fileId, retryContext log.info("Analysis Successful for dossier {} and file {}, Attempt to update status: {}", dossierId, fileId, retryContext
.getRetryCount()); .getRetryCount());
fileStatusService.setStatusSuccessful(dossierId, fileId, Objects.requireNonNullElse(lastSuccessfulStatus, FileStatus.UNASSIGNED), analyzeResult); fileStatusService.setStatusSuccessful(dossierId, fileId, analyzeResult);
return null; return null;
}); });

View File

@ -10,8 +10,9 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.UserNotFoundException; import com.iqser.red.service.persistence.management.v1.processor.exception.UserNotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.*; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.*;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import com.iqser.red.service.redaction.v1.model.AnalyzeRequest; import com.iqser.red.service.redaction.v1.model.AnalyzeRequest;
import com.iqser.red.service.redaction.v1.model.AnalyzeResult; import com.iqser.red.service.redaction.v1.model.AnalyzeResult;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -68,25 +69,25 @@ public class FileStatusService {
public void setStatusProcessing(String fileId) { public void setStatusProcessing(String fileId) {
fileStatusPersistenceService.updateStatus(fileId, FileStatus.PROCESSING); fileStatusPersistenceService.updateProcessingStatus(fileId, ProcessingStatus.PROCESSING);
} }
public void setStatusSuccessful(String dossierId, String fileId, FileStatus status, AnalyzeResult analyzeResult) { public void setStatusSuccessful(String dossierId, String fileId, AnalyzeResult analyzeResult) {
fileStatusPersistenceService.updateStatusSuccessful(fileId, analyzeResult.getNumberOfPages(), status, analyzeResult.getDictionaryVersion(), analyzeResult.getRulesVersion(), analyzeResult.getLegalBasisVersion(), analyzeResult.getDuration(), analyzeResult.getDossierDictionaryVersion(), analyzeResult.getAnalysisVersion()); fileStatusPersistenceService.updateWorkflowStatus(fileId, analyzeResult.getNumberOfPages(), analyzeResult.getDictionaryVersion(), analyzeResult.getRulesVersion(), analyzeResult.getLegalBasisVersion(), analyzeResult.getDuration(), analyzeResult.getDossierDictionaryVersion(), analyzeResult.getAnalysisVersion());
} }
public void setStatusSuccessful(String fileId, FileStatus status) { public void setStatusSuccessful(String fileId, WorkflowStatus workflowStatus) {
fileStatusPersistenceService.updateStatusSuccessful(fileId, status, false); fileStatusPersistenceService.updateWorkflowStatus(fileId, workflowStatus, false);
} }
public void setApprovalStatusSuccessful(String fileId, FileStatus status) { public void setApprovalStatusSuccessful(String fileId, WorkflowStatus workflowStatus) {
fileStatusPersistenceService.updateStatusSuccessful(fileId, status, true); fileStatusPersistenceService.updateWorkflowStatus(fileId, workflowStatus, true);
} }
@ -117,7 +118,7 @@ public class FileStatusService {
return; return;
} }
fileStatusPersistenceService.updateStatus(fileId, FileStatus.REPROCESS); fileStatusPersistenceService.updateProcessingStatus(fileId, ProcessingStatus.REPROCESS);
addToAnalysisQueue(dossierId, fileId, priority, sectionsToReanalyse); addToAnalysisQueue(dossierId, fileId, priority, sectionsToReanalyse);
} }
@ -131,7 +132,7 @@ public class FileStatusService {
return; return;
} }
fileStatusPersistenceService.updateStatus(fileId, FileStatus.OCR_PROCESSING); fileStatusPersistenceService.updateProcessingStatus(fileId, ProcessingStatus.OCR_PROCESSING);
addToOcrQueue(dossierId, fileId, 2); addToOcrQueue(dossierId, fileId, 2);
} }
@ -146,27 +147,26 @@ public class FileStatusService {
return; return;
} }
fileStatusPersistenceService.updateStatus(fileId, FileStatus.FULLREPROCESS); fileStatusPersistenceService.updateProcessingStatus(fileId, ProcessingStatus.FULLREPROCESS);
addToAnalysisQueue(dossierId, fileId, priority, Sets.newHashSet()); addToAnalysisQueue(dossierId, fileId, priority, Sets.newHashSet());
} }
public void setStatusIndexingSuccessful(String fileId) { public void setStatusIndexingSuccessful(String fileId) {
FileEntity fileStatus = fileStatusPersistenceService.getStatus(fileId); fileStatusPersistenceService.setUpdateStatusIndexingSuccessful(fileId);
fileStatusPersistenceService.setUpdateStatusIndexingSuccessful(fileId, fileStatus.getLastSuccessfulStatus());
} }
public void setStatusIndexing(String fileId) { public void setStatusIndexing(String fileId) {
fileStatusPersistenceService.updateStatus(fileId, FileStatus.INDEXING); fileStatusPersistenceService.updateProcessingStatus(fileId, ProcessingStatus.INDEXING);
} }
public void setStatusError(String fileId) { public void setStatusError(String fileId) {
fileStatusPersistenceService.updateStatus(fileId, FileStatus.ERROR); fileStatusPersistenceService.updateProcessingStatus(fileId, ProcessingStatus.ERROR);
} }
@ -184,8 +184,7 @@ public class FileStatusService {
public void setFileStatusUndeleted(String fileId) { public void setFileStatusUndeleted(String fileId) {
var status = fileStatusPersistenceService.getStatus(fileId); fileStatusPersistenceService.undelete(fileId);
fileStatusPersistenceService.undelete(fileId, status.getLastSuccessfulStatus());
} }
@ -232,8 +231,8 @@ public class FileStatusService {
.fileAttributes(convert(fileAttributes)) .fileAttributes(convert(fileAttributes))
.build(); .build();
analyseRequest.setReanalyseOnlyIfPossible(!fileStatus.getStatus().equals(FileStatus.UNPROCESSED) && !fileStatus.getStatus() analyseRequest.setReanalyseOnlyIfPossible(!fileStatus.getProcessingStatus().equals(ProcessingStatus.UNPROCESSED) && !fileStatus.getProcessingStatus()
.equals(FileStatus.FULLREPROCESS) && fileStatus.getRulesVersion() == rulesController.getVersion(dossier.getDossierTemplateId()) && (fileStatus.getLastFileAttributeChange() == null || fileStatus.getLastProcessed() .equals(ProcessingStatus.FULLREPROCESS) && fileStatus.getRulesVersion() == rulesController.getVersion(dossier.getDossierTemplateId()) && (fileStatus.getLastFileAttributeChange() == null || fileStatus.getLastProcessed()
.isAfter(fileStatus.getLastFileAttributeChange()))); .isAfter(fileStatus.getLastFileAttributeChange())));
analyseRequest.setExcludedPages(fileStatus.getExcludedPages()); analyseRequest.setExcludedPages(fileStatus.getExcludedPages());

View File

@ -6,7 +6,7 @@ import com.iqser.red.service.peristence.v1.server.configuration.MessagingConfigu
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.search.v1.model.IndexMessage; import com.iqser.red.service.search.v1.model.IndexMessage;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.ImmutablePair;
@ -48,7 +48,7 @@ public class IndexingService {
for (Pair<String, String> reindexDossierId : reindexDossierIds) { for (Pair<String, String> reindexDossierId : reindexDossierIds) {
List<FileEntity> fileStatuses = fileStatusService.getDossierStatus(reindexDossierId.getRight()); List<FileEntity> fileStatuses = fileStatusService.getDossierStatus(reindexDossierId.getRight());
for (FileEntity fileStatus : fileStatuses) { for (FileEntity fileStatus : fileStatuses) {
if (fileStatus.getStatus().equals(FileStatus.DELETED)) { if (fileStatus.getProcessingStatus().equals(ProcessingStatus.DELETED)) {
continue; continue;
} }
if (fileIds != null && !fileIds.isEmpty() && !fileIds.contains(fileStatus.getId())) { if (fileIds != null && !fileIds.isEmpty() && !fileIds.contains(fileStatus.getId())) {

View File

@ -86,13 +86,12 @@ public class LicenseReportService {
reportData.setAddedDate(fileStatus.getAdded().toInstant()); reportData.setAddedDate(fileStatus.getAdded().toInstant());
reportData.setLastUpdatedDate(fileStatus.getLastUpdated() == null ? null : fileStatus.getLastUpdated().toInstant()); reportData.setLastUpdatedDate(fileStatus.getLastUpdated() == null ? null : fileStatus.getLastUpdated().toInstant());
reportData.setDeletedDate(fileStatus.getDeleted() == null ? null : fileStatus.getDeleted().toInstant()); reportData.setDeletedDate(fileStatus.getDeleted() == null ? null : fileStatus.getDeleted().toInstant());
reportData.setStatus(fileStatus.getStatus()); reportData.setWorkflowStatus(fileStatus.getWorkflowStatus());
reportData.setNumberOfAnalyzedPages(fileStatus.getNumberOfPages()); reportData.setNumberOfAnalyzedPages(fileStatus.getNumberOfPages());
reportData.setNumberOfOcrPages(fileStatus.getLastOCRTime() != null ? fileStatus.getNumberOfPages() : 0); reportData.setNumberOfOcrPages(fileStatus.getLastOCRTime() != null ? fileStatus.getNumberOfPages() : 0);
reportData.setAnalysisCount(fileStatus.getNumberOfAnalyses()); reportData.setAnalysisCount(fileStatus.getNumberOfAnalyses());
totalPagesAnalyzed.addAndGet(fileStatus.getNumberOfPages()); totalPagesAnalyzed.addAndGet(fileStatus.getNumberOfPages());
totalPagesOcr.addAndGet(fileStatus.getLastOCRTime() != null ? fileStatus.getNumberOfPages() : 0); totalPagesOcr.addAndGet(fileStatus.getLastOCRTime() != null ? fileStatus.getNumberOfPages() : 0);
reportData.setStatus(fileStatus.getStatus());
totalNumberOfAnalyses.addAndGet(fileStatus.getNumberOfAnalyses()); totalNumberOfAnalyses.addAndGet(fileStatus.getNumberOfAnalyses());
return reportData; return reportData;
})) }))

View File

@ -6,6 +6,8 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.LegalBasisMappingPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.LegalBasisMappingPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.RulesPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.RulesPersistenceService;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -46,24 +48,31 @@ public class ReanalysisRequiredStatusService {
Map<String, Map<VersionType, Long>> dossierTemplateVersionMap, Map<String, Map<VersionType, Long>> dossierTemplateVersionMap,
Map<String, Long> dossierVersionMap, Map<String, Long> dossierVersionMap,
Map<String, DossierEntity> dossierMap) { Map<String, DossierEntity> dossierMap) {
switch (fileStatus.getStatus()) {
case ERROR: if(ProcessingStatus.ERROR.equals(fileStatus.getProcessingStatus())){
return true; return true;
case UNASSIGNED:
case UNDER_REVIEW:
case UNDER_APPROVAL:
if (fileStatus.getLastProcessed() == null) {
return true;
}
if (fileStatus.getLastFileAttributeChange() != null && fileStatus.getLastProcessed().isBefore(fileStatus.getLastFileAttributeChange())) {
return true;
} else {
return requiresReanalysisBasedOnVersionDifference(fileStatus, dossierTemplateVersionMap, dossierVersionMap, dossierMap);
}
default:
return false;
} }
if(ProcessingStatus.PROCESSED.equals(fileStatus.getProcessingStatus()) || ProcessingStatus.UNPROCESSED.equals(fileStatus.getProcessingStatus())) {
switch (fileStatus.getWorkflowStatus()) {
case UNASSIGNED:
case UNDER_REVIEW:
case UNDER_APPROVAL:
if (fileStatus.getLastProcessed() == null) {
return true;
}
if (fileStatus.getLastFileAttributeChange() != null && fileStatus.getLastProcessed().isBefore(fileStatus.getLastFileAttributeChange())) {
return true;
} else {
return requiresReanalysisBasedOnVersionDifference(fileStatus, dossierTemplateVersionMap, dossierVersionMap, dossierMap);
}
default:
return false;
}
}
return false;
} }
private boolean requiresReanalysisBasedOnVersionDifference(FileModel fileStatus, private boolean requiresReanalysisBasedOnVersionDifference(FileModel fileStatus,

View File

@ -6,15 +6,19 @@ import com.iqser.red.service.peristence.v1.server.service.ReanalysisRequiredStat
import com.iqser.red.service.peristence.v1.server.utils.FileModelMapper; import com.iqser.red.service.peristence.v1.server.utils.FileModelMapper;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.AmqpAdmin; import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -25,15 +29,16 @@ import static com.iqser.red.service.persistence.management.v1.processor.utils.Ma
@RequiredArgsConstructor @RequiredArgsConstructor
public class AutomaticAnalysisScheduler { public class AutomaticAnalysisScheduler {
@Value("${persistence-service.automaticAnalysis.pageFactor:500}") @Value("${persistence-service.automaticAnalysis.pageFactor:500}")
private int pageFactor; private int pageFactor;
private final FileStatusService fileStatusService; private final FileStatusService fileStatusService;
private final ReanalysisRequiredStatusService reanalysisRequiredStatusService; private final ReanalysisRequiredStatusService reanalysisRequiredStatusService;
private final AmqpAdmin amqpAdmin; private final AmqpAdmin amqpAdmin;
@PostConstruct @PostConstruct
protected void postConstruct() { protected void postConstruct() {
log.info("Automatic Analysis pageFactor: {}", pageFactor); log.info("Automatic Analysis pageFactor: {}", pageFactor);
} }
@ -43,10 +48,8 @@ public class AutomaticAnalysisScheduler {
var redactionQueueInfo = amqpAdmin.getQueueInfo(MessagingConfiguration.REDACTION_QUEUE); var redactionQueueInfo = amqpAdmin.getQueueInfo(MessagingConfiguration.REDACTION_QUEUE);
if (redactionQueueInfo != null) { if (redactionQueueInfo != null) {
log.info("Checking queue status to see if background analysis can happen. Currently {} holds {} elements and has {} consumers", log.info("Checking queue status to see if background analysis can happen. Currently {} holds {} elements and has {} consumers", MessagingConfiguration.REDACTION_QUEUE, redactionQueueInfo
MessagingConfiguration.REDACTION_QUEUE, .getMessageCount(), redactionQueueInfo.getConsumerCount());
redactionQueueInfo.getMessageCount(),
redactionQueueInfo.getConsumerCount());
// only 1 file in queue // only 1 file in queue
var consumerCount = redactionQueueInfo.getConsumerCount(); var consumerCount = redactionQueueInfo.getConsumerCount();
if (redactionQueueInfo.getMessageCount() <= consumerCount) { if (redactionQueueInfo.getMessageCount() <= consumerCount) {
@ -76,17 +79,21 @@ public class AutomaticAnalysisScheduler {
return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convert(fileStatusService.getAllStatuses() return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convert(fileStatusService.getAllStatuses()
.stream() .stream()
.filter(f -> !f.getStatus().equals(FileStatus.DELETED)) .filter(f -> !f.getProcessingStatus().equals(ProcessingStatus.DELETED))
.filter(f -> !f.getStatus().equals(FileStatus.APPROVED)) .filter(f -> !f.getWorkflowStatus().equals(WorkflowStatus.APPROVED))
.filter(f -> !isProcessing(f)) .filter(f -> !isProcessing(f))
.collect(Collectors.toList()), FileModel.class, new FileModelMapper())).stream().filter(FileModel::isAnalysisRequired).collect(Collectors.toList()); .collect(Collectors.toList()), FileModel.class, new FileModelMapper()))
.stream()
.filter(FileModel::isAnalysisRequired)
.collect(Collectors.toList());
} }
private boolean isProcessing(FileEntity file) { private boolean isProcessing(FileEntity file) {
return file.getStatus() == FileStatus.PROCESSING ||
file.getStatus() == FileStatus.REPROCESS || return !file.getProcessingStatus().equals(ProcessingStatus.PROCESSED) && !file.getProcessingStatus()
file.getStatus() == FileStatus.FULLREPROCESS || .equals(ProcessingStatus.UNPROCESSED) && !file.getProcessingStatus()
file.getStatus() == FileStatus.INDEXING || .equals(ProcessingStatus.DELETED) && !file.getProcessingStatus().equals(ProcessingStatus.ERROR);
file.getStatus() == FileStatus.OCR_PROCESSING;
} }
} }

View File

@ -8,7 +8,10 @@ import com.iqser.red.service.peristence.v1.server.integration.service.FileTester
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStats; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStats;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import org.hibernate.jdbc.Work;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -78,7 +81,7 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest {
//alter file 4 //alter file 4
fileRepository.findById(file4.getId()).ifPresent((file)->{ fileRepository.findById(file4.getId()).ifPresent((file)->{
file.setHasHints(true); file.setHasHints(true);
file.setStatus(FileStatus.APPROVED); file.setWorkflowStatus(WorkflowStatus.APPROVED);
fileRepository.save(file); fileRepository.save(file);
}); });
} }
@ -94,7 +97,7 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest {
assertThat(dossierStats.isHasSuggestionsFilePresent()).isTrue(); assertThat(dossierStats.isHasSuggestionsFilePresent()).isTrue();
assertThat(dossierStats.isHasUpdatesFilePresent()).isTrue(); assertThat(dossierStats.isHasUpdatesFilePresent()).isTrue();
assertThat(dossierStats.isHasNoFlagsFilePresent()).isFalse(); assertThat(dossierStats.isHasNoFlagsFilePresent()).isFalse();
assertThat(dossierStats.getFileCountPerStatus().get(FileStatus.PROCESSING)).isEqualTo(2); assertThat(dossierStats.getFileCountPerProcessingStatus().get(ProcessingStatus.PROCESSING)).isEqualTo(2);
} }
@Test @Test
@ -114,7 +117,7 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest {
assertThat(dossierStats2.isHasSuggestionsFilePresent()).isFalse(); assertThat(dossierStats2.isHasSuggestionsFilePresent()).isFalse();
assertThat(dossierStats2.isHasUpdatesFilePresent()).isFalse(); assertThat(dossierStats2.isHasUpdatesFilePresent()).isFalse();
assertThat(dossierStats2.isHasNoFlagsFilePresent()).isTrue(); assertThat(dossierStats2.isHasNoFlagsFilePresent()).isTrue();
assertThat(dossierStats2.getFileCountPerStatus().get(FileStatus.PROCESSING)).isEqualTo(1); assertThat(dossierStats2.getFileCountPerWorkflowStatus().get(WorkflowStatus.UNASSIGNED)).isEqualTo(1);
assertThat(dossierStats2.getFileCountPerStatus().get(FileStatus.APPROVED)).isEqualTo(1); assertThat(dossierStats2.getFileCountPerWorkflowStatus().get(WorkflowStatus.APPROVED)).isEqualTo(1);
} }
} }

View File

@ -5,7 +5,8 @@ import com.iqser.red.service.peristence.v1.server.integration.client.FileProcess
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import com.iqser.red.service.redaction.v1.model.AnalyzeResult; import com.iqser.red.service.redaction.v1.model.AnalyzeResult;
import org.junit.Test; import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -36,7 +37,7 @@ public class FileProcessingTest extends AbstractPersistenceServerServiceTest {
fileProcessingClient.analysisFailed(dossier.getId(), file.getId()); fileProcessingClient.analysisFailed(dossier.getId(), file.getId());
var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.ERROR); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.ERROR);
fileProcessingClient.analysisSuccessful(dossier.getId(), file.getId(), AnalyzeResult.builder() fileProcessingClient.analysisSuccessful(dossier.getId(), file.getId(), AnalyzeResult.builder()
@ -44,35 +45,35 @@ public class FileProcessingTest extends AbstractPersistenceServerServiceTest {
.fileId(file.getId()) .fileId(file.getId())
.dossierId(dossier.getId()).build()); .dossierId(dossier.getId()).build());
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNASSIGNED); assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNASSIGNED);
assertThat(loadedFile.getAnalysisVersion()).isEqualTo(100); assertThat(loadedFile.getAnalysisVersion()).isEqualTo(100);
fileProcessingClient.ocrFailed(dossier.getId(), file.getId()); fileProcessingClient.ocrFailed(dossier.getId(), file.getId());
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.ERROR); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.ERROR);
fileProcessingClient.ocrSuccessful(dossier.getId(), file.getId()); fileProcessingClient.ocrSuccessful(dossier.getId(), file.getId());
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.PROCESSING); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.PROCESSING);
assertThat(loadedFile.getLastOCRTime()).isNotNull(); assertThat(loadedFile.getLastOCRTime()).isNotNull();
fileProcessingClient.indexing(dossier.getId(), file.getId()); fileProcessingClient.indexing(dossier.getId(), file.getId());
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.INDEXING); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.INDEXING);
assertThat(loadedFile.getLastIndexed()).isNull(); assertThat(loadedFile.getLastIndexed()).isNull();
fileProcessingClient.indexingFailed(dossier.getId(), file.getId()); fileProcessingClient.indexingFailed(dossier.getId(), file.getId());
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.ERROR); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.ERROR);
fileProcessingClient.indexingSuccessful(dossier.getId(), file.getId()); fileProcessingClient.indexingSuccessful(dossier.getId(), file.getId());
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNASSIGNED); assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNASSIGNED);
assertThat(loadedFile.getLastIndexed()).isNotNull(); assertThat(loadedFile.getLastIndexed()).isNotNull();
} }

View File

@ -13,7 +13,8 @@ import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPers
import com.iqser.red.service.persistence.service.v1.api.model.annotations.*; import com.iqser.red.service.persistence.service.v1.api.model.annotations.*;
import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.BinaryFileRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.BinaryFileRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import org.junit.Test; import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -57,7 +58,7 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
fileClient.setCurrentFileReviewer(dossier.getId(), file.getId(),"1"); fileClient.setCurrentFileReviewer(dossier.getId(), file.getId(),"1");
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getCurrentReviewer()).isEqualTo("1"); assertThat(loadedFile.getCurrentReviewer()).isEqualTo("1");
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNDER_REVIEW); assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_REVIEW);
fileClient.excludePages(dossier.getId(), file.getId(), Sets.newHashSet(1)); fileClient.excludePages(dossier.getId(), file.getId(), Sets.newHashSet(1));
@ -73,27 +74,27 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
fileClient.setCurrentFileReviewer(dossier.getId(), file.getId(), "1"); fileClient.setCurrentFileReviewer(dossier.getId(), file.getId(), "1");
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getCurrentReviewer()).isEqualTo("1"); assertThat(loadedFile.getCurrentReviewer()).isEqualTo("1");
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNDER_REVIEW); assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_REVIEW);
fileClient.setStatusUnderApproval(dossier.getId(), file.getId(), "1"); fileClient.setStatusUnderApproval(dossier.getId(), file.getId(), "1");
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNDER_APPROVAL); assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_APPROVAL);
fileClient.setStatusUnderReview(dossier.getId(), file.getId()); fileClient.setStatusUnderReview(dossier.getId(), file.getId());
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNDER_REVIEW); assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_REVIEW);
fileClient.setStatusUnderApproval(dossier.getId(), file.getId(), "1"); fileClient.setStatusUnderApproval(dossier.getId(), file.getId(), "1");
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNDER_APPROVAL); assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_APPROVAL);
fileClient.setStatusApproved(dossier.getId(), file.getId()); fileClient.setStatusApproved(dossier.getId(), file.getId());
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.APPROVED); assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.APPROVED);
assertThat(uploadClient.getOriginal(dossier.getId(), file.getId())).isNotNull(); assertThat(uploadClient.getOriginal(dossier.getId(), file.getId())).isNotNull();

View File

@ -7,7 +7,9 @@ import com.iqser.red.service.peristence.v1.server.integration.service.FileTester
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileRepository;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import org.assertj.core.util.Sets; import org.assertj.core.util.Sets;
import org.junit.Test; import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -42,61 +44,49 @@ public class ReanalysisTest extends AbstractPersistenceServerServiceTest {
reanalysisClient.ocrDossier(dossier.getId()); reanalysisClient.ocrDossier(dossier.getId());
var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.OCR_PROCESSING); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.OCR_PROCESSING);
resetProcessingStatus(file);
resetStatus(file);
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNASSIGNED);
resetStatus(file);
reanalysisClient.ocrFile(dossier.getId(), file.getId(), true); reanalysisClient.ocrFile(dossier.getId(), file.getId(), true);
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.OCR_PROCESSING); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.OCR_PROCESSING);
resetProcessingStatus(file);
resetStatus(file);
reanalysisClient.ocrFiles(dossier.getId(), Set.of(file.getId())); reanalysisClient.ocrFiles(dossier.getId(), Set.of(file.getId()));
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.OCR_PROCESSING); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.OCR_PROCESSING);
resetProcessingStatus(file);
resetStatus(file);
reanalysisClient.reanalyzeFiles(dossier.getId(), Set.of(file.getId()), true); reanalysisClient.reanalyzeFiles(dossier.getId(), Set.of(file.getId()), true);
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.PROCESSING); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.PROCESSING);
resetProcessingStatus(file);
resetStatus(file);
reanalysisClient.reanalyzeFile(dossier.getId(), file.getId(), Sets.newHashSet()); reanalysisClient.reanalyzeFile(dossier.getId(), file.getId(), Sets.newHashSet());
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.PROCESSING); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.PROCESSING);
resetProcessingStatus(file);
resetStatus(file);
reanalysisClient.reanalyzeDossier(dossier.getId(), true); reanalysisClient.reanalyzeDossier(dossier.getId(), true);
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.PROCESSING); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.PROCESSING);
resetProcessingStatus(file);
resetStatus(file);
reanalysisClient.reindex(dossier.getId(), Set.of(file.getId()));
fileClient.getFileStatus(dossier.getId(), file.getId());
} }
private void resetStatus(FileModel file) { private void resetProcessingStatus(FileModel file) {
fileRepository.findById(file.getId()).ifPresent(savedFile -> { fileRepository.findById(file.getId()).ifPresent(savedFile -> {
savedFile.setStatus(FileStatus.UNASSIGNED); savedFile.setProcessingStatus(ProcessingStatus.UNPROCESSED);
fileRepository.save(savedFile); fileRepository.save(savedFile);
}); });
var loadedFile = fileClient.getFileStatus(file.getDossierId(), file.getId()); var loadedFile = fileClient.getFileStatus(file.getDossierId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNASSIGNED); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.UNPROCESSED);
} }
} }