From 557f02072fa311eefe3123aa44afebac22adc465 Mon Sep 17 00:00:00 2001
From: xiaojiao <xiaojiao@kaokeziliao.com>
Date: 星期五, 24 四月 2026 17:24:43 +0800
Subject: [PATCH] 4-24

---
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA.Services/Common/GetEmptyLocationAction.cs |  133 ++++++++++++++++++++++++++++++++-----------
 1 files changed, 98 insertions(+), 35 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA.Services/Common/GetEmptyLocationAction.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA.Services/Common/GetEmptyLocationAction.cs"
index 6a93daa..b0144a9 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA.Services/Common/GetEmptyLocationAction.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA.Services/Common/GetEmptyLocationAction.cs"
@@ -1,4 +1,6 @@
-锘縰sing System;
+锘縰sing NewLife.Serialization;
+using Newtonsoft.Json;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -6,6 +8,7 @@
 using WIDESEA.Core.Utilities;
 using WIDESEA.Entity.DomainModels;
 using WIDESEA.Services.Repositories;
+using WIDESEA_Common.LogEnum;
 using WIDESEA_Entity.CustomModels.RGVModel;
 using WIDESEA_Services.Services.APIInvoke.RGV;
 using static WIDESEA_Entity.CustomModels.RGVModel.RgvDeviceStatusModel;
@@ -18,7 +21,7 @@
         /// 缁欏叆搴撹姹傚垎閰嶈揣浣�
         /// </summary>
         /// <returns></returns>
-        public static Dt_locationinfo GetEmptyLocationAction()
+        public static Dt_locationinfo GetEmptyLocationAction(int? Gznumber = 0)
         {
             List<string> locationId = new List<string>();
             //鍑哄簱浠诲姟
@@ -28,47 +31,103 @@
 
             //鍏ュ簱浠诲姟
             Dt_locationinfo locationinfo = null;
-            List<Dt_taskinfo> inboundTask = Dt_taskinfoRepository.Instance.Find(r => r.task_type.Contains("Inbound"));
+
+
+
             List<int> listLayer = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8 };
 
-            if (null != inboundTask && inboundTask.Count > 0)
+            // 褰撲紶杩涙潵鐨勬槸1 澶勭悊鍏ュ簱鍖虹殑閫昏緫 褰撲紶杩涙潵鐨勬槸2澶勭悊鍑哄簱鍖虹殑閫昏緫
+            if (Gznumber == 1)
             {
-                foreach (var item in inboundTask)
+                List<Dt_taskinfo> inbound = Dt_taskinfoRepository.Instance.Find(x =>
+                x.task_beginstation == "20101"
+                );
+                foreach (var item in inbound)
                 {
-                    //濡傛灉鍙栬揣瀹屾垚锛屽彲浠ュ垎閰�
-                    if (string.IsNullOrEmpty(item.task_bak_2) || !"2".Equals(item.task_bak_2))
+                    string[] location = item.task_tolocationid.Split('-');
+                    //鑾峰彇褰撳墠鏈変换鍔$殑灞�
+                    int layer = int.Parse(location[0]);
+                    LogRecord.WriteLog((int)LogEnum.InBound, $"鍒嗛厤浠诲姟鏃讹紝鏈夊叆搴撲换鍔¢渶瑕佸垹闄ょ殑灞傦細{layer}锛屽綋鍓嶅眰璐т綅缂栧彿锛歿item.ToJson()},褰撳墠鐜版湁浠诲姟{inbound.ToJson()}");
+                    listLayer.Remove(layer);
+                }
+
+                List<Dt_taskinfo> outboundTask = Dt_taskinfoRepository.Instance.Find(r => ((r.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString())
+       && (r.task_state == TaskState.TaskState_RGV_Received.ToString() || r.task_state == TaskState.TaskState_RGV_Finished.ToString()))
+   || r.task_type == TaskType.TaskType_Box_Pallet_Measure_Back.ToString());
+
+                if (null != outboundTask && outboundTask.Count > 0)
+                {
+                    List<string> fromStation = outboundTask.Where(r => r.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString()).Select(r => r.task_fromlocationid).ToList();
+                    fromStation.AddRange(outboundTask.Where(r => r.task_type == TaskType.TaskType_Box_Pallet_Measure_Back.ToString()).Select(r => r.task_tolocationid).ToList());
+
+                    foreach (var item in fromStation)
                     {
-                        string[] location = item.task_tolocationid.Split('-');
+                        string[] location = item.Split('-');
                         //鑾峰彇褰撳墠鏈変换鍔$殑灞�
                         int layer = int.Parse(location[0]);
+                        LogRecord.WriteLog((int)LogEnum.InBound, $"鍒嗛厤浠诲姟鏃讹紝鏈夊叆搴撲换鍔¢渶瑕佸垹闄ょ殑灞傦細{layer}锛屽綋鍓嶅眰璐т綅缂栧彿锛歿item.ToJson()},褰撳墠鐜版湁浠诲姟{outboundTask.ToJson()}");
                         listLayer.Remove(layer);
                     }
                 }
-                //List<string> fromStation = inboundTask.Select(r => r.task_tolocationid).ToList();
-                //foreach (var item in fromStation)
-                //{
-                //    string[] location = item.Split('-');
-                //    //鑾峰彇褰撳墠鏈変换鍔$殑灞�
-                //    int layer = int.Parse(location[0]);
-                //    listLayer.Remove(layer);
-                //}
-            }
 
-            List<Dt_taskinfo> outboundTask = Dt_taskinfoRepository.Instance.Find(r => (r.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString() &&
-        //r.task_type.Contains("Out") &&
-        (r.task_state.Equals(TaskState.TaskState_RGV_Received.ToString()) || r.task_state.Equals(TaskState.TaskState_RGV_Finished.ToString())))
-        || r.task_type == TaskType.TaskType_Box_Pallet_Measure_Back.ToString());
-            if (null != outboundTask && outboundTask.Count > 0)
+            }
+            else if (Gznumber == 2)
             {
-                List<string> fromStation = outboundTask.Select(r => r.task_fromlocationid).ToList();
-                foreach (var item in fromStation)
+                List<Dt_taskinfo> outbound = Dt_taskinfoRepository.Instance.Find(x =>
+                x.task_beginstation == "90101"
+                );
+                foreach (var item in outbound)
                 {
-                    string[] location = item.Split('-');
+                    string[] location = item.task_tolocationid.Split('-');
                     //鑾峰彇褰撳墠鏈変换鍔$殑灞�
                     int layer = int.Parse(location[0]);
+                    LogRecord.WriteLog((int)LogEnum.InBound, $"鍒嗛厤浠诲姟鏃讹紝鏈夊叆搴撲换鍔¢渶瑕佸垹闄ょ殑灞傦細{layer}锛屽綋鍓嶅眰璐т綅缂栧彿锛歿item.ToJson()},褰撳墠鐜版湁浠诲姟{outbound.ToJson()}");
                     listLayer.Remove(layer);
                 }
             }
+            else
+            {
+                List<Dt_taskinfo> inboundTask = Dt_taskinfoRepository.Instance.Find(r => r.task_type.Contains("Inbound"));
+                if (null != inboundTask && inboundTask.Count > 0)
+                {
+                    foreach (var item in inboundTask)
+                    {
+                        //濡傛灉鍙栬揣瀹屾垚锛屽彲浠ュ垎閰�
+                        if (string.IsNullOrEmpty(item.task_bak_2) || !"2".Equals(item.task_bak_2))
+                        {
+                            string[] location = item.task_tolocationid.Split('-');
+                            //鑾峰彇褰撳墠鏈変换鍔$殑灞�
+                            int layer = int.Parse(location[0]);
+                            LogRecord.WriteLog((int)LogEnum.InBound, $"鍒嗛厤浠诲姟鏃讹紝鏈夊叆搴撲换鍔¢渶瑕佸垹闄ょ殑灞傦細{layer}锛屽綋鍓嶅眰璐т綅缂栧彿锛歿item.ToJson()},褰撳墠鐜版湁浠诲姟{inboundTask.ToJson()}");
+                            listLayer.Remove(layer);
+                        }
+                    }
+                }
+                List<Dt_taskinfo> outboundTask = Dt_taskinfoRepository.Instance.Find(r => ((r.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString())
+       && (r.task_state == TaskState.TaskState_RGV_Received.ToString() || r.task_state == TaskState.TaskState_RGV_Finished.ToString()))
+   || r.task_type == TaskType.TaskType_Box_Pallet_Measure_Back.ToString());
+
+                if (null != outboundTask && outboundTask.Count > 0)
+                {
+                    List<string> fromStation = outboundTask.Where(r => r.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString()).Select(r => r.task_fromlocationid).ToList();
+                    fromStation.AddRange(outboundTask.Where(r => r.task_type == TaskType.TaskType_Box_Pallet_Measure_Back.ToString()).Select(r => r.task_tolocationid).ToList());
+
+                    foreach (var item in fromStation)
+                    {
+                        string[] location = item.Split('-');
+                        //鑾峰彇褰撳墠鏈変换鍔$殑灞�
+                        int layer = int.Parse(location[0]);
+                        LogRecord.WriteLog((int)LogEnum.InBound, $"鍒嗛厤浠诲姟鏃讹紝鏈夊叆搴撲换鍔¢渶瑕佸垹闄ょ殑灞傦細{layer}锛屽綋鍓嶅眰璐т綅缂栧彿锛歿item.ToJson()},褰撳墠鐜版湁浠诲姟{outboundTask.ToJson()}");
+                        listLayer.Remove(layer);
+                    }
+                }
+
+            }
+
+
+
+
+
             List<int> rgvLayer = new List<int>();
             WebResponseContent resultcontent = RGVAPIInvokeGetRgvInfo.GetRgvInfo();
             if (resultcontent.Status)
@@ -86,24 +145,25 @@
             }
 
 
+
             if (locationId.Count > 0)
             {
                 //浼樺厛鍒嗛厤绌挎杞︾殑灞�
                 if (rgvLayer.Count > 0)
                 {
-                    locationinfo = Dt_locationinfoRepository.Instance.Find(x => x.location_state == LocationState.LocationState_Empty.ToString() &&
-                    !locationId.Contains(x.location_id) && !x.location_islocked && rgvLayer.Contains(x.location_layer)).OrderBy(x => x.location_layer)
+                    locationinfo = Dt_locationinfoRepository.Instance.Find(x => x.location_state == LocationState.LocationState_Empty.ToString() 
+                    && !x.location_islocked && rgvLayer.Contains(x.location_layer) && !locationId.Contains(x.location_id)).OrderBy(x => x.location_layer)  
                      .ThenBy(x => x.location_column).FirstOrDefault();
                     if (null != locationinfo)
                         return locationinfo;
                     else
-                        locationinfo = Dt_locationinfoRepository.Instance.Find(x => x.location_state == LocationState.LocationState_Empty.ToString() &&
-                   !locationId.Contains(x.location_id) && !x.location_islocked && listLayer.Contains(x.location_layer)).OrderBy(x => x.location_layer)
+                        locationinfo = Dt_locationinfoRepository.Instance.Find(x => x.location_state == LocationState.LocationState_Empty.ToString()
+                    && !x.location_islocked && listLayer.Contains(x.location_layer) && !locationId.Contains(x.location_id)).OrderBy(x => x.location_layer) 
                     .ThenBy(x => x.location_column).FirstOrDefault();
                 }
                 else
-                    locationinfo = Dt_locationinfoRepository.Instance.Find(x => x.location_state == LocationState.LocationState_Empty.ToString() &&
-                    !locationId.Contains(x.location_id) && !x.location_islocked && listLayer.Contains(x.location_layer)).OrderBy(x => x.location_layer)
+                    locationinfo = Dt_locationinfoRepository.Instance.Find(x => x.location_state == LocationState.LocationState_Empty.ToString()
+                     && !x.location_islocked && listLayer.Contains(x.location_layer) && !locationId.Contains(x.location_id)).OrderBy(x => x.location_layer) 
                      .ThenBy(x => x.location_column).FirstOrDefault();
 
                 if (null != locationinfo)
@@ -130,10 +190,13 @@
                     return locationinfo;
             }
 
-            //Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.Find(x => x.location_state == LocationState.LocationState_Empty.ToString() &&
-            //!locationId.Contains(x.location_id) && !x.location_islocked).OrderBy(x => x.location_layer).ThenBy(x => x.location_column).FirstOrDefault();
-            //if (null != locationinfo)
-            //    return locationinfo;
+            if (locationinfo == null)
+            {
+                locationinfo = Dt_locationinfoRepository.Instance.Find(x => x.location_state == LocationState.LocationState_Empty.ToString()
+              && !x.location_islocked && listLayer.Contains(x.location_layer)).OrderBy(x => x.location_layer).ThenBy(x => x.location_column).FirstOrDefault();
+                if (null != locationinfo)
+                    return locationinfo;
+            }
             throw new Exception("鏆傛棤璐т綅鍙垎閰�");
         }
     }

--
Gitblit v1.9.3