From efc0923ff1e1dc995f6981c2559227df24da7623 Mon Sep 17 00:00:00 2001
From: zhangchengsong <zhangchengsong@hnkhzn.com>
Date: 星期四, 23 四月 2026 16:54:43 +0800
Subject: [PATCH] 1

---
 项目代码/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs |  113 +++++++++++++++++++++++++-------------------------------
 1 files changed, 50 insertions(+), 63 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
index c549912..987e148 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
@@ -27,6 +27,7 @@
 using WIDESEAWCS_ISystemServices;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
+using WIDESEAWCS_Model;
 using WIDESEAWCS_Model.Models;
 using WIDESEAWCS_Model.Models.System;
 using WIDESEAWCS_QuartzJob;
@@ -49,43 +50,21 @@
         private readonly ITaskRepository _taskRepository;
         private readonly IRouterService _routerService;
         private readonly IDt_PlatformStationService _DtPlatformStationService;
+        private readonly IDt_roadwayinfoService _Dt_roadwayinfoService;
 
-        public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IDt_PlatformStationService dt_PlatformStationService)
+        public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IDt_roadwayinfoService dt_roadwayinfoService, ITaskRepository taskRepository, IRouterService routerService, IDt_PlatformStationService dt_PlatformStationService)
         {
             _taskService = taskService;
             _taskExecuteDetailService = taskExecuteDetailService;
             _taskRepository = taskRepository;
             _routerService = routerService;
             _DtPlatformStationService = dt_PlatformStationService;
+            _Dt_roadwayinfoService = dt_roadwayinfoService;
         }
         private static readonly Dictionary<string, bool> _deviceLastStatus = new Dictionary<string, bool>();
         public string urlWMSdeverror = WIDESEAWCS_Core.Helper.AppSettings.Configuration["urlWMSdeverror"];
-        private static readonly Dictionary<string, string> _stackerFaultMap = new Dictionary<string, string>
-        {
-            { "DB107.26.0", "杞借揣鍙拌揣鐗╄秴瀹�" },{ "DB107.26.1", "杞借揣鍙拌揣鐗╄秴闀�" },{ "DB107.26.2", "杞借揣鍙拌揣鐗╄秴楂�" },
-            { "DB107.26.3", "杞借揣鍙拌揣鐗╂娴嬩紶鎰熷櫒寮傚父" },{ "DB107.26.4", "璐у弶缂栫爜鍣ㄥ�奸敊璇�" },{ "DB107.26.5", "璐у弶鍔ㄤ綔瓒呮椂" },
-            { "DB107.26.6", "璐у弶缂栫爜鍣ㄥ�间笌涓綅淇″彿涓嶄竴鑷�" },{ "DB107.26.7", "鏃犳晥鐨勪换鍔$被鍨�" },{ "DB107.27.0", "鏃犳晥鐨勪綔涓氬湴鍧�" },
-            { "DB107.27.1", "閲嶅叆搴�" },{ "DB107.27.2", "绌哄嚭搴�" },{ "DB107.27.3", "璐х墿楂樺害涓庤揣浣嶄笉鍖归厤" },
-            { "DB107.27.4", "鍙栬揣閫氶亾鍫靛" },{ "DB107.27.5", "鏀捐揣閫氶亾鍫靛" },{ "DB107.27.6", "鏀捐揣瀹屾垚鍚庤浇璐у彴浠嶇劧鏈夎揣" },
-            { "DB107.27.7", "浠诲姟鏈畬鎴愯秴鏃舵姤璀�" },{ "DB107.28.0", "灏卞湴鏌滄�ュ仠瑙﹀彂" },{ "DB107.28.1", "鏈鸿浇鏌滄�ュ仠瑙﹀彂" },
-            { "DB107.28.2", "杩滅▼鎬ュ仠瑙﹀彂" },{ "DB107.28.3", "瀹夊叏闂ㄨ鎵撳紑" },{ "DB107.28.4", "瀹夊叏缁х數鍣ㄦ柇寮�" },
-            { "DB107.28.5", "鏉剧怀妫�娴�" },{ "DB107.28.6", "瓒呴�熶繚鎶�" },{ "DB107.28.7", "琛岃蛋鍙橀鍣ㄦ晠闅�" },
-            { "DB107.29.0", "鍗囬檷鍙橀鍣ㄦ晠闅�" },{ "DB107.29.1", "璐у弶1鍙橀鍣ㄦ晠闅�" },{ "DB107.29.2", "璐у弶2鍙橀鍣ㄦ晠闅�" },
-            { "DB107.29.3", "鍗囬檷琛岃蛋瀹氫綅瓒呮椂" },{ "DB107.29.4", "璐у弶1缂栫爜鍣ㄥ�间笌涓綅淇″彿涓嶄竴鑷�" },{ "DB107.29.5", "璐у弶2缂栫爜鍣ㄥ�间笌涓綅淇″彿涓嶄竴鑷�" },
-            { "DB107.29.6", "琛岃蛋婵�鍏夊�奸敊璇�" },{ "DB107.29.7", "鍗囬檷婵�鍏夊�奸敊璇�" },{ "DB107.30.0", "鍓嶈繘鏋侀檺琛岀▼" },
-            { "DB107.30.1", "鍚庨��鏋侀檺琛岀▼" },{ "DB107.30.2", "涓婂崌鏋侀檺琛岀▼" },{ "DB107.30.3", "涓嬮檷鏋侀檺琛岀▼" },
-            { "DB107.30.4", "璐у弶1宸︽瀬闄愯绋�" },{ "DB107.30.5", "璐у弶1鍙虫瀬闄愯绋�" },{ "DB107.30.6", "璐у弶2宸︽瀬闄愯绋�" },
-            { "DB107.30.7", "璐у弶2鍙虫瀬闄愯绋�" },{ "DB107.31.0", "鍓嶈繘婵�鍏夋瀬闄愪繚鎶�" },{ "DB107.31.1", "鍚庨��婵�鍏夋瀬闄愪繚鎶�" },
-            { "DB107.31.2", "涓婂崌婵�鍏夋瀬闄愪繚鎶�" },{ "DB107.31.3", "涓嬮檷婵�鍏夋瀬闄愪繚鎶�" },{ "DB107.31.4", "璐у弶1宸﹁蒋鏋侀檺" },
-            { "DB107.31.5", "璐у弶1鍙宠蒋鏋侀檺" },{ "DB107.31.6", "璐у弶2宸﹁蒋鏋侀檺" },{ "DB107.31.7", "璐у弶2鍙宠蒋鏋侀檺" },
-            { "DB107.32.0", "涓庡湴闈㈢珯缃戠粶鏂紑" },{ "DB107.32.1", "涓庤緭閫佺嚎缃戠粶鏂紑" },{ "DB107.32.2", "涓嶹CS缃戠粶鏂紑" },
-            { "DB107.32.3", "鏃犳晥鍛戒护:鍫嗗灈鏈烘湁璐�" },{ "DB107.32.4", "鏃犳晥鍛戒护:鍫嗗灈鏈烘棤璐�" },{ "DB107.32.5", "娑堥槻璇姤" },
-            { "DB107.32.6", "鍓嶈繘闆疯揪鎶ヨ" },{ "DB107.32.7", "鍚庨��闆疯揪鎶ヨ" },{ "DB107.33.0", "宸﹂槻鐏棬瓒呮椂" },
-            { "DB107.33.1", "鍙抽槻鐏棬瓒呮椂" },{ "DB107.33.2", "鏇跨姜缇婃娴嬫姤璀�" },{ "DB107.33.3", "杩戝弶杩愯寮傚父" },
-            { "DB107.33.4", "杩滃弶杩愯寮傚父" },{ "DB107.33.5", "姘村钩杩愯寮傚父" },{ "DB107.33.6", "鍗囬檷杩愯寮傚父" },
-            { "DB107.34.0", "鍗囬檷鍒硅溅寮傚父" },{ "DB107.34.1", "琛岃蛋鍒硅溅寮傚父" },{ "DB107.34.2", "杩戝弶鍒硅溅寮傚父" },
-            { "DB107.34.3", "杩滃弶鍒硅溅寮傚父" },{ "DB107.34.4", "宸︿晶杩囪浇" },{ "DB107.34.5", "鍙充晶杩囪浇" }
-        };
+        private static readonly StackerFault[] _stackerFaultEnumCache = Enum.GetValues(typeof(StackerFault)).Cast<StackerFault>().ToArray();
+
 
 
         public Task Execute(IJobExecutionContext context)
@@ -95,7 +74,7 @@
                 CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
                 if (commonStackerCrane != null)
                 {
-                    WriteLog.Write_Log("鍫嗗灈鏈哄綋鍓嶇姸鎬佷俊鎭�", $"{commonStackerCrane.DeviceCode}搴撳爢鍨涙満褰撳墠鐘舵��",
+                WriteLog.Write_Log("鍫嗗灈鏈哄綋鍓嶇姸鎬佷俊鎭�", $"{commonStackerCrane.DeviceCode}搴撳爢鍨涙満褰撳墠鐘舵��",
                                                 $"鍫嗗灈鏈鸿澶囩姸鎬佸湴鍧�:銆怐B105.2.0銆�,璇诲彇鐨勬暟鎹細銆恵commonStackerCrane.StackerCraneAutoStatusDes}銆慭n" +
                                                $"鍫嗗灈鏈哄伐浣滄ā寮忓湴鍧�:銆怐B105.3.0銆�,璇诲彇鐨勬暟鎹細銆恵commonStackerCrane.StackerCraneStatusDes}銆慭n" +
                                                $"鍫嗗灈鏈轰綔涓氱姸鎬佸湴鍧�:銆怐B105.22.0銆�,璇诲彇鐨勬暟鎹細銆恵commonStackerCrane.StackerCraneWorkStatusDes}銆慭n" +
@@ -150,7 +129,7 @@
                             WebResponseContent webResponse = _taskService.StackCraneTaskCompleted(commonStackerCrane.CurrentTaskNum, PalletCode);
                             if (webResponse.Status)
                             {
-                                WriteLog.Write_Log("鍫嗗灈鏈轰换鍔′笂鎶ュ畬鎴愪俊鎭�", "鍫嗗灈鏈轰换鍔′笂鎶ュ畬鎴愪俊鎭�", $"銆恵commonStackerCrane.DeviceCode}銆戝簱鍫嗗灈鏈轰笂鎶ヤ换鍔″彿:銆恵commonStackerCrane.CurrentTaskNum}銆戝畬鎴愪俊鍙凤紒");
+                               WriteLog.Write_Log("鍫嗗灈鏈轰换鍔′笂鎶ュ畬鎴愪俊鎭�", "鍫嗗灈鏈轰换鍔′笂鎶ュ畬鎴愪俊鎭�", $"銆恵commonStackerCrane.DeviceCode}銆戝簱鍫嗗灈鏈轰笂鎶ヤ换鍔″彿:銆恵commonStackerCrane.CurrentTaskNum}銆戝畬鎴愪俊鍙凤紒");
 
                                 bool ddjfk = commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
                             }
@@ -196,7 +175,7 @@
         /// <summary>
         /// 鏁呴殰涓婃姤锛堟敼涓篴wait璋冪敤锛屼慨澶嶅紓姝UG锛�
         /// </summary>
-        private async Task SendDevError(CommonStackerCrane crane, string errorcode, string dealType, string errorInfo = "")
+        public void SendDevError(CommonStackerCrane crane, string errorcode, string dealType, string errorInfo = "")
         {
             CommandResult commandResult = new CommandResult();
             try
@@ -221,8 +200,7 @@
                     psd = "akjfapjfpadaoif",
                 };
                 
-                // 鍚屾HTTP鏀逛负寮傛锛堟帹鑽愶級锛屼繚鎸佷綘鍘熸湁浠g爜涔熷彲浠�
-                commandResult =  await Task.Run(() => HttpHelper.Post<CommandResult>(urlWMSdeverror, deviceErrorRequest, "璁惧鏁呴殰鍥炶皟"));
+                commandResult = HttpHelper.Post<CommandResult>(urlWMSdeverror, deviceErrorRequest, "璁惧鏁呴殰鍥炶皟");
                 WriteLog.Write_Log("鍚屾缁欎笂娓歌澶囨晠闅滀俊鎭�", "璁惧鏁呴殰淇℃伅", $"璁惧id锛氥�恵crane.DeviceCode}銆戯紝鎴愬姛", $"璁惧鍥炶皟鐘舵�侊細銆恵dealType}銆戯紝寮傚父淇℃伅锛氥�恵errorInfo}銆慭n" +
                     $"璋冪敤涓婃父杩斿洖缁撴灉淇℃伅锛氥�恵commandResult?.ToJsonString() ?? "杩斿洖缁撴灉涓簄ull"}銆�");
             }
@@ -258,9 +236,9 @@
                                 return taskItem;
                             }
                         }
-                        else if (taskItem.TaskType == (int)TaskTypeEnum.Inbound || taskItem.TaskType == (int)TaskTypeEnum.Inventorybound)
+                        else if ((InTaskStationIsOccupied(taskItem.SourceAddress, taskItem.Roadway) && taskItem.TaskType == (int)TaskTypeEnum.Inbound) || taskItem.TaskType == (int)TaskTypeEnum.Inventorybound)
                         {
-                            InTaskStationIsOccupied(taskItem.SourceAddress, taskItem.Roadway);
+                            
                             return taskItem;
                         }
                     }
@@ -284,12 +262,9 @@
         {
             try
             {
-                CommonConveyorLine? conveyorLine = null;
-                lock (Storage.Devices)
-                {
+                    CommonConveyorLine? conveyorLine = null;
                     string deviceCode = Roadway == "C" ? "1004" : "1003";
                     conveyorLine = Storage.Devices.FirstOrDefault(x => x.DeviceCode == deviceCode) as CommonConveyorLine;
-                }
                 if (conveyorLine == null) return false;
 
                 DeviceProDTO? deviceProDTO = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == NextAddress && x.DeviceProParamName == "StationNum");
@@ -299,44 +274,42 @@
                 int StationNum = conveyorLine.Communicator.Read<ushort>(deviceProDTO.DeviceProAddress);
                 int HandShake = conveyorLine.Communicator.Read<ushort>(HandShakeprodto.DeviceProAddress);
 
-                Task.Run(() => WriteLog.Write_Log("鍑哄簱搴撳彛鐘舵�佷俊鎭�", "鍑哄簱搴撳彛鐘舵�佷俊鎭�", $"搴撳彛鏄�恵NextAddress}銆戯紝鐢宠鐘舵�佸湴鍧�锛氥�恵HandShakeprodto.DeviceProAddress}銆�,璇诲彇鐨勬暟鎹細銆恵HandShake}銆慭n搴撳彛鏄惁鏈夎揣鐘舵�佸湴鍧�锛氥�恵deviceProDTO.DeviceProAddress}銆戯紝璇诲彇鐨勬暟鎹�恵StationNum}銆�"));
-
-                if (Roadway == "C") return StationNum == 0 && HandShake == 0;
-                return (StationNum == 1 && HandShake == 0 && Roadway == "B") || (StationNum == 0 && HandShake == 0);
+                WriteLog.Write_Log("鍑哄簱搴撳彛鐘舵�佷俊鎭�", "鍑哄簱搴撳彛鐘舵�佷俊鎭�", $"搴撳彛鏄�恵NextAddress}銆戯紝鐢宠鐘舵�佸湴鍧�锛氥�恵HandShakeprodto.DeviceProAddress}銆�,璇诲彇鐨勬暟鎹細銆恵HandShake}銆慭n搴撳彛鏄惁鏈夎揣鐘舵�佸湴鍧�锛氥�恵deviceProDTO.DeviceProAddress}銆戯紝璇诲彇鐨勬暟鎹�恵StationNum}銆�");
+                  if (Roadway == "C" || Roadway == "G") return StationNum == 0 && HandShake == 0;
+                return (StationNum == 1 && HandShake == 0 && Roadway == "B");
             }
             catch (Exception ex)
             {
-                Task.Run(() => Console.WriteLine("璇诲彇绔欏彴淇℃伅閿欒锛�" + ex.Message));
+              Console.WriteLine("璇诲彇绔欏彴淇℃伅閿欒锛�" + ex.Message);
                 return false;
             }
         }
         /// <summary>
         /// 鍏ュ簱浠诲姟搴撳彛鏈夎揣鏃犺揣鐘舵��
         /// </summary>
-        private void InTaskStationIsOccupied(string SourceAddress, string Roadway)
+        public bool InTaskStationIsOccupied(string SourceAddress, string Roadway)
         {
             try
             {
+
                 CommonConveyorLine? conveyorLine = null;
-                lock (Storage.Devices)
-                {
                     string deviceCode = Roadway == "C" ? "1004" : "1003";
                     conveyorLine = Storage.Devices.FirstOrDefault(x => x.DeviceCode == deviceCode) as CommonConveyorLine;
-                }
-                if (conveyorLine == null) return;
+                if (conveyorLine == null) return false;
 
                 DeviceProDTO? deviceProDTO = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == SourceAddress && x.DeviceProParamName == "StationNum");
                 DeviceProDTO? HandShakeprodto = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == SourceAddress && x.DeviceProParamName == "HandShake");
-                if (deviceProDTO == null || HandShakeprodto == null) return;
+                if (deviceProDTO == null || HandShakeprodto == null) return false;
 
                 int StationNum = conveyorLine.Communicator.Read<ushort>(deviceProDTO.DeviceProAddress);
                 int HandShake = conveyorLine.Communicator.Read<ushort>(HandShakeprodto.DeviceProAddress);
-
-                Task.Run(() => WriteLog.Write_Log("鍏ュ簱搴撳彛鐘舵�佷俊鎭�", "鍏ュ簱搴撳彛鐘舵�佷俊鎭�", $"搴撳彛鏄�恵SourceAddress}銆戯紝鐢宠鐘舵�佸湴鍧�锛氥�恵HandShakeprodto.DeviceProAddress}銆�,璇诲彇鐨勬暟鎹細銆恵HandShake}銆慭n搴撳彛鏄惁鏈夎揣鐘舵�佸湴鍧�锛氥�恵deviceProDTO.DeviceProAddress}銆戯紝璇诲彇鐨勬暟鎹�恵StationNum}銆�"));
+                WriteLog.Write_Log("鍏ュ簱搴撳彛鐘舵�佷俊鎭�", "鍏ュ簱搴撳彛鐘舵�佷俊鎭�", $"搴撳彛鏄�恵SourceAddress}銆戯紝鐢宠鐘舵�佸湴鍧�锛氥�恵HandShakeprodto.DeviceProAddress}銆�,璇诲彇鐨勬暟鎹細銆恵HandShake}銆慭n搴撳彛鏄惁鏈夎揣鐘舵�佸湴鍧�锛氥�恵deviceProDTO.DeviceProAddress}銆戯紝璇诲彇鐨勬暟鎹�恵StationNum}銆�");
+                return StationNum == 1;
             }
             catch (Exception ex)
             {
-                Task.Run(() => Console.WriteLine("璇诲彇绔欏彴淇℃伅閿欒锛�" + ex.Message));
+               Console.WriteLine("璇诲彇绔欏彴淇℃伅閿欒锛�" + ex.Message);
+                return false;
             }
         }
 
@@ -500,7 +473,14 @@
                 {
                     var dtTask = _taskRepository.QueryFirst(x => x.TaskNum == taskNum);
                     if (dtTask == null) return;
-
+                //鍫嗗灈鏈烘斁璐т腑鏄换鍔$姸鎬佸洖璋冩嬁pickup
+                if (dtTask.TaskType == 200 && stackerCraneWorkStatusDes == "鏀捐揣涓�")
+                    {
+                        string Result = WMSTaskStatusEnum.pickup.GetDescription();
+                        Dt_roadwayinfo roadwayinfo = _Dt_roadwayinfoService.GetRoadwayinfo(dtTask.Roadway);
+                        CommandResult command = _taskService.taskreturn(int.Parse(dtTask.WMStaskid), Result, roadwayinfo.WarehouseInvType, "");
+                        return;
+                    }
                     string[] targets = { "G02", "G03", "G04", "C02", "C01" };
                     if (dtTask.TaskType != 100 || !targets.Contains(dtTask.TargetAddress)) return;
 
@@ -525,26 +505,33 @@
 
                     conveyorLine.Communicator.Write<short>(handShake.DeviceProAddress, writeValue);
                 }
-                catch
-                { }
+                catch(Exception e)
+                {
+                    WriteLog.Write_Log("鍑哄簱灞忚斀鍏夋爡/鍫嗗灈鍏ュ簱瑕佹斁璐у紓甯�", "閿欒", e.ToString());
+                }
         }
-
         /// <summary>
-        /// 璇诲彇鏁呴殰锛堜紭鍖朑C锛�
+        /// 鏁呴殰淇℃伅
         /// </summary>
+        /// <param name="crane"></param>
+        /// <returns></returns>
         public string ReadStackerFaults(CommonStackerCrane crane)
         {
-
-            string activeFaults = "";
             try
             {
-                foreach (var fault in _stackerFaultMap)
+                foreach (StackerFault fault in _stackerFaultEnumCache)
                 {
-                    try { bool isFault = crane.Communicator.Read<bool>(fault.Key); if (isFault) { activeFaults = fault.Value; break; } } catch { }
+                    try
+                    {
+                        bool isFault = crane.Communicator.Read<bool>(fault.ToPlcAddress());
+                        if (isFault)
+                            return fault.GetDesc();
+                    }
+                    catch { continue; }
                 }
             }
-            catch (Exception ex) { WriteLog.Write_Log("DB107鏁呴殰璇诲彇寮傚父", "閿欒", ex.ToString()); }
-            return activeFaults;
+            catch { }
+            return string.Empty;
         }
     }
 }

--
Gitblit v1.9.3