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
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);
|
|
}
|
|
}
|
|
}
|
|
|