package jnpf.dmsService; import jnpf.base.ActionResult; import jnpf.base.ActionResultCode; import jnpf.dmsEntity.preview.enums.DmsPreviewFormat; import jnpf.dmsEntity.preview.enums.DmsWatermarkTargetType; import jnpf.dmsEntity.preview.model.DmsFilePreviewTicket; import jnpf.dmsService.file.DmsOnlyOfficePrepareApi; import jnpf.exception.DataException; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @Component @RequiredArgsConstructor public class DmsPreviewPreparationClient { private final DmsOnlyOfficePrepareApi prepareApi; public DmsFilePreviewTicket prepare(DmsFilePreviewTicket ticket) { DmsWatermarkTargetType targetType = DmsWatermarkTargetType.from( ticket.getFileName(), ticket.getMimeType()); if (targetType == DmsWatermarkTargetType.IMAGE) { return ticket; } boolean customBarcode = ticket.getWatermarks() != null && ticket.getWatermarks().stream() .anyMatch(mark -> mark != null && Boolean.TRUE.equals(mark.getCustomBarcode())); boolean pdfRequested = DmsPreviewFormat.PDF == ticket.getPreviewFormat(); boolean docxCustomBarcode = customBarcode && targetType == DmsWatermarkTargetType.DOCX; if ((!pdfRequested && !docxCustomBarcode) || targetType == DmsWatermarkTargetType.PDF) { return ticket; } ActionResult result = prepareApi.prepare(ticket); if (result == null || !ActionResultCode.SUCCESS.getCode().equals(result.getCode()) || result.getData() == null) { throw new DataException(result == null || result.getMsg() == null ? "预览 PDF 生成失败" : result.getMsg()); } return result.getData(); } }