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<WorkflowFileGrant> 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();
|
}
|
}
|