using Entity.DbModel.Station; using HybirdFrameworkCore.Autofac.Attribute; using HybirdFrameworkCore.AutoTask; using log4net; using Newtonsoft.Json; using Repository.Station; using Service.Mgr; namespace Service.MyTask; /// /// 更新换下的电池编码和soc /// [Scope] public class UpdateDownBatteryInfoTask : ITask { private static readonly ILog Log = LogManager.GetLogger(typeof(UpdateDownBatteryInfoTask)); private volatile bool _stop; public SwapOrderBatteryRepository _swapOrderBatteryRepository { get; set; } public BinInfoRepository _BinInfoRepository { get; set; } public string Name() { return "UpdateDownBatteryInfoTask"; } public int Interval() { return 1000 * 2; } public void Handle() { Log.Info("Begin UpdateDownBatteryInfo"); try { List batterys = _swapOrderBatteryRepository.QueryListByClause( i => (i.DownBatteryNo == null || i.DownBatterySoc < 0) && i.DownBatteryBinNo != null); if (batterys.Count <= 0) { return; } List downBatteryBinNos = batterys.Select(i => i.DownBatteryBinNo.ToString()).ToList(); Dictionary binInfosMap = _BinInfoRepository .QueryListByClause(i => downBatteryBinNos.Contains(i.No) && i.Exists == 1).ToDictionary(i => i.No); List updateDbBattery = new List(); foreach (var battery in batterys) { Log.Info($"检测到的battery ={JsonConvert.SerializeObject(battery)}"); //更新换下电池包 binInfosMap.TryGetValue(battery.DownBatteryBinNo.ToString(), out BinInfo info); Log.Info($"检测到的 bininfo ={JsonConvert.SerializeObject(info)}"); if (info == null) { continue; } if (info.BatteryNo == null || "".Equals(info.BatteryNo) || "-1".Equals(info.BatteryNo)) { continue; } if (info.Soc == null || info.Soc <= 0 || info.Soc > 100 || info.NominalEnergy <= 0) { continue; } battery.DownBatteryNo = info.BatteryNo; battery.DownBatterySoc = info.Soc; battery.DownBatterySoe = info.Soe; battery.DownNominalEnergy = info.NominalEnergy; Log.Info($"add battery battery ={JsonConvert.SerializeObject(battery)}"); updateDbBattery.Add(battery); } if (updateDbBattery.Count > 0) { Log.Info( $" UpdateDownBatteryInfoTask update DowmBatteryInfo db={JsonConvert.SerializeObject(updateDbBattery)}"); foreach (var swapOrderBattery in updateDbBattery) { _swapOrderBatteryRepository.Update(i => new() { DownBatteryNo = swapOrderBattery.DownBatteryNo, DownBatterySoc = swapOrderBattery.DownBatterySoc, DownBatterySoe = swapOrderBattery.DownBatterySoe, DownNominalEnergy = swapOrderBattery.DownNominalEnergy }, i => i.Id == swapOrderBattery.Id); } } } catch (Exception e) { Log.Error($" UpdateDownBatteryInfoTask err e={e}"); } } public bool Stoped() { return _stop; } public void Stop() { _stop = true; } public void ResetStop() { _stop = false; } }