fix: 子任务进度变化时同步更新主任务进度

This commit is contained in:
Your Name 2026-01-08 10:19:34 +08:00
parent 767276b00d
commit ac7a114deb

View File

@ -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<TaskItem> allItems = taskItemMapper.selectList(
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<TaskItem>()
.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);
}
}
/**
* 驳回子任务