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();
}
}
}
}