using Entity.Constant; using Entity.DbModel.Station; using Entity.Dto; using HybirdFrameworkCore.Autofac.Attribute; using log4net; using Newtonsoft.Json; using SqlSugar; namespace Repository.Station; [Scope("SingleInstance")] public class BinInfoRepository : BaseRepository { private static readonly ILog _log = LogManager.GetLogger(typeof(BinInfoRepository)); public BinInfoRepository(ISqlSugarClient sqlSugar) : base(sqlSugar) { } /// /// 选包 /// /// StaticStationInfo.SwapSoc /// StaticStationInfo.SwapFinishChargeTime /// public SelectPackDto SelectPack(int swapSoc, int swapFinishChargeTime, string upMoveNo,BatteryGroupRepository BatteryGroupRepository) { _log.Info( $"BinInfoRepository SelectPack swapSoc={swapSoc}, swapFinishChargeTime={swapFinishChargeTime},upMoveNo={upMoveNo}"); SelectPackDto selectPackDto = new() { SuccessFlag = false, }; //条件能换电,在位,状态,预约,电量,编号《=8 List list = QueryListByClause(i => i.CanSwapFlag == 1 && i.Exists == 1 && i.Status == 1 && i.AmtLock == (int)InfoEnum.AmtBatLockStatus.UnLock && i.Soc >= swapSoc && Convert.ToInt32(i.Code) <= 8, "in_time asc"); _log.Info($"BinInfoRepository SelectPack list1={JsonConvert.SerializeObject(list)}"); // BinInfo? cacheBinBattery = ChooseCacheBinBattery(swapSoc); if (list.Count <= 0) { _log.Info($"list1 return"); selectPackDto.Info = InfoEnum.SelectBinStatusInfo.NoBattery; return selectPackDto; } list = list.OrderBy(i => i.CacheBinFlag).ToList(); _log.Info($"BinInfoRepository SelectPack list2={JsonConvert.SerializeObject(list)}"); if (!string.IsNullOrWhiteSpace(upMoveNo)) { list = list.Where(i => !upMoveNo.Equals(i.No) && i.No != "" && i.No != "-1").ToList(); _log.Info($"BinInfoRepository SelectPack list3={JsonConvert.SerializeObject(list)},upMoveNo={upMoveNo}"); } list = list.Where(i => i.ChargeStatus == 2 || i.ChargeStatus == 4).ToList(); if (list.Count <= 0) { selectPackDto.Info = InfoEnum.SelectBinStatusInfo.LessOfFinishCharging; return selectPackDto; } list = list.Where(i => i.Soc != null && i.Soc >= swapSoc).ToList(); if (list.Count <= 0) { selectPackDto.Info = InfoEnum.SelectBinStatusInfo.LessOfSoc; return selectPackDto; } //校验电池编码是否匹配 foreach (var binInfo in list) { var normalBinInfo = QueryByClause(i => i.Soc >= swapSoc && i.No == (binInfo.No + 10) && i.CanSwapFlag == 1 && i.CacheBinFlag != 1 && i.Exists == 1 && i.Status == 1 && i.AmtLock == (int)InfoEnum.AmtBatLockStatus.UnLock); // var batter= BatteryGroupRepository.QueryByClause(i => i.BatteryNo == binInfo.BatteryNo); if (batter != null) { var batteryGroup = BatteryGroupRepository.QueryByClause(i => i.BatteryNo == normalBinInfo.BatteryNo && i.Group == batter.Group); if (normalBinInfo != null&&batteryGroup!=null) { selectPackDto.BinInfo = binInfo; selectPackDto.Info = InfoEnum.SelectBinStatusInfo.Success; selectPackDto.SuccessFlag = true; } } } return selectPackDto; } /// /// 选择缓存仓的电池 /// /// public BinInfo? ChooseCacheBinBattery(int swapSoc) { return QueryByClause(i => i.CacheBinFlag == 1 && i.CanSwapFlag == 1 && i.Soc >= swapSoc && i.Exists == 1 && i.Status == 1 && i.AmtLock == (int)InfoEnum.AmtBatLockStatus.UnLock); } }