From 429bb4abbaea6fd6be33dcf62735d4ada5070b63 Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期日, 19 五月 2024 17:51:03 +0800
Subject: [PATCH] 优化逻辑提高AGV任务效率

---
 代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyPalletStation.cs |  104 +++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 91 insertions(+), 13 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyPalletStation.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyPalletStation.cs"
index 4d45e09..93cdff5 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyPalletStation.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyPalletStation.cs"
@@ -73,7 +73,14 @@
                 VOLContext Context = new VOLContext();
                 Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context);
                 var station = stationinfoRepository.Find(x => x.stationCode == StationCode).FirstOrDefault();
-                OK = stationinfoRepository.Find(x => x.area == station.area && x.line == station.line && x.column > station.column && x.location_state != LocationStateEnum.Empty.ToString()).Any();
+                if (station.area == "10" || station.area == "11")
+                {
+                    OK = stationinfoRepository.Find(x => x.area == station.area && x.line == station.line && x.column < station.column && x.location_state != LocationStateEnum.Empty.ToString()).Any();
+                }
+                else
+                {
+                    OK = stationinfoRepository.Find(x => x.area == station.area && x.line == station.line && x.column > station.column && x.location_state != LocationStateEnum.Empty.ToString()).Any();
+                }
             }
             catch (Exception ex)
             {
@@ -102,7 +109,12 @@
 
             }
         }
-
+        /// <summary>
+        /// 鏌ユ壘褰撳墠琛屽彲鍏ュ簱绌鸿揣浣�
+        /// </summary>
+        /// <param name="EmptyStation"></param>
+        /// <param name="stationinfoRepository"></param>
+        /// <returns></returns>
         public static dt_stationinfo Station(dt_stationinfo EmptyStation, Idt_stationinfoRepository stationinfoRepository)
         {
             dt_stationinfo stationinfo = null;
@@ -113,21 +125,88 @@
 
                 stationinfo = stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.quantity > 0 && x.enable).OrderByDescending(x => x.column).FirstOrDefault();
                 if (stationinfo != null)
-                {
                     if (stationinfo.quantity < 5) return stationinfo;
-                    else
-                        stationinfo = stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.column).FirstOrDefault();
-                }
-                else
-                {
-                    stationinfo = stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.column).FirstOrDefault();
-                }
-                //if (stationinfo == null)
+
+                stationinfo = stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.column).FirstOrDefault();
 
             }
             catch (Exception ex)
             {
 
+            }
+            return stationinfo;
+        }
+
+        /// <summary>
+        /// 绌烘墭鍙叆搴撹揣浣�
+        /// </summary>
+        /// <param name="area"></param>
+        /// <returns></returns>
+        public static dt_stationinfo EmptyPalletStation1(string area)
+        {
+            dt_stationinfo stationinfo = null;
+            try
+            {
+                VOLContext Context = new VOLContext();
+                Idt_agvtaskRepository agvtaskService = new dt_agvtaskRepository(Context);
+                Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context);
+
+                #region 鏌ユ壘AB搴撳彲鍏ョ┖鎵樼┖璐т綅
+                if (area == "11" && stationinfoRepository.Find(x => x.stationCode == "A01001001" && x.quantity == 5 && x.location_state == LocationStateEnum.Stroge.ToString()).Any())
+                {
+                    #region MyRegion
+                    var EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && (x.area == "2" || x.area == "3") && x.tray_status == TrayStateEnum.EmptyTray.ToString() && x.enable).OrderByDescending(x => x.area).ThenByDescending(x => x.line).ThenByDescending(x => x.column).FirstOrDefault();
+                    #endregion
+
+                    #region 鏌ユ壘搴撳尯2鍜屽簱鍖�3鐨勭┖鎵樿揣浣�
+                    //var EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && (x.area == "2" || x.area == "3")
+                    //   && x.tray_status == TrayStateEnum.EmptyTray.ToString() && x.enable).OrderByDescending(x => x.lastUpdateTime).FirstOrDefault();
+
+                    if (EmptyStation != null)
+                    {
+                        stationinfo = Station(EmptyStation, stationinfoRepository);
+                        if (stationinfo != null)
+                            if (!QueueStation(stationinfo.stationCode)) return stationinfo;
+
+                        EmptyStation = stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.enable).OrderByDescending(x => x.column).FirstOrDefault();
+                        if (EmptyStation.quantity != 5) return null;
+                    }
+                    #endregion
+
+                    #region 鏈壘鍒扮┖鎵樿揣浣嶆垨褰撳墠琛屽凡婊�,瀵绘壘鏂扮殑涓�琛�
+                    stationinfo = stationinfoRepository.Find(x => x.column == 2 && x.area == "3" && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderByDescending(x => x.line).FirstOrDefault();
+                    if (stationinfo == null)
+                        stationinfo = stationinfoRepository.Find(x => x.column == 1 && x.area == "2" && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderByDescending(x => x.line).FirstOrDefault();
+                    #endregion
+                }
+                #endregion
+
+                #region 鏌ユ壘绌烘墭搴撳尯
+                else
+                {
+                    if (stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Busy.ToString()).Any()) return stationinfo;
+                    stationinfo = stationinfoRepository.Find(x => x.area == area && x.quantity > 0 && x.enable).OrderBy(x => x.column).FirstOrDefault();
+                    if (stationinfo != null)
+                        if (!QueueStation(stationinfo.stationCode) && stationinfo.quantity < 5) return stationinfo;
+                    stationinfo = stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderByDescending(x => x.column).FirstOrDefault();
+
+                }
+                #endregion
+
+                #region 鏌ョ湅褰撳墠绌鸿揣浣嶅悗鏄惁瀛樺湪鏈夋枡
+                if (stationinfo != null)
+                    if (GetStation.QueueStation(stationinfo.stationCode)) stationinfo = null;
+                #endregion
+
+                #region 鍒ゆ柇褰撳墠璐т綅鏄惁瀛樺湪浠诲姟
+                if (stationinfo != null)
+                    if (agvtaskService.Find(x => x.agv_toaddress == stationinfo.stationCode).Any()) stationinfo = null;
+                #endregion
+
+            }
+            catch (Exception ex)
+            {
+                throw;
             }
             return stationinfo;
         }
@@ -146,7 +225,6 @@
                 Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context);
 
                 #region 鏌ユ壘绌烘墭鐩樺簱鍖�
-                //if (stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Busy.ToString()).Any() && area != "10")
                 if (stationinfoRepository.Find(x => x.stationCode == "A01001001" && x.quantity == 5 && x.location_state == LocationStateEnum.Stroge.ToString()).Any())
                 {
                     var EmptyStation = stationinfoRepository.Find(x => x.stationCode == "C01005002" && x.location_state == LocationStateEnum.Empty.ToString()).FirstOrDefault();
@@ -190,7 +268,7 @@
 
                 #region 鍒ゆ柇褰撳墠璐т綅鏄惁瀛樺湪浠诲姟
                 if (stationinfo != null)
-                    if (agvtaskService.Find(x => /*x.agv_fromaddress == stationinfo.stationCode ||*/ x.agv_toaddress == stationinfo.stationCode).Any()) stationinfo = null; 
+                    if (agvtaskService.Find(x => /*x.agv_fromaddress == stationinfo.stationCode ||*/ x.agv_toaddress == stationinfo.stationCode).Any()) stationinfo = null;
                 #endregion
 
             }

--
Gitblit v1.9.3