From 0939aa5f3cc12a8856456a51cf2b661b6cd780c7 Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期四, 31 七月 2025 17:25:49 +0800
Subject: [PATCH] 1

---
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs |  233 ++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 186 insertions(+), 47 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 ceb41bd..4045cd2 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"
@@ -23,6 +23,11 @@
 using WIDESEAWCS_Common;
 using WIDESEAWCS_IBasicInfoRepository;
 using WIDESEAWCS_BasicInfoService;
+using WIDESEAWCS_Model.BasicInfo;
+using WIDESEAWCS_Tasks.RGVJob;
+using WIDESEAWCS_Tasks.ConveyorLineJob;
+using WIDESEAWCS_TaskInfoRepository;
+using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
 
 namespace WIDESEAWCS_Tasks
 {
@@ -55,13 +60,11 @@
                 CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
                 if (commonStackerCrane != null)
                 {
-                    if (!commonStackerCrane.IsEventSubscribed)
+                    if (commonStackerCrane.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.TaskCompleted))
                     {
-                        commonStackerCrane.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//璁㈤槄浠诲姟瀹屾垚浜嬩欢
+                        var x = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.CurrentTaskNum);
+                        StackerCraneTaskFinish(commonStackerCrane, commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.CurrentTaskNum));
                     }
-
-                    commonStackerCrane.CheckStackerCraneTaskCompleted();//闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽啀鎵嬪姩瑙﹀彂涓�娆�
-
 
                     if (commonStackerCrane.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.Automatic) && !commonStackerCrane.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.Fault) && !commonStackerCrane.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.Running))
                     {
@@ -104,17 +107,69 @@
                     var userTokenIds = tokenInfos?.Select(x => x.Token_ID).ToList();
                     var userIds = tokenInfos?.Select(x => x.UserId).ToList();
 
+                    string StackerCraneAutoStatus(bool AutoStatus) => AutoStatus switch
+                    {
+                        true => "鑱旀満妯″紡",
+                        false => "鍗曟満妯″紡",
+                    };
+                    string StackerCraneWorkStatus(bool WorkStatus) => WorkStatus switch
+                    {
+                        true => "杩愯涓�",
+                        false => "寰呮満",
+                    };
+                    string StackerCraneStatus(bool Status) => Status switch
+                    {
+                        true => "鏁呴殰",
+                        false => "姝e父",
+                    };
+                    string StackerCraneAlarm(uint alarm) => alarm switch
+                    {
+                        0 => "鎸囦护鎴栧湴鍧�閿欒",
+                        1 => "鎬ュ仠",
+                        2 => "鍏夐�氳涓柇",
+                        3 => "缁勬�佸け鑱�",
+                        4 => "琛岃蛋鍙橀鏁呴殰",
+                        5 => "琛岃蛋鏋侀檺瑙﹀彂",
+                        6 => "琛岃蛋杩愯瓒呮椂",
+                        7 => "鎻愬崌鍙橀鏁呴殰",
+                        8 => "鎻愬崌鏋侀檺瑙﹀彂",
+                        9 => "鎻愬崌杩愯瓒呮椂",
+                        10 => "杞借揣鍙拌秴杞�",
+                        11 => "杞借揣鍙版瑺杞斤紙鏉剧怀)",
+                        12 => "杞借揣鍙板け閫�",
+                        13 => "璐у弶鍙橀鎶ヨ",
+                        14 => "璐у弶杩愯瓒呮椂",
+                        15 => "璐у弶鏋侀檺瑙﹀彂",
+                        16 => "璐у弶涓嶅眳涓�",
+                        17 => "宸︿晶瓒呴珮",
+                        18 => "鍙充晶瓒呴珮",
+                        19 => "宸︿晶瓒呭",
+                        20 => "鍙充晶瓒呭",
+                        21 => "宸﹁秴鍑�",
+                        22 => "鍙宠秴鍑�",
+                        23 => "鍙栬揣鏃惰浇璐у彴鏈夎揣",
+                        24 => "鍙栬揣鍚庤浇璐у彴鏃犺揣",
+                        25 => "鍙栨繁璐т綅鏃舵祬璐т綅鏈夎揣",
+                        26 => "鏀捐揣鏃惰浇璐у彴鏃犺揣",
+                        27 => "鏀捐揣鏃惰揣鏋舵湁璐�",
+                        28 => "鏀捐揣鍚庤浇璐у彴鏈夎揣",
+                        29 => "鏀炬繁璐ф椂娴呰揣浣嶆湁璐�",
+                        30 => "",
+                        31 => "",
+                    };
                     object obj = new
                     {
-                        Automatic = commonStackerCrane.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.Automatic),
-                        Fault = commonStackerCrane.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.Fault),
-                        Running = commonStackerCrane.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.Running),
-                        commonStackerCrane.StackerCraneAutoStatusDes,
-                        commonStackerCrane.StackerCraneWorkStatusDes,
+                        Automatic = StackerCraneAutoStatus(commonStackerCrane.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.Automatic)),
+                        Fault = StackerCraneStatus(commonStackerCrane.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.Fault)),
+                        Running = StackerCraneWorkStatus(commonStackerCrane.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.Running)),
+                        CurrentColumn = Convert.ToInt32(commonStackerCrane.GetValue<StackerCraneDBName, byte>(StackerCraneDBName.CurrentColumn)),
+                        CurrentLayer = Convert.ToInt32(commonStackerCrane.GetValue<StackerCraneDBName, byte>(StackerCraneDBName.CurrentLayer)),
+                        LevelPoint = commonStackerCrane.GetValue<StackerCraneDBName, int>(StackerCraneDBName.LevelPoint),
+                        CurrentTaskNum = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.CurrentTaskNum),
+                        StackerAlarm = StackerCraneAlarm(commonStackerCrane.GetValue<StackerCraneDBName, uint>(StackerCraneDBName.StackerAlarm)),
+
                         commonStackerCrane.DeviceCode,
                         commonStackerCrane.DeviceName,
-                        commonStackerCrane.CurrentTaskNum,
-                        commonStackerCrane.LastTaskNum,
                     };
                     _noticeService.StackerData(userIds?.FirstOrDefault(), userTokenIds, new { commonStackerCrane.DeviceName, data = obj });
 
@@ -153,6 +208,46 @@
                     str = $"{commonStackerCrane.DeviceName}銆慦MS|WCS浠诲姟瀹屾垚锛氥�恵content.Status}銆�,鍫嗗灈鏈哄畬鎴愪俊鍙峰啓鍏ワ細銆恵isWorkType}銆�,浠诲姟鍙凤細銆恵e.TaskNum}銆戞椂闂淬�恵DateTime.Now}銆�";
                     WriteInfo(commonStackerCrane.DeviceName, str);
                     ConsoleHelper.WriteColorLine(str, ConsoleColor.Blue);
+                }
+            }
+        }
+
+        public void StackerCraneTaskFinish(CommonStackerCrane commonStackerCrane, int TaskNum)
+        {
+            if (commonStackerCrane != null)
+            {
+                var task = _taskRepository.QueryFirst(x => x.TaskNum == TaskNum);
+                if (task != null)
+                {
+                    if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
+                    {
+                        if (Convert.ToInt32(task.TargetAddress) > 1999 && Convert.ToInt32(task.TargetAddress) < 3000)
+                        {
+
+                            Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.Roadway == task.Roadway && x.stationChildCode == task.TargetAddress);
+                            if (stationManager != null)
+                            {
+                                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManager.stationPLC);
+                                if (device != null)
+                                {
+                                    CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
+
+                                    var InteractiveSignal = conveyorLine.GetValue<ConveyorLineDBName, byte>(ConveyorLineDBName.InteractiveSignal, stationManager.stationChildCode);
+
+                                    var structs = BitConverter.GetBytes(InteractiveSignal).ToArray().ToBoolArray();
+                                    if (structs[2])
+                                    {
+                                        conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTargetAddress, Convert.ToInt16(stationManager.stationNextChildCode), stationManager.stationChildCode);
+                                        Thread.Sleep(100);
+                                        conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTaskNum, Convert.ToInt16(task.TaskNum), stationManager.stationChildCode);
+                                        Thread.Sleep(100);
+                                        conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(2), stationManager.stationChildCode);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    var content = _taskService.StackCraneTaskCompleted(TaskNum);
                 }
             }
         }
@@ -227,12 +322,12 @@
         /// <returns>濡傛灉鏈鍗犵敤锛岃繑鍥炰紶鍏ョ殑浠诲姟淇℃伅锛屽惁鍒欙紝杩斿洖null</returns>
         private Dt_Task? OutTaskStationIsOccupied([NotNull] Dt_Task task)
         {
-            var stationinfo = _stationManagerRepository.QueryFirst(x => x.stationLocation == task.TargetAddress && x.Roadway == task.Roadway);
+            var stationinfo = _stationManagerRepository.QueryFirst(x => x.stationChildCode==task.NextAddress && x.Roadway == task.Roadway);
             IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationinfo.stationPLC);
             if (device != null)
             {
-                CommonConveyorLine_After conveyorLine = (CommonConveyorLine_After)device;
-                if (conveyorLine.IsOccupied(stationinfo.stationChildCode))//鍑哄簱绔欏彴鏈鍗犵敤
+                CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
+                if (conveyorLine.IsOccupiedx(stationinfo.stationChildCode))//鍑哄簱绔欏彴鏈鍗犵敤
                 {
                     return task;
                 }
@@ -288,22 +383,32 @@
         {
             StackerCraneTaskCommand stackerCraneTaskCommand = new StackerCraneTaskCommand();
 
-            stackerCraneTaskCommand.TaskNum = (byte)Convert.ToSByte(task.TaskNum);
-            stackerCraneTaskCommand.WorkType = 1;
+            stackerCraneTaskCommand.TaskNum = (short)Convert.ToInt16(task.TaskNum);
             if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//鍒ゆ柇鏄惁鏄叆搴撲换鍔�
             {
 
-                List<Dt_Router> routers = _routerService.QueryNextRoutes(task.CurrentAddress, task.Roadway);
-                if (routers.Count > 0)
+                Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.Roadway == task.Roadway && x.stationChildCode == task.CurrentAddress);
+                if (stationManager != null)
                 {
-                    stackerCraneTaskCommand.StartRow = (byte)Convert.ToSByte(Convert.ToInt16(routers.FirstOrDefault().SrmRow));
-                    stackerCraneTaskCommand.StartColumn = (byte)Convert.ToSByte(routers.FirstOrDefault().SrmColumn);
-                    stackerCraneTaskCommand.StartLayer = (byte)Convert.ToSByte(routers.FirstOrDefault().SrmLayer);
+                    stackerCraneTaskCommand.WorkType = (byte)Convert.ToSByte(17);
+                    string[] sourceCodes = stationManager.stationLocation.Split("-");
+                    if (sourceCodes.Length == 3)
+                    {
+                        stackerCraneTaskCommand.StartRow = (byte)Convert.ToSByte(GetRowCode(Convert.ToInt32(sourceCodes[0])));
+                        stackerCraneTaskCommand.StartColumn = (byte)Convert.ToSByte(sourceCodes[1]);
+                        stackerCraneTaskCommand.StartLayer = (byte)Convert.ToSByte(sourceCodes[2]);
+                    }
+                    else
+                    {
+                        //鏁版嵁閰嶇疆閿欒
+                        _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍏ュ簱浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.NextAddress}銆�");
+                        return null;
+                    }
 
-                    string[] targetCodes = task.NextAddress.Split("-");
+                    string[] targetCodes = task.TargetAddress.Split("-");
                     if (targetCodes.Length == 3)
                     {
-                        stackerCraneTaskCommand.EndRow = (byte)Convert.ToSByte(Convert.ToInt16(targetCodes[0]) % 2 != 0 ? (short)1 : (short)2);
+                        stackerCraneTaskCommand.EndRow = (byte)Convert.ToSByte(GetRowCode(Convert.ToInt32(targetCodes[0])));
                         stackerCraneTaskCommand.EndColumn = (byte)Convert.ToSByte(targetCodes[1]);
                         stackerCraneTaskCommand.EndLayer = (byte)Convert.ToSByte(targetCodes[2]);
                     }
@@ -322,20 +427,29 @@
             }
             else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
             {
-
-                List<Dt_Router> routers = _routerService.QueryNextRoutes(task.Roadway, task.TargetAddress);
-                if (routers.Count > 0)
+                stackerCraneTaskCommand.WorkType = (byte)Convert.ToSByte(18);
+                Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.Roadway == task.Roadway && x.stationChildCode == task.NextAddress);
+                if (stationManager != null)
                 {
-                    stackerCraneTaskCommand.EndRow = (byte)Convert.ToSByte(routers.FirstOrDefault().SrmRow);
-                    stackerCraneTaskCommand.EndColumn = (byte)Convert.ToSByte(routers.FirstOrDefault().SrmColumn);
-                    stackerCraneTaskCommand.EndLayer = (byte)Convert.ToSByte(routers.FirstOrDefault().SrmLayer);
-
                     string[] sourceCodes = task.CurrentAddress.Split("-");
                     if (sourceCodes.Length == 3)
                     {
-                        stackerCraneTaskCommand.StartRow = (byte)Convert.ToSByte(Convert.ToInt16(sourceCodes[0]) % 2 != 0 ? (short)1 : (short)2);
+                        stackerCraneTaskCommand.StartRow = (byte)Convert.ToSByte(GetRowCode(Convert.ToInt32(sourceCodes[0])));
                         stackerCraneTaskCommand.StartColumn = (byte)Convert.ToSByte(sourceCodes[1]);
                         stackerCraneTaskCommand.StartLayer = (byte)Convert.ToSByte(sourceCodes[2]);
+                    }
+                    else
+                    {
+                        //鏁版嵁閰嶇疆閿欒
+                        _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
+                        return null;
+                    }
+                    string[] targetCodes = stationManager.stationLocation.Split("-");
+                    if (targetCodes.Length == 3)
+                    {
+                        stackerCraneTaskCommand.EndRow = (byte)Convert.ToSByte(GetRowCode(Convert.ToInt32(targetCodes[0])));
+                        stackerCraneTaskCommand.EndColumn = (byte)Convert.ToSByte(targetCodes[1]);
+                        stackerCraneTaskCommand.EndLayer = (byte)Convert.ToSByte(targetCodes[2]);
                     }
                     else
                     {
@@ -352,23 +466,11 @@
             }
             else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
             {
-                string[] targetCodes = task.NextAddress.Split("-");
-                if (targetCodes.Length == 3)
-                {
-                    stackerCraneTaskCommand.EndRow = (byte)Convert.ToSByte(Convert.ToInt16(targetCodes[0]) % 2 != 0 ? (short)1 : (short)2);
-                    stackerCraneTaskCommand.EndColumn = (byte)Convert.ToSByte(targetCodes[1]);
-                    stackerCraneTaskCommand.EndLayer = (byte)Convert.ToSByte(targetCodes[2]);
-                }
-                else
-                {
-                    //鏁版嵁閰嶇疆閿欒
-                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.NextAddress}銆�");
-                    return null;
-                }
-                string[] sourceCodes = task.CurrentAddress.Split("-");
+                stackerCraneTaskCommand.WorkType = (byte)Convert.ToSByte(20);
+                string[] sourceCodes = task.SourceAddress.Split("-");
                 if (sourceCodes.Length == 3)
                 {
-                    stackerCraneTaskCommand.StartRow = (byte)Convert.ToSByte(Convert.ToInt16(sourceCodes[0]) % 2 != 0 ? (short)1 : (short)2);
+                    stackerCraneTaskCommand.StartRow = (byte)Convert.ToSByte(GetRowCode(Convert.ToInt32(sourceCodes[0])));
                     stackerCraneTaskCommand.StartColumn = (byte)Convert.ToSByte(sourceCodes[1]);
                     stackerCraneTaskCommand.StartLayer = (byte)Convert.ToSByte(sourceCodes[2]);
                 }
@@ -378,8 +480,45 @@
                     _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
                     return null;
                 }
+                string[] targetCodes = task.TargetAddress.Split("-");
+                if (targetCodes.Length == 3)
+                {
+                    stackerCraneTaskCommand.EndRow = (byte)Convert.ToSByte(GetRowCode(Convert.ToInt32(targetCodes[0])));
+                    stackerCraneTaskCommand.EndColumn = (byte)Convert.ToSByte(targetCodes[1]);
+                    stackerCraneTaskCommand.EndLayer = (byte)Convert.ToSByte(targetCodes[2]);
+                }
+                else
+                {
+                    //鏁版嵁閰嶇疆閿欒
+                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.NextAddress}銆�");
+                    return null;
+                }
             }
             return stackerCraneTaskCommand;
         }
+
+        public int GetRowCode(int number)
+        {
+            if (number == 1 || number == 15 || number == 11 || number == 19)
+            {
+                return 1;
+            }
+            else if (number == 2 || number == 5 || number == 8 || number == 12 || number == 16 || number == 20)
+            {
+                return 2;
+            }
+            else if (number == 3 || number == 6 || number == 9 || number == 13 || number == 17 || number == 21)
+            {
+                return 3;
+            }
+            else if (number == 4 || number == 7 || number == 10 || number == 14 || number == 18 || number == 22)
+            {
+                return 4;
+            }
+            else
+            {
+                throw new ArgumentOutOfRangeException(nameof(number), "杈撳叆鐨勬暟瀛楀繀椤诲湪1-16鑼冨洿鍐�");
+            }
+        }
     }
 }
\ No newline at end of file

--
Gitblit v1.9.3