From f5b8c1ae89286dada20ea433ffac84f4c9e72a29 Mon Sep 17 00:00:00 2001
From: huanghongfeng <huanghongfeng@hnkhzn.com>
Date: 星期五, 06 六月 2025 14:31:25 +0800
Subject: [PATCH] 1

---
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs |  208 ++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 139 insertions(+), 69 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
index f5b350f..e3b3e94 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
@@ -53,14 +53,32 @@
                 {
                     Signalinteraction(commonStackerCrane);  //鍑哄簱淇″彿浜や簰
                     Siganlinteraction2(commonStackerCrane); //鍏ュ簱淇″彿浜や簰
-                    if (!commonStackerCrane.IsEventSubscribed)
+                    /*if (!commonStackerCrane.IsEventSubscribed)
                     {
                         commonStackerCrane.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//璁㈤槄浠诲姟瀹屾垚浜嬩欢
+                    }*/
+                    if (commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.WorkCompleted)
+                    {
+                        wcs_PLCto07("浠诲姟瀹屾垚", $"浠诲姟鍙凤細{commonStackerCrane.CurrentTaskNum}", $"璇诲彇鍒板爢鍨涙満瀹屾垚淇″彿锛屼换鍔″畬鎴愶紝瀹屾垚鏃堕棿锛歿DateTime.Now}");
+                        //Console.Out.WriteLine("TaskCompleted" + e.TaskNum);
+                        WebResponseContent webResponse=_taskService.StackCraneTaskCompleted(commonStackerCrane.CurrentTaskNum);
+                        if (webResponse.Status)
+                        {
+                            
+                            bool ddjfk= commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
+                            wcs_PLCto07("浠诲姟瀹屾垚", $"浠诲姟鍙凤細{commonStackerCrane.CurrentTaskNum}锛屼慨鏀逛换鍔℃垚鍔�", $"淇敼浠诲姟瀹屾垚锛屽苟鍙嶉鍫嗗灈瀹屾垚淇″彿鏄惁鎴愬姛锛歿ddjfk}");
+                        }
+                        else
+                        {
+                            wcs_PLCto07("浠诲姟瀹屾垚鏁呴殰", $"浠诲姟鍙凤細{commonStackerCrane.CurrentTaskNum}锛屼慨鏀逛换鍔″け璐�", $"澶辫触鍘熷洜锛歿webResponse.Message}");
+
+                        }
                     }
+
 
                     if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal)
                     {
-                        commonStackerCrane.CheckStackerCraneTaskCompleted();//闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽啀鎵嬪姩瑙﹀彂涓�娆�
+                        //commonStackerCrane.CheckStackerCraneTaskCompleted();//闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽啀鎵嬪姩瑙﹀彂涓�娆�
 
                         if (commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
                         {
@@ -99,10 +117,10 @@
             CommonStackerCrane? commonStackerCrane = sender as CommonStackerCrane;
             if (commonStackerCrane != null)
             {
-                if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
+                if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5 && e.TaskNum !=0)
                 {
                     wcs_PLCto07("浠诲姟瀹屾垚", $"浠诲姟鍙凤細{e.TaskNum}", $"璇诲彇鍒板爢鍨涙満瀹屾垚淇″彿锛屼换鍔″畬鎴愶紝瀹屾垚鏃堕棿锛歿DateTime.Now}");
-                    Console.Out.WriteLine("TaskCompleted" + e.TaskNum);
+                    //Console.Out.WriteLine("TaskCompleted" + e.TaskNum);
                     _taskService.StackCraneTaskCompleted(e.TaskNum);
                     commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
                 }
@@ -116,62 +134,89 @@
         /// <returns></returns>
         private Dt_Task? GetTask(CommonStackerCrane commonStackerCrane)
         {
-            Dt_Task task;
-            task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode);
-
-            if (task != null && task.TaskType== (int)TaskOutboundTypeEnum.Outbound)
+            try
             {
-                string[] targetCodes = task.SourceAddress.Split("-");
-                if (targetCodes[4] == "02")
+                //  
+                if (_taskService.CutStackerCraneTask(commonStackerCrane.DeviceCode) != null) return null;
+                //鏌ヨ鍏ㄩ儴浠诲姟锛屾寜鏃堕棿鎺掑簭杩涜鏌ヨ
+                List<Dt_Task> TasksList = _taskService.CraneTaskList(commonStackerCrane.DeviceCode);
+                if (TasksList.Count == 0) return null;
+                foreach (var item in TasksList)
                 {
-
-                    Dt_Task taskst = OutTaskMovelibrary(task);
-                    if (taskst != null)
+                    if (item.TaskType == (int)TaskInboundTypeEnum.Inbound)
                     {
-                        if(taskst.TaskType == (int)TaskRelocationTypeEnum.Relocation) 
+                        string[] targetCodes = item.TargetAddress.Split("-");
+                        if (targetCodes[4] == "01") return item;        //濡傛灉鏄祬搴撲綅锛屽垯鐩存帴杩斿洖璇ヤ换鍔�
+
+                        //濡傛灉涓烘繁搴撲綅锛屽垯鏌ョ湅鏄惁鏈夐渶瑕佹墽琛岀殑浠诲姟
+                        if (targetCodes[4] == "02")
                         {
-                            return taskst;
-                        }
-                        else
-                        {
-                            if(taskst.TargetAddress== "R02-001-021-001-02" || taskst.TargetAddress == "R02-001-022-001-02")
+
+                            Dt_Task taskst = InTaskMove(item);
+                            if (taskst != null)
                             {
                                 return taskst;
                             }
-                            else
+                        }
+                    }
+                    else if (item.TaskType == (int)TaskOutboundTypeEnum.Outbound)
+                    {
+                        string[] targetCodes = item.SourceAddress.Split("-");//杩涜瑙f瀽璐т綅
+                        if (targetCodes[4] == "02")
+                        {
+                            //涓烘繁搴撲綅
+                            Dt_Task taskst = OutTaskMovelibrary(item);  //鍒ゆ柇鏄惁闇�瑕佽繘琛岀Щ搴�
+                            if (taskst != null)
                             {
-                                if (OutTaskStationIsOccupied(taskst) != null)
+                                if (taskst.TaskType == (int)TaskRelocationTypeEnum.Relocation)
                                 {
                                     return taskst;
                                 }
+                                else
+                                {
+                                    if (taskst.TargetAddress == "R02-001-021-001-02" || taskst.TargetAddress == "R02-001-022-001-02")
+                                    {
+                                        return taskst;
+                                    }
+                                    else
+                                    {
+                                        if (OutTaskStationIsOccupied(taskst) != null)       //鍒ゆ柇鍑哄簱绔欏彴鏄惁鍙笅鍙�
+                                        {
+                                            return taskst;
+                                        }
+                                    }
+
+                                }
                             }
-                                
                         }
-                        
-                    }
-                    task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
-                }
-                else
-                {
-                    if (task.TargetAddress == "R02-001-021-001-02" || task.TargetAddress == "R02-001-022-001-02")
-                    {
-                        return task;
-                    }
-                    else
-                    {
-                        if (OutTaskStationIsOccupied(task) != null)
+                        else
                         {
-                            return task;
+                            if (item.TargetAddress == "R02-001-021-001-02" || item.TargetAddress == "R02-001-022-001-02")
+                            {
+                                return item;
+                            }
+                            else
+                            {
+                                if (OutTaskStationIsOccupied(item) != null)       //鍒ゆ柇鍑哄簱绔欏彴鏄惁鍙笅鍙�
+                                {
+                                    return item;
+                                }
+                            }
+                            
                         }
                     }
-                    
-                    task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
                 }
 
-
+                return null;
             }
-            return task;
+            catch (Exception ex)
+            {
+                WriteLog.Write_Log("鍫嗗灈鏈轰换鍔′笅鍙戞晠闅�", "鏁呴殰", "鏁呴殰", new { 淇℃伅 = ex.Message });
+                return null;
+            } 
         }
+
+       
 
         /// <summary>
         /// 鍑哄簱浠诲姟鍒ゆ柇鍑哄簱绔欏彴鏄惁琚崰鐢�
@@ -205,6 +250,7 @@
             return null;
         }
 
+        
         /// <summary>
         /// 鍑哄簱浠诲姟鍒ゆ柇鏄惁闇�瑕佽繘琛岀Щ搴揗ove the library
         /// </summary>
@@ -212,42 +258,62 @@
         /// <returns>濡傛灉鏈鍗犵敤锛岃繑鍥炰紶鍏ョ殑浠诲姟淇℃伅锛屽惁鍒欙紝杩斿洖null</returns>
         private Dt_Task? OutTaskMovelibrary([NotNull] Dt_Task task)
         {
-            try
+            string[] targetCodes = task.SourceAddress.Split("-");
+            if (targetCodes[1] == "001")
             {
-                string[] targetCodes = task.SourceAddress.Split("-");
-                if (targetCodes[1] == "001")
-                {
-                    targetCodes[1] = "002";
+                targetCodes[1] = "002";
 
-                }
-                else if (targetCodes[1] == "004")
-                {
-                    targetCodes[1] = "003";
-                }
-                targetCodes[4] = "01";
-                string SourceAddress = string.Join("-", targetCodes); //缁勮娴呭簱浣嶅湴鍧�
-                Dt_Task? tasks = _taskService.QueryStationIsOccupiedOutTasks(task.Roadway, SourceAddress).FirstOrDefault(); //鎵炬祬搴撲綅鏄惁鏈変换鍔�
-                if (tasks != null)
-                {
-                    return tasks;
-                }
-                else
-                {
-                    //鍚憌ms鐢宠鍒ゆ柇娴呭簱浣嶆槸鍚︽湁璐э紝鏄惁闇�瑕佽繘琛岀Щ搴�
-                    Dt_Task? taskst = _taskService.RequestWMSTaskMovelibrary(task);
-                    if (taskst != null)
-                    {
-                        return taskst;
-                    }
-                }
             }
-            catch (Exception ex)
+            else if (targetCodes[1] == "004")
             {
-
-                throw;
+                targetCodes[1] = "003";
+            }
+            targetCodes[4] = "01";
+            string SourceAddress = string.Join("-", targetCodes); //缁勮娴呭簱浣嶅湴鍧�
+            Dt_Task? tasks = _taskService.QueryStationIsOccupiedOutTasks(task.Roadway, SourceAddress).FirstOrDefault(); //鎵炬祬搴撲綅鏄惁鏈変换鍔�
+            if (tasks != null)
+            {
+                return tasks;
+            }
+            else
+            {
+                //鍚憌ms鐢宠鍒ゆ柇娴呭簱浣嶆槸鍚︽湁璐э紝鏄惁闇�瑕佽繘琛岀Щ搴�
+                Dt_Task? taskst = _taskService.RequestWMSTaskMovelibrary(task);
+                if (taskst != null)
+                {
+                    return taskst;
+                }
             }
             return null;
         }
+
+        private Dt_Task? InTaskMove([NotNull] Dt_Task task)
+        {
+            string[] targetCodes = task.TargetAddress.Split("-");
+            if (targetCodes[1] == "001")
+            {
+                targetCodes[1] = "002";
+
+            }
+            else if (targetCodes[1] == "004")
+            {
+                targetCodes[1] = "003";
+            }
+            targetCodes[4] = "01";
+            string TargetAddress = string.Join("-", targetCodes);  //鐢ㄦ繁搴撲綅缁勮娴呭簱浣嶇紪鍙�
+            Dt_Task? tasks = _taskService.QueryStationIsOccupiedOutTasks2(task.Roadway, TargetAddress).FirstOrDefault(); //鎵炬祬搴撲綅鏄惁鏈夊嚭搴撲换鍔℃垨绉诲簱浠诲姟
+            if(tasks != null) { return tasks; }     //濡傛灉鏈夛紝鍒欏厛涓嬪彂鑷冲爢鍨涙満
+
+            //鍚憌ms鐢宠鍒ゆ柇娴呭簱浣嶆槸鍚︽湁璐э紝鏄惁闇�瑕佽繘琛岀Щ搴�
+            Dt_Task? taskst = _taskService.RequestWMSTaskMovelibrary2(task);
+            if (taskst != null)
+            {
+                return taskst;
+            }
+            return null;    
+        }
+
+       
 
         public void Signalinteraction(CommonStackerCrane commonStackerCrane)
         {
@@ -1218,6 +1284,10 @@
         {
             WriteLog.Write_Log("浠诲姟淇℃伅瀹屾垚璁板綍", SCLLinStack, Logtype, new { 淇℃伅 = Magessadd });
         }
+        public void wcs_PLCto07_1(string SCLLinStack, string Logtype, string Magessadd)
+        {
+            WriteLog.Write_Log("浠诲姟淇℃伅瀹屾垚淇敼璁板綍", SCLLinStack, Logtype, new { 淇℃伅 = Magessadd });
+        }
 
         public void wcs_PLCto08(string SCLLinStack, string Logtype, string Magessadd)
         {

--
Gitblit v1.9.3