From 16b0a2c97ee5349079f4deda0aab512af8a06dae Mon Sep 17 00:00:00 2001
From: chengsc <11752@DESKTOP-DS49RCP>
Date: 星期四, 08 五月 2025 08:26:31 +0800
Subject: [PATCH] 修改采购入库测出的问题

---
 Wms/WMS.BLL/Logic/AllotLocation.cs |  207 +++++++++++++++++++++++++++++++++++----------------
 1 files changed, 142 insertions(+), 65 deletions(-)

diff --git a/Wms/WMS.BLL/Logic/AllotLocation.cs b/Wms/WMS.BLL/Logic/AllotLocation.cs
index e21b168..4b4aff6 100644
--- a/Wms/WMS.BLL/Logic/AllotLocation.cs
+++ b/Wms/WMS.BLL/Logic/AllotLocation.cs
@@ -105,16 +105,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)).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();
 
@@ -191,6 +191,102 @@
         }
 
         /// <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>
         /// 鑾峰彇鍚堥�傜殑搴撲綅
         /// </summary>
         /// <param name="houseNo">浠撳簱鍙�</param>
@@ -239,7 +335,7 @@
 
                             //鏌ヨ璇ュ贩閬撳苟涓旀爣蹇椾负姝e父鐨勭殑鍌ㄤ綅
                             roadwayList.Add(roadway);
-                            var locate = GetLocateByRoadways(roadwayList,areaList,true);
+                            var locate = GetLocateByRoadways(roadwayList,areaList,true,houseNo);
                             if (locate == null)
                             {
                                 throw new Exception($"{roadwayNo}宸烽亾娌℃湁鍚堥�傜殑绌哄偍浣�");
@@ -251,38 +347,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);
                             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 +381,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 = "W01")
         {
             try
             {
@@ -378,14 +446,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)
@@ -405,21 +473,25 @@
                             locate = GetLocateByRoadway(l.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count);
                             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)
@@ -435,12 +507,13 @@
                                     locate = GetLocateByRoadway(log.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count);
                                     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;
+                                        //}
                                     }
                                     
                                     
@@ -462,21 +535,25 @@
                             locate = GetLocateByRoadway(item.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count);
                             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;
+                        }
                     }
                 }
 
@@ -543,7 +620,7 @@
         }
 
         /// <summary>
-        /// 楠岃瘉鍌ㄤ綅鏄惁鍙叆搴�
+        /// 楠岃瘉鍌ㄤ綅鏄惁鍙叆搴� 鍙屾繁浣嶉獙璇�
         /// </summary>
         /// <param name="locate"></param>
         /// <returns></returns>

--
Gitblit v1.8.0