You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

116 lines
4.2 KiB

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<BinInfo>
{
private static readonly ILog _log = LogManager.GetLogger(typeof(BinInfoRepository));
public BinInfoRepository(ISqlSugarClient sqlSugar) : base(sqlSugar)
{
}
/// <summary>
/// 选包
/// </summary>
/// <param name="swapSoc"> StaticStationInfo.SwapSoc </param>
/// <param name="swapFinishChargeTime">StaticStationInfo.SwapFinishChargeTime</param>
/// <returns></returns>
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<BinInfo> 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;
}
/// <summary>
/// 选择缓存仓的电池
/// </summary>
/// <returns></returns>
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);
}
}