package jnpf.bizcommon.onlyoffice.service.impl; import jnpf.dmsEntity.preview.model.DmsFilePreviewTicket; import jnpf.exception.DataException; import jnpf.onlyoffice.DmsPreviewPdfRequest; import jnpf.util.TicketUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.function.Function; @Service public class DmsOnlyOfficePreviewService { private final OnlyOfficeDmsPrintRenderer renderer; private final DmsOnlyOfficePrintPdfComposer composer; private final Function ticketReader; @Autowired public DmsOnlyOfficePreviewService(OnlyOfficeDmsPrintRenderer renderer, DmsOnlyOfficePrintPdfComposer composer) { this(renderer, composer, TicketUtil::parseTicket); } DmsOnlyOfficePreviewService(OnlyOfficeDmsPrintRenderer renderer, DmsOnlyOfficePrintPdfComposer composer, Function ticketReader) { this.renderer = renderer; this.composer = composer; this.ticketReader = ticketReader; } public byte[] render(DmsPreviewPdfRequest request) { if (request == null || request.getFileVersionId() == null || request.getAccessTicket() == null || request.getAccessTicket().isBlank()) { throw new DataException("缺少 DMS 预览 PDF 转换参数"); } DmsFilePreviewTicket ticket; try { ticket = DmsFilePreviewTicket.fromRaw(ticketReader.apply(request.getAccessTicket())); } catch (RuntimeException exception) { throw new DataException("DMS 预览票据无效或已过期"); } if (!DmsFilePreviewTicket.SCOPE.equals(ticket.getScope()) || !request.getFileVersionId().equals(ticket.getFileVersionId())) { throw new DataException("DMS 预览票据与文件版本不匹配"); } byte[] basePdf = renderer.renderBase(ticket, request.getAccessTicket()); return composer.composePreview(basePdf, ticket); } }