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 |  179 +++++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 141 insertions(+), 38 deletions(-)

diff --git a/Wms/WMS.BLL/Logic/AllotLocation.cs b/Wms/WMS.BLL/Logic/AllotLocation.cs
index 8d1ca0a..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,7 +473,7 @@
                         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;
@@ -408,7 +507,7 @@
                                 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;
@@ -436,7 +535,7 @@
                         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;
@@ -480,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 = "";
@@ -501,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, ";

--
Gitblit v1.8.0