namespace IStation.Server { /// /// 能效分析服务任务 /// [DisallowConcurrentExecution] public class EMWSEtaAnalyServiceJob : IJob { private static readonly List _jobHelpers = new List(); /// /// /// public Task Execute(IJobExecutionContext context) { return Task.Run(async () => { try { #region 加载配置 var configureList = new Yw.Service.EtaAnalyConfigure().GetAll(); if (configureList == null || configureList.Count < 1) { LogHelper.Error("能效分析服务任务中,未检索到配置信息"); CancelJobs(); return; } #endregion #region 开启任务 foreach (var configure in configureList) { var jobHelper = _jobHelpers.Find(x => x.Configure.ObjectType == configure.ObjectType && x.Configure.ObjectID == configure.ObjectID && x.Configure.AnalyWay == configure.AnalyWay && x.Configure.Frequency == configure.Frequency); if (jobHelper == null) { jobHelper = new EMWSEtaAnalySingleJobHelper(); await jobHelper.StartJob(configure); _jobHelpers.Add(jobHelper); LogHelper.Info($"能效分析服务任务中,数据类型:{configure.ObjectType},数据id:{configure.ObjectID},分析方式:{configure.AnalyWay},分析频率:{configure.Frequency},计划任务开启!"); } } #endregion #region 关闭任务 foreach (var jobHelper in _jobHelpers.ToList()) { var configure = configureList.Find(x => x.ObjectType == jobHelper.Configure.ObjectType && x.ObjectID == jobHelper.Configure.ObjectID && x.AnalyWay == jobHelper.Configure.AnalyWay && x.Frequency == jobHelper.Configure.Frequency); if (configure == null) { await jobHelper.CancelJob(); _jobHelpers.Remove(jobHelper); LogHelper.Info($"能效分析服务任务中,数据类型:{jobHelper.Configure.ObjectType},数据id:{jobHelper.Configure.ObjectID},分析方式:{jobHelper.Configure.AnalyWay},分析频率:{jobHelper.Configure.Frequency},计划任务关闭!"); } } #endregion LogHelper.Info($"能效分析服务任务中,开启任务数量为{_jobHelpers.Count}!"); } catch (Exception ex) { LogHelper.Error("能效分析服务任务中,执行出错!", ex); var e = new JobExecutionException(ex); throw e; } }); } /// /// 取消任务 /// public static void CancelJobs() { if (_jobHelpers != null && _jobHelpers.Count > 0) { _jobHelpers.ForEach(async x => await x.CancelJob()); _jobHelpers.Clear(); } } } }