From 2ca9626e50686b3a5ae27218e23756557cc6aa58 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 29 Jan 2026 13:28:57 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BB=BB=E5=8A=A1=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=98=BE=E7=A4=BA=E6=B5=81=E6=B0=B4=E7=BA=BF?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=BD=93=E5=89=8D=E5=BE=85=E5=A4=84=E7=90=86?= =?UTF-8?q?=E5=AD=90=E4=BB=BB=E5=8A=A1=E7=9A=84=E6=8E=A5=E5=8D=95=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:流水线任务完成子任务1后,节点查询仍显示子任务1的接单人 修复:查询当前pending状态的子任务接单人,而不是主任务的receiver_id --- .../com/designhub/service/TaskService.java | 71 ++++++++++++++++--- 1 file changed, 63 insertions(+), 8 deletions(-) diff --git a/backend/src/main/java/com/designhub/service/TaskService.java b/backend/src/main/java/com/designhub/service/TaskService.java index 8f4e5a8..b8c12b2 100644 --- a/backend/src/main/java/com/designhub/service/TaskService.java +++ b/backend/src/main/java/com/designhub/service/TaskService.java @@ -4727,17 +4727,72 @@ public class TaskService { com.designhub.vo.TaskFlowStatusVO.WaitingUser waitingUser = new com.designhub.vo.TaskFlowStatusVO.WaitingUser(); waitingUser.setRoleName("等待设计师接单"); info.setWaitingFor(waitingUser); - } else if ("in_progress".equals(status) && task.getReceiverId() != null) { - // 进行中状态 + } else if ("in_progress".equals(status)) { + // 进行中状态 - 对于流水线任务,查找当前待处理的子任务 com.designhub.vo.TaskFlowStatusVO.WaitingUser waitingUser = new com.designhub.vo.TaskFlowStatusVO.WaitingUser(); - waitingUser.setUserId(task.getReceiverId()); - User receiver = userMapper.selectById(task.getReceiverId()); - if (receiver != null) { - waitingUser.setUserName(receiver.getRealName()); - waitingUser.setDeptName(receiver.getDeptName()); + if (task.getIsPipeline() != null && task.getIsPipeline() == 1) { + // 🔥 流水线任务:查找当前待处理的子任务(pending状态且未锁定) + TaskItem currentItem = taskItemMapper.selectOne( + new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper() + .eq(TaskItem::getTaskId, task.getId()) + .eq(TaskItem::getStatus, "pending") + .eq(TaskItem::getIsLocked, 0) + .orderByAsc(TaskItem::getId) + .last("LIMIT 1") + ); + + if (currentItem != null && currentItem.getReceiverId() != null) { + // 有待处理的子任务,显示该子任务的接单人 + waitingUser.setUserId(currentItem.getReceiverId()); + User receiver = userMapper.selectById(currentItem.getReceiverId()); + if (receiver != null) { + waitingUser.setUserName(receiver.getRealName()); + waitingUser.setDeptName(receiver.getDeptName()); + } + waitingUser.setRoleName("等待设计师接单"); + } else if (currentItem != null) { + // 有待处理子任务但未指定接单人 + waitingUser.setRoleName("等待设计师接单"); + } else { + // 没有待处理子任务,查找进行中的子任务 + TaskItem inProgressItem = taskItemMapper.selectOne( + new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper() + .eq(TaskItem::getTaskId, task.getId()) + .eq(TaskItem::getStatus, "in_progress") + .orderByAsc(TaskItem::getId) + .last("LIMIT 1") + ); + if (inProgressItem != null && inProgressItem.getReceiverId() != null) { + waitingUser.setUserId(inProgressItem.getReceiverId()); + User receiver = userMapper.selectById(inProgressItem.getReceiverId()); + if (receiver != null) { + waitingUser.setUserName(receiver.getRealName()); + waitingUser.setDeptName(receiver.getDeptName()); + } + waitingUser.setRoleName("设计师正在执行任务"); + } else if (task.getReceiverId() != null) { + // 回退到主任务的接单人 + waitingUser.setUserId(task.getReceiverId()); + User receiver = userMapper.selectById(task.getReceiverId()); + if (receiver != null) { + waitingUser.setUserName(receiver.getRealName()); + waitingUser.setDeptName(receiver.getDeptName()); + } + waitingUser.setRoleName("设计师正在执行任务"); + } + } + } else if (task.getReceiverId() != null) { + // 普通任务:使用主任务的接单人 + waitingUser.setUserId(task.getReceiverId()); + User receiver = userMapper.selectById(task.getReceiverId()); + if (receiver != null) { + waitingUser.setUserName(receiver.getRealName()); + waitingUser.setDeptName(receiver.getDeptName()); + } + waitingUser.setRoleName("设计师正在执行任务"); } - waitingUser.setRoleName("设计师执行中"); + info.setWaitingFor(waitingUser); }