fix: 任务节点查询显示流水线任务当前待处理子任务的接单人

问题:流水线任务完成子任务1后,节点查询仍显示子任务1的接单人
修复:查询当前pending状态的子任务接单人,而不是主任务的receiver_id
This commit is contained in:
Your Name 2026-01-29 13:28:57 +08:00
parent 7332e48f0d
commit 2ca9626e50

View File

@ -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<TaskItem>()
.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<TaskItem>()
.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);
}