package jnpf.fileStorage.dms; import jnpf.dms.DmsPersistentPdfRecoveryApi; import jnpf.dmsEntity.download.model.DmsFileDownloadTicket; import jnpf.dmsEntity.preview.model.DmsFilePreviewTicket; import jnpf.dmsEntity.storage.form.DmsPersistentPdfInvalidationForm; import jnpf.dmsEntity.storage.model.DmsPersistentPdfSource; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import java.util.UUID; @Slf4j @Component @RequiredArgsConstructor public class DmsPersistentPdfRecoveryReporter { private static final String SERVICE_ID = "jnpf-file"; private final DmsPersistentPdfRecoveryApi recoveryApi; public void report(DmsFilePreviewTicket ticket, String reason) { if (ticket == null) return; report(ticket.getTenantId(), ticket.getFileVersionId(), ticket.getPdfSource(), reason); } public void report(DmsFileDownloadTicket ticket, String reason) { if (ticket == null) return; report(ticket.getTenantId(), ticket.getFileVersionId(), ticket.getPdfSource(), reason); } private void report(String tenantId, UUID fileVersionId, DmsPersistentPdfSource source, String reason) { if (source == null || source.getObjectKey() == null || source.getSourceChecksumSha256() == null) return; DmsPersistentPdfInvalidationForm form = new DmsPersistentPdfInvalidationForm(); form.setTenantId(tenantId); form.setFileVersionId(fileVersionId); form.setSourceChecksumSha256(source.getSourceChecksumSha256()); form.setObjectKey(source.getObjectKey()); form.setReason(reason); try { recoveryApi.invalidate(SERVICE_ID, form); } catch (Exception exception) { log.warn("上报 DMS 持久化 PDF 失效失败,不影响当前文件访问: fileVersionId={}, objectKey={}", fileVersionId, source.getObjectKey(), exception); } } }