namespace Dpz.Core.Service.RepositoryServiceImpl;
public class WaitExecutionService(IRepository<WaitExecution> repository, IMapper mapper)
: IWaitExecutionService
{
public async Task<IList<VmWaitExecution>> GetNotExecuteTaskAsync()
{
var list = await repository
.SearchFor(x => x.Status != ExecuteStatus.ExecuteComplete)
.OrderBy(x => x.Id)
.Take(1000)
.ToListAsync();
return mapper.Map<List<VmWaitExecution>>(list);
}
public async Task UpdateStatusAsync(string id, ExecuteStatus status)
{
if (ObjectId.TryParse(id, out var oid))
{
var update = Builders<WaitExecution>
.Update.Set(x => x.Status, status)
.Set(x => x.LastUpdateTime, DateTime.Now);
await repository.UpdateAsync(x => x.Id == oid, update);
}
}
public async Task ClearExpiredAsync()
{
var ids = await repository
.SearchFor(x => x.Status == ExecuteStatus.ExecuteComplete)
.OrderByDescending(x => x.Id)
.ThenByDescending(x => x.LastUpdateTime)
.Take(1000)
.Select(x => x.Id)
.ToListAsync();
var filter = Builders<WaitExecution>.Filter.In(x => x.Id, ids);
await repository.DeleteAsync(filter);
}
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
上述代码定义了一个名为 WaitExecutionService 的服务类,它实现了 IWaitExecutionService 接口。这个服务类主要用于处理与等待执行的任务相关的操作,具体功能如下:
获取未执行的任务 (
GetNotExecuteTaskAsync):- 该方法从数据库中检索状态不为
ExecuteComplete的WaitExecution记录,最多返回 1000 条记录,并将其映射到VmWaitExecution视图模型列表中。 - 使用
IRepository<WaitExecution>接口的SearchFor方法进行查询,并使用OrderBy和Take方法进行排序和限制结果数量。
- 该方法从数据库中检索状态不为
更新任务状态 (
UpdateStatusAsync):- 该方法接受一个任务的 ID 和新的执行状态。首先,它尝试将字符串 ID 解析为
ObjectId。 - 如果解析成功,使用 MongoDB 的更新构建器 (
Builders<WaitExecution>.Update) 更新该任务的状态和最后更新时间。
- 该方法接受一个任务的 ID 和新的执行状态。首先,它尝试将字符串 ID 解析为
清除过期的任务 (
ClearExpiredAsync):- 该方法查找所有状态为
ExecuteComplete的任务,并按 ID 和最后更新时间降序排列,最多返回 1000 条记录。 - 然后,它使用这些任务的 ID 构建一个过滤器,并从数据库中删除这些记录。
- 该方法查找所有状态为
添加任务 (
AddToTaskAsync):- 该方法接受两个参数:一个可选的
ObjectId集合(表示图像的 ID)和一个可选的字符串集合(表示图像的 URL)。 - 它会创建一个
WaitExecution对象的列表,表示待执行的删除任务(使用图像 URL),并将其状态设置为NotExecute。 - 如果有待执行的任务,则调用
AddExecuteTaskAsync方法将这些任务插入到数据库中。
- 该方法接受两个参数:一个可选的
添加执行任务 (
AddExecuteTaskAsync):- 该方法接受一个或多个
WaitExecution对象,并将它们插入到数据库中。
- 该方法接受一个或多个
总结
WaitExecutionService 类提供了一系列方法来管理等待执行的任务,包括获取未执行的任务、更新任务状态、清除已完成的任务以及添加新的执行任务。它利用了 MongoDB 的查询和更新功能,并通过 IMapper 进行对象映射。
评论加载中...