namespace Admin.NET.Core.Service; /// /// 系统作业任务服务 /// [ApiDescriptionSettings(Order = 188)] public class SysJobService : IDynamicApiController, ITransient { private readonly SqlSugarRepository _sysJobDetailRep; private readonly SqlSugarRepository _sysJobTriggerRep; private readonly SqlSugarRepository _sysJobClusterRep; private readonly ISchedulerFactory _schedulerFactory; public SysJobService(SqlSugarRepository sysJobDetailRep, SqlSugarRepository sysJobTriggerRep, SqlSugarRepository sysJobClusterRep, ISchedulerFactory schedulerFactory) { _sysJobDetailRep = sysJobDetailRep; _sysJobTriggerRep = sysJobTriggerRep; _sysJobClusterRep = sysJobClusterRep; _schedulerFactory = schedulerFactory; } /// /// 获取作业分页列表 /// [HttpGet("/sysJob/page")] public async Task> GetJobPage([FromQuery] PageJobInput input) { var jobDetails = await _sysJobDetailRep.AsQueryable() .WhereIF(!string.IsNullOrWhiteSpace(input.JobId), u => u.JobId.Contains(input.JobId)) .WhereIF(!string.IsNullOrWhiteSpace(input.Description), u => u.Description.Contains(input.Description)) .Select(d => new JobOutput { JobDetail = d, }).ToPagedListAsync(input.Page, input.PageSize); await _sysJobDetailRep.AsSugarClient().ThenMapperAsync(jobDetails.Items, async u => { u.JobTriggers = await _sysJobTriggerRep.GetListAsync(t => t.JobId == u.JobDetail.JobId); }); return jobDetails; } /// /// 添加作业 /// /// [HttpPost("/sysJob/detailAdd")] public async Task AddJobDetail(AddJobDetailInput input) { var isExist = await _sysJobDetailRep.IsAnyAsync(u => u.JobId == input.JobId && u.Id != input.Id); if (isExist) throw Oops.Oh(ErrorCodeEnum.D1006); await _sysJobDetailRep.UpdateAsync(input.Adapt()); } /// /// 更新作业 /// /// [HttpPost("/sysJob/detailUpdate")] public async Task UpdateJobDetail(UpdateJobDetailInput input) { var isExist = await _sysJobDetailRep.IsAnyAsync(u => u.JobId == input.JobId && u.Id != input.Id); if (isExist) throw Oops.Oh(ErrorCodeEnum.D1006); await _sysJobDetailRep.UpdateAsync(input.Adapt()); } /// /// 删除作业 /// /// [HttpPost("/sysJob/detailDelete")] public async Task DeleteJobDetail(DeleteJobDetailInput input) { await _sysJobDetailRep.DeleteAsync(u => u.JobId == input.JobId); await _sysJobTriggerRep.DeleteAsync(u => u.JobId == input.JobId); var schedulerResult = _schedulerFactory.TryRemoveJob(input.JobId, out _); return await Task.FromResult(schedulerResult); } /// /// 获取触发器列表 /// [HttpGet("/sysJob/triggerList")] public async Task> GetJobTriggerList([FromQuery] JobDetailInput input) { return await _sysJobTriggerRep.AsQueryable() .WhereIF(!string.IsNullOrWhiteSpace(input.JobId), u => u.JobId.Contains(input.JobId)) .ToListAsync(); } /// /// 添加作业 /// /// [HttpPost("/sysJob/triggerAdd")] public async Task AddJobTrigger(AddJobTriggerInput input) { var isExist = await _sysJobDetailRep.IsAnyAsync(u => u.JobId == input.JobId && u.Id != input.Id); if (isExist) throw Oops.Oh(ErrorCodeEnum.D1006); await _sysJobDetailRep.UpdateAsync(input.Adapt()); } /// /// 更新触发器 /// /// [HttpPost("/sysJob/triggerUpdate")] public async Task UpdateJobTrigger(UpdateJobTriggerInput input) { var isExist = await _sysJobDetailRep.IsAnyAsync(u => u.JobId == input.JobId && u.Id != input.Id); if (isExist) throw Oops.Oh(ErrorCodeEnum.D1006); await _sysJobDetailRep.UpdateAsync(input.Adapt()); } /// /// 删除触发器 /// /// [HttpPost("/sysJob/triggerDelete")] public async Task DeleteJobTrigger(DeleteJobTriggerInput input) { await _sysJobTriggerRep.DeleteAsync(u => u.JobId == input.JobId); } /// /// 获取集群列表 /// [HttpGet("/sysJob/clusterList")] public async Task> GetJobClusterList() { return await _sysJobClusterRep.GetListAsync(); } }