package jnpf.bizcommon.onlyoffice.service.impl; import jnpf.base.ActionResult; import jnpf.base.ActionResultCode; import jnpf.exception.DataException; import jnpf.file.WorkflowFileTicketApi; import jnpf.model.fileaccess.WorkflowFileGrant; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; import java.util.Objects; /** 通用上传字段的受控预览,与 onlineEdit 开关及编辑租约独立。 */ @Component @RequiredArgsConstructor public class WorkflowFilePreviewConfigBuilder implements OnlyOfficeSceneConfigBuilder { public static final String SCENE = "workflow.uploadPreview"; public static final String MODULE = "workflow-file-preview"; private final WorkflowFileTicketApi tickets; @Override public String scene() { return SCENE; } @Override public String bizModule() { return MODULE; } @Override public OnlyOfficeSceneBuildPlan build(OnlyOfficeSceneBuildContext context) { String ticket = context.getParam().getFileId(); if (!"annex".equals(context.getParam().getFileType()) || !("view".equals(context.getParam().getMode()) || "viewComments".equals(context.getParam().getMode())) || !Objects.equals(ticket, context.getParam().getBizDataId()) || ticket == null || !ticket.matches("[A-Za-z0-9_-]+")) throw new DataException("流程附件预览上下文无效"); ActionResult response = tickets.previewAccess(ticket); if (response == null || !ActionResultCode.SUCCESS.getCode().equals(response.getCode()) || response.getData() == null || response.getData().getFile() == null || !(response.getData().getFile().get("fileId") instanceof String) || ((String) response.getData().getFile().get("fileId")).isBlank() || !Objects.equals(context.getParam().getFileName(), response.getData().getFile().get("name"))) throw new DataException("附件预览权限已变化,请重新打开"); return OnlyOfficeSceneBuildPlan.builder().editAdmission(() -> false) .uploadFileAllowDownload(response.getData().isAllowDownload()) .sourceFileId((String) response.getData().getFile().get("fileId")).build(); } }