刘磊
2024-12-21 a6ea79849f0142b5280f0c5d4b15ecc83f0d015a
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/DispatchInfoService.cs
@@ -15,11 +15,15 @@
 *----------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
using Quartz.Impl.Matchers;
using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Core.Helper;
@@ -28,6 +32,8 @@
using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Repository;
using Quartz.Impl;
using System.Collections.Specialized;
namespace WIDESEAWCS_QuartzJob.Service
{
@@ -35,10 +41,12 @@
    {
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly IDeviceInfoRepository _deviceInfoRepository;
        public DispatchInfoService(IDispatchInfoRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IDeviceInfoRepository deviceInfoRepository) : base(BaseDal)
        private readonly ISchedulerCenter _schedulerCenter;
        public DispatchInfoService(IDispatchInfoRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IDeviceInfoRepository deviceInfoRepository, ISchedulerCenter schedulerCenter) : base(BaseDal)
        {
            _unitOfWorkManage = unitOfWorkManage;
            _deviceInfoRepository = deviceInfoRepository;
            _schedulerCenter = schedulerCenter;
        }
        /// <summary>
@@ -66,5 +74,55 @@
                DeviceType = b.DeviceType
            }).ToList();
        }
        public async Task<WebResponseContent> GetDispatchInfosAsync()
        {
            WebResponseContent content = new WebResponseContent();
            NameValueCollection collection = new NameValueCollection
            {
                { "quartz.serializer.type", "binary" },
            };
            StdSchedulerFactory factory = new StdSchedulerFactory(collection);
            IScheduler scheduler = await factory.GetScheduler();
            var jobKeys = await scheduler.GetJobKeys(GroupMatcher<JobKey>.AnyGroup());
            foreach (var jobKey in jobKeys)
            {
                // 在这里处理每个JobKey
                IJobDetail jobDetail = await scheduler.GetJobDetail(jobKey);
                if (jobDetail != null)
                {
                    // 可以获取Job的描述信息
                    string jobDescription = jobDetail.Description;
                    // 以及Job的数据映射(JobDataMap)
                    JobDataMap jobDataMap = jobDetail.JobDataMap;
                }
            }
            var triggerKeys = await scheduler.GetTriggerKeys(GroupMatcher<TriggerKey>.AnyGroup());
            foreach (var triggerKey in triggerKeys)
            {
                // 在这里处理每个TriggerKey
                ITrigger trigger = await scheduler.GetTrigger(triggerKey);
                if (trigger != null)
                {
                    // 获取下一次触发时间(如果有)
                    DateTimeOffset? nextFireTime = trigger.GetNextFireTimeUtc();
                    // 获取上次触发时间(如果有)
                    DateTimeOffset? previousFireTime = trigger.GetPreviousFireTimeUtc();
                    // 获取触发类型(如SimpleTrigger、CronTrigger)
                    string triggerType = trigger.GetType().Name;
                    // 对于CronTrigger,还可以获取Cron表达式(如果是)
                    //if (trigger is CronTrigger cronTrigger)
                    //{
                    //    string cronExpression = cronTrigger.CronExpressionString;
                    //}
                    if (!previousFireTime.HasValue && nextFireTime.HasValue)
                    {
                        Console.WriteLine($"Job处于等待触发状态,Trigger名称: {triggerKey.Name}");
                    }
                }
            }
            return content;
        }
    }
}