From 86e443e42c4bee972c5b795def4917e02f98ce40 Mon Sep 17 00:00:00 2001 From: wxw <Administrator@DESKTOP-5BIMHQ3> Date: 星期五, 11 七月 2025 16:45:08 +0800 Subject: [PATCH] 修改问题 --- Wms/WMS.BLL/Logic/AllotLocation.cs | 246 +++++++++++++++++++++++++++++++++++------------- 1 files changed, 179 insertions(+), 67 deletions(-) diff --git a/Wms/WMS.BLL/Logic/AllotLocation.cs b/Wms/WMS.BLL/Logic/AllotLocation.cs index 98fb833..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,houseNo); + var locate = GetLocateByRoadways(roadwayList,areaList,true,houseNo, ceng); if (locate == null) { throw new Exception($"{roadwayNo}宸烽亾娌℃湁鍚堥�傜殑绌哄偍浣�"); @@ -251,7 +350,7 @@ { 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}浠撳簱宸插惎鐢ㄧ殑宸烽亾涓病鏈夊悎閫傜殑绌哄偍浣�"); @@ -285,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 ,string houseNo = "W01") + private SysStorageLocat GetLocateByRoadways(List<SysStorageRoadway> roadways,List<string> areaList,bool isRoadway = false ,string houseNo = "W02",string ceng = "") { try { @@ -374,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) @@ -404,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; + //} } @@ -431,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; + } } } @@ -471,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 = ""; @@ -492,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, "; @@ -515,7 +627,7 @@ } /// <summary> - /// 楠岃瘉鍌ㄤ綅鏄惁鍙叆搴� + /// 楠岃瘉鍌ㄤ綅鏄惁鍙叆搴� 鍙屾繁浣嶉獙璇� /// </summary> /// <param name="locate"></param> /// <returns></returns> -- Gitblit v1.8.0