From ac7a114deb7094feab5c6f212631040ee1b1cf2d Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 8 Jan 2026 10:19:34 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=AD=90=E4=BB=BB=E5=8A=A1=E8=BF=9B?= =?UTF-8?q?=E5=BA=A6=E5=8F=98=E5=8C=96=E6=97=B6=E5=90=8C=E6=AD=A5=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E4=B8=BB=E4=BB=BB=E5=8A=A1=E8=BF=9B=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designhub/service/TaskItemService.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/backend/src/main/java/com/designhub/service/TaskItemService.java b/backend/src/main/java/com/designhub/service/TaskItemService.java index c9c77ea..5c17851 100644 --- a/backend/src/main/java/com/designhub/service/TaskItemService.java +++ b/backend/src/main/java/com/designhub/service/TaskItemService.java @@ -344,6 +344,9 @@ public class TaskItemService { log.info("子任务 {} 进度已更新为 {}%", itemId, progress); + // 🔥 同步更新主任务的整体进度 + updateMainTaskProgress(item.getTaskId()); + // 获取主任务信息,通知需求者(发布者) try { Task mainTask = taskMapper.selectById(item.getTaskId()); @@ -602,6 +605,7 @@ public class TaskItemService { // 所有子任务完成,更新主任务状态 mainTask.setStatus("completed"); + mainTask.setProgress(100); // 🔥 设置主任务进度为100% mainTask.setCompleteTime(LocalDateTime.now()); mainTask.setUpdateTime(LocalDateTime.now()); // 🔥 保存最后一组的下载链接到主任务 @@ -629,12 +633,52 @@ public class TaskItemService { result.put("mainTaskCompleted", true); } else { + // 🔥 子任务完成但主任务未全部完成,更新主任务整体进度 + updateMainTaskProgress(item.getTaskId()); + result.put("mainTaskCompleted", false); result.put("progress", completedCount + "/" + totalCount); } return result; } + + /** + * 🔥 同步更新主任务的整体进度 + * 根据所有子任务的进度计算主任务的平均进度 + */ + private void updateMainTaskProgress(Long taskId) { + try { + // 查询该任务的所有子任务 + List allItems = taskItemMapper.selectList( + new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper() + .eq(TaskItem::getTaskId, taskId) + ); + + if (allItems.isEmpty()) { + return; + } + + // 计算所有子任务的平均进度 + int totalProgress = 0; + for (TaskItem item : allItems) { + totalProgress += (item.getProgress() != null ? item.getProgress() : 0); + } + int avgProgress = totalProgress / allItems.size(); + + // 更新主任务进度 + Task mainTask = taskMapper.selectById(taskId); + if (mainTask != null) { + mainTask.setProgress(avgProgress); + mainTask.setUpdateTime(LocalDateTime.now()); + taskMapper.updateById(mainTask); + log.info("主任务 {} 进度已更新为 {}%(基于 {} 个子任务的平均进度)", + taskId, avgProgress, allItems.size()); + } + } catch (Exception e) { + log.error("更新主任务进度失败: taskId={}", taskId, e); + } + } /** * 驳回子任务