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/FileManagementController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/FileManagementController.java index 0126a7185..4b428201b 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/FileManagementController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/FileManagementController.java @@ -121,14 +121,20 @@ public class FileManagementController implements FileManagementResource { return getResponseEntityForPDFDocument(fileId, dossierId, FileType.ORIGIN, inline); } + @Timed @Override @PreAuthorize("hasAuthority('" + DOWNLOAD_ORIGINAL_FILE + "')") public ResponseEntity downloadViewerDocument(@PathVariable(DOSSIER_ID) String dossierId, - @PathVariable(FILE_ID) String fileId, - @RequestParam(value = "inline", required = false, defaultValue = FALSE) boolean inline) { + @PathVariable(FILE_ID) String fileId, + @RequestParam(value = "inline", required = false, defaultValue = FALSE) boolean inline) { - return getResponseEntityForPDFDocument(fileId, dossierId, FileType.VIEWER_DOCUMENT, inline); + // Viewer Document Returns + if (storageService.objectExists(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.VIEWER_DOCUMENT))) { + return getResponseEntityForPDFDocument(fileId, dossierId, FileType.VIEWER_DOCUMENT, inline); + } else { + return getResponseEntityForPDFDocument(fileId, dossierId, FileType.ORIGIN, inline); + } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileEntity.java index 5b9e71035..e2839644c 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileEntity.java @@ -70,6 +70,9 @@ public class FileEntity { @Column private OffsetDateTime lastProcessed; + @Column + private OffsetDateTime lastLayoutProcessed; + @Column private OffsetDateTime lastIndexed; 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 d4c97a921..f01f48f14 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 @@ -3,6 +3,7 @@ package com.iqser.red.service.persistence.management.v1.processor.service; import static com.knecon.fforesight.service.layoutparser.internal.api.queue.LayoutParsingQueueNames.LAYOUT_PARSING_REQUEST_QUEUE; import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -717,6 +718,12 @@ public class FileStatusService { } + public void updateLayoutProcessedTime(String fileId) { + + fileStatusPersistenceService.updateLayoutProcessedTime(fileId); + } + + public int countSoftDeletedFiles(String dossierId) { return fileStatusPersistenceService.countSoftDeletedFilesPerDossierId(dossierId); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java index 401d3fd2a..2f299a31d 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java @@ -548,4 +548,10 @@ public class FileStatusPersistenceService { OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); } + + public void updateLayoutProcessedTime(String fileId) { + + fileRepository.updateLayoutProcessedTime(fileId, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + } + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java index 20b6d6547..c18ede4a0 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java @@ -220,6 +220,12 @@ public interface FileRepository extends JpaRepository { @Query(value = "update FileEntity f set f.numberOfOCRedPages = :numberOfOCRedPages, f.numberOfPagesToOCR = :numberOfPagesToOCR, f.ocrEndTime = :ocrEndTime, " + " f.lastUpdated = :lastUpdated where f.id = :fileId") void updateOCRStatus(String fileId, int numberOfPagesToOCR, int numberOfOCRedPages, OffsetDateTime ocrEndTime, OffsetDateTime lastUpdated); + + @Transactional + @Modifying(clearAutomatically = true) + @Query(value = "update FileEntity f set f.lastLayoutProcessed = :offsetDateTime where f.id = :fileId") + void updateLayoutProcessedTime(String fileId, OffsetDateTime offsetDateTime); + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/LayoutParsingFinishedMessageReceiver.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/LayoutParsingFinishedMessageReceiver.java index be516e0e6..0c380367a 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/LayoutParsingFinishedMessageReceiver.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/LayoutParsingFinishedMessageReceiver.java @@ -41,6 +41,8 @@ public class LayoutParsingFinishedMessageReceiver { layoutParsingRequestIdentifierService.parseFileId(response.identifier()), layoutParsingRequestIdentifierService.parsePriority(response.identifier())); + fileStatusService.updateLayoutProcessedTime(layoutParsingRequestIdentifierService.parseFileId(response.identifier())); + log.info("Received message {} in {}", response, MessagingConfiguration.OCR_STATUS_UPDATE_RESPONSE_QUEUE); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml index f13882fe5..cfbcaf2eb 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml @@ -153,3 +153,6 @@ databaseChangeLog: file: db/changelog/tenant/105-add-remove-watermark-to-dossier-template.yaml - include: file: db/changelog/tenant/106-add-add-to-all-dossiers-to-resize-redactions.yaml + - include: + file: db/changelog/tenant/107-add-last-layout-processed-column.yaml + diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/107-add-last-layout-processed-column.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/107-add-last-layout-processed-column.yaml new file mode 100644 index 000000000..45dcf057e --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/107-add-last-layout-processed-column.yaml @@ -0,0 +1,11 @@ +databaseChangeLog: + - changeSet: + id: add-last-layout-processed-column-to-file + author: timo + changes: + - addColumn: + columns: + - column: + name: last_layout_processed + type: TIMESTAMP WITHOUT TIME ZONE + tableName: file diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/file/FileModel.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/file/FileModel.java index 87e7f2c65..b698b7f6f 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/file/FileModel.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/file/FileModel.java @@ -31,6 +31,7 @@ public class FileModel { private OffsetDateTime deleted; private OffsetDateTime lastProcessed; private OffsetDateTime lastIndexed; + private OffsetDateTime lastLayoutProcessed; private OffsetDateTime lastManualChangeDate; private int numberOfAnalyses; private String assignee;