diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReanalysisResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReanalysisResource.java index 8e8c3a188..32318d880 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReanalysisResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReanalysisResource.java @@ -18,6 +18,7 @@ import com.iqser.red.service.persistence.service.v1.api.model.annotations.Delete public interface ReanalysisResource { String REANALYZE_PATH = "/reanalyze"; + String RECALCULATE_FLAGS = "/recalculate-flags"; String IMPORT_REDACTIONS_PATH = "/import-redactions"; String CONVERT_TEXT_HIGHLIGHTS_PATH = "/convert-texthighlights"; String OCR_REANALYZE_PATH = "/ocr/reanalyze"; @@ -33,6 +34,8 @@ public interface ReanalysisResource { @PostMapping(value = REANALYZE_PATH + DOSSIER_ID_PATH_PARAM) void reanalyzeDossier(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @RequestParam(value = "force", required = false, defaultValue = FALSE) boolean force); + @PostMapping(value = RECALCULATE_FLAGS) + void recalculateFlags(); @PostMapping(value = REANALYZE_PATH + DOSSIER_ID_PATH_PARAM + BULK_REST_PATH) void reanalyzeFiles(@PathVariable(DOSSIER_ID_PARAM) String dossierId, diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java index 0f4daaace..63cd6fc2f 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java @@ -18,6 +18,7 @@ import com.google.common.collect.Sets; import com.iqser.red.service.pdftron.redaction.v1.api.model.ByteContentDocument; import com.iqser.red.service.pdftron.redaction.v1.api.model.highlights.TextHighlightConversionOperation; import com.iqser.red.service.pdftron.redaction.v1.api.model.highlights.TextHighlightConversionRequest; +import com.iqser.red.service.peristence.v1.server.service.AnalysisFlagsCalculationService; import com.iqser.red.service.peristence.v1.server.service.FileManagementStorageService; import com.iqser.red.service.peristence.v1.server.service.FileStatusService; import com.iqser.red.service.peristence.v1.server.service.IndexingService; @@ -46,7 +47,7 @@ public class ReanalysisController implements ReanalysisResource { private final IndexingService indexingService; private final PDFTronRedactionClient pDFTronRedactionClient; private final FileManagementStorageService fileManagementStorageService; - private final ObjectMapper objectMapper; + private final AnalysisFlagsCalculationService analysisFlagsCalculationService; @Override @@ -56,6 +57,11 @@ public class ReanalysisController implements ReanalysisResource { reanalyseFiles(dossierId, force, relevantFiles); } + @Override + public void recalculateFlags(){ + analysisFlagsCalculationService.calculateFlagsForAllFiles(); + } + @Override public void reanalyzeFiles(@PathVariable(DOSSIER_ID_PARAM) String dossierId, diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java index 5da2aa252..8600b7c35 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java @@ -1,13 +1,18 @@ package com.iqser.red.service.peristence.v1.server.service; import java.time.OffsetDateTime; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; import org.apache.commons.lang3.StringUtils; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ViewedPageEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ViewedPagesPersistenceService; import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus; @@ -25,10 +30,34 @@ import lombok.extern.slf4j.Slf4j; @RequiredArgsConstructor public class AnalysisFlagsCalculationService { + private final DossierPersistenceService dossierPersistenceService; private final FileStatusPersistenceService fileStatusPersistenceService; private final RedactionLogService redactionLogService; private final ViewedPagesPersistenceService viewedPagesPersistenceService; + + @Async + public void calculateFlagsForAllFiles(){ + + Set files = new HashSet<>(); + + dossierPersistenceService.findAllDossiers() + .stream().filter(dossier -> dossier.getHardDeletedTime() == null && dossier.getSoftDeletedTime() == null) + .forEach(dossier -> { + files.addAll(fileStatusPersistenceService.getActiveFiles(dossier.getId())); + }); + + log.info("Starting to recalculated flags for {} files", files.size()); + + int i = 1; + for(FileEntity file: files){ + calculateFlags(file.getDossierId(), file.getId()); + log.info("Successfully recalculated flags for {}/{} files", i, files.size()); + } + + log.info("Flag recalculation for all files finished."); + } + @Timed("redactmanager_calculateFlags") public void calculateFlags(String dossierId, String fileId) {