using Apache.NMS.ActiveMQ.Threads; using FluentScheduler; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using Rhea.Common; using SqlSugar; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using Tiger.IBusiness; using Tiger.Model; using Tiger.Model.Minsun; namespace Tiger.Business { /// /// 接口服务 /// public class InterfaceService: IInterfaceService { public Sundial.ISchedulerFactory _schedulerFactory { get; set; } /// /// 设置计划任务工厂类 /// /// public void SetSchedulerFactory(Sundial.ISchedulerFactory schedulerFactory) { _schedulerFactory = schedulerFactory; } /// /// 根据实体类名及作业名称添加作业 /// /// /// /// public ApiAction AddJob(TJob newEntity, TskJobParam jobParam) where TJob : class, Sundial.IJob { ApiAction apiAction = new(); Sundial.TriggerBuilder triggerBuilder = Sundial.Triggers.Period(jobParam.Period * 60 * 1000).LoadFrom(new { TriggerId = jobParam.JobName + "_trigger1", }); _schedulerFactory.AddJob(jobParam.JobName, triggerBuilder); return apiAction; } /// /// 根据作业名称添加作业 /// /// /// /// public ApiAction AddJob(string jobname, params Sundial.TriggerBuilder[] triggerBuilders) where TJob : class, Sundial.IJob { ApiAction apiAction = new(); triggerBuilders[0].LoadFrom(new { TriggerId = jobname + "_trigger1", }); _schedulerFactory.AddJob(jobname, triggerBuilders); var trigger = GetJob(jobname).GetTrigger($"{jobname}_trigger1"); return apiAction; } /// /// 更新作业 /// /// /// public ApiAction UpdateJob(TSK_JOB job) { ApiAction apiAction = new ApiAction(); Sundial.IScheduler scheduler = GetJob(job.JobName); var trigger = scheduler.GetTrigger($"{job.JobName}_trigger1"); if (trigger.Status == Sundial.TriggerStatus.Running) { apiAction.IsSuccessed = false; apiAction.Message = $"作业[{job.JobName}]正在运行不能编辑"; } //更新触发器周期 scheduler.UpdateTrigger($"{job.JobName}_trigger1", triggerBuilder => { triggerBuilder.SetArgs(job.uPeriod*60*1000); }); ; return apiAction; } private TSK_JOB ReturnDetail(string jobname) { var jobDetail = GetJob(jobname).GetJobDetail(); return JsonConvert.DeserializeObject(JsonConvert.SerializeObject(jobDetail)); } /// /// 启动所有作业 /// public void StartAllJob() { _schedulerFactory.StartAll(); } /// /// 启动单个作业 /// /// public void StartJob(string jobname) { // 带返回值 Sundial.IScheduler scheduler; var scheduleResult = _schedulerFactory.TryRunJob(jobname, out scheduler); } /// /// 获取单个作业 /// /// /// public Sundial.IScheduler GetJob(string jobname) { Sundial.IScheduler scheduler; var scheduleResult = _schedulerFactory.TryGetJob(jobname, out scheduler); return scheduler; } /// /// 获取所有作业 /// /// public List GetJobs() { return _schedulerFactory.GetJobs().ToList(); } /// /// 暂停作业 /// /// public void PauseJob(string jobname) { var scheduler = GetJob(jobname); if (scheduler != null) { scheduler.Pause(); } } /// /// 删除作业 /// /// public void RemoveJob(string jobname) { var scheduler = GetJob(jobname); if (scheduler != null) { scheduler.Remove(); } } /// /// 从数据库加载作业 /// public void AddJobFromDB() { ; } public void JobInitialize() { JobManager.Initialize(); } ApiAction IInterfaceService.AddTskJob(TJob newEntity, FluentJobParam jobParam) { throw new NotImplementedException(); } public void RemovefJob(string jobname) { throw new NotImplementedException(); } } }