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) { //更新换下电池包 binInfosMap.TryGetValue(battery.DownBatteryBinNo.ToString(), out BinInfo 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) { continue; } /*if (!info.BatteryNo.Equals(battery.DownBatteryNo)) { continue; }*/ battery.DownBatteryNo = info.BatteryNo; battery.DownBatterySoc = info.Soc; battery.DownBatterySoe = info.Soe; battery.DownNominalEnergy = info.NominalEnergy; updateDbBattery.Add(battery); } if (updateDbBattery.Count > 0) { Log.Info( $" UpdateDownBatteryInfoTask update DowmBatteryInfo db={JsonConvert.SerializeObject(updateDbBattery)}"); _swapOrderBatteryRepository.Update(updateDbBattery); } } catch (Exception e) { Log.Error($" UpdateDownBatteryInfoTask err e={e}"); } } public bool Stoped() { return _stop; } public void Stop() { _stop = true; } public void ResetStop() { _stop = false; } }