update 优化 getBackTaskNode 获取驳回节点接口 如果是委派直接返回当前节点 不允许驳回到其他节点

This commit is contained in:
疯狂的狮子Li 2025-07-28 16:25:20 +08:00
parent 127eaf936c
commit 5f466fd0c4
3 changed files with 18 additions and 11 deletions

View File

@ -191,12 +191,12 @@ public class FlwTaskController extends BaseController {
/** /**
* 获取可驳回的前置节点 * 获取可驳回的前置节点
* *
* @param definitionId 流程定义id * @param taskId 任务id
* @param nowNodeCode 当前节点 * @param nowNodeCode 当前节点
*/ */
@GetMapping("/getBackTaskNode/{definitionId}/{nowNodeCode}") @GetMapping("/getBackTaskNode/{taskId}/{nowNodeCode}")
public R<List<Node>> getBackTaskNode(@PathVariable Long definitionId, @PathVariable String nowNodeCode) { public R<List<Node>> getBackTaskNode(@PathVariable Long taskId, @PathVariable String nowNodeCode) {
return R.ok(flwTaskService.getBackTaskNode(definitionId, nowNodeCode)); return R.ok(flwTaskService.getBackTaskNode(taskId, nowNodeCode));
} }
/** /**

View File

@ -111,11 +111,11 @@ public interface IFlwTaskService {
/** /**
* 获取可驳回的前置节点 * 获取可驳回的前置节点
* *
* @param definitionId 流程定义id * @param taskId 任务id
* @param nowNodeCode 当前节点 * @param nowNodeCode 当前节点
* @return 结果 * @return 结果
*/ */
List<Node> getBackTaskNode(Long definitionId, String nowNodeCode); List<Node> getBackTaskNode(Long taskId, String nowNodeCode);
/** /**
* 终止任务 * 终止任务

View File

@ -31,6 +31,7 @@ import org.dromara.warm.flow.core.dto.FlowParams;
import org.dromara.warm.flow.core.entity.*; import org.dromara.warm.flow.core.entity.*;
import org.dromara.warm.flow.core.enums.NodeType; import org.dromara.warm.flow.core.enums.NodeType;
import org.dromara.warm.flow.core.enums.SkipType; import org.dromara.warm.flow.core.enums.SkipType;
import org.dromara.warm.flow.core.enums.UserType;
import org.dromara.warm.flow.core.service.*; import org.dromara.warm.flow.core.service.*;
import org.dromara.warm.flow.core.utils.ExpressionUtil; import org.dromara.warm.flow.core.utils.ExpressionUtil;
import org.dromara.warm.flow.core.utils.MapUtil; import org.dromara.warm.flow.core.utils.MapUtil;
@ -458,22 +459,28 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
/** /**
* 获取可驳回的前置节点 * 获取可驳回的前置节点
* *
* @param definitionId 流程定义id * @param taskId 任务id
* @param nowNodeCode 当前节点 * @param nowNodeCode 当前节点
*/ */
@Override @Override
public List<Node> getBackTaskNode(Long definitionId, String nowNodeCode) { public List<Node> getBackTaskNode(Long taskId, String nowNodeCode) {
List<Node> nodeCodes = nodeService.getByNodeCodes(Collections.singletonList(nowNodeCode), definitionId); FlowTask task = flowTaskMapper.selectById(taskId);
List<Node> nodeCodes = nodeService.getByNodeCodes(Collections.singletonList(nowNodeCode), task.getDefinitionId());
if (!CollUtil.isNotEmpty(nodeCodes)) { if (!CollUtil.isNotEmpty(nodeCodes)) {
return nodeCodes; return nodeCodes;
} }
List<User> userList = FlowEngine.userService()
.getByAssociateds(Collections.singletonList(task.getId()), UserType.DEPUTE.getKey());
if (CollUtil.isNotEmpty(userList)) {
return nodeCodes;
}
//判断是否配置了固定驳回节点 //判断是否配置了固定驳回节点
Node node = nodeCodes.get(0); Node node = nodeCodes.get(0);
if (StringUtils.isNotBlank(node.getAnyNodeSkip())) { if (StringUtils.isNotBlank(node.getAnyNodeSkip())) {
return nodeService.getByNodeCodes(Collections.singletonList(node.getAnyNodeSkip()), definitionId); return nodeService.getByNodeCodes(Collections.singletonList(node.getAnyNodeSkip()), task.getDefinitionId());
} }
//获取可驳回的前置节点 //获取可驳回的前置节点
List<Node> nodes = nodeService.previousNodeList(definitionId, nowNodeCode); List<Node> nodes = nodeService.previousNodeList(task.getDefinitionId(), nowNodeCode);
if (CollUtil.isNotEmpty(nodes)) { if (CollUtil.isNotEmpty(nodes)) {
return StreamUtils.filter(nodes, e -> NodeType.BETWEEN.getKey().equals(e.getNodeType())); return StreamUtils.filter(nodes, e -> NodeType.BETWEEN.getKey().equals(e.getNodeType()));
} }