using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Common.LocationEnum; using WIDESEAWCS_Core.BaseRepository; using WIDESEAWCS_Core.BaseServices; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_IBasicInfoService; using WIDESEAWCS_Model.Models; namespace WIDESEAWCS_BasicInfoService { public class RGVLocationInfoService : ServiceBase>, IRGVLocationInfoService { public RGVLocationInfoService(IRepository BaseDal) : base(BaseDal) { } private Dictionary _emptyAssignOrderBy = new Dictionary() { { nameof(Dt_RGVLocationInfo.Depth), OrderByType.Desc }, { nameof(Dt_RGVLocationInfo.Layer), OrderByType.Asc }, //{ nameof(Dt_RGVLocationInfo.Column), OrderByType.Asc }, { nameof(Dt_RGVLocationInfo.Row), OrderByType.Asc }, }; private Dictionary _DepthAscOrderBy = new Dictionary() { { nameof(Dt_RGVLocationInfo.Depth), OrderByType.Asc }, }; public IRepository Repository => BaseDal; public List GetFreeLocationInfos() { return BaseDal.QueryData(x => x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt(), _emptyAssignOrderBy); } /// /// 查找入库可用货位 /// /// /// public Dt_RGVLocationInfo GetInFreeLocationInfo(string AreaCode) { Dt_RGVLocationInfo? rGVLocationInfo = BaseDal.QueryFirst(x => x.WarehouseId.ToString() == AreaCode && x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt(), _emptyAssignOrderBy); #region 判断巷道是否有货 if (rGVLocationInfo != null) { List NoRoadwayNos = new List(); while (true) { Dt_RGVLocationInfo dt_RGVLocationInfo = BaseDal.QueryFirst(x => x.RoadwayNo == rGVLocationInfo.RoadwayNo && x.Depth < rGVLocationInfo.Depth && x.LocationStatus == LocationStatusEnum.InStock.ObjToInt(), _emptyAssignOrderBy); if (dt_RGVLocationInfo == null) return rGVLocationInfo; rGVLocationInfo = BaseDal.QueryFirst(x => x.RoadwayNo == dt_RGVLocationInfo.RoadwayNo && x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() && x.Depth > dt_RGVLocationInfo.Depth && x.LocationStatus == LocationStatusEnum.Free.ObjToInt(), _DepthAscOrderBy); dt_RGVLocationInfo = BaseDal.QueryFirst(x => x.RoadwayNo == rGVLocationInfo.RoadwayNo && x.Depth > rGVLocationInfo.Depth && x.LocationStatus == LocationStatusEnum.InStock.ObjToInt(), _emptyAssignOrderBy); if (dt_RGVLocationInfo == null) return rGVLocationInfo; } } #endregion return rGVLocationInfo; } } }