diff --git a/buildSrc/src/main/kotlin/com.iqser.red.service.java-conventions.gradle.kts b/buildSrc/src/main/kotlin/com.iqser.red.service.java-conventions.gradle.kts index e558f0968..bcbcfa8cf 100644 --- a/buildSrc/src/main/kotlin/com.iqser.red.service.java-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/com.iqser.red.service.java-conventions.gradle.kts @@ -7,7 +7,7 @@ plugins { } val redactionServiceVersion by rootProject.extra { "4.290.0" } -val pdftronRedactionServiceVersion by rootProject.extra { "4.48.0" } +val pdftronRedactionServiceVersion by rootProject.extra { "4.81.0" } val redactionReportServiceVersion by rootProject.extra { "4.81.0" } val searchServiceVersion by rootProject.extra { "2.90.0" } diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/HighlightsController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/HighlightsController.java index ae016518e..d39d611b5 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/HighlightsController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/HighlightsController.java @@ -15,9 +15,9 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import com.fasterxml.jackson.databind.ObjectMapper; -import com.iqser.red.service.pdftron.redaction.v1.api.model.highlights.Highlights; 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.pdftron.redaction.v1.api.model.highlights.TextHighlights; import com.iqser.red.service.persistence.management.v1.processor.service.AccessControlService; import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService; import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService; @@ -47,20 +47,20 @@ public class HighlightsController implements HighlightsResource { @SneakyThrows @PreAuthorize("hasAuthority('" + GET_HIGHLIGHTS + "')") - public Highlights getHighlights(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId) { + public TextHighlights getHighlights(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId) { accessControlService.checkDossierExistenceAndViewPermissionsToDossier(dossierId); fileStatusService.getStatus(fileId); if (storageService.objectExists(TenantContext.getTenantId(), getStorageId(dossierId, fileId, FileType.TEXT_HIGHLIGHTS))) { try (InputStream stream = fileManagementStorageService.getObject(TenantContext.getTenantId(), getStorageId(dossierId, fileId, FileType.TEXT_HIGHLIGHTS))) { - Highlights highlights = objectMapper.readValue(stream, Highlights.class); + TextHighlights highlights = objectMapper.readValue(stream, TextHighlights.class); stream.close(); return highlights; } } - return new Highlights(); + return new TextHighlights(); } diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/HighlightsResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/HighlightsResource.java index 372e87a07..b1393f927 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/HighlightsResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/HighlightsResource.java @@ -8,7 +8,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.ResponseStatus; -import com.iqser.red.service.pdftron.redaction.v1.api.model.highlights.Highlights; +import com.iqser.red.service.pdftron.redaction.v1.api.model.highlights.TextHighlights; import com.iqser.red.service.persistence.service.v1.api.shared.model.AnnotationIds; import io.swagger.v3.oas.annotations.Operation; @@ -36,7 +36,7 @@ public interface HighlightsResource { @Operation(summary = "Gets available highlights for the file", description = "None") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found")}) @GetMapping(value = DOSSIERS_PATH + DOSSIER_ID_PATH_VARIABLE + FILES_PATH + FILE_ID_PATH_VARIABLE + HIGHLIGHTS_PATH, produces = MediaType.APPLICATION_JSON_VALUE) - Highlights getHighlights(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId); + TextHighlights getHighlights(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId); @ResponseStatus(value = HttpStatus.NO_CONTENT) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusService.java index bb693479d..8b9571afa 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusService.java @@ -8,6 +8,7 @@ import java.util.List; import java.util.Set; import java.util.stream.Collectors; +import com.iqser.red.service.pdftron.redaction.v1.api.model.ApplicationType; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; @@ -17,6 +18,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import org.apache.commons.lang3.StringUtils; import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import com.google.common.collect.Sets; @@ -58,6 +60,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.ProcessingStatus; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.WorkflowStatus; import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter; +import com.knecon.fforesight.service.layoutparser.internal.api.queue.LayoutParsingType; import com.knecon.fforesight.service.ocr.v1.api.model.DocumentRequest; import jakarta.transaction.Transactional; @@ -65,6 +68,7 @@ import lombok.AccessLevel; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.experimental.FieldDefaults; +import lombok.experimental.NonFinal; import lombok.extern.slf4j.Slf4j; @Slf4j @@ -73,6 +77,10 @@ import lombok.extern.slf4j.Slf4j; @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) public class FileStatusService { + @NonFinal + @Value("${application.type}") + String applicationType; + FileStatusPersistenceService fileStatusPersistenceService; DossierPersistenceService dossierPersistenceService; DossierTemplatePersistenceService dossierTemplatePersistenceService; @@ -96,6 +104,7 @@ public class FileStatusService { WebsocketService websocketService; + @Transactional public List getAllRelevantStatusesForReanalysisScheduler() { @@ -126,6 +135,7 @@ public class FileStatusService { return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convertedList); } + @Transactional public List getDossierTemplateStatus(String dossierTemplateId) { @@ -134,6 +144,7 @@ public class FileStatusService { return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convertedList); } + @Transactional public List getAllFiles() { @@ -142,6 +153,7 @@ public class FileStatusService { return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convertedList); } + @Transactional public List getAllErrorFiles() { @@ -203,7 +215,6 @@ public class FileStatusService { var dossier = dossierPersistenceService.getAndValidateDossier(dossierId); var fileEntity = fileStatusPersistenceService.getStatus(fileId); - if (!fileManagementStorageService.objectExists(dossierId, fileId, FileType.ORIGIN)) { addToPreprocessingQueue(dossierId, fileId, fileEntity.getFilename()); sendReadOnlyAnalysisEvent(dossierId, fileId, fileEntity); @@ -286,8 +297,7 @@ public class FileStatusService { .fileAttributes(convertAttributes(fileEntity.getFileAttributes(), dossier.getDossierTemplateId())) .build(); - - if(fileEntity.isExcludedFromAutomaticAnalysis() && fileManagementStorageService.objectExists(dossierId, fileId, FileType.IMPORTED_REDACTIONS)){ + if (fileEntity.isExcludedFromAutomaticAnalysis() && fileManagementStorageService.objectExists(dossierId, fileId, FileType.IMPORTED_REDACTIONS)) { analyseRequest.setMessageType(MessageType.IMPORTED_REDACTIONS_ONLY); } @@ -308,14 +318,24 @@ public class FileStatusService { } - private void sendAnalysisEvent(String dossierId, String fileId, FileEntity fileEntity){ - if(fileEntity.getProcessingStatus().equals(ProcessingStatus.UNPROCESSED) || fileEntity.getProcessingStatus().equals(ProcessingStatus.ERROR) || fileEntity.getProcessingStatus().equals(ProcessingStatus.REPROCESS) || fileEntity.getProcessingStatus().equals(ProcessingStatus.PROCESSED)){ + private void sendAnalysisEvent(String dossierId, String fileId, FileEntity fileEntity) { + + if (fileEntity.getProcessingStatus().equals(ProcessingStatus.UNPROCESSED) + || fileEntity.getProcessingStatus().equals(ProcessingStatus.ERROR) + || fileEntity.getProcessingStatus().equals(ProcessingStatus.REPROCESS) + || fileEntity.getProcessingStatus().equals(ProcessingStatus.PROCESSED)) { websocketService.sendAnalysisEvent(dossierId, fileId, AnalyseStatus.PROCESSING, fileEntity.getNumberOfAnalyses() + 1); } } - private void sendReadOnlyAnalysisEvent(String dossierId, String fileId, FileEntity fileEntity){ - if(fileEntity.getProcessingStatus().equals(ProcessingStatus.UNPROCESSED) || fileEntity.getProcessingStatus().equals(ProcessingStatus.ERROR) || fileEntity.getProcessingStatus().equals(ProcessingStatus.REPROCESS) || fileEntity.getProcessingStatus().equals(ProcessingStatus.PROCESSED) || fileEntity.getProcessingStatus().equals(ProcessingStatus.OCR_PROCESSING)){ + + private void sendReadOnlyAnalysisEvent(String dossierId, String fileId, FileEntity fileEntity) { + + if (fileEntity.getProcessingStatus().equals(ProcessingStatus.UNPROCESSED) + || fileEntity.getProcessingStatus().equals(ProcessingStatus.ERROR) + || fileEntity.getProcessingStatus().equals(ProcessingStatus.REPROCESS) + || fileEntity.getProcessingStatus().equals(ProcessingStatus.PROCESSED) + || fileEntity.getProcessingStatus().equals(ProcessingStatus.OCR_PROCESSING)) { websocketService.sendAnalysisEvent(dossierId, fileId, AnalyseStatus.READ_ONLY_PROCESSING, fileEntity.getNumberOfAnalyses() + 1); } } @@ -342,7 +362,12 @@ public class FileStatusService { @SneakyThrows public void addToPreprocessingQueue(String dossierId, String fileId, String filename) { - var processUntouchedDocumentRequest = ProcessUntouchedDocumentRequest.builder().dossierId(dossierId).fileId(fileId).fileName(filename).build(); + ApplicationType type = ApplicationType.REDACT_MANAGER; + if (applicationType.equals("DocuMine")) { + type = ApplicationType.DOCUMINE; + } + + var processUntouchedDocumentRequest = ProcessUntouchedDocumentRequest.builder().applicationType(type).dossierId(dossierId).fileId(fileId).fileName(filename).build(); setStatusPreProcessingQueued(fileId); @@ -542,7 +567,8 @@ public class FileStatusService { public void setStatusSuccessful(String dossierId, String fileId, AnalyzeResult analyzeResult) { - fileStatusPersistenceService.updateProcessingStatus(dossierId, fileId, + fileStatusPersistenceService.updateProcessingStatus(dossierId, + fileId, analyzeResult.getNumberOfPages(), analyzeResult.getDictionaryVersion(), analyzeResult.getRulesVersion(), @@ -627,6 +653,7 @@ public class FileStatusService { public void setStatusIndexingSuccessful(String fileId) { + fileStatusPersistenceService.setUpdateStatusIndexingSuccessful(fileId); FileEntity fileStatus = fileStatusPersistenceService.getStatus(fileId); websocketService.sendFileEvent(fileStatus.getDossierId(), fileId, FileEventType.UPDATE); @@ -648,6 +675,7 @@ public class FileStatusService { public void updateFileModificationDate(String fileId, OffsetDateTime fileManipulationDate) { + fileStatusPersistenceService.updateFileModificationDate(fileId, fileManipulationDate); FileEntity fileStatus = fileStatusPersistenceService.getStatus(fileId); websocketService.sendFileEvent(fileStatus.getDossierId(), fileId, FileEventType.UPDATE);