From f49fa4b5027cfdc27b429985d023e8002abcca2e Mon Sep 17 00:00:00 2001
From: huanghongfeng <huanghongfeng@hnkhzn.com>
Date: 星期三, 05 十一月 2025 23:54:12 +0800
Subject: [PATCH] 1

---
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs |  291 ++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 214 insertions(+), 77 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 a25dcbe..01b4620 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,42 @@
                 {
                     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
+                        {
+                            WebResponseContent webRespon = _taskService.StackCraneTashty(commonStackerCrane.CurrentTaskNum);
+                            if (webRespon.Status)
+                            {
+
+                                bool fk = commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
+                                wcs_PLCto07("浠诲姟瀹屾垚", $"浠诲姟鍙凤細{commonStackerCrane.CurrentTaskNum},鍘嗗彶鏌ヨ淇℃伅", $"浠诲姟鏌ユ壘浠诲姟閲嶏紝骞惰繘琛屽弽棣堬細{fk}");
+                            }
+                            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)
                         {
@@ -73,8 +101,20 @@
                                     bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand);
                                     if (sendFlag)
                                     {
-                                        commonStackerCrane.LastTaskType = task.TaskType;
-                                        _taskService.UpdateTaskStatusToNext(task.TaskNum);
+                                        WebResponseContent webResponseContent=_taskService.UpdateTaskStatusToNext(task.TaskNum);
+                                        if (webResponseContent.Status)
+                                        {
+                                            wcs_PLCto09("浠诲姟涓嬪彂鎴愬姛", $"浠诲姟鍙凤細{task.TaskNum}", $"鎵樼洏鏉$爜锛歿task.PalletCode},鏃堕棿锛歿DateTime.Now}");
+                                        }
+                                        else
+                                        {
+                                            wcs_PLCto09("浠诲姟涓嬪彂澶辫触", $"浠诲姟鍙凤細{task.TaskNum}", $"澶辫触鍘熷洜锛歿webResponseContent.Message}");
+                                        }
+                                    }
+                                    else
+                                    {
+
+                                        wcs_PLCto09("浠诲姟涓嬪彂澶辫触", $"浠诲姟鍙凤細{task.TaskNum}", $"涓嬪彂缁欏爢鍨涙満浠诲姟澶辫触锛岀姸鎬侊細{sendFlag}");
                                     }
                                 }
                             }
@@ -84,6 +124,7 @@
             }
             catch (Exception ex)
             {
+                wcs_PLCto09("鍫嗗灈鏈篔ob", $"鏁呴殰", $"鍘熷洜锛歿ex.Message}");
                 //Console.WriteLine(nameof(CommonStackerCraneJob) + ":" + ex.ToString());
             }
             return Task.CompletedTask;
@@ -99,9 +140,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)
                 {
-                    Console.Out.WriteLine("TaskCompleted" + e.TaskNum);
+                    wcs_PLCto07("浠诲姟瀹屾垚", $"浠诲姟鍙凤細{e.TaskNum}", $"璇诲彇鍒板爢鍨涙満瀹屾垚淇″彿锛屼换鍔″畬鎴愶紝瀹屾垚鏃堕棿锛歿DateTime.Now}");
+                    //Console.Out.WriteLine("TaskCompleted" + e.TaskNum);
                     _taskService.StackCraneTaskCompleted(e.TaskNum);
                     commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
                 }
@@ -115,62 +157,113 @@
         /// <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;
+
+                Dt_Task RELNew= TasksList.Where(x=>x.TaskType== (int)TaskRelocationTypeEnum.Relocation && x.TaskState == (int)TaskOutStatusEnum.ResRestNet).OrderBy(x => x.CreateDate).FirstOrDefault();
+                if( RELNew != null )
                 {
 
-                    Dt_Task taskst = OutTaskMovelibrary(task);
-                    if (taskst != null)
+                    string[] targetCodes = RELNew.TargetAddress.Split("-");
+
+                    //濡傛灉涓烘繁搴撲綅锛屽垯鏌ョ湅鏄惁鏈夐渶瑕佹墽琛岀殑浠诲姟
+                    if (targetCodes[4] == "02")
                     {
-                        if(taskst.TaskType == (int)TaskRelocationTypeEnum.Relocation) 
+
+                        Dt_Task taskstrot = InTaskMove(RELNew);
+                        if (taskstrot != null)
                         {
-                            return taskst;
+                            return taskstrot;
                         }
-                        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)
-                        {
-                            return task;
-                        }
+                            return RELNew;
                     }
-                    
-                    task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
                 }
 
 
+                foreach (var item in TasksList)
+                {
+                    if (item.TaskType == (int)TaskInboundTypeEnum.Inbound)
+                    {
+                        string[] targetCodes = item.TargetAddress.Split("-");
+                        if (targetCodes[4] == "01") return item;        //濡傛灉鏄祬搴撲綅锛屽垯鐩存帴杩斿洖璇ヤ换鍔�
+
+                        //濡傛灉涓烘繁搴撲綅锛屽垯鏌ョ湅鏄惁鏈夐渶瑕佹墽琛岀殑浠诲姟
+                        if (targetCodes[4] == "02")
+                        {
+
+                            Dt_Task taskst = InTaskMove(item);
+                            if (taskst != null)
+                            {
+                                return taskst;
+                            }
+                        }
+                    }
+                    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 (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;
+                                        }
+                                    }
+
+                                }
+                            }
+                        }
+                        else
+                        {
+                            if (item.TargetAddress == "R02-001-021-001-02" || item.TargetAddress == "R02-001-022-001-02")
+                            {
+                                return item;
+                            }
+                            else
+                            {
+                                if (OutTaskStationIsOccupied(item) != null)       //鍒ゆ柇鍑哄簱绔欏彴鏄惁鍙笅鍙�
+                                {
+                                    return item;
+                                }
+                            }
+                            
+                        }
+                    }
+                }
+
+                return null;
             }
-            return task;
+            catch (Exception ex)
+            {
+                WriteLog.Write_Log("鍫嗗灈鏈轰换鍔′笅鍙戞晠闅�", "鏁呴殰", "鏁呴殰", new { 淇℃伅 = ex.Message });
+                return null;
+            } 
         }
+
+       
 
         /// <summary>
         /// 鍑哄簱浠诲姟鍒ゆ柇鍑哄簱绔欏彴鏄惁琚崰鐢�
@@ -191,6 +284,10 @@
                     {
                         return task;
                     }
+                    else
+                    {
+                        wcs_PLCto08("鍑哄簱浠诲姟", $"浠诲姟鍙凤細{task.TaskNum}锛岃繘琛屽嚭搴�", $"璇诲彇鍒拌緭閫佺嚎涓嶅彲鏀捐揣淇″彿锛屼笉鍙繘琛屼换鍔′笅鍙�");
+                    }
                 }
             }
             else
@@ -200,6 +297,7 @@
             return null;
         }
 
+        
         /// <summary>
         /// 鍑哄簱浠诲姟鍒ゆ柇鏄惁闇�瑕佽繘琛岀Щ搴揗ove the library
         /// </summary>
@@ -207,42 +305,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)
         {
@@ -437,7 +555,7 @@
                     if (deviceProDTO != null)
                     {
                         int B_Event_Test = GetLine(conveyorLine, deviceProDTO.DeviceProDataBlock);        //鍒ゆ柇杈撻�佺嚎鏄惁鍏佽鍙栬揣淇″彿
-                        if (B_Event_Test == 1)
+                        if (B_Event_Test == 1 || (task.SourceAddress== "R01-002-043-001-01" && B_Event_Test==6))
                         {
                             if (Releasespermitted2(commonStackerCrane, task.SourceAddress,true))  //鍐欏叆鍫嗗灈鏈哄厑璁稿彇璐т俊鍙�
                             {
@@ -1208,5 +1326,24 @@
         {
             WriteLog.Write_Log("鍑哄簱浜や簰淇℃伅", SCLLinStack, Logtype, new { 淇℃伅 = Magessadd });
         }
+
+        public void wcs_PLCto07(string SCLLinStack, string Logtype, string Magessadd)
+        {
+            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)
+        {
+            WriteLog.Write_Log("鍑哄簱绔欏彴淇℃伅", SCLLinStack, Logtype, new { 淇℃伅 = Magessadd });
+        }
+
+        public void wcs_PLCto09(string SCLLinStack, string Logtype, string Magessadd)
+        {
+            WriteLog.Write_Log("鍫嗗灈鏈轰笅鍙戞儏鍐�", SCLLinStack, Logtype, new { 淇℃伅 = Magessadd });
+        }
     }
 }

--
Gitblit v1.9.3