From d58196721475e968769d708d9c14f60dd8d5671f Mon Sep 17 00:00:00 2001
From: HuBingJie <3146306518@qq.com>
Date: 星期四, 13 十一月 2025 22:20:14 +0800
Subject: [PATCH] 1

---
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs |  144 ++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 133 insertions(+), 11 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
index 8af5db4..a66eea1 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
@@ -45,6 +45,7 @@
         private readonly ICacheService _cacheService; private readonly IRepository<Dt_Router> _routerRepository;
         private readonly IRepository<Dt_StationManger> _stationMangerRepository;
         private readonly IRepository<Dt_Task> _taskRepository;
+        //bool SCres = false;
 
         public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, ICacheService cacheService, IRepository<Dt_Router> routerRepository, IRepository<Dt_StationManger> stationMangerRepository, IRepository<Dt_Task> taskRepository)
         {
@@ -57,22 +58,86 @@
         }
 
         public Task Execute(IJobExecutionContext context)
+         {
+             try
+             {
+
+                 SpeStackerCrane speStackerCrane = (SpeStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
+                 if (speStackerCrane != null)
+                 {
+                     GetStackerObject getStackerObject = new GetStackerObject(speStackerCrane);
+                     if (!getStackerObject.IsEventSubscribed)
+                     {
+                         getStackerObject.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;
+                     }
+                     getStackerObject.CheckStackerCraneTaskCompleted();
+                     if (getStackerObject.StackerCraneStatusValue == StackerCraneStatus.Normal)
+                     {
+                         //var a = speStackerCrane.GetValue<StackerCraneDBName, Int32>(StackerCraneDBName.CurrentTaskNum);
+                         Dt_Task? task = GetTasks(speStackerCrane);
+                         if (task != null)
+                         {
+                             WriteInfo("鏌ユ壘鍫嗗灈鏈轰换鍔″彿", $"浠诲姟淇℃伅,浠诲姟鍙�:{task.TaskNum}锛屽爢鍨涙満缂栧彿{speStackerCrane.DeviceCode}");
+                             bool sendFlag = true;
+                             if (sendFlag)
+                             {
+                                 StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task); //杞崲涓哄爢鍨涙満浠诲姟
+                                 if (stackerCraneTaskCommand != null)
+                                 {
+                                     sendFlag = getStackerObject.SendCommand(stackerCraneTaskCommand); //鍙戦�佸爢鍨涙満浠诲姟
+                                     if (sendFlag)
+                                     {
+                                         speStackerCrane.SetValue(StackerCraneDBName.CommandSend, 1);//鍚姩鍛戒护
+                                         speStackerCrane.LastTaskType = task.TaskType;
+                                         task.Dispatchertime = DateTime.Now;
+                                         task.ExceptionMessage = "";
+
+                                         WebResponseContent webResponseContent = _taskService.UpdateTaskStatusToNext(task.TaskNum);
+                                         //寤舵椂1s
+                                         Thread.Sleep(1000);
+                                     }
+                                 }
+                             }
+                         }
+                     }
+                 }
+             }
+             catch (Exception)
+             {
+
+                 throw;
+             }
+             return Task.CompletedTask;
+         }
+       
+
+        /*
+        // 娣诲姞浜嬩欢璁㈤槄鐘舵�佹爣璁�
+        private static readonly Dictionary<string, bool> _eventSubscribedMap = new Dictionary<string, bool>();
+        private static readonly object _lockObject = new object();
+        public Task Execute(IJobExecutionContext context)
         {
             try
             {
-
                 SpeStackerCrane speStackerCrane = (SpeStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
                 if (speStackerCrane != null)
                 {
                     GetStackerObject getStackerObject = new GetStackerObject(speStackerCrane);
-                    if (!getStackerObject.IsEventSubscribed)
+
+                    // 浣跨敤閿佺‘淇濈嚎绋嬪畨鍏ㄧ殑浜嬩欢璁㈤槄
+                    lock (_lockObject)
                     {
-                        getStackerObject.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;
+                        string deviceKey = speStackerCrane.DeviceCode;
+                        if (!_eventSubscribedMap.ContainsKey(deviceKey) || !_eventSubscribedMap[deviceKey])
+                        {
+                            getStackerObject.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;
+                            _eventSubscribedMap[deviceKey] = true;
+                        }
                     }
+
                     getStackerObject.CheckStackerCraneTaskCompleted();
                     if (getStackerObject.StackerCraneStatusValue == StackerCraneStatus.Normal)
                     {
-                        var a = speStackerCrane.GetValue<StackerCraneDBName, Int32>(StackerCraneDBName.CurrentTaskNum);
                         Dt_Task? task = GetTasks(speStackerCrane);
                         if (task != null)
                         {
@@ -80,16 +145,17 @@
                             bool sendFlag = true;
                             if (sendFlag)
                             {
-                                StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
+                                StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task); //杞崲涓哄爢鍨涙満浠诲姟
                                 if (stackerCraneTaskCommand != null)
                                 {
-                                    sendFlag = getStackerObject.SendCommand(stackerCraneTaskCommand);
+                                    sendFlag = getStackerObject.SendCommand(stackerCraneTaskCommand); //鍙戦�佸爢鍨涙満浠诲姟
                                     if (sendFlag)
                                     {
                                         speStackerCrane.SetValue(StackerCraneDBName.CommandSend, 1);//鍚姩鍛戒护
                                         speStackerCrane.LastTaskType = task.TaskType;
                                         task.Dispatchertime = DateTime.Now;
                                         task.ExceptionMessage = "";
+
                                         WebResponseContent webResponseContent = _taskService.UpdateTaskStatusToNext(task.TaskNum);
                                         //寤舵椂1s
                                         Thread.Sleep(1000);
@@ -100,14 +166,41 @@
                     }
                 }
             }
-            catch (Exception)
+            catch (Exception ex)
             {
-
+                WriteError("鍫嗗灈鏈轰换鍔℃墽琛屽紓甯�", ex.Message);
                 throw;
             }
             return Task.CompletedTask;
         }
 
+        private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, StackerCraneTaskCompletedEventArgs e)
+        {
+            SpeStackerCrane? speStackerCrane = sender as SpeStackerCrane;
+            if (speStackerCrane != null)
+            {
+                // 浣跨敤閿佺‘淇濆悓涓�浠诲姟涓嶄細琚苟鍙戝鐞�
+                lock (_lockObject)
+                {
+                    if (speStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
+                    {
+                        var currentTaskNum = speStackerCrane.GetValue<StackerCraneDBName, Int32>(StackerCraneDBName.CurrentTaskNum);
+                        WriteInfo("鍫嗗灈鏈轰换鍔″畬鎴�", $"PLC浠诲姟鍙�:{currentTaskNum}, 绯荤粺浠诲姟鍙�:{e.TaskNum}, 鏃堕棿:{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}");
+
+                        _taskService.StackCraneTaskCompleted(e.TaskNum);
+                        WriteInfo("鍫嗗灈鏈轰换鍔″畬鎴愬弽棣堜换鍔″彿", $"浠诲姟淇℃伅,浠诲姟鍙�:{e.TaskNum}");
+                        speStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
+
+                        WriteInfo("鍫嗗灈鏈轰换鍔$姸鎬佹洿鏂�", $"浠诲姟{e.TaskNum}瀹屾垚鐘舵�佸凡璁剧疆");
+                    }
+                    else
+                    {
+                        WriteInfo("鍫嗗灈鏈轰换鍔¢噸澶嶅畬鎴愪簨浠�", $"浠诲姟鍙�:{e.TaskNum} 宸茶澶勭悊锛屽拷鐣ラ噸澶嶄簨浠�");
+                    }
+                }
+            }
+        }
+        */
 
         private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, StackerCraneTaskCompletedEventArgs e)
         {
@@ -118,13 +211,19 @@
                 {
                     var TaskNum = speStackerCrane.GetValue<StackerCraneDBName, Int32>(StackerCraneDBName.CurrentTaskNum);
                     WriteInfo("鍫嗗灈鏈轰换鍔″畬鎴�", $"浠诲姟鍙�:{TaskNum}");
-                    _taskService.StackCraneTaskCompleted(e.TaskNum);
+                   bool res =  _taskService.StackCraneTaskCompleted(e.TaskNum);
+                    if(res == true)
+                    {
+                        speStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
+
+                    }
                     WriteInfo("鍫嗗灈鏈轰换鍔″畬鎴愬弽棣堜换鍔″彿", $"浠诲姟淇℃伅,浠诲姟鍙�:{e.TaskNum}");
-                    speStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
+                    return;
+                    //SCres=true;
                 }
             }
         }
-
+       
         /// <summary>
         /// 鑾峰彇浠诲姟
         /// </summary>
@@ -141,6 +240,9 @@
             }
 
             task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);         //鑾峰彇鍏ュ簱浠诲姟
+            List<Dt_Task> YKtasks = _taskService.QueryStackerCraneYKTasks(commonStackerCrane.DeviceCode);
+
+
             if (task != null)
             {
                 if(task.Roadway=="SC02") return task;    //濡傛灉鏈変换鍔″垯鐩存帴涓嬪彂缁欏爢鍨涙満
@@ -149,6 +251,25 @@
 
                 Dt_Task dt_Task = _taskService.RequestWMSTaskMovelibrary(task);
                 if (dt_Task != null) return dt_Task;
+            }
+            else if (YKtasks.Count > 0)
+            {
+                foreach (var item in YKtasks)
+                {
+                        if (item.Roadway == "SC01")
+                        {
+                            if (item.Depth == 1) return item;
+                            //璋冨彇WMS鎺ュ彛杩涜鍒ゆ柇鏄惁闇�瑕佽繘琛岀Щ搴�
+                            Dt_Task dt_Task = OutTaskMovelibrary(item);
+                            if (dt_Task != null) return dt_Task;
+
+                        else
+                        {
+                            return item;
+                        }
+                    }
+                }
+
             }
             else
             {
@@ -174,6 +295,7 @@
                 }
             }
 
+
             return task;
         }
 

--
Gitblit v1.9.3