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 EtaAccordWeekCronJob : IJob { /// /// /// public Task Execute(IJobExecutionContext context) { return Task.Run(() => { try { #region 数据时间 var start_day = DateTime.Now.Date.AddDays(-7);//上周开始时间 var end_day = DateTime.Now.Date.AddDays(-1); //上周结束时间 #endregion #region 加载目标客户 var corpIds = CorpHelper.GetCorpIds(); if (corpIds == null || corpIds.Count < 1) { LogHelper.Error("能效依赖周计划任务,未检索到目标客户信息"); return; } #endregion #region 加载配置 var configure_list = new Service.EtaAnalyConfigure().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 accord_configure_list = new Service.EtaAccordConfigure().GetByCorpID(configure.CorpID); if (accord_configure_list == null || accord_configure_list.Count < 1) continue; accord_configure_list = accord_configure_list.Where(x => x.UseStatus == Model.eUseStatus.Enable).ToList(); if (accord_configure_list.Count < 1) continue; var accord_configure_group_list = accord_configure_list.GroupBy(x => new { x.CorpID, x.BelongType, x.BelongID }).ToList(); foreach (var accord_configure_group in accord_configure_group_list) { switch (accord_configure_group.Key.BelongType) { case IStation.ObjectType.LogicArea://业务区域 { var record_list = new Service.EtaAccordLogicRecord() .GetDayByObjectOfDayRange(accord_configure_group.Key.CorpID, accord_configure_group.Key.BelongType, accord_configure_group.Key.BelongID, start_day,end_day); if (record_list == null || record_list.Count < 1) break; var sum_record_list = EtaAccordLogicWeekHelper.Accord(start_day,end_day, accord_configure_group, record_list); if (sum_record_list == null || sum_record_list.Count < 1) break; var bol = new Service.EtaAccordLogicRecord().Inserts(sum_record_list); if (!bol) { LogHelper.Info($"能效依赖周计划任务,客户标识:{accord_configure_group.Key.CorpID},对象类型:{accord_configure_group.Key.BelongType},对象标识:{accord_configure_group.Key.BelongID},数据保存失败!"); break; } } break; case IStation.ObjectType.Station://泵站 { var record_list = new Service.EtaAccordMultiRecord() .GetDayByObjectOfDayRange(accord_configure_group.Key.CorpID, accord_configure_group.Key.BelongType, accord_configure_group.Key.BelongID, start_day,end_day); if (record_list == null || record_list.Count < 1) break; var sum_record_list = EtaAccordMultiWeekHelper.Accord(start_day,end_day, accord_configure_group, record_list); if (sum_record_list == null || sum_record_list.Count < 1) break; var bol = new Service.EtaAccordMultiRecord().Inserts(sum_record_list); if (!bol) { LogHelper.Info($"能效依赖周计划任务,客户标识:{accord_configure_group.Key.CorpID},对象类型:{accord_configure_group.Key.BelongType},对象标识:{accord_configure_group.Key.BelongID},数据保存失败!"); break; } } break; case IStation.ObjectType.PipeLine://管路(机泵) { var record_list = new Service.EtaAccordSingleRecord() .GetDayByObjectOfDayRange(accord_configure_group.Key.CorpID, accord_configure_group.Key.BelongType, accord_configure_group.Key.BelongID, start_day,end_day); if (record_list == null || record_list.Count < 1) break; var sum_record_list = EtaAccordSingleWeekHelper.Accord(start_day,end_day, accord_configure_group, record_list); if (sum_record_list == null || sum_record_list.Count < 1) break; var bol = new Service.EtaAccordSingleRecord().Inserts(sum_record_list); if (!bol) { LogHelper.Info($"能效依赖周计划任务,客户标识:{accord_configure_group.Key.CorpID},对象类型:{accord_configure_group.Key.BelongType},对象标识:{accord_configure_group.Key.BelongID},数据保存失败!"); break; } } break; default: break; } } } #endregion } catch (Exception ex) { LogHelper.Error("能效日依赖计划任务中,出错", ex); var e = new JobExecutionException(ex); throw e; } }); } } }