feat: 手动执行计划作业 (#122)

This commit is contained in:
2024-05-15 14:50:26 +08:00
committed by GitHub
parent 7214a22ea5
commit 3b8336105a
9 changed files with 109 additions and 8 deletions

View File

@ -20,6 +20,11 @@ public interface IJobModule : ICrudModule<CreateJobReq, QueryJobRsp // 创建类
/// </summary>
Task<QueryJobRsp> EditAsync(UpdateJobReq req);
/// <summary>
/// 执行作业
/// </summary>
Task ExecuteAsync(QueryJobReq req);
/// <summary>
/// 获取作业记录条形图数据
/// </summary>

View File

@ -1,4 +1,5 @@
using Cronos;
using FreeSql.Internal;
using NetAdmin.Application.Repositories;
using NetAdmin.Application.Services;
using NetAdmin.Domain.DbMaps.Sys;
@ -84,6 +85,41 @@ public sealed class JobService(DefaultRepository<Sys_Job> rpo, IJobRecordService
return (await update.ExecuteUpdatedAsync().ConfigureAwait(false))[0].Adapt<QueryJobRsp>();
}
/// <inheritdoc />
public async Task ExecuteAsync(QueryJobReq req)
{
req.ThrowIfInvalid();
var df = new DynamicFilterInfo {
Filters = [
new DynamicFilterInfo {
Field = nameof(QueryJobReq.Enabled)
, Operator = DynamicFilterOperators.Eq
, Value = true
}
, new DynamicFilterInfo {
Field = nameof(QueryJobReq.Status)
, Operator = DynamicFilterOperators.Eq
, Value = JobStatues.Idle
}
]
};
var job = await QueryInternal(new QueryReq<QueryJobReq> { Count = 1, Filter = req, DynamicFilter = df })
.ToOneAsync()
.ConfigureAwait(false) ?? throw new NetAdminInvalidOperationException(Ln.);
var nextExecTime = GetNextExecTime(Chars.FLG_CRON_PER_SECS);
try {
_ = await UpdateAsync(job.Adapt<UpdateJobReq>() with {
NextExecTime = nextExecTime
, NextTimeId = nextExecTime?.TimeUnixUtc()
})
.ConfigureAwait(false);
}
catch (DbUpdateVersionException) {
throw new NetAdminInvalidOperationException(Ln.);
}
}
/// <inheritdoc />
public Task<bool> ExistAsync(QueryReq<QueryJobReq> req)
{