duyongjia
2024-12-14 1bdb5689ddf1560a312de9413ce1c26e5163627d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
using Org.BouncyCastle.Tls;
using Quartz;
using Quartz.Impl;
using Quartz.Impl.Matchers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Model.Models;
 
namespace WIDESEA_SystemService.Scheduler
{
    public class SchedulerCenter
    {
        /// <summary>
        /// 调度中心
        /// </summary>
        private static IScheduler _scheduler = StdSchedulerFactory.GetDefaultScheduler().Result;
 
        public SchedulerCenter()
        {
 
        }
 
        public IScheduler center { get => _scheduler; }
 
 
        public bool IsRun()
        {
            return !_scheduler.IsShutdown && _scheduler.IsStarted;
        }
 
        /// <summary>
        /// 添加作业
        /// </summary>
        /// <param name="jobparms"></param>
        public async void AddJob(Sys_Job jobparms)
        {
            JobKey jobKey = new JobKey(jobparms.JobName, jobparms.JobGroup);
 
            Assembly assembly = Assembly.Load(new AssemblyName(jobparms.AssemblyName));
            Type jobType = assembly.GetType(jobparms.AssemblyName + "." + jobparms.ClassName);
 
 
            IJobDetail jobDetail = new JobDetailImpl(jobparms.JobName, jobparms.JobGroup, jobType);
            //jobDetail.JobDataMap.Add("JobParams", PLCClient.Clients.FirstOrDefault());
            ITrigger trigger;
 
            trigger = TriggerBuilder.Create()
                .WithIdentity(jobparms.JobName, jobparms.JobGroup)
                .StartNow()
                .WithSimpleSchedule(x => x
                    .WithIntervalInSeconds(jobparms.IntervalSecond)
                    .RepeatForever()
                )
                .Build();
            await _scheduler.ScheduleJob(jobDetail, trigger);
        }
 
        /// <summary>
        /// 获取job
        /// </summary>
        /// <param name="jobName"></param>
        /// <returns></returns>
        public JobKey? GetJobByJobName(string jobName)
        {
            var job = _scheduler.GetJobKeys(GroupMatcher<JobKey>.AnyGroup()).Result.FirstOrDefault(t => t.Name == jobName);
            return job;
        }
 
 
        public bool RemoveJob(JobKey job)
        {
            return _scheduler.DeleteJob(job).Result;
        }
 
 
        public void Start()
        {
            _scheduler.Start();
        }
 
        public void Shutdown()
        {
            _scheduler.Shutdown(false);//是否等待调度执行完成
            _scheduler.Clear();
            _scheduler = StdSchedulerFactory.GetDefaultScheduler().Result;
        }
    }
}