using Quartz; using System; using System.Collections.Generic; using System.Threading.Tasks; using YiSha.Business.AutoJob.IBusiness; using YiSha.Business.AutoJob.IService; using YiSha.Entity.SystemManage; using YiSha.IBusiness.SystemManage; using YiSha.Util; using YiSha.Util.Model; namespace YiSha.Business.AutoJob.Service { public class JobCenterService : IJobCenterService { private IAutoJobBLL _autoJobBLL; private IJobSchedulerBusiness _jobSchedulerBusiness; public JobCenterService(IAutoJobBLL autoJobBLL, IJobSchedulerBusiness jobSchedulerBusiness) { _autoJobBLL = autoJobBLL; _jobSchedulerBusiness = jobSchedulerBusiness; } public void Start() { Task.Run(async () => { TData> obj = await _autoJobBLL.GetListPartial(null); if (obj.Success) { AddScheduleJob(obj.Data); } }); } #region 添加任务计划 /// /// 添加任务计划 /// /// private void AddScheduleJob(List entityList) { try { foreach (AutoJobEntity entity in entityList) { if (entity.StartTime == null) { entity.StartTime = DateTime.Now; } DateTimeOffset starRunTime = DateBuilder.NextGivenSecondDate(entity.StartTime, 1); if (entity.EndTime == null) { entity.EndTime = DateTime.MaxValue.AddDays(-1); } DateTimeOffset endRunTime = DateBuilder.NextGivenSecondDate(entity.EndTime, 1); var scheduler = _jobSchedulerBusiness.GetScheduler(); IJobDetail job = JobBuilder.Create().WithIdentity(entity.JobName, entity.JobGroupName).Build(); job.JobDataMap.Add("Id", entity.Id); ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create() .StartAt(starRunTime) .EndAt(endRunTime) .WithIdentity(entity.JobName, entity.JobGroupName) .WithCronSchedule(entity.CronExpression) .Build(); scheduler.ScheduleJob(job, trigger); scheduler.Start(); } } catch (Exception ex) { LogHelper.Error(ex); } } #endregion #region 添加任务计划 /// /// 添加任务计划 /// /// public void ClearScheduleJob() { try { _jobSchedulerBusiness.GetScheduler().Clear(); } catch (Exception ex) { LogHelper.Error(ex); } } #endregion } }