🐛 Fix bugs

This commit is contained in:
2025-11-10 02:06:21 +08:00
parent 741ed18ce5
commit db7d994039

View File

@@ -697,14 +697,21 @@ public class PersistentTaskService(
{ {
var previousProgress = task.ChunksCount > 0 ? (double)task.ChunksUploaded / task.ChunksCount * 100 : 0; var previousProgress = task.ChunksCount > 0 ? (double)task.ChunksUploaded / task.ChunksCount * 100 : 0;
// Use ExecuteUpdateAsync for better performance - update only the fields we need // Get current parameters and update them directly
var parameters = task.TypedParameters;
if (!parameters.UploadedChunks.Contains(chunkIndex))
{
parameters.UploadedChunks.Add(chunkIndex);
parameters.ChunksUploaded = parameters.UploadedChunks.Count;
var now = SystemClock.Instance.GetCurrentInstant(); var now = SystemClock.Instance.GetCurrentInstant();
// Use ExecuteUpdateAsync to update the Parameters dictionary directly
var updatedRows = await db.Tasks var updatedRows = await db.Tasks
.OfType<PersistentUploadTask>() .OfType<PersistentUploadTask>()
.Where(t => t.TaskId == taskId) .Where(t => t.TaskId == taskId)
.ExecuteUpdateAsync(setters => setters .ExecuteUpdateAsync(setters => setters
.SetProperty(t => t.UploadedChunks, t => t.UploadedChunks.Append(chunkIndex).Distinct().ToList()) .SetProperty(t => t.Parameters, ParameterHelper.Untyped(parameters))
.SetProperty(t => t.ChunksUploaded, t => t.UploadedChunks.Count)
.SetProperty(t => t.LastActivity, now) .SetProperty(t => t.LastActivity, now)
.SetProperty(t => t.UpdatedAt, now) .SetProperty(t => t.UpdatedAt, now)
); );
@@ -724,6 +731,7 @@ public class PersistentTaskService(
} }
} }
} }
}
/// <summary> /// <summary>
/// Checks if a chunk has already been uploaded /// Checks if a chunk has already been uploaded
@@ -822,13 +830,13 @@ public class PersistentTaskService(
var stats = new UserUploadStats var stats = new UserUploadStats
{ {
TotalTasks = tasks.Count, TotalTasks = tasks.Count,
InProgressTasks = tasks.Count(t => t.Status == Model.TaskStatus.InProgress), InProgressTasks = tasks.Count(t => t.Status == TaskStatus.InProgress),
CompletedTasks = tasks.Count(t => t.Status == Model.TaskStatus.Completed), CompletedTasks = tasks.Count(t => t.Status == TaskStatus.Completed),
FailedTasks = tasks.Count(t => t.Status == Model.TaskStatus.Failed), FailedTasks = tasks.Count(t => t.Status == TaskStatus.Failed),
ExpiredTasks = tasks.Count(t => t.Status == Model.TaskStatus.Expired), ExpiredTasks = tasks.Count(t => t.Status == TaskStatus.Expired),
TotalUploadedBytes = tasks.Sum(t => (long)t.ChunksUploaded * t.ChunkSize), TotalUploadedBytes = tasks.Sum(t => t.ChunksUploaded * t.ChunkSize),
AverageProgress = tasks.Any(t => t.Status == Model.TaskStatus.InProgress) AverageProgress = tasks.Any(t => t.Status == TaskStatus.InProgress)
? tasks.Where(t => t.Status == Model.TaskStatus.InProgress) ? tasks.Where(t => t.Status == TaskStatus.InProgress)
.Average(t => t.ChunksCount > 0 ? (double)t.ChunksUploaded / t.ChunksCount * 100 : 0) .Average(t => t.ChunksCount > 0 ? (double)t.ChunksUploaded / t.ChunksCount * 100 : 0)
: 0, : 0,
RecentActivity = tasks.OrderByDescending(t => t.LastActivity) RecentActivity = tasks.OrderByDescending(t => t.LastActivity)