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 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"), ""))); } }