diff --git a/workflow-engine-api/src/main/java/cn/axzo/workflow/client/feign/bpmn/ProcessInstanceApi.java b/workflow-engine-api/src/main/java/cn/axzo/workflow/client/feign/bpmn/ProcessInstanceApi.java index 91b466260..a3d05dd38 100644 --- a/workflow-engine-api/src/main/java/cn/axzo/workflow/client/feign/bpmn/ProcessInstanceApi.java +++ b/workflow-engine-api/src/main/java/cn/axzo/workflow/client/feign/bpmn/ProcessInstanceApi.java @@ -108,6 +108,7 @@ public interface ProcessInstanceApi { */ @PostMapping("/api/process/instance/carbon-copy") CommonResponse carbonCopyProcessInstance(@Validated @RequestBody BpmnProcessInstanceCarbonCopyDTO dto); + /** * 获得流程实例 * @@ -148,6 +149,19 @@ public interface ProcessInstanceApi { CommonResponse> 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 + */ + @GetMapping("/api/process/instance/node/filter/forecasting") + CommonResponse> 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); + /** * 获取指定流程实例的协作单位 * diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/BpmnProcessInstanceService.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/BpmnProcessInstanceService.java index 52954d5c5..49484611f 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/BpmnProcessInstanceService.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/BpmnProcessInstanceService.java @@ -133,18 +133,8 @@ public interface BpmnProcessInstanceService { */ List getProcessInstanceNodeForecast(String processInstanceId, String tenantId); - /** - * 可过滤指定节点集合的剩余接地那推送 - * - * @param processInstanceId - * @param tenantId - * @param allNode - * @param removeTaskDefinitionKeys - * @return - */ - List getProcessInstanceNodeForecast(String processInstanceId, String tenantId, Boolean allNode, List removeTaskDefinitionKeys); + List getProcessInstanceNodeFilterForecast(String processInstanceId, String tenantId, List nodeDefinitionKeys); List getTenantIds(); - } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessInstanceServiceImpl.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessInstanceServiceImpl.java index 59b8f630d..a7ded62a3 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessInstanceServiceImpl.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessInstanceServiceImpl.java @@ -767,6 +767,12 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic @Override public List getProcessInstanceNodeForecast(String processInstanceId, @Nullable String tenantId) { + + return getProcessInstanceNodeFilterForecast(processInstanceId, tenantId, Collections.emptyList()); + } + + @Override + public List getProcessInstanceNodeFilterForecast(String processInstanceId, String tenantId, List nodeDefinitionKeys) { ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery() .processInstanceId(processInstanceId); if (StringUtils.isNotBlank(tenantId)) { @@ -778,7 +784,9 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic BpmnModel bpmnModel = repositoryService.getBpmnModel(instance.getProcessDefinitionId()); List resultList = new ArrayList<>(flowElements.size()); // 发起人节点,也是一个 UserTask 节点, 所以这里默认就包含了发起人节点 - flowElements.stream().filter(i -> (i instanceof UserTask || i instanceof ReceiveTask || i instanceof ServiceTask)) + flowElements.stream() + .filter(i -> !nodeDefinitionKeys.contains(i.getId())) + .filter(i -> (i instanceof UserTask || i instanceof ReceiveTask || i instanceof ServiceTask)) .forEach(i -> { ProcessNodeDetailVO node = new ProcessNodeDetailVO(); node.setForecastAssigners(Collections.emptyList()); @@ -802,20 +810,6 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic return resultList; } - /** - * 可过滤指定节点集合的剩余接地那推送 - * - * @param processInstanceId - * @param tenantId - * @param allNode - * @param removeTaskDefinitionKeys - * @return - */ - @Override - public List getProcessInstanceNodeForecast(String processInstanceId, String tenantId, Boolean allNode, List removeTaskDefinitionKeys) { - return Collections.emptyList(); - } - private void parseServiceTask(String processInstanceId, ServiceTask i, ProcessNodeDetailVO node) { // ServiceTask 主要作用于抄送 node.setId(i.getId()).setName(i.getName()); diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessInstanceController.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessInstanceController.java index 3cf93ba01..9c49716a9 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessInstanceController.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessInstanceController.java @@ -191,7 +191,7 @@ public class BpmnProcessInstanceController implements ProcessInstanceApi { * 获取审批流程实例的运行图 * * @param processInstanceId 流程实例 ID - * @param tenantId 租户 ID + * @param tenantId 租户 ID * @return */ @Operation(summary = "获取审批流程实例的运行图") @@ -217,6 +217,30 @@ public class BpmnProcessInstanceController implements ProcessInstanceApi { return success(bpmnProcessInstanceService.getProcessInstanceNodeForecast(processInstanceId, tenantId)); } + /** + * 推断指定流程实例的过滤掉部分节点执行顺序 + * + * @param processInstanceId + * @param tenantId + * @param allNode 如果为真时,相当于调用 {@link ProcessInstanceApi#processInstanceNodeForecast(String, String)} 方法,切会直接丢弃 nodeDefinitionKeys 参数 + * 如果为假时,才结合 nodeDefinitionKeys 过滤掉传入的节点 + * @param nodeDefinitionKeys + * @return + */ + @Operation(summary = "推断指定流程实例的过滤掉部分节点执行顺序") + @GetMapping("/node/filter/forecasting") + @Override + public CommonResponse> 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) { + if (allNode) { + return success(bpmnProcessInstanceService.getProcessInstanceNodeForecast(processInstanceId, tenantId)); + } else { + return success(bpmnProcessInstanceService.getProcessInstanceNodeFilterForecast(processInstanceId, tenantId, nodeDefinitionKeys)); + } + } + /** * 获取指定流程实例的协作单位 *