using Autofac; using Entity.Ammeter; using HybirdFrameworkCore.Autofac; using HybirdFrameworkCore.Autofac.Attribute; using HybirdFrameworkCore.Job; using log4net; using Repository.Ammeter; using SqlSugar; namespace Service.Job; [Scope] public class EmeterHourJob : AbstractCronJob { private static readonly ILog Log = LogManager.GetLogger(typeof(EmeterHourJob)); public readonly EmeterEnergyRepository _EmeterEnergyRepository=AppInfo.Container.Resolve(); public readonly EmeterEnergyChangeRepository _EmeterEnergyChangeRepository=AppInfo.Container.Resolve(); public readonly EmeterHourEnergyRepository _EmeterHourEnergy=AppInfo.Container.Resolve(); protected override Task Handle() { var now = DateTime.Now; Log.Info($"EmeterMinuteJob execute time={now}"); //查询上一小时的数据 string dateTime = now.AddHours(-1).ToString("yyyy-MM-dd HH"); List emeterEnergies = _EmeterEnergyRepository.QueryListByClause(i => dateTime.Equals(i.UploadTime.ToString("yyyy-MM-dd HH")), "upload_time desc"); List emeterEnergiesChange = _EmeterEnergyChangeRepository.QueryListByClause(i => dateTime.Equals(i.UploadTime.ToString("yyyy-MM-dd HH")), "upload_time desc"); List db = new List(); if (emeterEnergies.Count > 0) { Dictionary> dictionary = emeterEnergies.GroupBy(i => i.Code).ToDictionary(i => i.Key, i => i.ToList()); foreach (var keyValuePair in dictionary) { EmeterHourEnergy emeterMinutesEnergy = new EmeterHourEnergy(); emeterMinutesEnergy.Code = keyValuePair.Key; emeterMinutesEnergy.Time = dateTime; emeterMinutesEnergy.Type = 1; var value = keyValuePair.Value; var orderByDescending = value.OrderByDescending(i => i.UploadTime).ToList(); emeterMinutesEnergy.RealTimeValue = orderByDescending[0].Value; emeterMinutesEnergy.Value = orderByDescending[0].Value - orderByDescending[^1].Value; db.Add(emeterMinutesEnergy); } } if (emeterEnergiesChange.Count > 0) { Dictionary> dictionaryChange = emeterEnergiesChange.GroupBy(i => i.Code).ToDictionary(i => i.Key, i => i.ToList()); foreach (var keyValuePair in dictionaryChange) { EmeterHourEnergy emeterMinutesEnergy = new EmeterHourEnergy(); emeterMinutesEnergy.Code = keyValuePair.Key; emeterMinutesEnergy.Time = dateTime; emeterMinutesEnergy.Type = 2; var value = keyValuePair.Value; var orderByDescending = value.OrderByDescending(i => i.UploadTime).ToList(); emeterMinutesEnergy.RealTimeValue = orderByDescending[0].Value; emeterMinutesEnergy.Value = orderByDescending[0].Value - orderByDescending[^1].Value; db.Add(emeterMinutesEnergy); } } if (db.Count > 0) { var existingData = _EmeterHourEnergy.QueryListByClause(i => dateTime.Equals(i.Time)); if (!existingData.Any()) { _EmeterHourEnergy.Insert(db); } } return Task.CompletedTask; } protected override string Key() { return "EmeterHourJob"; } protected override string Cron() { return "0 30 * * * ?"; } }