From 51af2794f47d5b68496edbc09d0ccb168347f02b Mon Sep 17 00:00:00 2001
From: HuBingJie <3146306518@qq.com>
Date: 星期六, 22 十一月 2025 10:19:05 +0800
Subject: [PATCH] 1

---
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs |  182 ++++++++++++++++-----------------------------
 1 files changed, 66 insertions(+), 116 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 a66eea1..53bb9e4 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,9 +45,10 @@
         private readonly ICacheService _cacheService; private readonly IRepository<Dt_Router> _routerRepository;
         private readonly IRepository<Dt_StationManger> _stationMangerRepository;
         private readonly IRepository<Dt_Task> _taskRepository;
+        private readonly CommonConveyorLineJob _lineJob;
         //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)
+        public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, ICacheService cacheService, IRepository<Dt_Router> routerRepository, IRepository<Dt_StationManger> stationMangerRepository, IRepository<Dt_Task> taskRepository, CommonConveyorLineJob lineJob)
         {
             _taskService = taskService;
             _routerService = routerService;
@@ -55,6 +56,7 @@
             _routerService = routerService;
             _stationMangerRepository = stationMangerRepository;
             _taskRepository = taskRepository;
+            _lineJob = lineJob;
         }
 
         public Task Execute(IJobExecutionContext context)
@@ -111,97 +113,6 @@
          }
        
 
-        /*
-        // 娣诲姞浜嬩欢璁㈤槄鐘舵�佹爣璁�
-        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);
-
-                    // 浣跨敤閿佺‘淇濈嚎绋嬪畨鍏ㄧ殑浜嬩欢璁㈤槄
-                    lock (_lockObject)
-                    {
-                        string deviceKey = speStackerCrane.DeviceCode;
-                        if (!_eventSubscribedMap.ContainsKey(deviceKey) || !_eventSubscribedMap[deviceKey])
-                        {
-                            getStackerObject.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;
-                            _eventSubscribedMap[deviceKey] = true;
-                        }
-                    }
-
-                    getStackerObject.CheckStackerCraneTaskCompleted();
-                    if (getStackerObject.StackerCraneStatusValue == StackerCraneStatus.Normal)
-                    {
-                        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 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)
         {
             SpeStackerCrane? speStackerCrane = sender as SpeStackerCrane;
@@ -232,6 +143,13 @@
         private Dt_Task? GetTasks(SpeStackerCrane commonStackerCrane)
         {
             Dt_Task? task;
+            // PLC鐘舵�佹鏌ワ細WorkType蹇呴』涓�0锛堢┖闂茬姸鎬侊級
+            var workType = commonStackerCrane.GetValue<StackerCraneDBName, byte>(StackerCraneDBName.StackerCraneWorkStatus);
+            //var workType = commonStackerCrane.GetValue<StackerCraneDBName, byte>(StackerCraneDBName.StackerCraneWorkStatus);
+            if (workType != 0)
+            {
+                return null;
+            }
 
             //鍫嗗灈鏈烘墽琛屼腑
             if (_taskRepository.QueryFirst(x => x.DeviceCode == commonStackerCrane.DeviceCode && x.TaskState == TaskStatusEnum.SC_Executing.ObjToInt()) != null)
@@ -245,23 +163,23 @@
 
             if (task != null)
             {
-                if(task.Roadway=="SC02") return task;    //濡傛灉鏈変换鍔″垯鐩存帴涓嬪彂缁欏爢鍨涙満
-                if(task.Depth==1) return task;
-                //2娣变綅杩涜鍒ゆ柇鏄惁瑕佺Щ搴�
 
+                if (task.Roadway == "SC02") return task;    //濡傛灉鏈変换鍔″垯鐩存帴涓嬪彂缁欏爢鍨涙満
+                if (task.Depth == 1) return task;
+                //2娣变綅杩涜鍒ゆ柇鏄惁瑕佺Щ搴�
                 Dt_Task dt_Task = _taskService.RequestWMSTaskMovelibrary(task);
                 if (dt_Task != null) return dt_Task;
             }
-            else if (YKtasks.Count > 0)
+            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;
+                    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
                         {
@@ -275,23 +193,34 @@
             {
                 //杩涜鑾峰彇鍫嗗灈鏈哄嚭搴撲换鍔�
                 List<Dt_Task> tasks = _taskService.QueryStackerCraneOutTasks(commonStackerCrane.DeviceCode);
-                foreach (var item in tasks)
-                {
-                    if (OutTaskStationIsOccupied(item) != null)
-                    {
-                        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
+                    foreach (var item in tasks)
+                    {
+                    //if (item.TargetAddress == "2021"||item.TargetAddress == "2020")
+                    //{
+                    //    ////bool IsOccupied = _lineJob.GetPick();
+
+                    //    //if (!IsOccupied)
+                    //    //{
+                    //    //    return null;
+                    //    //}
+                    //}
+                    if (OutTaskStationIsOccupied(item) != null)
                         {
-                            return item;
+                            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;
+                            }
                         }
-                    }
+                    
                 }
             }
 
@@ -346,6 +275,27 @@
                             return task;
                         }
                     }
+                    //if (task.NextAddress == "2021" || task.NextAddress == "2020")
+                    //{
+                    //    DeviceProDTO? deviceProDTO1 = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == "2008" || x.DeviceChildCode == "2009" || x.DeviceChildCode == "2015" || x.DeviceChildCode == "2016" && x.DeviceProParamName == "IsOccupied");    //鏍规嵁鍫嗗灈鏈哄湴鍧�锛屽湴鍧�鍚嶇О鎵惧崗璁�
+                    //    if (deviceProDTO != null)
+                    //    {
+                    //        bool IsOccupied2008 = conveyorLine.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.IsOccupied, "2008");
+                    //        bool IsOccupied2009 = conveyorLine.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.IsOccupied, "2009");
+                    //        bool IsOccupied2015 = conveyorLine.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.IsOccupied, "2015");
+                    //        bool IsOccupied2016 = conveyorLine.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.IsOccupied, "2016");
+
+                    //        //鍒ゆ柇鏄惁鎴愮珛
+                    //        if (IsOccupied2008 && IsOccupied2009 && IsOccupied2015 && IsOccupied2016)
+                    //        {
+                    //            return null;
+                    //        }
+                    //        else
+                    //        {
+                    //            return task;
+                    //        }
+                    //    }
+                    //}
                 }
             }
             catch (Exception ex)

--
Gitblit v1.9.3