using Microsoft.AspNetCore.Mvc; using Quartz; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Wood.AutoJob; using Wood.Data.Repository; using Wood.Entity; using Wood.Entity.SystemManage; using Wood.Service.SystemManage.Dto; using Wood.Service.SystemManage.Param; namespace Wood.Service.SystemManage { public class AutoJobService : ApiService { private readonly SqlSugarRepository _jobTriggerRepository; private readonly SqlSugarRepository _jobDetailRepository; private readonly ISchedulerFactory _iSchedulerFactory; public AutoJobService(SqlSugarRepository jobTriggerRepository, ISchedulerFactory iSchedulerFactory, SqlSugarRepository jobDetailRepository) { _jobTriggerRepository = jobTriggerRepository; _iSchedulerFactory = iSchedulerFactory; _jobDetailRepository = jobDetailRepository; } /// /// 自动任务列表 /// /// /// public async Task> Paged(AutoJobPagedParam param) { return await _jobTriggerRepository.AsQueryable() .LeftJoin((it, jd) => it.JobId == jd.JobId) .WhereIF(!string.IsNullOrEmpty(param.Description), it => it.Description!.Contains(param.Description!)) .Select((it, jd) => new AutoJobDto { Id = it.Id.SelectAll(), GroupName = jd.GroupName, JobType = jd.JobType, AssemblyName = jd.AssemblyName, JobDescription = jd.Description, }) .ToPagedListAsync(param); } /// /// 启动 /// /// /// [HttpGet] public async Task Start(BaseIdParam param) { var jobTrigger = await _jobTriggerRepository.GetByIdAsync(param.Id); //var jobDetail = await _jobDetailRepository.GetFirstAsync(it => it.JobId == jobTrigger.JobId); jobTrigger.Status = TriggerStatusEnum.Ready; await _jobTriggerRepository.UpdateAsync(jobTrigger); //var scheduler = await _iSchedulerFactory.GetScheduler(); //var jobType = typeof(AutoJobCenter).Assembly.GetType(jobDetail.JobType!); //if (jobType != null) //{ // IJobDetail job = JobBuilder.Create(jobType!).WithIdentity(jobDetail.JobId!, jobDetail.GroupName!).Build(); // job.JobDataMap.Add("DetailId", jobDetail.Id); // job.JobDataMap.Add("TriggerId", jobTrigger.Id); // await scheduler.ScheduleJob(job, AutoJobCenter.CreateTrigger(jobTrigger, jobDetail)); //} } /// /// 暂停 /// /// /// [HttpGet] public async Task Stop(BaseIdParam param) { var jobTrigger = await _jobTriggerRepository.GetByIdAsync(param.Id); //var jobDetail = await _jobDetailRepository.GetFirstAsync(it => it.JobId == jobTrigger.JobId); jobTrigger.Status = TriggerStatusEnum.Pause; await _jobTriggerRepository.UpdateAsync(jobTrigger); //var scheduler = await _iSchedulerFactory.GetScheduler(); //JobKey jk = new JobKey(jobDetail.JobId,jobDetail.GroupName); //TriggerKey tk=new TriggerKey(jobTrigger.TriggerId, jobDetail.GroupName); //if (await scheduler.CheckExists(tk)) // await scheduler.UnscheduleJob(tk); //if (await scheduler.CheckExists(jk)) // await scheduler.DeleteJob(jk); } /// /// 延期任务 /// /// /// public async Task Deferred(AutoJobDeferredParam param) { var jobTrigger = await _jobTriggerRepository.GetByIdAsync(param.Id); jobTrigger.EndTime = param.EndTime; jobTrigger.Status = TriggerStatusEnum.Ready; await _jobTriggerRepository.UpdateAsync(jobTrigger); } } }