feat(api, core, dal, domain): В таблицу Tasks добавлено поле процент выполнения, так же добавлено это поле в response - статус формирования отчета. Создан интерфейс для отслеживания прогресса IProgressAsync. Из сервиса WorkloadService исключен ITaskManagementService.

This commit is contained in:
Mikhail Trubnikov
2026-05-20 14:26:25 +10:00
parent 8f61bbb73e
commit 68808e761b
17 changed files with 4160 additions and 41 deletions

View File

@@ -15,24 +15,45 @@ namespace PARR.DAL.Repositories.TaskRepositories
public async Task<int> TaskCaptureAsync(Guid taskId)
{
//var affectedRows = await EntityContext.Database.ExecuteSqlInterpolatedAsync($@"
// UPDATE ""{DatabaseSchemas.Task}"".""Tasks""
// SET ""{nameof(TaskItem.StatusCode)}""={(int)TaskItemStatusEnum.Processing},
// ""{nameof(TaskItem.DateModified)}""={DateTimeOffset.UtcNow}
// WHERE ""{nameof(TaskItem.Id)}""={taskId}
// AND ""{nameof(TaskItem.StatusCode)}""={(int)TaskItemStatusEnum.Pending}
//");
//var sql = $@"
// UPDATE ""{DatabaseSchemas.Task}"".""Tasks""
// SET ""{nameof(TaskItem.StatusCode)}"" = {(int)TaskItemStatusEnum.Processing},
// ""{nameof(TaskItem.DateModified)}"" = {{0}}
// WHERE ""{nameof(TaskItem.Id)}"" = {{1}}
// AND ""{nameof(TaskItem.StatusCode)}"" = {(int)TaskItemStatusEnum.Pending}";
var sql = $@"
UPDATE ""{DatabaseSchemas.Task}"".""Tasks""
SET ""{nameof(TaskItem.StatusCode)}"" = {(int)TaskItemStatusEnum.Processing},
""{nameof(TaskItem.DateModified)}"" = {{0}}
WHERE ""{nameof(TaskItem.Id)}"" = {{1}}
AND ""{nameof(TaskItem.StatusCode)}"" = {(int)TaskItemStatusEnum.Pending}";
//var affectedRows = await EntityContext.Database.ExecuteSqlRawAsync(sql, DateTimeOffset.UtcNow, taskId);
var affectedRows = await EntityContext.Database.ExecuteSqlRawAsync(sql, DateTimeOffset.UtcNow, taskId);
//return affectedRows;
return affectedRows;
return await EntityContext.Tasks.Where(t => t.Id == taskId && t.StatusCode == TaskItemStatusEnum.Pending)
.ExecuteUpdateAsync(t=>t
.SetProperty(p=>p.StatusCode, TaskItemStatusEnum.Processing)
.SetProperty(p => p.DateModified, DateTimeOffset.UtcNow)
);
}
public async Task<int> UpdateProgressAsync(Guid taskId, int percent)
{
// Валидация на уровне БД
if (percent < 0)
percent = 0;
if (percent > 100)
percent = 100;
//return await EntityContext.Database.ExecuteSqlInterpolatedAsync($@"
// UPDATE ""{DatabaseSchemas.Task}"".""Tasks""
// SET ""{nameof(TaskItem.ProgressPercent)}"" = {percent},
// ""{nameof(TaskItem.DateModified)}"" = {DateTimeOffset.UtcNow}
// WHERE ""{nameof(TaskItem.Id)}"" = {taskId}");
// Атомарное обновление
return await EntityContext.Tasks.Where(t => t.Id == taskId).ExecuteUpdateAsync(t => t
.SetProperty(x => x.ProgressPercent, percent)
//.SetProperty(x => x.DateModified, DateTimeOffset.UtcNow)
);
}
}