You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

115 lines
4.4 KiB

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<JobTriggerEntity> _jobTriggerRepository;
private readonly SqlSugarRepository<JobDetailEntity> _jobDetailRepository;
private readonly ISchedulerFactory _iSchedulerFactory;
public AutoJobService(SqlSugarRepository<JobTriggerEntity> jobTriggerRepository, ISchedulerFactory iSchedulerFactory, SqlSugarRepository<JobDetailEntity> jobDetailRepository)
{
_jobTriggerRepository = jobTriggerRepository;
_iSchedulerFactory = iSchedulerFactory;
_jobDetailRepository = jobDetailRepository;
}
/// <summary>
/// 自动任务列表
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
public async Task<TDataPaged<AutoJobDto>> Paged(AutoJobPagedParam param)
{
return await _jobTriggerRepository.AsQueryable()
.LeftJoin<JobDetailEntity>((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);
}
/// <summary>
/// 启动
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
[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));
//}
}
/// <summary>
/// 暂停
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
[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);
}
/// <summary>
/// 延期任务
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
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);
}
}
}