|  |  |  | 
|---|
|  |  |  | dataStock = dataStock.Where(m => m.LotNo == lotNo); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //库存查找相同物料/批次的巷道 | 
|---|
|  |  |  | var yiYouRoad = dataStock.GroupBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).OrderBy(m => m).ToList(); | 
|---|
|  |  |  | foreach (var l in yiYouRoad) | 
|---|
|  |  |  | var yiYouRoad = dataStock.GroupBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).ToList(); | 
|---|
|  |  |  | foreach (var l in yiYouRoad.OrderBy(m=>m).ToList()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | // 判断当前巷道(组)是否有空余储位 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var locateCount = db.Queryable<SysStorageLocat>().Count(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == l); | 
|---|
|  |  |  | var locateCount = db.Queryable<SysStorageLocat>().Count(m => m.IsDel=="0" && m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == l); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var bindNum = db.Queryable<LogTask>().Where(m => m.IsDel == "0" && (m.Status == "0" || m.Status == "1") && m.EndRoadway == l) | 
|---|
|  |  |  | .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count(); | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (bl) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (bl) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | // 判断当前巷道(组)是否有空余储位 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var locateCount = db.Queryable<SysStorageLocat>().Count(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == l); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var bindNum = db.Queryable<LogTask>().Where(m => m.IsDel == "0" && (m.Status == "0" || m.Status == "1") && m.EndRoadway == l) | 
|---|
|  |  |  | .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count(); | 
|---|
|  |  |  | if (locateCount - bindNum > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | // 判断当前巷道(组)是否有空余储位 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var locateCount = db.Queryable<SysStorageLocat>().Count(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == l); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var bindNum = db.Queryable<LogTask>().Where(m => m.IsDel == "0" && (m.Status == "0" || m.Status == "1") && m.EndRoadway == l) | 
|---|
|  |  |  | .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count(); | 
|---|
|  |  |  | if (locateCount - bindNum > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return l; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return l; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | var db = DataContext.Db; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 判断当前巷道(组)是否有空余储位 | 
|---|
|  |  |  | var locateList = db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.RoadwayNo == roadwayNo && areaList.Contains(m.AreaNo)).ToList(); | 
|---|
|  |  |  | var locateList = db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.RoadwayNo == roadwayNo && areaList.Contains(m.AreaNo) && m.Status == "0").ToList(); | 
|---|
|  |  |  | if (locateList.Count(m => m.Status == "0") > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var bl = GetLocateASCOrDesc(roadwayNo); | 
|---|
|  |  |  | 
|---|
|  |  |  | var locate = db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.RoadwayNo == roadStr); | 
|---|
|  |  |  | var a = locate.LocatNo.Substring(2,2);//储位列 | 
|---|
|  |  |  | var b = locate.AisleOne.Substring(2, 2);//通道口列 | 
|---|
|  |  |  | return int.Parse(a) < int.Parse(b); | 
|---|
|  |  |  | return int.Parse(a) > int.Parse(b); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | 
|---|
|  |  |  | var locatList2 = db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.RoadwayNo == locate.RoadwayNo && m.Column > a).ToList(); | 
|---|
|  |  |  | if (bl) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (locatList1.Count(m => str2.Contains(m.Status)) > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (locatList2.Count(m => str1.Contains(m.Status)) > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (locatList1.Count(m => str1.Contains(m.Status)) > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (locatList1.Count(m => str2.Contains(m.Status)) > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (locatList2.Count(m => str1.Contains(m.Status)) > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | /// <param name="areaList">区域集合</param> | 
|---|
|  |  |  | /// <param name="roadwayNo">巷道号(可空)</param> | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | public SysStorageLocat GetSuiTableLocate(string houseNo, List<string> areaList,string roadwayNo = "") | 
|---|
|  |  |  | public SysStorageLocat GetSuiTableLocate(string houseNo, List<string> areaList,string roadwayNo = "",string ceng = "") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (string.IsNullOrWhiteSpace(ceng)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception($"申请货架库位层数不能为空"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | var db = DataContext.Db; | 
|---|
|  |  |  | /* 1.先判断仓库(立库或者平库) | 
|---|
|  |  |  | * 2.如果是立库 再判断是否指定巷道号 | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var roadList = db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == houseNo && areaList.Contains(m.AreaNo) ) | 
|---|
|  |  |  | .GroupBy(m=>m.RoadwayNo).Select(m=>m.RoadwayNo).ToList(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (houseNo == "W02") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //一楼巷道 | 
|---|
|  |  |  | var conveyList1 = new List<string>() { "LR01", "LR02", "LR03", "LR04", "LR05", "LR06", "LR07", "LR08" }; | 
|---|
|  |  |  | //二楼巷道 | 
|---|
|  |  |  | var conveyList2 = new List<string>() { "LR09", "LR10", "LR11", "LR12" }; | 
|---|
|  |  |  | if (ceng == "1") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | roadList = roadList.Where(m => conveyList1.Contains(m)).ToList(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else if (ceng == "2") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | roadList = roadList.Where(m => conveyList2.Contains(m)).ToList(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //数据字典(获取字典中仓库类型) | 
|---|
|  |  |  | var dic = db.Queryable<SysDictionary>().First(m => m.Id.ToString() == house.Type); | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //查询该巷道并且标志为正常的的储位 | 
|---|
|  |  |  | roadwayList.Add(roadway); | 
|---|
|  |  |  | var locate = GetLocateByRoadways(roadwayList,areaList,true,houseNo); | 
|---|
|  |  |  | var locate = GetLocateByRoadways(roadwayList,areaList,true,houseNo, ceng); | 
|---|
|  |  |  | if (locate == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception($"{roadwayNo}巷道没有合适的空储位"); | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var roadwayList = db.Queryable<SysStorageRoadway>().Where(m => m.WareHouseNo == houseNo && m.Status == "0" && roadList.Contains(m.RoadwayNo)).OrderBy(m => new { m.Priority, m.RoadwayNo }).ToList(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var locate = GetLocateByRoadways(roadwayList,areaList,false, houseNo); | 
|---|
|  |  |  | var locate = GetLocateByRoadways(roadwayList,areaList,false, houseNo,ceng); | 
|---|
|  |  |  | if (locate == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception($"{houseNo}仓库已启用的巷道中没有合适的空储位"); | 
|---|
|  |  |  | 
|---|
|  |  |  | /// <param name="areaList">区域集合</param> | 
|---|
|  |  |  | /// <param name="isRoadway">是否指定巷道</param> | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | private SysStorageLocat GetLocateByRoadways(List<SysStorageRoadway> roadways,List<string> areaList,bool isRoadway = false ,string houseNo = "W01") | 
|---|
|  |  |  | private SysStorageLocat GetLocateByRoadways(List<SysStorageRoadway> roadways,List<string> areaList,bool isRoadway = false ,string houseNo = "W02",string ceng = "") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | var count = 0; | 
|---|
|  |  |  | do | 
|---|
|  |  |  | { | 
|---|
|  |  |  | locate = GetLocateByRoadway(l.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count); | 
|---|
|  |  |  | locate = GetLocateByRoadway(l.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count, ceng); | 
|---|
|  |  |  | if (locate != null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | 
|---|
|  |  |  | var count = 0; | 
|---|
|  |  |  | do | 
|---|
|  |  |  | { | 
|---|
|  |  |  | locate = GetLocateByRoadway(log.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count); | 
|---|
|  |  |  | locate = GetLocateByRoadway(log.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count,ceng); | 
|---|
|  |  |  | if (locate != null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | 
|---|
|  |  |  | var count = 0; | 
|---|
|  |  |  | do | 
|---|
|  |  |  | { | 
|---|
|  |  |  | locate = GetLocateByRoadway(item.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count); | 
|---|
|  |  |  | locate = GetLocateByRoadway(item.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count,ceng); | 
|---|
|  |  |  | if (locate != null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | 
|---|
|  |  |  | /// <param name="areaList">区域集合</param> | 
|---|
|  |  |  | /// <param name="locateNoStr">排除的储位集合</param> | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | private SysStorageLocat GetLocateByRoadway(string roadwayNo, int topOrBom, int leftOrRight,List<string> areaList,List<string> locateNoStr,ref int count) | 
|---|
|  |  |  | private SysStorageLocat GetLocateByRoadway(string roadwayNo, int topOrBom, int leftOrRight,List<string> areaList,List<string> locateNoStr,ref int count,string ceng = "") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var db = DataContext.Db; | 
|---|
|  |  |  | var str = ""; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | foreach (var area in areaList) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var sql = $@"select * from SysStorageLocat where IsDel = 0 and Flag = 0 and [Status] = 0 and RoadwayNo = '{roadwayNo}' and AreaNo = '{area}' and LocatNo not in({str}) "; | 
|---|
|  |  |  | var sql = $@"select * from SysStorageLocat where IsDel = 0 and Layer!= '3' and Flag = 0 and [Status] = 0 and RoadwayNo = '{roadwayNo}' and AreaNo = '{area}' and LocatNo not in({str}) "; | 
|---|
|  |  |  | //if (!string.IsNullOrWhiteSpace(ceng)) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    sql += $"and Layer = '{ceng}' "; | 
|---|
|  |  |  | //} | 
|---|
|  |  |  | sql += "order by "; | 
|---|
|  |  |  | sql += topOrBom == 0 ? "Layer desc, " : "Layer, "; | 
|---|
|  |  |  | sql += leftOrRight == 0 ? "[Column], " : "[Column] desc, "; | 
|---|