Merge branch 'RED-9802-bp' into 'release/2.465.x'
RED-9802: Disable Imported Redactions Flow in DM See merge request redactmanager/persistence-service!657
This commit is contained in:
commit
48b880d10a
@ -7,7 +7,7 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val redactionServiceVersion by rootProject.extra { "4.290.0" }
|
val redactionServiceVersion by rootProject.extra { "4.290.0" }
|
||||||
val pdftronRedactionServiceVersion by rootProject.extra { "4.48.0" }
|
val pdftronRedactionServiceVersion by rootProject.extra { "4.78.3" }
|
||||||
val redactionReportServiceVersion by rootProject.extra { "4.73.6" }
|
val redactionReportServiceVersion by rootProject.extra { "4.73.6" }
|
||||||
val searchServiceVersion by rootProject.extra { "2.90.0" }
|
val searchServiceVersion by rootProject.extra { "2.90.0" }
|
||||||
|
|
||||||
|
|||||||
@ -15,9 +15,9 @@ import org.springframework.web.bind.annotation.RequestBody;
|
|||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
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.TextHighlightConversionOperation;
|
||||||
import com.iqser.red.service.pdftron.redaction.v1.api.model.highlights.TextHighlightConversionRequest;
|
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.AccessControlService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService;
|
||||||
@ -47,20 +47,20 @@ public class HighlightsController implements HighlightsResource {
|
|||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
@PreAuthorize("hasAuthority('" + GET_HIGHLIGHTS + "')")
|
@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);
|
accessControlService.checkDossierExistenceAndViewPermissionsToDossier(dossierId);
|
||||||
fileStatusService.getStatus(fileId);
|
fileStatusService.getStatus(fileId);
|
||||||
|
|
||||||
if (storageService.objectExists(TenantContext.getTenantId(), getStorageId(dossierId, fileId, FileType.TEXT_HIGHLIGHTS))) {
|
if (storageService.objectExists(TenantContext.getTenantId(), getStorageId(dossierId, fileId, FileType.TEXT_HIGHLIGHTS))) {
|
||||||
try (InputStream stream = fileManagementStorageService.getObject(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();
|
stream.close();
|
||||||
return highlights;
|
return highlights;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Highlights();
|
return new TextHighlights();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -8,7 +8,7 @@ import org.springframework.web.bind.annotation.PostMapping;
|
|||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
import org.springframework.web.bind.annotation.ResponseStatus;
|
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 com.iqser.red.service.persistence.service.v1.api.shared.model.AnnotationIds;
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
@ -36,7 +36,7 @@ public interface HighlightsResource {
|
|||||||
@Operation(summary = "Gets available highlights for the file", description = "None")
|
@Operation(summary = "Gets available highlights for the file", description = "None")
|
||||||
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found")})
|
@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)
|
@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)
|
@ResponseStatus(value = HttpStatus.NO_CONTENT)
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import java.util.List;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
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.BadRequestException;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
|
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.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
@ -57,6 +59,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.ProcessingStatus;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.WorkflowStatus;
|
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.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 com.knecon.fforesight.service.ocr.v1.api.model.DocumentRequest;
|
||||||
|
|
||||||
import jakarta.transaction.Transactional;
|
import jakarta.transaction.Transactional;
|
||||||
@ -64,6 +67,7 @@ import lombok.AccessLevel;
|
|||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import lombok.experimental.FieldDefaults;
|
import lombok.experimental.FieldDefaults;
|
||||||
|
import lombok.experimental.NonFinal;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@ -72,6 +76,10 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
|
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
|
||||||
public class FileStatusService {
|
public class FileStatusService {
|
||||||
|
|
||||||
|
@NonFinal
|
||||||
|
@Value("${application.type}")
|
||||||
|
String applicationType;
|
||||||
|
|
||||||
FileStatusPersistenceService fileStatusPersistenceService;
|
FileStatusPersistenceService fileStatusPersistenceService;
|
||||||
DossierPersistenceService dossierPersistenceService;
|
DossierPersistenceService dossierPersistenceService;
|
||||||
DossierTemplatePersistenceService dossierTemplatePersistenceService;
|
DossierTemplatePersistenceService dossierTemplatePersistenceService;
|
||||||
@ -95,6 +103,7 @@ public class FileStatusService {
|
|||||||
|
|
||||||
WebsocketService websocketService;
|
WebsocketService websocketService;
|
||||||
|
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public List<FileModel> getAllRelevantStatusesForReanalysisScheduler() {
|
public List<FileModel> getAllRelevantStatusesForReanalysisScheduler() {
|
||||||
|
|
||||||
@ -125,6 +134,7 @@ public class FileStatusService {
|
|||||||
return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convertedList);
|
return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convertedList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public List<FileModel> getDossierTemplateStatus(String dossierTemplateId) {
|
public List<FileModel> getDossierTemplateStatus(String dossierTemplateId) {
|
||||||
|
|
||||||
@ -133,6 +143,7 @@ public class FileStatusService {
|
|||||||
return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convertedList);
|
return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convertedList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public List<FileModel> getAllFiles() {
|
public List<FileModel> getAllFiles() {
|
||||||
|
|
||||||
@ -141,6 +152,7 @@ public class FileStatusService {
|
|||||||
return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convertedList);
|
return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convertedList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public List<FileModel> getAllErrorFiles() {
|
public List<FileModel> getAllErrorFiles() {
|
||||||
|
|
||||||
@ -202,7 +214,6 @@ public class FileStatusService {
|
|||||||
var dossier = dossierPersistenceService.getAndValidateDossier(dossierId);
|
var dossier = dossierPersistenceService.getAndValidateDossier(dossierId);
|
||||||
var fileEntity = fileStatusPersistenceService.getStatus(fileId);
|
var fileEntity = fileStatusPersistenceService.getStatus(fileId);
|
||||||
|
|
||||||
|
|
||||||
if (!fileManagementStorageService.objectExists(dossierId, fileId, FileType.ORIGIN)) {
|
if (!fileManagementStorageService.objectExists(dossierId, fileId, FileType.ORIGIN)) {
|
||||||
addToPreprocessingQueue(dossierId, fileId, fileEntity.getFilename());
|
addToPreprocessingQueue(dossierId, fileId, fileEntity.getFilename());
|
||||||
sendReadOnlyAnalysisEvent(dossierId, fileId, fileEntity);
|
sendReadOnlyAnalysisEvent(dossierId, fileId, fileEntity);
|
||||||
@ -285,8 +296,7 @@ public class FileStatusService {
|
|||||||
.fileAttributes(convertAttributes(fileEntity.getFileAttributes(), dossier.getDossierTemplateId()))
|
.fileAttributes(convertAttributes(fileEntity.getFileAttributes(), dossier.getDossierTemplateId()))
|
||||||
.build();
|
.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);
|
analyseRequest.setMessageType(MessageType.IMPORTED_REDACTIONS_ONLY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -307,14 +317,24 @@ public class FileStatusService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void sendAnalysisEvent(String dossierId, String fileId, FileEntity fileEntity){
|
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)){
|
|
||||||
|
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);
|
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);
|
websocketService.sendAnalysisEvent(dossierId, fileId, AnalyseStatus.READ_ONLY_PROCESSING, fileEntity.getNumberOfAnalyses() + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -341,7 +361,12 @@ public class FileStatusService {
|
|||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public void addToPreprocessingQueue(String dossierId, String fileId, String filename) {
|
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);
|
setStatusPreProcessingQueued(fileId);
|
||||||
|
|
||||||
@ -541,7 +566,8 @@ public class FileStatusService {
|
|||||||
|
|
||||||
public void setStatusSuccessful(String dossierId, String fileId, AnalyzeResult analyzeResult) {
|
public void setStatusSuccessful(String dossierId, String fileId, AnalyzeResult analyzeResult) {
|
||||||
|
|
||||||
fileStatusPersistenceService.updateProcessingStatus(dossierId, fileId,
|
fileStatusPersistenceService.updateProcessingStatus(dossierId,
|
||||||
|
fileId,
|
||||||
analyzeResult.getNumberOfPages(),
|
analyzeResult.getNumberOfPages(),
|
||||||
analyzeResult.getDictionaryVersion(),
|
analyzeResult.getDictionaryVersion(),
|
||||||
analyzeResult.getRulesVersion(),
|
analyzeResult.getRulesVersion(),
|
||||||
@ -626,6 +652,7 @@ public class FileStatusService {
|
|||||||
|
|
||||||
|
|
||||||
public void setStatusIndexingSuccessful(String fileId) {
|
public void setStatusIndexingSuccessful(String fileId) {
|
||||||
|
|
||||||
fileStatusPersistenceService.setUpdateStatusIndexingSuccessful(fileId);
|
fileStatusPersistenceService.setUpdateStatusIndexingSuccessful(fileId);
|
||||||
FileEntity fileStatus = fileStatusPersistenceService.getStatus(fileId);
|
FileEntity fileStatus = fileStatusPersistenceService.getStatus(fileId);
|
||||||
websocketService.sendFileEvent(fileStatus.getDossierId(), fileId, FileEventType.UPDATE);
|
websocketService.sendFileEvent(fileStatus.getDossierId(), fileId, FileEventType.UPDATE);
|
||||||
@ -647,6 +674,7 @@ public class FileStatusService {
|
|||||||
|
|
||||||
|
|
||||||
public void updateFileModificationDate(String fileId, OffsetDateTime fileManipulationDate) {
|
public void updateFileModificationDate(String fileId, OffsetDateTime fileManipulationDate) {
|
||||||
|
|
||||||
fileStatusPersistenceService.updateFileModificationDate(fileId, fileManipulationDate);
|
fileStatusPersistenceService.updateFileModificationDate(fileId, fileManipulationDate);
|
||||||
FileEntity fileStatus = fileStatusPersistenceService.getStatus(fileId);
|
FileEntity fileStatus = fileStatusPersistenceService.getStatus(fileId);
|
||||||
websocketService.sendFileEvent(fileStatus.getDossierId(), fileId, FileEventType.UPDATE);
|
websocketService.sendFileEvent(fileStatus.getDossierId(), fileId, FileEventType.UPDATE);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user