From 5d626b55c9a50f7cf634b14751562df6446d0d04 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 14 Jan 2026 14:05:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E4=B8=AD=E4=BB=BB=E5=8A=A1=E4=B8=8D=E6=98=BE=E7=A4=BA=E5=AD=90?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=88=97=E8=A1=A8=E6=A8=A1=E5=9D=97=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 后端修改: - 在TaskItem实体类中添加isPipeline、subTasks、subTaskTotal字段 - 在TaskItemController中添加enrichTaskItemsWithSubTasks方法 - 获取进行中子任务时,自动填充同一主任务的所有子任务信息 前端修改: - 在mapTaskItemToTask函数中添加isPipeline、subTasks、subTaskTotal字段映射 - 这样前端可以正确显示流水线任务的子任务进度时间线 --- .../controller/TaskItemController.java | 69 +++++++++++++++++++ .../java/com/designhub/entity/TaskItem.java | 18 +++++ .../com/designhub/service/TaskService.java | 2 - frontend/src/views/TaskHall.vue | 5 +- 4 files changed, 91 insertions(+), 3 deletions(-) diff --git a/backend/src/main/java/com/designhub/controller/TaskItemController.java b/backend/src/main/java/com/designhub/controller/TaskItemController.java index b0a08ac..fe54e1c 100644 --- a/backend/src/main/java/com/designhub/controller/TaskItemController.java +++ b/backend/src/main/java/com/designhub/controller/TaskItemController.java @@ -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 items) { + if (items == null || items.isEmpty()) { + return; + } + + // 收集所有主任务ID + Set taskIds = items.stream() + .map(TaskItem::getTaskId) + .filter(id -> id != null) + .collect(Collectors.toSet()); + + if (taskIds.isEmpty()) { + return; + } + + // 批量查询主任务信息 + List tasks = taskMapper.selectBatchIds(taskIds); + Map taskMap = tasks.stream() + .collect(Collectors.toMap(Task::getId, t -> t)); + + // 批量查询所有相关子任务 + List allSubTasks = taskItemMapper.selectList( + new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper() + .in(TaskItem::getTaskId, taskIds) + .orderByAsc(TaskItem::getSortOrder) + ); + + // 按主任务ID分组 + Map> 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 subTasks = subTasksMap.get(taskId); + if (subTasks != null && !subTasks.isEmpty()) { + item.setSubTasks(subTasks); + item.setSubTaskTotal(subTasks.size()); + } + } + } /** * 获取已完成的子任务列表 diff --git a/backend/src/main/java/com/designhub/entity/TaskItem.java b/backend/src/main/java/com/designhub/entity/TaskItem.java index 233d647..ff1b1ce 100644 --- a/backend/src/main/java/com/designhub/entity/TaskItem.java +++ b/backend/src/main/java/com/designhub/entity/TaskItem.java @@ -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 subTasks; + + /** + * 主任务的子任务总数(非数据库字段) + */ + @TableField(exist = false) + private Integer subTaskTotal; } diff --git a/backend/src/main/java/com/designhub/service/TaskService.java b/backend/src/main/java/com/designhub/service/TaskService.java index fa9ddd2..b015e02 100644 --- a/backend/src/main/java/com/designhub/service/TaskService.java +++ b/backend/src/main/java/com/designhub/service/TaskService.java @@ -1046,8 +1046,6 @@ public class TaskService { // 填充关联信息 fillTaskRelatedInfo(task); - // 填充子任务统计信息(包含子任务列表) - fillSubTaskStats(task); return task; } diff --git a/frontend/src/views/TaskHall.vue b/frontend/src/views/TaskHall.vue index 59f7c6e..b7c64ff 100644 --- a/frontend/src/views/TaskHall.vue +++ b/frontend/src/views/TaskHall.vue @@ -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) // 子任务总数 }) // 加载待审核任务(所有处于审批流程中的任务 + 部门负责人的子任务组)