diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java index 8ef56cbe8..c6895cf90 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java @@ -10,6 +10,7 @@ import org.dromara.common.log.enums.BusinessType; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; +import org.dromara.warm.flow.core.entity.Node; import org.dromara.warm.flow.orm.entity.FlowHisTask; import org.dromara.workflow.domain.bo.*; import org.dromara.workflow.domain.vo.FlowHisTaskVo; @@ -176,13 +177,14 @@ public class FlwTaskController extends BaseController { } /** - * 获取可驳回节点 + * 获取可驳回的前置节点 * - * @param instanceId 实例id + * @param definitionId 流程定义id + * @param nowNodeCode 当前节点 */ - @GetMapping("/getBackTaskNode/{instanceId}") - public R> getBackTaskNode(@PathVariable Long instanceId) { - return R.ok(flwTaskService.getBackTaskNode(instanceId)); + @GetMapping("/getBackTaskNode/{definitionId}/{nowNodeCode}") + public R> getBackTaskNode(@PathVariable Long definitionId, @PathVariable String nowNodeCode) { + return R.ok(flwTaskService.getBackTaskNode(definitionId, nowNodeCode)); } /** diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java index 98e002595..80bfa948c 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java @@ -3,6 +3,7 @@ package org.dromara.workflow.service; import org.dromara.common.core.domain.dto.UserDTO; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.warm.flow.core.entity.Node; import org.dromara.warm.flow.orm.entity.FlowHisTask; import org.dromara.warm.flow.orm.entity.FlowTask; import org.dromara.workflow.domain.bo.*; @@ -98,12 +99,13 @@ public interface IFlwTaskService { boolean backProcess(BackProcessBo bo); /** - * 获取可驳回节点 + * 获取可驳回的前置节点 * - * @param instanceId 实例id + * @param definitionId 流程定义id + * @param nowNodeCode 当前节点 * @return 结果 */ - List getBackTaskNode(Long instanceId); + List getBackTaskNode(Long definitionId, String nowNodeCode); /** * 终止任务 diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java index 9d69ee7ce..5bfaddf03 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java @@ -418,32 +418,29 @@ public class FlwTaskServiceImpl implements IFlwTaskService { * * @param instanceId 实例id */ + /** + * 获取可驳回的前置节点 + * + * @param definitionId 流程定义id + * @param nowNodeCode 当前节点 + */ @Override - public List getBackTaskNode(Long instanceId) { - //运行中的节点 - List flowTaskList = this.selectByInstId(instanceId); - // 创建查询条件,查询历史任务记录 - LambdaQueryWrapper lw = new LambdaQueryWrapper<>(FlowHisTask.class) - .select(FlowHisTask::getNodeCode, FlowHisTask::getNodeName) - .eq(FlowHisTask::getInstanceId, instanceId) - .eq(FlowHisTask::getNodeType, NodeType.BETWEEN.getKey()) - .orderByDesc(FlowHisTask::getCreateTime); - - List flowHisTasks = flowHisTaskMapper.selectList(lw); - if (CollUtil.isEmpty(flowHisTasks)) { - return Collections.emptyList(); + public List getBackTaskNode(Long definitionId, String nowNodeCode) { + List nodeCodes = nodeService.getByNodeCodes(Collections.singletonList(nowNodeCode), definitionId); + if (!CollUtil.isNotEmpty(nodeCodes)) { + return nodeCodes; } - List flowHisTasksList = new ArrayList<>(flowHisTasks.stream() - .collect(Collectors.toMap( - FlowHisTask::getNodeCode, - task -> task, - (existing, replacement) -> existing - )).values()); - if (CollUtil.isNotEmpty(flowTaskList)) { - List runNode = StreamUtils.toList(flowTaskList, FlowTask::getNodeCode); - return StreamUtils.filter(flowHisTasksList, e -> !runNode.contains(e.getNodeCode())); + //判断是否配置了固定驳回节点 + Node node = nodeCodes.get(0); + if (StringUtils.isNotBlank(node.getAnyNodeSkip())) { + return nodeService.getByNodeCodes(Collections.singletonList(node.getAnyNodeSkip()), definitionId); } - return flowHisTasksList; + //获取可驳回的前置节点 + List nodes = nodeService.previousNodeList(definitionId, nowNodeCode); + if (CollUtil.isNotEmpty(nodes)) { + return StreamUtils.filter(nodes, e -> NodeType.BETWEEN.getKey().equals(e.getNodeType())); + } + return nodes; } /** diff --git a/script/bpmn/leave4.xml b/script/bpmn/leave4.xml index 9f46e0ce1..2061d176f 100644 --- a/script/bpmn/leave4.xml +++ b/script/bpmn/leave4.xml @@ -1,13 +1,13 @@ - + e90b98ef-35b4-410c-a663-bae8b7624b9f 768b5b1a-6726-4d67-8853-4cc70d5b1045 - + 2f9f2e21-9bcf-42a3-a07c-13037aad22d1 diff --git a/script/bpmn/leave5.xml b/script/bpmn/leave5.xml index 049937bae..d6c0117c0 100644 --- a/script/bpmn/leave5.xml +++ b/script/bpmn/leave5.xml @@ -1,6 +1,6 @@ - + e1b04e96-dc81-4858-a309-2fe945d2f374 @@ -21,7 +21,7 @@ 03c4d2bc-58b5-4408-a2e4-65afb046f169 - + 1a20169e-3d82-4926-a151-e2daad28de1b