diff --git a/pom.xml b/pom.xml index ff37f2d72..b9cc62063 100644 --- a/pom.xml +++ b/pom.xml @@ -31,6 +31,7 @@ 7.10.2 2.0.0 2.5.0 + 0.0.1-SNAPSHOT @@ -74,7 +75,7 @@ ${project.groupId} workflow-engine-common - ${project.version} + ${workflow-engine-common.version} ${project.groupId} diff --git a/workflow-engine-api/pom.xml b/workflow-engine-api/pom.xml index 11ba8fffc..5bf3c9f5c 100644 --- a/workflow-engine-api/pom.xml +++ b/workflow-engine-api/pom.xml @@ -21,7 +21,7 @@ ${project.groupId} workflow-engine-common - ${project.version} + ${workflow-engine-common.version} io.github.openfeign diff --git a/workflow-engine-axzo-ext/pom.xml b/workflow-engine-axzo-ext/pom.xml index f59afb25c..059eddb85 100644 --- a/workflow-engine-axzo-ext/pom.xml +++ b/workflow-engine-axzo-ext/pom.xml @@ -14,7 +14,7 @@ cn.axzo.workflow workflow-engine-common - ${project.version} + ${workflow-engine-common.version} cn.axzo.basics diff --git a/workflow-engine-common/pom.xml b/workflow-engine-common/pom.xml index f02bb046b..8b7641ac1 100644 --- a/workflow-engine-common/pom.xml +++ b/workflow-engine-common/pom.xml @@ -12,6 +12,7 @@ workflow-engine-common jar workflow Engine Common + ${workflow-engine-common.version} diff --git a/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/api/WorkflowCoreService.java b/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/api/WorkflowCoreService.java index 0ee910c9a..d44ce9b76 100644 --- a/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/api/WorkflowCoreService.java +++ b/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/api/WorkflowCoreService.java @@ -5,47 +5,30 @@ import cn.axzo.workflow.common.util.ThreadUtil; import static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.ASYNC; import static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.SYNC; import cn.axzo.workflow.client.annotation.WorkflowEngineFeignClient; -import cn.axzo.workflow.common.annotation.Manageable; -import cn.azxo.framework.common.model.CommonResponse; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestParam; import cn.axzo.workflow.common.annotation.InvokeMode; +import cn.axzo.workflow.common.annotation.Manageable; import cn.axzo.workflow.common.model.request.bpmn.activity.BpmnActivityTimeoutCallbackDTO; import cn.axzo.workflow.common.model.request.bpmn.activity.BpmnActivityTimeoutTriggerDTO; import cn.axzo.workflow.common.model.request.bpmn.task.BpmnActivitySetAssigneeDTO; import cn.axzo.workflow.common.model.request.bpmn.task.BpmnActivityTriggerDTO; +import cn.azxo.framework.common.model.CommonResponse; import io.swagger.v3.oas.annotations.Operation; import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; import javax.validation.constraints.NotBlank; -import cn.axzo.workflow.common.model.request.bpmn.task.BpmnNodeBackSystemOperateDTO; -import cn.axzo.workflow.common.model.request.bpmn.task.BpmnOptionalNodeDTO; -import cn.axzo.workflow.common.model.request.bpmn.task.BpmnRobotTaskCompleteDTO; -import cn.axzo.workflow.common.model.request.bpmn.task.BpmnRobotTaskCreateDTO; -import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAttachmentDTO; -import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditDTO; -import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditWithFormDTO; -import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskBackAuditDTO; -import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskCommentDTO; -import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskCountersignDTO; -import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskPageSearchDTO; -import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskRemindDTO; -import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskResetApproversDTO; -import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskTransferDTO; -import cn.axzo.workflow.common.model.response.BpmPageResult; -import cn.axzo.workflow.common.model.response.bpmn.BatchOperationResultVO; -import cn.axzo.workflow.common.model.response.bpmn.task.BpmnHistoricTaskInstanceGroupVO; -import cn.axzo.workflow.common.model.response.bpmn.task.BpmnHistoricTaskInstanceVO; -import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskDonePageItemVO; -import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskInstanceVO; -import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskTodoPageItemVO; -import javax.annotation.Nullable; -import javax.validation.constraints.NotEmpty; +import cn.axzo.workflow.common.model.request.form.definition.StartFormSearchDTO; +import cn.axzo.workflow.common.model.request.form.instance.FormDetailDTO; +import cn.axzo.workflow.common.model.request.form.instance.FormSearchDTO; +import cn.axzo.workflow.common.model.response.form.FormVO; +import cn.axzo.workflow.common.model.response.form.definition.FormDefinitionVO; +import cn.axzo.workflow.common.model.response.form.instance.FormInstanceVO; import java.util.List; -import java.util.Map; import cn.axzo.workflow.common.model.dto.SignFileDTO; import cn.axzo.workflow.common.model.dto.SimpleDocDTO; +import cn.axzo.workflow.common.model.request.bpmn.log.LogApproveSearchDTO; import cn.axzo.workflow.common.model.request.bpmn.process.BeforeProcessInstanceCreateDTO; import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO; import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAdminPageReqVO; @@ -62,10 +45,13 @@ import cn.axzo.workflow.common.model.request.bpmn.process.doc.ChangeApproverRead import cn.axzo.workflow.common.model.request.bpmn.process.doc.ProcessDocQueryDTO; import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskButtonSearchDTO; import cn.axzo.workflow.common.model.request.form.instance.FormVariablesUpdateDTO; +import cn.axzo.workflow.common.model.response.BpmPageResult; +import cn.axzo.workflow.common.model.response.bpmn.BatchOperationResultVO; import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceAdminPageItemVO; import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceLogVO; import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstancePageItemVO; import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceVO; +import cn.axzo.workflow.common.model.response.bpmn.process.ExtProcessLogVO; import cn.axzo.workflow.common.model.response.bpmn.process.NodesByModelVO; import cn.axzo.workflow.common.model.response.bpmn.process.ProcessNodeDetailVO; import cn.axzo.workflow.common.model.response.bpmn.process.doc.DocPendingVO; @@ -73,7 +59,29 @@ import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskButtonVo; import com.fasterxml.jackson.databind.node.ObjectNode; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PutMapping; +import javax.annotation.Nullable; import javax.validation.constraints.NotNull; +import java.util.Map; +import cn.axzo.workflow.common.model.request.bpmn.task.BpmnNodeBackSystemOperateDTO; +import cn.axzo.workflow.common.model.request.bpmn.task.BpmnOptionalNodeDTO; +import cn.axzo.workflow.common.model.request.bpmn.task.BpmnRobotTaskCompleteDTO; +import cn.axzo.workflow.common.model.request.bpmn.task.BpmnRobotTaskCreateDTO; +import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAttachmentDTO; +import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditDTO; +import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditWithFormDTO; +import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskBackAuditDTO; +import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskCommentDTO; +import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskCountersignDTO; +import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskPageSearchDTO; +import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskRemindDTO; +import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskResetApproversDTO; +import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskTransferDTO; +import cn.axzo.workflow.common.model.response.bpmn.task.BpmnHistoricTaskInstanceGroupVO; +import cn.axzo.workflow.common.model.response.bpmn.task.BpmnHistoricTaskInstanceVO; +import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskDonePageItemVO; +import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskInstanceVO; +import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskTodoPageItemVO; +import javax.validation.constraints.NotEmpty; /** * Workflow Engine Starter Core Service @@ -119,160 +127,26 @@ public interface WorkflowCoreService { Boolean setAssignee(@Validated @RequestBody BpmnActivitySetAssigneeDTO dto); /** - * 同意 - * - *
-     * MQ 触发规则:
-     *  1. 当前审批任务会依次触发 process-task-completed 和 process-task-deleted 事件(如果有下一级审批,则会触发第 2.1 点中的事件,
-     *  如果当前审核任务最后一级审批,则会触发第 2.2 点中的事件)
-     *  2.1. 下一级审批任务会依次触发 process-task-assigned 和 process-task-created 事件
-     *  2.2. 流程实例正常结束会触发 process-instance-completed 事件
-     * 
+ * 获取指定审批业务的流程表单设置, + * @param dto + * @return */ - @Operation(summary = "同意,MQ 触发规则:1. 当前审批任务会依次触发 process-task-completed 和 process-task-deleted 事件(如果有下一级审批,则会触发第 2.1 点中的事件,如果当前审核任务最后一级审批,则会触发第 2.2 点中的事件),2.1. 下一级审批任务会依次触发 process-task-assigned 和 process-task-created 事件,2.2. 流程实例正常结束会触发 process-instance-completed 事件") - @PostMapping("/api/process/task/approve") - Boolean approveTask(@Validated @RequestBody BpmnTaskAuditDTO dto); + @PostMapping("/api/form/admin/start/form") + @InvokeMode(SYNC) + FormDefinitionVO getFormDefinition(@Validated @RequestBody StartFormSearchDTO dto); /** - * 同意时并提交表单数据 + * 查询指定审批实例的表单模型和数据 + *

+ * dto 中的 processInstanceId 与 taskId,至少有一个属性有值,一般建议直接使用实例 ID。 + * 当传入 taskId 时,将只查询该任务绑定的表单模型和数据。 * * @param dto * @return */ - @Operation(summary = "同意时并提交表单") - @PostMapping("/api/process/task/form/approve") - Boolean approveTaskWithForm(@Validated @RequestBody BpmnTaskAuditWithFormDTO dto); - - /** - * 批量同意 - * - * @param dtos - * @return - */ - @Operation(summary = "批量同意") - @PostMapping("/api/process/task/batch/approve") - BatchOperationResultVO batchApproveTask(@Validated @RequestBody List dtos); - - /** - * 获取当前节点可回退节点选项列表 - * - * @param taskId 当前任务id - * @return 可以回退节点列表 - */ - @Operation(summary = "获取当前节点可回退节点选项列表") - @GetMapping("/api/process/task/back/optional/nodes") - List getBackOptionalNodes(@RequestParam @NotBlank(message = "任务id不能为空") String taskId); - - /** - * 回退到指定节点 - * - * @param dto - * @return - */ - @Operation(summary = "回退") - @PostMapping("/api/process/task/back") - Boolean backTask(@Validated @RequestBody BpmnTaskBackAuditDTO dto); - - /** - * 用于系统内部操作,跳转到指定节点 - * @param dto 请求参数 - * @return 是否成功 - */ - @Operation(summary = "系统操作回退任务到指定节点") - @PostMapping("/api/process/task/system/back") - Boolean systemBackTask(@Validated @RequestBody BpmnNodeBackSystemOperateDTO dto); - - /** - * 驳回 - * - *

-     * MQ 触发规则:
-     *   1. 当前审批任务会触发 process-task-deleted 事件
-     *   2. 当前流程实例会触发 process-instance-rejected 事件
-     * 
- */ - @Operation(summary = "驳回,MQ 触发规则:1. 当前审批任务会触发 process-task-deleted 事件, 2. 当前流程实例会触发 process-instance-rejected 事件") - @PostMapping("/api/process/task/reject") - Boolean rejectTask(@Validated @RequestBody BpmnTaskAuditDTO dto); - - /** - * 批量驳回 - * - * @param dtos 批量请求参数 - * @return - */ - @PostMapping("/api/process/task/batch/reject") - BatchOperationResultVO batchRejectTask(@Validated @RequestBody List dtos); - - /** - * 转交 - * - * @param dto - * @return - */ - @Operation(summary = "直接修改审批任务的审批人") - @PostMapping("/api/process/task/transfer") - Boolean transferTask(@Validated @RequestBody BpmnTaskTransferDTO dto); - - /** - * 批量转交 - * - * @param dtos - * @return - */ - @Operation(summary = "批量修改审批任务的审批人") - @PostMapping("/api/process/task/batch/transfer") - BatchOperationResultVO batchTransferTask(@Validated @RequestBody List dtos); - - /** - * 评论 - * - * @param dto 评论请求参数 - * @return - */ - @Operation(summary = "审批流程评论") - @PostMapping("/api/process/task/comment") - Boolean commentTask(@Validated @RequestBody BpmnTaskCommentDTO dto); - - /** - * 加签 - * - * @param dto 加签请求参数 - * @return - */ - @Operation(summary = "审批流程加签") - @PostMapping("/api/process/task/countersign") - Boolean countersignTask(@Validated @RequestBody BpmnTaskCountersignDTO dto); - - /** - * 重置节点审批人(提级审批) - * - * @param dto - * @return - */ - @Operation(summary = "重置节点审批人(提级审批)") - @PostMapping("/api/process/task/approvers/reset") - Boolean resetTaskApprovers(@Validated @RequestBody BpmnTaskResetApproversDTO dto); - - /** - * 暂停流程任务,并创建机器人节点,等待业务推动 - * - * @param dto - * @return 返回机器人节点任务 ID - */ - @Operation(summary = "创建机器人节点, 暂停流程任务") - @PostMapping("/api/process/task/robot/create") - String createRobotTask(@Validated @RequestBody BpmnRobotTaskCreateDTO dto); - - /** - * 完成机器人节点 - * - * @param dto - * @return - */ - @Operation(summary = "完成机器人节点, 继续流程任务") - @PostMapping("/api/process/task/robot/complete") - Boolean completeRobotTask(@Validated @RequestBody BpmnRobotTaskCompleteDTO dto); + @PostMapping("/api/form/admin/instance/render") + @InvokeMode(SYNC) + FormInstanceVO getFormInstance(@Validated @RequestBody FormDetailDTO dto); /** * 创建流程前的节点列表 @@ -442,6 +316,163 @@ public interface WorkflowCoreService { @InvokeMode(SYNC) List getProcessInstanceFinalDocs(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam(required = false) String processInstanceId); + /** + * 同意 + * + *
+     * MQ 触发规则:
+     *  1. 当前审批任务会依次触发 process-task-completed 和 process-task-deleted 事件(如果有下一级审批,则会触发第 2.1 点中的事件,
+     *  如果当前审核任务最后一级审批,则会触发第 2.2 点中的事件)
+     *  2.1. 下一级审批任务会依次触发 process-task-assigned 和 process-task-created 事件
+     *  2.2. 流程实例正常结束会触发 process-instance-completed 事件
+     * 
+ */ + @Operation(summary = "同意,MQ 触发规则:1. 当前审批任务会依次触发 process-task-completed 和 process-task-deleted 事件(如果有下一级审批,则会触发第 2.1 点中的事件,如果当前审核任务最后一级审批,则会触发第 2.2 点中的事件),2.1. 下一级审批任务会依次触发 process-task-assigned 和 process-task-created 事件,2.2. 流程实例正常结束会触发 process-instance-completed 事件") + @PostMapping("/api/process/task/approve") + Boolean approveTask(@Validated @RequestBody BpmnTaskAuditDTO dto); + + /** + * 同意时并提交表单数据 + * + * @param dto + * @return + */ + @Operation(summary = "同意时并提交表单") + @PostMapping("/api/process/task/form/approve") + Boolean approveTaskWithForm(@Validated @RequestBody BpmnTaskAuditWithFormDTO dto); + + /** + * 批量同意 + * + * @param dtos + * @return + */ + @Operation(summary = "批量同意") + @PostMapping("/api/process/task/batch/approve") + BatchOperationResultVO batchApproveTask(@Validated @RequestBody List dtos); + + /** + * 获取当前节点可回退节点选项列表 + * + * @param taskId 当前任务id + * @return 可以回退节点列表 + */ + @Operation(summary = "获取当前节点可回退节点选项列表") + @GetMapping("/api/process/task/back/optional/nodes") + List getBackOptionalNodes(@RequestParam @NotBlank(message = "任务id不能为空") String taskId); + + /** + * 回退到指定节点 + * + * @param dto + * @return + */ + @Operation(summary = "回退") + @PostMapping("/api/process/task/back") + Boolean backTask(@Validated @RequestBody BpmnTaskBackAuditDTO dto); + + /** + * 用于系统内部操作,跳转到指定节点 + * + * @param dto 请求参数 + * @return 是否成功 + */ + @Operation(summary = "系统操作回退任务到指定节点") + @PostMapping("/api/process/task/system/back") + Boolean systemBackTask(@Validated @RequestBody BpmnNodeBackSystemOperateDTO dto); + + /** + * 驳回 + * + *
+     * MQ 触发规则:
+     *   1. 当前审批任务会触发 process-task-deleted 事件
+     *   2. 当前流程实例会触发 process-instance-rejected 事件
+     * 
+ */ + @Operation(summary = "驳回,MQ 触发规则:1. 当前审批任务会触发 process-task-deleted 事件, 2. 当前流程实例会触发 process-instance-rejected 事件") + @PostMapping("/api/process/task/reject") + Boolean rejectTask(@Validated @RequestBody BpmnTaskAuditDTO dto); + + /** + * 批量驳回 + * + * @param dtos 批量请求参数 + * @return + */ + @PostMapping("/api/process/task/batch/reject") + BatchOperationResultVO batchRejectTask(@Validated @RequestBody List dtos); + + /** + * 转交 + * + * @param dto + * @return + */ + @Operation(summary = "直接修改审批任务的审批人") + @PostMapping("/api/process/task/transfer") + Boolean transferTask(@Validated @RequestBody BpmnTaskTransferDTO dto); + + /** + * 批量转交 + * + * @param dtos + * @return + */ + @Operation(summary = "批量修改审批任务的审批人") + @PostMapping("/api/process/task/batch/transfer") + BatchOperationResultVO batchTransferTask(@Validated @RequestBody List dtos); + + /** + * 评论 + * + * @param dto 评论请求参数 + * @return + */ + @Operation(summary = "审批流程评论") + @PostMapping("/api/process/task/comment") + Boolean commentTask(@Validated @RequestBody BpmnTaskCommentDTO dto); + + /** + * 加签 + * + * @param dto 加签请求参数 + * @return + */ + @Operation(summary = "审批流程加签") + @PostMapping("/api/process/task/countersign") + Boolean countersignTask(@Validated @RequestBody BpmnTaskCountersignDTO dto); + + /** + * 重置节点审批人(提级审批) + * + * @param dto + * @return + */ + @Operation(summary = "重置节点审批人(提级审批)") + @PostMapping("/api/process/task/approvers/reset") + Boolean resetTaskApprovers(@Validated @RequestBody BpmnTaskResetApproversDTO dto); + + /** + * 暂停流程任务,并创建机器人节点,等待业务推动 + * + * @param dto + * @return 返回机器人节点任务 ID + */ + @Operation(summary = "创建机器人节点, 暂停流程任务") + @PostMapping("/api/process/task/robot/create") + String createRobotTask(@Validated @RequestBody BpmnRobotTaskCreateDTO dto); + + /** + * 完成机器人节点 + * + * @param dto + * @return + */ + @Operation(summary = "完成机器人节点, 继续流程任务") + @PostMapping("/api/process/task/robot/complete") + Boolean completeRobotTask(@Validated @RequestBody BpmnRobotTaskCompleteDTO dto); + /** * 强制使用‘异步’模式调用该方法,请在调用真实方法前调用该方法 *
diff --git a/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/api/WorkflowManageService.java b/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/api/WorkflowManageService.java
index b435064bb..f10d3a464 100644
--- a/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/api/WorkflowManageService.java
+++ b/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/api/WorkflowManageService.java
@@ -5,65 +5,34 @@ import cn.axzo.workflow.common.util.ThreadUtil;
 import cn.axzo.workflow.client.annotation.WorkflowEngineFeignClient;
 import cn.axzo.workflow.common.annotation.InvokeMode;
 import cn.axzo.workflow.common.annotation.Manageable;
-import cn.axzo.workflow.common.model.request.bpmn.definition.BpmnProcessDefinitionUpdateDTO;
-import cn.axzo.workflow.common.model.request.bpmn.model.BpmnModelUpdateDTO;
-import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessDefinitionPageDTO;
-import cn.axzo.workflow.common.model.response.BpmPageResult;
-import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessDefinitionVO;
+import cn.axzo.workflow.common.model.dto.print.PrintFieldDTO;
+import cn.axzo.workflow.common.model.request.bpmn.print.PrintFieldQueryDTO;
 import cn.azxo.framework.common.model.CommonResponse;
+import io.swagger.v3.oas.annotations.Operation;
 import org.springframework.validation.annotation.Validated;
 import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import static cn.axzo.workflow.common.constant.BpmnConstants.NO_TENANT_ID;
-import cn.axzo.workflow.common.model.request.bpmn.BpmnButtonMetaInfo;
 import java.util.List;
-import cn.axzo.workflow.common.model.request.es.InstanceSearchReqDTO;
-import cn.axzo.workflow.common.model.response.es.ProcessInstanceDocumentVO;
-import cn.axzo.workflow.common.model.request.category.*;
-import cn.axzo.workflow.common.model.response.category.CategoryConfigItemVO;
-import cn.axzo.workflow.common.model.response.category.CategoryGroupVarItemVo;
-import cn.axzo.workflow.common.model.response.category.CategoryItemVO;
-import org.springframework.web.bind.annotation.*;
-import static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.*;
+import java.util.Map;
+import cn.axzo.workflow.common.model.request.admin.ProcessAdminCreateDTO;
+import cn.axzo.workflow.common.model.request.admin.ProcessAdminDeleteDTO;
+import cn.axzo.workflow.common.model.request.admin.ProcessAdminQueryDTO;
+import cn.axzo.workflow.common.model.response.admin.ProcessAdminVo;
 import cn.axzo.workflow.common.model.request.bpmn.activity.BpmnActivityTimeoutCallbackDTO;
 import cn.axzo.workflow.common.model.request.bpmn.activity.BpmnActivityTimeoutTriggerDTO;
 import cn.axzo.workflow.common.model.request.bpmn.task.BpmnActivitySetAssigneeDTO;
 import cn.axzo.workflow.common.model.request.bpmn.task.BpmnActivityTriggerDTO;
-import io.swagger.v3.oas.annotations.Operation;
-import cn.axzo.workflow.common.model.request.bpmn.RestBpmnProcessVariable;
-import cn.axzo.workflow.common.model.dto.print.PrintFieldDTO;
-import cn.axzo.workflow.common.model.request.bpmn.print.PrintFieldQueryDTO;
-import java.util.Map;
-import cn.axzo.workflow.common.model.request.bpmn.task.BpmnNodeBackSystemOperateDTO;
-import cn.axzo.workflow.common.model.request.bpmn.task.BpmnOptionalNodeDTO;
-import cn.axzo.workflow.common.model.request.bpmn.task.BpmnRobotTaskCompleteDTO;
-import cn.axzo.workflow.common.model.request.bpmn.task.BpmnRobotTaskCreateDTO;
-import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAttachmentDTO;
-import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditDTO;
-import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditWithFormDTO;
-import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskBackAuditDTO;
-import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskCommentDTO;
-import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskCountersignDTO;
-import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskPageSearchDTO;
-import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskRemindDTO;
-import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskResetApproversDTO;
-import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskTransferDTO;
-import cn.axzo.workflow.common.model.response.bpmn.BatchOperationResultVO;
-import cn.axzo.workflow.common.model.response.bpmn.task.BpmnHistoricTaskInstanceGroupVO;
-import cn.axzo.workflow.common.model.response.bpmn.task.BpmnHistoricTaskInstanceVO;
-import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskDonePageItemVO;
-import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskInstanceVO;
-import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskTodoPageItemVO;
-import javax.annotation.Nullable;
-import javax.validation.constraints.NotEmpty;
 import cn.axzo.workflow.common.model.request.form.definition.StartFormSearchDTO;
 import cn.axzo.workflow.common.model.request.form.instance.FormDetailDTO;
 import cn.axzo.workflow.common.model.request.form.instance.FormSearchDTO;
 import cn.axzo.workflow.common.model.response.form.FormVO;
 import cn.axzo.workflow.common.model.response.form.definition.FormDefinitionVO;
 import cn.axzo.workflow.common.model.response.form.instance.FormInstanceVO;
+import cn.axzo.workflow.common.model.request.es.InstanceSearchReqDTO;
+import cn.axzo.workflow.common.model.response.BpmPageResult;
+import cn.axzo.workflow.common.model.response.es.ProcessInstanceDocumentVO;
 import cn.axzo.workflow.common.model.dto.SignFileDTO;
 import cn.axzo.workflow.common.model.dto.SimpleDocDTO;
+import cn.axzo.workflow.common.model.request.bpmn.log.LogApproveSearchDTO;
 import cn.axzo.workflow.common.model.request.bpmn.process.BeforeProcessInstanceCreateDTO;
 import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO;
 import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAdminPageReqVO;
@@ -80,17 +49,29 @@ import cn.axzo.workflow.common.model.request.bpmn.process.doc.ChangeApproverRead
 import cn.axzo.workflow.common.model.request.bpmn.process.doc.ProcessDocQueryDTO;
 import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskButtonSearchDTO;
 import cn.axzo.workflow.common.model.request.form.instance.FormVariablesUpdateDTO;
+import cn.axzo.workflow.common.model.response.bpmn.BatchOperationResultVO;
 import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceAdminPageItemVO;
 import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceLogVO;
 import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstancePageItemVO;
 import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceVO;
+import cn.axzo.workflow.common.model.response.bpmn.process.ExtProcessLogVO;
 import cn.axzo.workflow.common.model.response.bpmn.process.NodesByModelVO;
 import cn.axzo.workflow.common.model.response.bpmn.process.ProcessNodeDetailVO;
 import cn.axzo.workflow.common.model.response.bpmn.process.doc.DocPendingVO;
 import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskButtonVo;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import javax.annotation.Nullable;
+import javax.validation.constraints.NotNull;
+import cn.axzo.workflow.common.model.request.category.*;
+import cn.axzo.workflow.common.model.response.category.CategoryConfigItemVO;
+import cn.axzo.workflow.common.model.response.category.CategoryGroupVarItemVo;
+import cn.axzo.workflow.common.model.response.category.CategoryItemVO;
+import org.springframework.web.bind.annotation.*;
+import static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.*;
+import cn.axzo.workflow.common.model.request.bpmn.BpmnButtonMetaInfo;
 import cn.axzo.workflow.common.model.request.bpmn.model.BpmnModelCreateDTO;
 import cn.axzo.workflow.common.model.request.bpmn.model.BpmnModelSearchDTO;
+import cn.axzo.workflow.common.model.request.bpmn.model.BpmnModelUpdateDTO;
 import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocByIdDTO;
 import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocCreateDTO;
 import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocOrderDTO;
@@ -107,10 +88,31 @@ import cn.axzo.workflow.common.model.response.bpmn.model.BpmnModelDetailVO;
 import cn.axzo.workflow.common.model.response.bpmn.model.BpmnModelExtVO;
 import cn.axzo.workflow.common.model.response.bpmn.model.doc.DocBaseVO;
 import cn.axzo.workflow.common.model.response.print.PrintModelDTO;
-import cn.axzo.workflow.common.model.request.admin.ProcessAdminCreateDTO;
-import cn.axzo.workflow.common.model.request.admin.ProcessAdminDeleteDTO;
-import cn.axzo.workflow.common.model.request.admin.ProcessAdminQueryDTO;
-import cn.axzo.workflow.common.model.response.admin.ProcessAdminVo;
+import cn.axzo.workflow.common.model.request.bpmn.RestBpmnProcessVariable;
+import cn.axzo.workflow.common.model.request.bpmn.task.BpmnNodeBackSystemOperateDTO;
+import cn.axzo.workflow.common.model.request.bpmn.task.BpmnOptionalNodeDTO;
+import cn.axzo.workflow.common.model.request.bpmn.task.BpmnRobotTaskCompleteDTO;
+import cn.axzo.workflow.common.model.request.bpmn.task.BpmnRobotTaskCreateDTO;
+import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAttachmentDTO;
+import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditDTO;
+import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditWithFormDTO;
+import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskBackAuditDTO;
+import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskCommentDTO;
+import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskCountersignDTO;
+import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskPageSearchDTO;
+import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskRemindDTO;
+import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskResetApproversDTO;
+import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskTransferDTO;
+import cn.axzo.workflow.common.model.response.bpmn.task.BpmnHistoricTaskInstanceGroupVO;
+import cn.axzo.workflow.common.model.response.bpmn.task.BpmnHistoricTaskInstanceVO;
+import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskDonePageItemVO;
+import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskInstanceVO;
+import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskTodoPageItemVO;
+import javax.validation.constraints.NotEmpty;
+import cn.axzo.workflow.common.model.request.bpmn.definition.BpmnProcessDefinitionUpdateDTO;
+import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessDefinitionPageDTO;
+import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessDefinitionVO;
+import static cn.axzo.workflow.common.constant.BpmnConstants.NO_TENANT_ID;
 
 /**
  * Workflow Engine Starter Management Service
@@ -122,91 +124,225 @@ import cn.axzo.workflow.common.model.response.admin.ProcessAdminVo;
 @org.springframework.cloud.openfeign.FeignClient(name = "workflow-engine", url = "${axzo.service.workflow-engine:http://workflow-engine:8080}", configuration = WorkflowEngineStarterFeignConfiguration.class)
 public interface WorkflowManageService {
 
-    /**
-     * 获取活跃的流程定义分页
-     */
-    @GetMapping("/api/process/definition/page")
+    @Operation(summary = "查询指定审批流程是否能打印,打印开关是否开启,是否存在打印模板")
+    @GetMapping("/api/print/admin/template/exists")
     @InvokeMode(SYNC)
-    BpmPageResult getProcessDefinitionPage(@Validated @RequestBody BpmnProcessDefinitionPageDTO dto);
+    Boolean hasPrintTemplate(@NotBlank(message = "流程实例不能为空") @RequestParam String processInstanceId);
+
+    @Operation(summary = "获取打印模板中可打印的字段")
+    @PostMapping("/api/print/admin/fields")
+    @InvokeMode(SYNC)
+    List getPrintFields(@Validated @RequestBody PrintFieldQueryDTO dto);
+
+    @Operation(summary = "获取指定流程下用于替换打印的相关变量")
+    @GetMapping("/api/print/admin/field/variables")
+    @InvokeMode(SYNC)
+    Map getPrintFieldVariables(@NotBlank(message = "流程实例不能为空") @RequestParam String processInstanceId);
 
     /**
-     * 通过模型 ID 更新流程定义
+     * 查询管理员
+     * @param dto 管理员数据
+     * @return 管理员id
+     */
+    @PostMapping("/api/process/admin/query")
+    @InvokeMode(SYNC)
+    List queryProcessAdmins(@RequestBody ProcessAdminQueryDTO dto);
+
+    /**
+     * 查询管理员
+     * @param dto 管理员数据
+     * @return 管理员id
+     */
+    @PostMapping("/api/process/admin/query/count")
+    @InvokeMode(SYNC)
+    Integer queryProcessAdminsCount(@RequestBody ProcessAdminQueryDTO dto);
+
+    /**
+     * 添加管理员
+     * @param dto 管理员数据
+     * @return 管理员id
+     */
+    @PostMapping("/api/process/admin/create")
+    @InvokeMode(SYNC)
+    Long createProcessAdmin(@RequestBody ProcessAdminCreateDTO dto);
+
+    /**
+     * 批量添加管理员
+     * @param dtos
+     * @return
+     */
+    @PostMapping("/api/process/admin/batch/create")
+    @InvokeMode(SYNC)
+    Void batchCreateProcessAdmin(@RequestBody List dtos);
+
+    /**
+     * 删除管理员
+     * @param id 配置表id
+     * @return
+     */
+    @DeleteMapping("/api/process/admin/delete")
+    @InvokeMode(SYNC)
+    Integer deleteCommonProcessAdmin(@RequestParam Long id);
+
+    /**
+     * 根据条件删除管理员
+     * @param dto 删除条件
+     * @return
+     */
+    @DeleteMapping("/api/process/admin/delete/criteria")
+    @InvokeMode(SYNC)
+    Integer deleteProcessAdminCriteria(@RequestBody ProcessAdminDeleteDTO dto);
+
+    /**
+     * 删除管理员
+     * @param ids 管理员配置id列表
+     * @return
+     */
+    @DeleteMapping("/api/process/admin/batch/delete")
+    @InvokeMode(SYNC)
+    Integer batchDeleteProcessAdmin(@RequestBody List ids);
+
+    /**
+     * 该功能应该利用引擎的 TimerBoundaryEvent 来实现,但为了简便,先利用引擎的任务调度来实现
+     *
+     * @return
+     */
+    @PostMapping("/api/process/activity/timeout/trigger")
+    @Manageable
+    @Operation(summary = "设置指定业务节点定时继续往下执行")
+    Boolean setTimeoutTrigger(@Validated @RequestBody BpmnActivityTimeoutTriggerDTO dto);
+
+    /**
+     * 为指定业务节点设置定时回调
+     *
+     * @return
+     */
+    @Manageable
+    @PostMapping("/api/process/activity/timeout/callback")
+    @Operation(summary = "设置指定业务节点定时回调")
+    Boolean setTimeoutCallback(@Validated @RequestBody BpmnActivityTimeoutCallbackDTO dto);
+
+    @PostMapping("/api/form/admin/form/page")
+    @InvokeMode(SYNC)
+    @Manageable
+    List formPage(@Validated @RequestBody FormSearchDTO dto);
+
+    /**
+     * 从 ES 中搜索符合条件的实例纬度数据
      *
      * @param dto
      * @return
      */
-    @PutMapping("/api/process/definition/update")
+    @PostMapping("/api/es/instance/search")
     @InvokeMode(SYNC)
-    Boolean updateProcessDefinition(@Validated @RequestBody BpmnProcessDefinitionUpdateDTO dto);
+    BpmPageResult searchInstanceInEs(@Validated @RequestBody InstanceSearchReqDTO dto);
+
+    @DeleteMapping("/api/process/instance/super/cancel")
+    @Manageable
+    Boolean superCancelProcessInstance(@Validated @RequestBody SuperBpmnProcessInstanceCancelDTO dto);
 
     /**
-     * 获得指定定义编号对应的流程定义内容
+     * 查询所有的审批流
      *
-     * @param processDefinitionId 编号
-     * @return 流程定义
-     */
-    @GetMapping("/api/process/definition/get")
-    @InvokeMode(SYNC)
-    BpmnProcessDefinitionVO getProcessDefinition(@NotBlank(message = "流程定义 ID 不能为空") @RequestParam String processDefinitionId);
-
-    /**
-     * 获得 deploymentId 对应的 ProcessDefinition
-     *
-     * @param deploymentId 部署编号
-     * @return 流程定义
-     */
-    @GetMapping("/api/process/definition/getByDeploymentId")
-    @InvokeMode(SYNC)
-    BpmnProcessDefinitionVO getProcessDefinitionByDeploymentId(@NotBlank(message = "流程部署 ID 不能为空") @RequestParam String deploymentId);
-
-    /**
-     * 获得流程定义标识对应的激活的流程定义
-     *
-     * @param key 流程定义的标识
-     * @return 流程定义
-     */
-    @GetMapping("/api/process/definition/active/getByKey")
-    @InvokeMode(SYNC)
-    BpmnProcessDefinitionVO getActiveProcessDefinitionByKey(@NotBlank(message = "模型定义KEY不能为空") @RequestParam String key, @RequestParam(required = false, defaultValue = NO_TENANT_ID) String tenantId);
-
-    /**
-     * 挂起/激活流程,
-     * 激活:SuspensionState.ACTIVE.getStateCode()
-     * 挂起:SuspensionState.SUSPENDED.getStateCode()
-     * {@see SuspensionState}
-     */
-    @PutMapping("/api/process/definition/state/update")
-    @InvokeMode(SYNC)
-    Boolean getActiveProcessDefinitionByKey(@NotBlank(message = "流程定义ID不能为空") @RequestParam String processDefinitionId, @NotNull(message = "状态不能为空") @RequestParam Integer state);
-
-    /**
-     * 获取指定模型的定义 ID
-     *
-     * @return 流程定义ID
-     */
-    @GetMapping("/api/process/definition/active/getByCategory")
-    @InvokeMode(SYNC)
-    String getActiveProcessDefinitionId(@RequestParam(required = false) String tenantId, @NotBlank(message = "分类不能为空") @RequestParam(required = false) String category);
-
-    /**
-     * 获取指定模型激活的流程定义 JSON 模型
-     *
-     * @return 流程定义ID
-     */
-    @GetMapping("/api/process/definition/active/json/model")
-    @InvokeMode(SYNC)
-    BpmnModelUpdateDTO getActiveProcessDefinitionJsonModel(@NotBlank(message = "模型 ID 不能为空") @RequestParam(required = false) String modelId, @NotBlank(message = "分类不能为空") @RequestParam(required = false) String key, @RequestParam(required = false) String tenantId);
-
-    /**
-     * 删除流程部署及定义
-     *
-     * @param deploymentId 流程定义部署 ID
-     * @param cascade      是否级联参数定义对应的流程实例及 job 等管理内容
      * @return
      */
-    @GetMapping("/api/process/definition/delete")
+    @Operation(summary = "查询所有的审批流")
+    @PostMapping("/api/process/instance/page/all")
+    @Manageable
     @InvokeMode(SYNC)
-    Void delete(@NotBlank(message = "流程定义部署 ID 不能为空") String deploymentId, @RequestParam(required = false) Boolean cascade);
+    BpmPageResult getAllProcessInstancePage(@Validated @RequestBody BpmnProcessInstanceAdminPageReqVO dto);
+
+    /**
+     * 我发起的审批列表
+     */
+    @Operation(summary = "我发起的审批列表")
+    @PostMapping("/api/process/instance/page/my")
+    @Manageable
+    @InvokeMode(SYNC)
+    BpmPageResult getMyProcessInstancePage(@Validated @RequestBody BpmnProcessInstanceMyPageReqVO dto);
+
+    /**
+     * 更新流程定义的状态
+     *
+     * @param processDefinitionId 流程定义的编号
+     * @param status              1, "active"; 2, "suspended"
+     */
+    @Operation(summary = "更新指定流程定义的版本的状态, 处于 suspended 状态的流程模型将不能再发起实例")
+    @PutMapping("/api/process/instance/status/update")
+    @Manageable
+    @InvokeMode(SYNC)
+    Boolean updateProcessStatus(@NotBlank(message = "流程定义 ID 不能为空") @RequestParam String processDefinitionId, @NotNull(message = "状态不能为空") @RequestParam Integer status);
+
+    /**
+     * 获取审批流程实例的运行图
+     *
+     * @param processInstanceId
+     * @param tenantId
+     * @return
+     */
+    @Operation(summary = "获取审批流程实例的运行图")
+    @GetMapping("/api/process/instance/graphical")
+    @Manageable
+    @InvokeMode(SYNC)
+    ObjectNode processInstanceGraphical(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam String processInstanceId, @Nullable @RequestParam(required = false) String tenantId);
+
+    /**
+     * 推断指定流程实例的所有节点执行顺序
+     *
+     * @return
+     */
+    @Operation(summary = "推断指定流程实例的所有节点执行顺序")
+    @GetMapping("/api/process/instance/node/forecasting")
+    @Manageable
+    @InvokeMode(SYNC)
+    List processInstanceNodeForecast(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam(required = false) String processInstanceId, @Nullable @RequestParam(required = false) String tenantId);
+
+    /**
+     * 推断指定流程实例的过滤掉部分节点执行顺序
+     *
+     * @param allNode 如果为真时,相当于调用 {@link ProcessInstanceApi#processInstanceNodeForecast(String, String)} 方法,切会直接丢弃 nodeDefinitionKeys 参数
+     *                如果为假时,才结合 nodeDefinitionKeys 过滤掉传入的节点
+     * @return
+     */
+    @Operation(summary = "推断指定流程实例的过滤掉部分节点执行顺序")
+    @GetMapping("/api/process/instance/node/filter/forecasting")
+    @Manageable
+    @InvokeMode(SYNC)
+    List processInstanceFilterNodeForecast(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam(required = false) String processInstanceId, @Nullable @RequestParam(required = false) String tenantId, @RequestParam(required = false, defaultValue = "false") Boolean allNode, @Nullable @RequestParam(required = false) List nodeDefinitionKeys);
+
+    /**
+     * 查询实例的租户集合
+     *
+     * @return
+     */
+    @Operation(summary = "查询实例的租户集合")
+    @GetMapping("/api/process/instance/tenant/ids")
+    @Manageable
+    @InvokeMode(SYNC)
+    List getTenantIds();
+
+    /**
+     * 校验指定流程实例下,是否存在指定的审批人正处理待审批
+     *
+     * @return true 是在当前流程实例中,存在指定的审批人
+     */
+    @Operation(summary = "校验指定流程实例下,是否存在指定的审批人")
+    @PostMapping("/api/process/instance/check/approver")
+    @Manageable
+    @InvokeMode(SYNC)
+    Boolean checkInstanceApprover(@Validated @RequestBody BpmnProcessInstanceCheckApproverDTO dto);
+
+    /**
+     * 查询 ExtAxProcessLog 表中审批人的冗余信息
+     *
+     * @param dto
+     * @return
+     */
+    @Operation(summary = "查询 ExtAxProcessLog 表中审批人的冗余信息")
+    @GetMapping("/api/process/instance/log/approve/ext")
+    @Manageable
+    @InvokeMode(SYNC)
+    List getProcessLogByInstanceIdAndPersonId(@Validated @RequestBody LogApproveSearchDTO dto);
 
     /**
      * 将死信队列中的任务转移到正常 JOB 队列中
@@ -240,25 +376,6 @@ public interface WorkflowManageService {
     @Manageable
     String getDeadLetterJobExceptionStacktraceByJobId(@RequestParam String jobId);
 
-    /**
-     * 获取流程操作按钮列表
-     *
-     * @return 流程操作按钮列表
-     */
-    @GetMapping("/api/process/config/button/list")
-    @InvokeMode(SYNC)
-    List getDefaultButtons();
-
-    /**
-     * 从 ES 中搜索符合条件的实例纬度数据
-     *
-     * @param dto
-     * @return
-     */
-    @PostMapping("/api/es/instance/search")
-    @InvokeMode(SYNC)
-    BpmPageResult searchInstanceInEs(@Validated @RequestBody InstanceSearchReqDTO dto);
-
     /**
      * 获取指定业务分类
      *
@@ -414,274 +531,13 @@ public interface WorkflowManageService {
     Boolean upsertCategoryGroupAndVars(@Validated @RequestBody CategoryGroupVarUpsertDto dto);
 
     /**
-     * 该功能应该利用引擎的 TimerBoundaryEvent 来实现,但为了简便,先利用引擎的任务调度来实现
+     * 获取流程操作按钮列表
      *
-     * @return
+     * @return 流程操作按钮列表
      */
-    @PostMapping("/api/process/activity/timeout/trigger")
-    @Manageable
-    @Operation(summary = "设置指定业务节点定时继续往下执行")
-    Boolean setTimeoutTrigger(@Validated @RequestBody BpmnActivityTimeoutTriggerDTO dto);
-
-    /**
-     * 为指定业务节点设置定时回调
-     *
-     * @return
-     */
-    @Manageable
-    @PostMapping("/api/process/activity/timeout/callback")
-    @Operation(summary = "设置指定业务节点定时回调")
-    Boolean setTimeoutCallback(@Validated @RequestBody BpmnActivityTimeoutCallbackDTO dto);
-
-    /**
-     * 为指定流程新增变量
-     */
-    @PostMapping("/api/process/variable/create/{executionId}")
+    @GetMapping("/api/process/config/button/list")
     @InvokeMode(SYNC)
-    Void createVariable(@PathVariable @NotBlank(message = "流程实例 ID 不能为空") String executionId, @RequestBody @Validated RestBpmnProcessVariable restVariable);
-
-    /**
-     * 仅更新流程已存在的变量
-     *
-     * @param executionId
-     * @param restVariable
-     * @return
-     */
-    @PostMapping("/api/process/variable/update/{executionId}")
-    @InvokeMode(SYNC)
-    Void updateVariable(@PathVariable @NotBlank(message = "流程实例 ID 不能为空") String executionId, @RequestBody @Validated RestBpmnProcessVariable restVariable);
-
-    /**
-     * 批量删除流程变量
-     */
-    @DeleteMapping("/api/process/variable/delete/{executionId}")
-    @InvokeMode(SYNC)
-    Void deleteVariables(@PathVariable("executionId") String executionId, @RequestParam String variableNames, @RequestParam(value = "scope", required = false) String scope);
-
-    @Operation(summary = "查询指定审批流程是否能打印,打印开关是否开启,是否存在打印模板")
-    @GetMapping("/api/print/admin/template/exists")
-    @InvokeMode(SYNC)
-    Boolean hasPrintTemplate(@NotBlank(message = "流程实例不能为空") @RequestParam String processInstanceId);
-
-    @Operation(summary = "获取打印模板中可打印的字段")
-    @PostMapping("/api/print/admin/fields")
-    @InvokeMode(SYNC)
-    List getPrintFields(@Validated @RequestBody PrintFieldQueryDTO dto);
-
-    @Operation(summary = "获取指定流程下用于替换打印的相关变量")
-    @GetMapping("/api/print/admin/field/variables")
-    @InvokeMode(SYNC)
-    Map getPrintFieldVariables(@NotBlank(message = "流程实例不能为空") @RequestParam String processInstanceId);
-
-    /**
-     * 催办
-     *
-     * @param dto
-     * @return
-     */
-    @Operation(summary = "审批流程催办")
-    @PostMapping("/api/process/task/remind")
-    @Manageable
-    @InvokeMode(SYNC)
-    Boolean remindTask(@Validated @RequestBody BpmnTaskRemindDTO dto);
-
-    /**
-     * 添加附件
-     *
-     * @param dto
-     * @return
-     */
-    @Operation(summary = "添加附件")
-    @PostMapping("/api/process/task/attachment")
-    @Manageable
-    Void addAttachment(@Validated @RequestBody BpmnTaskAttachmentDTO dto);
-
-    /**
-     * 待审核列表
-     */
-    @Operation(summary = "待审核列表")
-    @GetMapping("/api/process/task/page/todo")
-    @Manageable
-    @InvokeMode(SYNC)
-    BpmPageResult getTodoTaskPage(@Validated @RequestBody BpmnTaskPageSearchDTO dto);
-
-    /**
-     * 已完成的审批列表
-     */
-    @Operation(summary = "已完成的审批列表")
-    @GetMapping("/api/process/task/page/done")
-    @Manageable
-    @InvokeMode(SYNC)
-    BpmPageResult getDoneTaskPage(@Validated @RequestBody BpmnTaskPageSearchDTO dto);
-
-    /**
-     * 获取指定流程实例的审批过程信息
-     * 

- * 同一层级结构 - */ - @Operation(summary = "获取指定流程实例的审批过程信息") - @GetMapping("/api/process/task/list/flat") - @Manageable - @InvokeMode(SYNC) - List getTaskListFlatByProcessInstanceId(@NotBlank(message = "流程实例 ID " + "不能为空") @RequestParam String processInstanceId, @Nullable @RequestParam(required = false) String tenantId); - - /** - * 获取指定流程实例的审批过程信息 - *

- * 分组结构 - */ - @Operation(summary = "获取指定流程实例的审批过程信息") - @GetMapping("/api/process/task/list/group") - @Manageable - @InvokeMode(SYNC) - List getTaskListGroupByProcessInstanceId(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam String processInstanceId, @Nullable @RequestParam(required = false) String tenantId); - - /** - * 获取实例正在审核的人列表 - */ - @Operation(summary = "获取实例正在审核的人列表") - @GetMapping("/api/process/task/active/list") - @Manageable - @InvokeMode(SYNC) - List getActiveTasksByProcessInstanceId(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam String processInstanceId, @NotBlank(message = "租户不能为空") @RequestParam String tenantId); - - /** - * 根据实例 ID 和自然人 ID 查询对应待处理的任务 ID - * - * @return - */ - @Operation(summary = "根据实例 ID 和自然人 ID 查询对应待处理的任务 ID") - @GetMapping("/api/process/task/find") - @Manageable - @InvokeMode(SYNC) - String findTaskIdByInstanceIdAndPersonId(@RequestParam(required = false) @NotBlank(message = "流程实例 ID 不能为空") String processInstanceId, @RequestParam(required = false) @NotBlank(message = "自然人 ID 不能为空") String personId); - - /** - * 根据实例 ID列表 和自然人 ID 查询对应待处理的任务 ID - * - * @return - */ - @Operation(summary = "根据实例 ID列表 和自然人 ID 查询对应待处理的任务 ID") - @GetMapping("/api/process/task/batch/find") - @Manageable - @InvokeMode(SYNC) - Map findTaskIdByInstanceIdsAndPersonId(@RequestParam(required = false) @NotEmpty(message = "流程实例 ID列表 不能为空") List processInstanceIds, @RequestParam(required = false) @NotBlank(message = "自然人 ID 不能为空") String personId); - - @PostMapping("/api/form/admin/form/page") - @InvokeMode(SYNC) - List formPage(@Validated @RequestBody FormSearchDTO dto); - - @PostMapping("/api/form/admin/start/form") - @InvokeMode(SYNC) - FormDefinitionVO getFormDefinition(@Validated @RequestBody StartFormSearchDTO dto); - - /** - * 查询指定审批实例的表单模型和数据 - *

- * dto 中的 processInstanceId 与 taskId,至少有一个属性有值,一般建议直接使用实例 ID。 - * 当传入 taskId 时,将只查询该任务绑定的表单模型和数据。 - * - * @param dto - * @return - */ - @PostMapping("/api/form/admin/instance/render") - @InvokeMode(SYNC) - FormInstanceVO getFormInstance(@Validated @RequestBody FormDetailDTO dto); - - @DeleteMapping("/api/process/instance/super/cancel") - @Manageable - Boolean superCancelProcessInstance(@Validated @RequestBody SuperBpmnProcessInstanceCancelDTO dto); - - /** - * 查询所有的审批流 - * - * @return - */ - @Operation(summary = "查询所有的审批流") - @PostMapping("/api/process/instance/page/all") - @Manageable - @InvokeMode(SYNC) - BpmPageResult getAllProcessInstancePage(@Validated @RequestBody BpmnProcessInstanceAdminPageReqVO dto); - - /** - * 我发起的审批列表 - */ - @Operation(summary = "我发起的审批列表") - @PostMapping("/api/process/instance/page/my") - @Manageable - @InvokeMode(SYNC) - BpmPageResult getMyProcessInstancePage(@Validated @RequestBody BpmnProcessInstanceMyPageReqVO dto); - - /** - * 更新流程定义的状态 - * - * @param processDefinitionId 流程定义的编号 - * @param status 1, "active"; 2, "suspended" - */ - @Operation(summary = "更新指定流程定义的版本的状态, 处于 suspended 状态的流程模型将不能再发起实例") - @PutMapping("/api/process/instance/status/update") - @Manageable - @InvokeMode(SYNC) - Boolean updateProcessStatus(@NotBlank(message = "流程定义 ID 不能为空") @RequestParam String processDefinitionId, @NotNull(message = "状态不能为空") @RequestParam Integer status); - - /** - * 获取审批流程实例的运行图 - * - * @param processInstanceId - * @param tenantId - * @return - */ - @Operation(summary = "获取审批流程实例的运行图") - @GetMapping("/api/process/instance/graphical") - @Manageable - @InvokeMode(SYNC) - ObjectNode processInstanceGraphical(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam String processInstanceId, @Nullable @RequestParam(required = false) String tenantId); - - /** - * 推断指定流程实例的所有节点执行顺序 - * - * @return - */ - @Operation(summary = "推断指定流程实例的所有节点执行顺序") - @GetMapping("/api/process/instance/node/forecasting") - @Manageable - @InvokeMode(SYNC) - List processInstanceNodeForecast(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam(required = false) String processInstanceId, @Nullable @RequestParam(required = false) String tenantId); - - /** - * 推断指定流程实例的过滤掉部分节点执行顺序 - * - * @param allNode 如果为真时,相当于调用 {@link ProcessInstanceApi#processInstanceNodeForecast(String, String)} 方法,切会直接丢弃 nodeDefinitionKeys 参数 - * 如果为假时,才结合 nodeDefinitionKeys 过滤掉传入的节点 - * @return - */ - @Operation(summary = "推断指定流程实例的过滤掉部分节点执行顺序") - @GetMapping("/api/process/instance/node/filter/forecasting") - @Manageable - @InvokeMode(SYNC) - List processInstanceFilterNodeForecast(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam(required = false) String processInstanceId, @Nullable @RequestParam(required = false) String tenantId, @RequestParam(required = false, defaultValue = "false") Boolean allNode, @Nullable @RequestParam(required = false) List nodeDefinitionKeys); - - /** - * 查询实例的租户集合 - * - * @return - */ - @Operation(summary = "查询实例的租户集合") - @GetMapping("/api/process/instance/tenant/ids") - @Manageable - @InvokeMode(SYNC) - List getTenantIds(); - - /** - * 校验指定流程实例下,是否存在指定的审批人正处理待审批 - * - * @return true 是在当前流程实例中,存在指定的审批人 - */ - @Operation(summary = "校验指定流程实例下,是否存在指定的审批人") - @PostMapping("/api/process/instance/check/approver") - @Manageable - @InvokeMode(SYNC) - Boolean checkInstanceApprover(@Validated @RequestBody BpmnProcessInstanceCheckApproverDTO dto); + List getDefaultButtons(); /** * 流程模型列表 @@ -1009,67 +865,209 @@ public interface WorkflowManageService { List hasFilesTenantIds(@Validated @RequestBody DocTenantQueryDTO dto); /** - * 查询管理员 - * @param dto 管理员数据 - * @return 管理员id + * 为指定流程新增变量 */ - @PostMapping("/api/process/admin/query") + @PostMapping("/api/process/variable/create/{executionId}") @InvokeMode(SYNC) - List queryProcessAdmins(@RequestBody ProcessAdminQueryDTO dto); + Void createVariable(@PathVariable @NotBlank(message = "流程实例 ID 不能为空") String executionId, @RequestBody @Validated RestBpmnProcessVariable restVariable); /** - * 查询管理员 - * @param dto 管理员数据 - * @return 管理员id - */ - @PostMapping("/api/process/admin/query/count") - @InvokeMode(SYNC) - Integer queryProcessAdminsCount(@RequestBody ProcessAdminQueryDTO dto); - - /** - * 添加管理员 - * @param dto 管理员数据 - * @return 管理员id - */ - @PostMapping("/api/process/admin/create") - @InvokeMode(SYNC) - Long createProcessAdmin(@RequestBody ProcessAdminCreateDTO dto); - - /** - * 批量添加管理员 - * @param dtos + * 仅更新流程已存在的变量 + * + * @param executionId + * @param restVariable * @return */ - @PostMapping("/api/process/admin/batch/create") + @PostMapping("/api/process/variable/update/{executionId}") @InvokeMode(SYNC) - Void batchCreateProcessAdmin(@RequestBody List dtos); + Void updateVariable(@PathVariable @NotBlank(message = "流程实例 ID 不能为空") String executionId, @RequestBody @Validated RestBpmnProcessVariable restVariable); /** - * 删除管理员 - * @param id 配置表id - * @return + * 批量删除流程变量 */ - @DeleteMapping("/api/process/admin/delete") + @DeleteMapping("/api/process/variable/delete/{executionId}") @InvokeMode(SYNC) - Integer deleteCommonProcessAdmin(@RequestParam Long id); + Void deleteVariables(@PathVariable("executionId") String executionId, @RequestParam String variableNames, @RequestParam(value = "scope", required = false) String scope); /** - * 根据条件删除管理员 - * @param dto 删除条件 + * 催办 + * + * @param dto * @return */ - @DeleteMapping("/api/process/admin/delete/criteria") + @Operation(summary = "审批流程催办") + @PostMapping("/api/process/task/remind") + @Manageable @InvokeMode(SYNC) - Integer deleteProcessAdminCriteria(@RequestBody ProcessAdminDeleteDTO dto); + Boolean remindTask(@Validated @RequestBody BpmnTaskRemindDTO dto); /** - * 删除管理员 - * @param ids 管理员配置id列表 + * 添加附件 + * + * @param dto * @return */ - @DeleteMapping("/api/process/admin/batch/delete") + @Operation(summary = "添加附件") + @PostMapping("/api/process/task/attachment") + @Manageable + Void addAttachment(@Validated @RequestBody BpmnTaskAttachmentDTO dto); + + /** + * 待审核列表 + */ + @Operation(summary = "待审核列表") + @GetMapping("/api/process/task/page/todo") + @Manageable @InvokeMode(SYNC) - Integer batchDeleteProcessAdmin(@RequestBody List ids); + BpmPageResult getTodoTaskPage(@Validated @RequestBody BpmnTaskPageSearchDTO dto); + + /** + * 已完成的审批列表 + */ + @Operation(summary = "已完成的审批列表") + @GetMapping("/api/process/task/page/done") + @Manageable + @InvokeMode(SYNC) + BpmPageResult getDoneTaskPage(@Validated @RequestBody BpmnTaskPageSearchDTO dto); + + /** + * 获取指定流程实例的审批过程信息 + *

+ * 同一层级结构 + */ + @Operation(summary = "获取指定流程实例的审批过程信息") + @GetMapping("/api/process/task/list/flat") + @Manageable + @InvokeMode(SYNC) + List getTaskListFlatByProcessInstanceId(@NotBlank(message = "流程实例 ID " + "不能为空") @RequestParam String processInstanceId, @Nullable @RequestParam(required = false) String tenantId); + + /** + * 获取指定流程实例的审批过程信息 + *

+ * 分组结构 + */ + @Operation(summary = "获取指定流程实例的审批过程信息") + @GetMapping("/api/process/task/list/group") + @Manageable + @InvokeMode(SYNC) + List getTaskListGroupByProcessInstanceId(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam String processInstanceId, @Nullable @RequestParam(required = false) String tenantId); + + /** + * 获取实例正在审核的人列表 + */ + @Operation(summary = "获取实例正在审核的人列表") + @GetMapping("/api/process/task/active/list") + @Manageable + @InvokeMode(SYNC) + List getActiveTasksByProcessInstanceId(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam String processInstanceId, @NotBlank(message = "租户不能为空") @RequestParam String tenantId); + + /** + * 根据实例 ID 和自然人 ID 查询对应待处理的任务 ID + * + * @return + */ + @Operation(summary = "根据实例 ID 和自然人 ID 查询对应待处理的任务 ID") + @GetMapping("/api/process/task/find") + @Manageable + @InvokeMode(SYNC) + String findTaskIdByInstanceIdAndPersonId(@RequestParam(required = false) @NotBlank(message = "流程实例 ID 不能为空") String processInstanceId, @RequestParam(required = false) @NotBlank(message = "自然人 ID 不能为空") String personId); + + /** + * 根据实例 ID列表 和自然人 ID 查询对应待处理的任务 ID + * + * @return + */ + @Operation(summary = "根据实例 ID列表 和自然人 ID 查询对应待处理的任务 ID") + @GetMapping("/api/process/task/batch/find") + @Manageable + @InvokeMode(SYNC) + Map findTaskIdByInstanceIdsAndPersonId(@RequestParam(required = false) @NotEmpty(message = "流程实例 ID列表 不能为空") List processInstanceIds, @RequestParam(required = false) @NotBlank(message = "自然人 ID 不能为空") String personId); + + /** + * 获取活跃的流程定义分页 + */ + @GetMapping("/api/process/definition/page") + @InvokeMode(SYNC) + BpmPageResult getProcessDefinitionPage(@Validated @RequestBody BpmnProcessDefinitionPageDTO dto); + + /** + * 通过模型 ID 更新流程定义 + * + * @param dto + * @return + */ + @PutMapping("/api/process/definition/update") + @InvokeMode(SYNC) + Boolean updateProcessDefinition(@Validated @RequestBody BpmnProcessDefinitionUpdateDTO dto); + + /** + * 获得指定定义编号对应的流程定义内容 + * + * @param processDefinitionId 编号 + * @return 流程定义 + */ + @GetMapping("/api/process/definition/get") + @InvokeMode(SYNC) + BpmnProcessDefinitionVO getProcessDefinition(@NotBlank(message = "流程定义 ID 不能为空") @RequestParam String processDefinitionId); + + /** + * 获得 deploymentId 对应的 ProcessDefinition + * + * @param deploymentId 部署编号 + * @return 流程定义 + */ + @GetMapping("/api/process/definition/getByDeploymentId") + @InvokeMode(SYNC) + BpmnProcessDefinitionVO getProcessDefinitionByDeploymentId(@NotBlank(message = "流程部署 ID 不能为空") @RequestParam String deploymentId); + + /** + * 获得流程定义标识对应的激活的流程定义 + * + * @param key 流程定义的标识 + * @return 流程定义 + */ + @GetMapping("/api/process/definition/active/getByKey") + @InvokeMode(SYNC) + BpmnProcessDefinitionVO getActiveProcessDefinitionByKey(@NotBlank(message = "模型定义KEY不能为空") @RequestParam String key, @RequestParam(required = false, defaultValue = NO_TENANT_ID) String tenantId); + + /** + * 挂起/激活流程, + * 激活:SuspensionState.ACTIVE.getStateCode() + * 挂起:SuspensionState.SUSPENDED.getStateCode() + * {@see SuspensionState} + */ + @PutMapping("/api/process/definition/state/update") + @InvokeMode(SYNC) + Boolean getActiveProcessDefinitionByKey(@NotBlank(message = "流程定义ID不能为空") @RequestParam String processDefinitionId, @NotNull(message = "状态不能为空") @RequestParam Integer state); + + /** + * 获取指定模型的定义 ID + * + * @return 流程定义ID + */ + @GetMapping("/api/process/definition/active/getByCategory") + @InvokeMode(SYNC) + String getActiveProcessDefinitionId(@RequestParam(required = false) String tenantId, @NotBlank(message = "分类不能为空") @RequestParam(required = false) String category); + + /** + * 获取指定模型激活的流程定义 JSON 模型 + * + * @return 流程定义ID + */ + @GetMapping("/api/process/definition/active/json/model") + @InvokeMode(SYNC) + BpmnModelUpdateDTO getActiveProcessDefinitionJsonModel(@NotBlank(message = "模型 ID 不能为空") @RequestParam(required = false) String modelId, @NotBlank(message = "分类不能为空") @RequestParam(required = false) String key, @RequestParam(required = false) String tenantId); + + /** + * 删除流程部署及定义 + * + * @param deploymentId 流程定义部署 ID + * @param cascade 是否级联参数定义对应的流程实例及 job 等管理内容 + * @return + */ + @GetMapping("/api/process/definition/delete") + @InvokeMode(SYNC) + Void delete(@NotBlank(message = "流程定义部署 ID 不能为空") String deploymentId, @RequestParam(required = false) Boolean cascade); /** * 强制使用‘同步’模式调用该方法,请在调用真实方法前调用该方法