|  |  |  | 
|---|
|  |  |  | *----------------------------------------------------------------*/ | 
|---|
|  |  |  | #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; | 
|---|
|  |  |  | 
|---|
|  |  |  | using WIDESEAWCS_QuartzJob.DTO; | 
|---|
|  |  |  | using WIDESEAWCS_QuartzJob.Models; | 
|---|
|  |  |  | using WIDESEAWCS_QuartzJob.Repository; | 
|---|
|  |  |  | using Quartz.Impl; | 
|---|
|  |  |  | using System.Collections.Specialized; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | namespace WIDESEAWCS_QuartzJob.Service | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 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> | 
|---|
|  |  |  | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|