package jnpf.dmsService.search;
|
|
import jnpf.dmsEntity.search.model.DmsSearchIndexSource;
|
import jnpf.dmsMapper.DmsSearchIndexSourceMapper;
|
import jnpf.dmsService.search.extract.DmsTextExtractionResult;
|
import jnpf.dmsService.search.extract.DmsTextExtractionService;
|
import jnpf.dmsService.search.file.DmsSearchFileSourceService;
|
import jnpf.dmsService.search.file.DmsTemporarySearchFile;
|
import jnpf.dmsService.search.meili.DmsSearchIndexDocument;
|
import jnpf.dmsService.search.ocr.DmsOcrAdapter;
|
import jnpf.dmsService.search.ocr.DmsOcrAdapterRegistry;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.stereotype.Service;
|
|
import java.io.IOException;
|
import java.util.Optional;
|
|
@Service
|
@RequiredArgsConstructor
|
public class DmsSearchIndexProcessor {
|
private final DmsSearchIndexSourceMapper sourceMapper;
|
private final DmsSearchFileSourceService fileSourceService;
|
private final DmsTextExtractionService extractionService;
|
private final DmsOcrAdapterRegistry ocrAdapterRegistry;
|
private final DmsSearchIndexWriter writer;
|
|
public void process(DmsSearchIndexTask task) throws IOException {
|
DmsSearchIndexSource source = sourceMapper.selectSource(task.getTenantId(),
|
task.getDocumentId(), task.getFileVersionId());
|
if (source == null) {
|
return; // No longer current; expiry cleanup has its own durable retry.
|
}
|
try (DmsTemporarySearchFile file = fileSourceService.fetch(task)) {
|
DmsTextExtractionResult extraction = extractionService.extract(
|
file.getPath(), file.getFileName());
|
String content = extraction.getText();
|
if (extraction.isOcrRequired()) {
|
Optional<DmsOcrAdapter> adapter = ocrAdapterRegistry.configuredAdapter();
|
if (adapter.isPresent()) {
|
content = adapter.get().extract(file.getPath(), file.getFileName(), file.getMimeType());
|
}
|
}
|
writer.publish(document(task, source, content));
|
}
|
}
|
|
private DmsSearchIndexDocument document(DmsSearchIndexTask task,
|
DmsSearchIndexSource source, String content) {
|
DmsSearchIndexDocument document = new DmsSearchIndexDocument();
|
document.setId(source.getFileVersionId().toString());
|
document.setTenantId(source.getTenantId());
|
document.setDocumentId(source.getDocumentId().toString());
|
document.setFileVersionId(source.getFileVersionId().toString());
|
document.setFolderId(source.getFolderId() == null ? null : source.getFolderId().toString());
|
document.setFolderPath(source.getFolderPath());
|
document.setDocumentNo(source.getDocumentNo());
|
document.setTitle(source.getDocumentName());
|
document.setDocumentType(source.getDocumentType());
|
document.setResponsibleDeptId(source.getResponsibleDeptId());
|
document.setVersionLabel(source.getVersionLabel());
|
document.setFileName(source.getFileName());
|
document.setMimeType(source.getMimeType());
|
document.setLifecycleStatus(source.getLifecycleStatus());
|
document.setCreatedAt(source.getCreatedAt());
|
document.setContentChecksum(task.getChecksumSha256());
|
document.setContent(content == null ? "" : content);
|
return document;
|
}
|
}
|