fix: 修复进行中任务不显示子任务列表模块的问题
后端修改: - 在TaskItem实体类中添加isPipeline、subTasks、subTaskTotal字段 - 在TaskItemController中添加enrichTaskItemsWithSubTasks方法 - 获取进行中子任务时,自动填充同一主任务的所有子任务信息 前端修改: - 在mapTaskItemToTask函数中添加isPipeline、subTasks、subTaskTotal字段映射 - 这样前端可以正确显示流水线任务的子任务进度时间线
This commit is contained in:
parent
cff7b795b7
commit
5d626b55c9
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取已完成的子任务列表
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -1046,8 +1046,6 @@ public class TaskService {
|
||||
|
||||
// 填充关联信息
|
||||
fillTaskRelatedInfo(task);
|
||||
// 填充子任务统计信息(包含子任务列表)
|
||||
fillSubTaskStats(task);
|
||||
|
||||
return task;
|
||||
}
|
||||
|
||||
@ -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) // 子任务总数
|
||||
})
|
||||
|
||||
// 加载待审核任务(所有处于审批流程中的任务 + 部门负责人的子任务组)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user