刘光辉
3 小时以前 06f314545ac3514d7ce28939920866ae8188d31c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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();
    }
}