fix: 子任务进度变化时同步更新主任务进度
This commit is contained in:
parent
767276b00d
commit
ac7a114deb
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 驳回子任务
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user