刘光辉
8 小时以前 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
package jnpf.base.service;
 
import jnpf.flowable.model.filepermission.FilePermissionView;
import java.util.Map;
import java.util.Objects;
 
/** 仅消费权限专用原生查询的服务端状态,不读取请求体中的flowState/isNew。 */
public final class FilePermissionNativeDraft {
    public static final String STATE_KEY = "__filePermissionNativeState";
    private FilePermissionNativeDraft() { }
 
    public static boolean taskAbsent(FilePermissionView view, String taskId, String formId) {
        return view != null && Objects.equals(taskId, view.getTaskId()) && Objects.equals(formId, view.getFormId())
                && view.isEnabled() && "error".equals(view.getStatus()) && "TASK_NOT_FOUND".equals(view.getReason());
    }
 
    public static boolean matches(Map<String, Object> persisted, String recordId, String taskId) {
        if (persisted == null || recordId == null || recordId.isEmpty() || taskId == null || taskId.isEmpty()
                || !Objects.equals(recordId, Objects.toString(persisted.get("id"), ""))
                || !Objects.equals(taskId, Objects.toString(persisted.get("flowTaskId"), ""))) return false;
        Object raw = persisted.get(STATE_KEY);
        if (!(raw instanceof Map<?, ?>)) return false;
        Map<?, ?> state = (Map<?, ?>) raw;
        if (!state.containsKey("deleteMark") || state.get("deleteMark") != null
                || !state.containsKey("flowState") || !state.containsKey("flowId")) return false;
        // 原生菜单暂存有flowId、flowState=0,但尚未INSERT workflow_task。
        if (!Objects.toString(state.get("flowId"), "").trim().isEmpty()) {
            return "0".equals(Objects.toString(state.get("flowState"), ""));
        }
        // 普通原生表单也把业务主键写入flowTaskId;仍须后续原生表单准入。
        return Objects.equals(recordId, taskId) && (state.get("flowState") == null
                || "0".equals(Objects.toString(state.get("flowState"), "")));
    }
}