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); }