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<String, Object> ticketReader;
|
|
@Autowired
|
public DmsOnlyOfficePreviewService(OnlyOfficeDmsPrintRenderer renderer,
|
DmsOnlyOfficePrintPdfComposer composer) {
|
this(renderer, composer, TicketUtil::parseTicket);
|
}
|
|
DmsOnlyOfficePreviewService(OnlyOfficeDmsPrintRenderer renderer,
|
DmsOnlyOfficePrintPdfComposer composer,
|
Function<String, Object> 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);
|
}
|
}
|