fix: 修复进行中任务不显示子任务列表模块的问题

后端修改:
- 在TaskItem实体类中添加isPipeline、subTasks、subTaskTotal字段
- 在TaskItemController中添加enrichTaskItemsWithSubTasks方法
- 获取进行中子任务时,自动填充同一主任务的所有子任务信息

前端修改:
- 在mapTaskItemToTask函数中添加isPipeline、subTasks、subTaskTotal字段映射
- 这样前端可以正确显示流水线任务的子任务进度时间线
This commit is contained in:
Your Name 2026-01-14 14:05:21 +08:00
parent cff7b795b7
commit 5d626b55c9
4 changed files with 91 additions and 3 deletions

View File

@ -16,6 +16,12 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.Set;
import java.util.HashSet;
import com.designhub.mapper.TaskMapper;
import com.designhub.mapper.TaskItemMapper;
import com.designhub.entity.Task;
/**
* 任务子项控制器(流水线任务)
@ -30,6 +36,8 @@ public class TaskItemController {
private final TaskItemService taskItemService;
private final UserMapper userMapper;
private final DepartmentMapper departmentMapper;
private final TaskMapper taskMapper;
private final TaskItemMapper taskItemMapper;
private final JwtUtil jwtUtil;
/**
@ -126,8 +134,69 @@ public class TaskItemController {
}
log.info("返回结果: 总数={}, 当前页记录数={}", items.getTotal(), items.getRecords().size());
// 填充子任务列表信息(用于前端显示流水线任务的子任务进度)
enrichTaskItemsWithSubTasks(items.getRecords());
return Result.success(items);
}
/**
* 为子任务列表填充同一主任务的所有子任务信息
* 这样前端可以显示流水线任务的子任务进度时间线
*/
private void enrichTaskItemsWithSubTasks(List<TaskItem> items) {
if (items == null || items.isEmpty()) {
return;
}
// 收集所有主任务ID
Set<Long> taskIds = items.stream()
.map(TaskItem::getTaskId)
.filter(id -> id != null)
.collect(Collectors.toSet());
if (taskIds.isEmpty()) {
return;
}
// 批量查询主任务信息
List<Task> tasks = taskMapper.selectBatchIds(taskIds);
Map<Long, Task> taskMap = tasks.stream()
.collect(Collectors.toMap(Task::getId, t -> t));
// 批量查询所有相关子任务
List<TaskItem> allSubTasks = taskItemMapper.selectList(
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<TaskItem>()
.in(TaskItem::getTaskId, taskIds)
.orderByAsc(TaskItem::getSortOrder)
);
// 按主任务ID分组
Map<Long, List<TaskItem>> subTasksMap = allSubTasks.stream()
.collect(Collectors.groupingBy(TaskItem::getTaskId));
// 为每个子任务填充信息
for (TaskItem item : items) {
Long taskId = item.getTaskId();
if (taskId == null) {
continue;
}
// 填充主任务信息
Task mainTask = taskMap.get(taskId);
if (mainTask != null) {
item.setIsPipeline(mainTask.getIsPipeline());
}
// 填充同一主任务的所有子任务列表
List<TaskItem> subTasks = subTasksMap.get(taskId);
if (subTasks != null && !subTasks.isEmpty()) {
item.setSubTasks(subTasks);
item.setSubTaskTotal(subTasks.size());
}
}
}
/**
* 获取已完成的子任务列表

View File

@ -225,4 +225,22 @@ public class TaskItem implements Serializable {
*/
@TableField(exist = false)
private String previewImage;
/**
* 是否流水线任务(非数据库字段,从主任务关联)
*/
@TableField(exist = false)
private Integer isPipeline;
/**
* 同一主任务的所有子任务列表(非数据库字段)
*/
@TableField(exist = false)
private java.util.List<TaskItem> subTasks;
/**
* 主任务的子任务总数(非数据库字段)
*/
@TableField(exist = false)
private Integer subTaskTotal;
}

View File

@ -1046,8 +1046,6 @@ public class TaskService {
// 填充关联信息
fillTaskRelatedInfo(task);
// 填充子任务统计信息(包含子任务列表)
fillSubTaskStats(task);
return task;
}

View File

@ -4403,7 +4403,10 @@ const mapTaskItemToTask = (item: any) => ({
status: 'in_progress',
receiverName: item.receiverName, // 接单人姓名(部门负责人查看时显示)
deadline: item.deadline, // 子任务截止时间(接单时计算)
startTime: item.createTime // 使用创建时间作为开始时间
startTime: item.createTime, // 使用创建时间作为开始时间
isPipeline: item.isPipeline, // 是否流水线任务(从主任务获取)
subTasks: item.subTasks, // 同一主任务的所有子任务列表
subTaskTotal: item.subTaskTotal || (item.subTasks ? item.subTasks.length : 0) // 子任务总数
})
// 加载待审核任务(所有处于审批流程中的任务 + 部门负责人的子任务组)