using Quartz; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using IStation.Calculation; namespace IStation.Server { /// /// 能效汇总单时计划任务 /// [DisallowConcurrentExecution]//此特性标识 必须等待这次任务执行完成后,才能执行下次任务 public class EtaSumSingleHourCronJob : IJob { /// /// /// public Task Execute(IJobExecutionContext context) { return Task.Run(() => { try { #region 汇总日期 var day = DateTime.Now.AddDays(-1).Date; #endregion #region 加载目标客户 var corpIds = CorpHelper.GetCorpIds(); if (corpIds == null || corpIds.Count < 1) { LogHelper.Info("能效汇总单时计划任务中,未检索到目标客户信息"); return; } #endregion #region 加载配置 var service_configure = new Service.EtaAnalyConfigure(); var configure_list = service_configure.GetByCorpIds(corpIds); if (configure_list == null || configure_list.Count < 1) { LogHelper.Info("能效汇总单时计划任务中,未检索到能效分析配置信息!"); return; } configure_list = configure_list.Where(x => x.UseStatus == Model.eUseStatus.Enable).ToList(); if (configure_list.Count < 1) { LogHelper.Info("能效汇总单时计划任务中,未检索到有效能效分析配置信息!"); return; } #endregion #region 遍历汇总 foreach (var configure in configure_list) { var record_list = new Service.EtaSingleRealRecord().GetByCorpIDOfDay(configure.CorpID,day); if (record_list == null || record_list.Count < 1) continue; var group_list = record_list.GroupBy(x => new { x.CorpID, x.ObjectType, x.ObjectID }).ToList(); var sum_record_list = new List(); foreach (var group in group_list) { var list = EtaSumSingleHourHelper.Sum(group.Key.CorpID,group.Key.ObjectType,group.Key.ObjectID,day,group); if (list != null && list.Count > 0) { sum_record_list.AddRange(list); } } if (sum_record_list.Count < 1) continue; var bol = new Service.EtaSumSingleRecord().Inserts(sum_record_list); if (!bol) { LogHelper.Info("能效汇总单时计划任务中,数据保存失败!"); return; } } #endregion } catch (Exception ex) { LogHelper.Error("能效汇总单时计划任务中,出错", ex); var e = new JobExecutionException(ex); throw e; } }); } } }