From fd9ce381b904a22593de2ab242fb8f65cee45efa Mon Sep 17 00:00:00 2001 From: chengsc <11752@DESKTOP-DS49RCP> Date: 星期四, 22 五月 2025 15:27:48 +0800 Subject: [PATCH] 修改问题 --- Wms/WMS.BLL/Logic/AllotLocation.cs | 278 ++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 181 insertions(+), 97 deletions(-) diff --git a/Wms/WMS.BLL/Logic/AllotLocation.cs b/Wms/WMS.BLL/Logic/AllotLocation.cs index e21b168..2a5c1f1 100644 --- a/Wms/WMS.BLL/Logic/AllotLocation.cs +++ b/Wms/WMS.BLL/Logic/AllotLocation.cs @@ -38,8 +38,8 @@ 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()) { // 鍒ゆ柇褰撳墠宸烽亾(缁�)鏄惁鏈夌┖浣欏偍浣� @@ -56,7 +56,6 @@ //鑾峰彇搴撳瓨鍐呭凡鏈夌墿鏂欑殑宸烽亾 var dataStockRoad = db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.WareHouseNo == house).GroupBy(m => m.RoadwayNo).OrderBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).ToList(); //鎺掗櫎鎺夊凡鏈夌墿鏂欑殑宸烽亾 - roadways = roadways.Where(m => !dataStockRoad.Contains(m)).ToList(); foreach (var l in roadways) { @@ -79,18 +78,18 @@ } } - 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; } } } @@ -105,16 +104,16 @@ /// <param name="areaList">鍖哄煙闆嗗悎</param> /// <param name="lotNo">鎵规鍙�</param> /// <returns></returns> - public SysStorageLocat GetMiJiSuiTableLocate(SysStorageRoadway roadway, List<string> areaList, string sku, string lotNo = "") + public SysStorageLocat GetMiJiSuiTableLocate(string roadwayNo, List<string> areaList) { var db = DataContext.Db; // 鍒ゆ柇褰撳墠宸烽亾(缁�)鏄惁鏈夌┖浣欏偍浣� - var locateList = db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.RoadwayNo == roadway.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(roadway.RoadwayNo); + var bl = GetLocateASCOrDesc(roadwayNo); var locate = locateList.OrderBy(m => m.LocatNo).First(); @@ -146,7 +145,7 @@ 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);//閫氶亾鍙e垪 - return int.Parse(a) < int.Parse(b); + return int.Parse(a) > int.Parse(b); } /// <summary> @@ -166,6 +165,17 @@ 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; @@ -175,20 +185,105 @@ 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; } + + /// <summary> + /// 鏍规嵁璧峰缁勮幏鍙栦綅缃渶浼樼殑鍥涢」杞﹀彇璐у伐浣� + /// </summary> + /// <param name="straRoadway">璧峰缁�</param> + /// <param name="outModel">鍑哄簱鍙e伐浣� 9銆� 17銆� 18</param> + /// <returns></returns> + public string RoadwayToStationNum(string straRoadway, string outModel) + { + var db = DataContext.Db; + string stationNum = ""; + + string[] lists = straRoadway.Split("MR"); + var model = db.Queryable<SysStorageLocat>().First(m => m.RoadwayNo == straRoadway && m.IsDel == "0"); + string stat = model.AisleOne; + + if (model.Layer == 1) + { // 涓�灞� + switch (outModel) // 鐢宠鐨勫叆搴撳彛 + { + case "9": + + var path13 = Math.Abs(19 - int.Parse(stat.Substring(0, 2))) + Math.Abs(6 - int.Parse(stat.Substring(2, 2))); + var path14 = Math.Abs(19 - int.Parse(stat.Substring(0, 2))) + Math.Abs(12 - int.Parse(stat.Substring(2, 2))); + + if (path13 <= path14) + { + stationNum = "190601"; + } + else + { + stationNum = "191201"; + } + break; + case "17": + stationNum = "030401"; + break; + case "18": + var path03 = Math.Abs(03 - int.Parse(stat.Substring(0, 2))) + Math.Abs(06 - int.Parse(stat.Substring(2, 2))); + var path05 = Math.Abs(03 - int.Parse(stat.Substring(0, 2))) + Math.Abs(12 - int.Parse(stat.Substring(2, 2))); + + if (path03 <= path05) + { + stationNum = "030601"; + } + else + { + stationNum = "031201"; + } + break; + default: break; + } + } + else + { // 浜屽眰 + switch (outModel) // 鐢宠鐨勫叆搴撳彛 + { + case "9": + + var path15 = Math.Abs(19 - int.Parse(stat.Substring(0, 2))) + Math.Abs(6 - int.Parse(stat.Substring(2, 2))); + var path16 = Math.Abs(19 - int.Parse(stat.Substring(0, 2))) + Math.Abs(12 - int.Parse(stat.Substring(2, 2))); + + if (path15 <= path16) + { + stationNum = "190602"; + } + else + { + stationNum = "191202"; + } + + break; + case "17": + stationNum = "030402"; + break; + case "18": + var path03 = Math.Abs(03 - int.Parse(stat.Substring(0, 2))) + Math.Abs(06 - int.Parse(stat.Substring(2, 2))); + var path05 = Math.Abs(03 - int.Parse(stat.Substring(0, 2))) + Math.Abs(12 - int.Parse(stat.Substring(2, 2))); + + if (path03 <= path05) + { + stationNum = "030602"; + } + else + { + stationNum = "031202"; + } + + break; + default: break; + } + } + + return stationNum; + } + /// <summary> /// 鑾峰彇鍚堥�傜殑搴撲綅 @@ -197,10 +292,14 @@ /// <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.濡傛灉鏄珛搴� 鍐嶅垽鏂槸鍚︽寚瀹氬贩閬撳彿 @@ -239,7 +338,7 @@ //鏌ヨ璇ュ贩閬撳苟涓旀爣蹇椾负姝e父鐨勭殑鍌ㄤ綅 roadwayList.Add(roadway); - var locate = GetLocateByRoadways(roadwayList,areaList,true); + var locate = GetLocateByRoadways(roadwayList,areaList,true,houseNo, ceng); if (locate == null) { throw new Exception($"{roadwayNo}宸烽亾娌℃湁鍚堥�傜殑绌哄偍浣�"); @@ -251,38 +350,10 @@ { 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); + var locate = GetLocateByRoadways(roadwayList,areaList,false, houseNo,ceng); if (locate == null) { throw new Exception($"{houseNo}浠撳簱宸插惎鐢ㄧ殑宸烽亾涓病鏈夊悎閫傜殑绌哄偍浣�"); - } - return locate; - } - //鎸囧畾宸烽亾 - case "瀵嗛泦搴�" when !string.IsNullOrWhiteSpace(roadwayNo): - { - var roadwayList = new List<SysStorageRoadway>(); - var roadway = db.Queryable<SysStorageRoadway>().First(m => m.RoadwayNo == roadwayNo); - if (roadway == null) - { - throw new Exception($"鏈煡璇㈠埌{roadwayNo}宸烽亾淇℃伅"); - } - - if (!roadList.Contains(roadwayNo)) - { - throw new Exception("褰撳墠鐗╂枡瀛樻斁鍖哄煙鏈湪鎸囧畾宸烽亾涓�"); - } - if (roadway.Status == "1") - { - throw new Exception($"{roadwayNo}宸烽亾宸插仠鐢�"); - } - - //鏌ヨ璇ュ贩閬撳苟涓旀爣蹇椾负姝e父鐨勭殑鍌ㄤ綅 - roadwayList.Add(roadway); - var locate = GetLocateByRoadways(roadwayList, areaList, true); - if (locate == null) - { - throw new Exception($"{roadwayNo}宸烽亾娌℃湁鍚堥�傜殑绌哄偍浣�"); } return locate; } @@ -313,7 +384,7 @@ /// <param name="areaList">鍖哄煙闆嗗悎</param> /// <param name="isRoadway">鏄惁鎸囧畾宸烽亾</param> /// <returns></returns> - private SysStorageLocat GetLocateByRoadways(List<SysStorageRoadway> roadways,List<string> areaList,bool isRoadway = false) + private SysStorageLocat GetLocateByRoadways(List<SysStorageRoadway> roadways,List<string> areaList,bool isRoadway = false ,string houseNo = "W02",string ceng = "") { try { @@ -378,14 +449,14 @@ SysStorageLocat locate = null; // 鍌ㄤ綅淇℃伅 //SysStorageLocat log = db.Ado.SqlQuerySingle<SysStorageLocat>("select * from SysStorageLocat where LocatNo = (select Top(1) LocatNo from BllPalletBind order by CreateTime desc)"); //宸烽亾鏈�鍚庝竴娆′娇鐢ㄨ褰� - SysRoadwayUseLog log= db.Ado.SqlQuerySingle<SysRoadwayUseLog>("select Top(1) * from SysRoadwayUseLog where IsDel=0 order by CreateTime desc"); //宸烽亾鏈�鍚庝竴娆′娇鐢ㄨ褰� + SysRoadwayUseLog log= db.Ado.SqlQuerySingle<SysRoadwayUseLog>($"select Top(1) * from SysRoadwayUseLog where IsDel=0 and WareHouseNo ='{houseNo}' order by CreateTime desc"); //宸烽亾鏈�鍚庝竴娆′娇鐢ㄨ褰� if (laneAllot == 0)//璺冲贩閬撳钩鍧囧垎閰� { //濡傛灉鍚岀骇宸烽亾鏈夊鏉″垯鏌ヤ笂娆′綅缃棩蹇� if (roadways.Count > 1) { - log = db.Queryable<SysRoadwayUseLog>().OrderByDescending(l => l.Id).First(); + log = db.Queryable<SysRoadwayUseLog>().Where(m=>m.WareHouseNo == houseNo).OrderByDescending(l => l.Id).First(); } //鍙栧悇宸烽亾鎵�鏈夋帓绗竴涓悎閫備綅 foreach (var l in roadways) @@ -402,24 +473,28 @@ 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) { - list.Add(locate.LocatNo); - var isOk = LocateIsOk(locate); - if (!isOk) - { - locate = null; - } - if (isOk) - { - break; - } + break; + //list.Add(locate.LocatNo); + //var isOk = LocateIsOk(locate); + //if (!isOk) + //{ + // locate = null; + //} + //if (isOk) + //{ + // break; + //} } } while (count != 0 && locate == null);//褰撴煡璇㈠偍浣嶆暟閲忎笉绛�0 骞朵笖鍌ㄤ綅涓虹┖鏃讹紝鍐嶆寰幆宸烽亾銆佸尯鍩熸煡鎵惧偍浣� - + if (locate!=null) + { + break; + } } //濡傛灉璺冲贩閬撳苟涓旀湭鎵惧埌鍚堥�傜┖鍌ㄤ綅,鍒欒烦鍒版渶鍚庝竴娆′娇鐢ㄧ殑宸烽亾鏌ヨ if (!isRoadway) @@ -432,15 +507,16 @@ 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) { - list.Add(locate.LocatNo); - var isOk = LocateIsOk(locate); - if (!isOk) - { - locate = null; - } + break; + //list.Add(locate.LocatNo); + //var isOk = LocateIsOk(locate); + //if (!isOk) + //{ + // locate = null; + //} } @@ -459,24 +535,28 @@ 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) { - list.Add(locate.LocatNo); - var isOk = LocateIsOk(locate); - if (!isOk) - { - locate = null; - } - if (isOk) - { - break; - } + break; + //list.Add(locate.LocatNo); + //var isOk = LocateIsOk(locate); + //if (!isOk) + //{ + // locate = null; + //} + //if (isOk) + //{ + // break; + //} } } while (count != 0 && locate == null);//褰撴煡璇㈠偍浣嶆暟閲忎笉绛�0 骞朵笖鍌ㄤ綅涓虹┖鏃讹紝鍐嶆寰幆宸烽亾銆佸尯鍩熸煡鎵惧偍浣� - + if (locate != null) + { + break; + } } } @@ -499,7 +579,7 @@ /// <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 = ""; @@ -520,7 +600,11 @@ 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, "; @@ -543,7 +627,7 @@ } /// <summary> - /// 楠岃瘉鍌ㄤ綅鏄惁鍙叆搴� + /// 楠岃瘉鍌ㄤ綅鏄惁鍙叆搴� 鍙屾繁浣嶉獙璇� /// </summary> /// <param name="locate"></param> /// <returns></returns> -- Gitblit v1.8.0