From 510a2ae8b46e792a67080f99d7f66b07189c6682 Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期六, 11 十月 2025 16:23:27 +0800
Subject: [PATCH] 更新任务状态逻辑及文档布局调整

---
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs |  259 ++++++++++++++++++++++++++++++---------------------
 1 files changed, 153 insertions(+), 106 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 9c7d19e..9329ec4 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"
@@ -1,4 +1,6 @@
-锘縰sing Mapster;
+锘縰sing HslCommunication;
+using Mapster;
+using Microsoft.AspNetCore.Components.Routing;
 using Newtonsoft.Json;
 using Quartz;
 using System.Diagnostics.CodeAnalysis;
@@ -20,6 +22,7 @@
 using WIDESEAWCS_QuartzJob.Service;
 using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
 using WIDESEAWCS_SignalR;
+using WIDESEAWCS_Tasks.ConveyorLineJob;
 using WIDESEAWCS_Tasks.StackerCraneJob;
 
 namespace WIDESEAWCS_Tasks
@@ -34,12 +37,12 @@
         private readonly ICacheService _cacheService;
         private readonly INoticeService _noticeService;
         private readonly IDt_StationManagerRepository _stationManagerRepository;
-        private readonly ITask_HtyRepository _htyRepository;
+        private readonly ITask_HtyRepository _task_htyRepository;
         private readonly ISys_ConfigService _sys_ConfigService;
         private static List<string>? userTokenIds;
         private static List<int>? userIds;
 
-        public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, ICacheService cacheService, INoticeService noticeService, IDt_StationManagerRepository stationManagerRepository, ITask_HtyRepository htyRepository, ISys_ConfigService sys_ConfigService)
+        public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, ICacheService cacheService, INoticeService noticeService, IDt_StationManagerRepository stationManagerRepository, ITask_HtyRepository task_htyRepository, ISys_ConfigService sys_ConfigService)
         {
             _taskService = taskService;
             _taskExecuteDetailService = taskExecuteDetailService;
@@ -48,7 +51,7 @@
             _cacheService = cacheService;
             _noticeService = noticeService;
             _stationManagerRepository = stationManagerRepository;
-            _htyRepository = htyRepository;
+            _task_htyRepository = task_htyRepository;
             _sys_ConfigService = sys_ConfigService;
         }
 
@@ -222,6 +225,7 @@
             {
                 if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.FinishConfirm) != 1)
                 {
+                    Thread.Sleep(1000);
                     ConsoleHelper.WriteColorLine($"銆恵commonStackerCrane.DeviceName}銆戝爢鍨涙満浣滀笟鐘舵�侊細銆恵(int)commonStackerCrane.StackerCraneWorkStatusValue}銆戞椂闂淬�恵DateTime.Now}銆�", ConsoleColor.Magenta);
 
                     string str = $"銆恵commonStackerCrane.DeviceName}銆戜换鍔″畬鎴�,浠诲姟鍙凤細銆恵e.TaskNum}銆戞椂闂淬�恵DateTime.Now}銆�";
@@ -230,15 +234,41 @@
                     var task = _taskRepository.QueryFirst(x => x.TaskNum == e.TaskNum);
 
                     if (task == null) commonStackerCrane.SetValue(StackerCraneDBName.FinishConfirm, 1);
-
-
+                    string WorkStatus = $"銆恵commonStackerCrane.StackerCraneWorkStatusValue}銆�";
+                    bool IsWrite = false;
                     var content = _taskService.StackCraneTaskCompleted(e.TaskNum);
+
+                    if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+                    {
+                        CommonConveyorLine? conveyorLine = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "1001") as CommonConveyorLine;
+                        if (conveyorLine != null)
+                        {
+                            short InteractiveSignal = conveyorLine.GetValue<ConveyorLineDBName, short>(ConveyorLineDBName.InteractiveSignal, "LK001");
+                            var structs = BitConverter.GetBytes(InteractiveSignal).Reverse().ToArray().ToBoolArray();
+                            if (structs[0])
+                            {
+                                IsWrite = conveyorLine.Communicator.WriteNoRead("DB100.0", 0);
+                                Thread.Sleep(1000);
+                                IsWrite = conveyorLine.Communicator.WriteNoRead("DB100.0", 9999);
+                                if (!IsWrite)
+                                {
+                                    return;
+                                }
+                            }
+                        }
+                        var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.TargetAddress);
+                        if (station != null)
+                        {
+                            _taskService.SendAgvTask(station.stationRemark, task.TaskNum);
+                            _taskService.UpdateTaskStatusToNext(task.TaskNum);
+                        }
+                    }
 
                     var isWorkType = commonStackerCrane.SetValue(StackerCraneDBName.FinishConfirm, 1);
 
 
-                    str = $"{commonStackerCrane.DeviceName}銆慦MS|WCS浠诲姟瀹屾垚锛氥�恵content.Status}{content.Message}銆�,鍫嗗灈鏈哄畬鎴愪俊鍙峰啓鍏ワ細銆恵isWorkType}銆�,浠诲姟鍙凤細銆恵e.TaskNum}銆戞椂闂淬�恵DateTime.Now}銆�";
-                    WriteInfo(commonStackerCrane.DeviceName, str);
+                    str = $"{commonStackerCrane.DeviceName}銆慦MS|WCS浠诲姟瀹屾垚锛氥�恵content.Status}{content.Message}銆�,鍫嗗灈鏈哄畬鎴愪俊鍙峰啓鍏ワ細銆恵isWorkType}銆�,浠诲姟鍙凤細銆恵e.TaskNum}銆戞椂闂淬�恵DateTime.Now}銆戣緭閫佺嚎鍐欏叆{IsWrite}";
+                    WriteInfo(commonStackerCrane.DeviceName, str + WorkStatus);
                     ConsoleHelper.WriteColorLine(str, ConsoleColor.Blue);
                 }
             }
@@ -281,30 +311,44 @@
 
             if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
             {
-                // 妫�鏌ュ綋鍓嶅嚭搴撲换鍔$珯鍙版槸鍚﹀厑璁告斁璐�
-                var occupiedStation = OutTaskStationIsOccupied(task);
-                if (occupiedStation == null)
+                var InTask = _taskRepository.QueryFirst(x => x.TaskState > (int)TaskInStatusEnum.InNew && x.TaskState< (int)TaskInStatusEnum.SC_InExecuting);
+                var OutTask = _taskRepository.QueryFirst(x => x.TaskState > (int)TaskOutStatusEnum.OutNew && x.TaskState < (int)TaskOutStatusEnum.AGV_OutExecuting);
+                if (InTask != null)
                 {
-                    // 濡傛灉褰撳墠鍑哄簱浠诲姟绔欏彴涓嶅厑璁告斁璐э紝鎺掗櫎褰撳墠浠诲姟锛屾煡鎵惧叾浠栧嚭搴撲换鍔�
-
-                    var log = $"浠诲姟鍙凤細銆恵task.TaskNum}銆戝嚭搴撳湴鍧�锛氥�恵task.NextAddress}銆戜笉鍏佽鏀捐揣";
-                    ConsoleHelper.WriteErrorLine(log);
-
-                    _noticeService.Logs(userTokenIds, new { commonStackerCrane.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
-                    WriteInfo(commonStackerCrane.DeviceName, log);
-
-                    task = FindAnotherOutboundTask(commonStackerCrane.DeviceCode, task.TaskId);
-
-                    if (task == null)
-                    {
-                        task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
-                    }
+                    return null;
+                }
+                else if (OutTask != null)
+                {
+                    return null;
                 }
                 else
                 {
-                    return task;
-                }
-
+                    CommonConveyorLine? conveyorLine = Storage.Devices.FirstOrDefault(x=>x.DeviceCode =="1001") as CommonConveyorLine;
+                    if (conveyorLine != null)
+                    {
+                        short InteractiveSignal = conveyorLine.GetValue<ConveyorLineDBName, short>(ConveyorLineDBName.InteractiveSignal, "LK001");
+                        var structs = BitConverter.GetBytes(InteractiveSignal).Reverse().ToArray().ToBoolArray();
+                        if (structs[0] && !structs[2] && !structs[1])
+                        {
+                            conveyorLine.Communicator.WriteNoRead("DB100.0", 9990);
+                        }
+                        if (structs[0] && structs[2])
+                        {
+                            conveyorLine.Communicator.WriteNoRead("DB100.0", 9990);
+                            return task;
+                        }
+                        else
+                        {
+                            task.ExceptionMessage = "璇锋鏌ヨ緭閫佺嚎鏄惁鏄嚜鍔ㄦā寮忔垨宸茬粡绉诲姩鍒板嚭搴撳彛";
+                            return null;
+                        }
+                    }
+                    else
+                    {
+                        task.ExceptionMessage = "杈撻�佺嚎璁惧鏂紑杩炴帴";
+                        return null;
+                    }
+                }   
             }
             else if (task == null)
             {
@@ -390,94 +434,97 @@
         {
             StackerCraneTaskCommand stackerCraneTaskCommand = new StackerCraneTaskCommand();
 
-            stackerCraneTaskCommand.Barcode = task.PalletCode;
-            stackerCraneTaskCommand.TaskNum = task.TaskNum;
-            stackerCraneTaskCommand.WorkType = 1;
-            stackerCraneTaskCommand.StartCommand = 1;
+            stackerCraneTaskCommand.TaskNum = Convert.ToInt16(task.TaskNum);
+            stackerCraneTaskCommand.WorkType = Convert.ToInt16(1);
+            stackerCraneTaskCommand.StartCommand = Convert.ToInt16(1);
             if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//鍒ゆ柇鏄惁鏄叆搴撲换鍔�
             {
-                List<Dt_Router> routers = _routerService.QueryNextRoutes(task.CurrentAddress, task.Roadway);
-                if (routers.Count > 0)
-                {
-                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(routers.FirstOrDefault().SrmRow);
-                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(routers.FirstOrDefault().SrmColumn);
-                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(routers.FirstOrDefault().SrmLayer);
-
-                    string[] targetCodes = task.NextAddress.Split("-");
-                    if (targetCodes.Length == 3)
-                    {
-                        stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]) % 2 != 0 ? (short)1 : (short)2;
-                        stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
-                        stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
-                    }
-                    else
-                    {
-                        //鏁版嵁閰嶇疆閿欒
-                        _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍏ュ簱浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.NextAddress}銆�");
-                        return null;
-                    }
-                }
-                else
-                {
-                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.NextAddress}銆戜俊鎭紝鏃犳硶鑾峰彇瀵瑰簲鐨勫爢鍨涙満鍙栬揣绔欏彴淇℃伅");
-                    return null;
-                }
-            }
-            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
-            {
-                List<Dt_Router> routers = _routerService.QueryNextRoutes(task.Roadway, task.TargetAddress);
-                if (routers.Count > 0)
-                {
-                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(routers.FirstOrDefault().SrmRow);
-                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(routers.FirstOrDefault().SrmColumn);
-                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(routers.FirstOrDefault().SrmLayer);
-
-                    string[] sourceCodes = task.CurrentAddress.Split("-");
-                    if (sourceCodes.Length == 3)
-                    {
-                        stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]) % 2 != 0 ? (short)1 : (short)2;
-                        stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
-                        stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
-                    }
-                    else
-                    {
-                        //鏁版嵁閰嶇疆閿欒
-                        _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
-                        return null;
-                    }
-                }
-                else
-                {
-                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.NextAddress}銆戜俊鎭紝鏃犳硶鑾峰彇瀵瑰簲鐨勫爢鍨涙満鏀捐揣绔欏彴淇℃伅");
-                    return null;
-                }
-            }
-            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
-            {
-                string[] targetCodes = task.NextAddress.Split("-");
-                if (targetCodes.Length == 3)
-                {
-                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]) % 2 != 0 ? (short)1 : (short)2;
-                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
-                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
-                }
-                else
-                {
-                    //鏁版嵁閰嶇疆閿欒
-                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.NextAddress}銆�");
-                    return null;
-                }
-                string[] sourceCodes = task.CurrentAddress.Split("-");
+                var station = _stationManagerRepository.QueryFirst(x => x.stationType == 1 && x.stationChildCode == task.CurrentAddress);
+                string[] sourceCodes = station.stationLocation.Split("-");
                 if (sourceCodes.Length == 3)
                 {
-                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]) % 2 != 0 ? (short)1 : (short)2;
+                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]);
                     stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
                     stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
                 }
                 else
                 {
                     //鏁版嵁閰嶇疆閿欒
-                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
+                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
+                    return null;
+                }
+                string[] targetCodes = task.NextAddress.Split("-");
+                if (targetCodes.Length == 3)
+                {
+                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
+                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
+                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
+                }
+                else
+                {
+                    //鏁版嵁閰嶇疆閿欒
+                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
+                    return null;
+                }
+            }
+            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+            {
+                string[] sourceCodes = task.CurrentAddress.Split("-");
+                if (sourceCodes.Length == 3)
+                {
+                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]);
+                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
+                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
+                }
+                else
+                {
+                    //鏁版嵁閰嶇疆閿欒
+                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
+                    return null;
+                }
+                var station = _stationManagerRepository.QueryFirst(x => x.stationType == 1 && x.stationChildCode == task.NextAddress);
+                string[] targetCodes = station.stationLocation.Split("-");
+                if (targetCodes.Length == 3)
+                {
+                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
+                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
+                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
+                }
+                else
+                {
+                    //鏁版嵁閰嶇疆閿欒
+                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
+                    return null;
+                }
+
+            }
+            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
+            {
+                string[] sourceCodes = task.CurrentAddress.Split("-");
+                if (sourceCodes.Length == 3)
+                {
+                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]);
+                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
+                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
+                }
+                else
+                {
+                    //鏁版嵁閰嶇疆閿欒
+                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
+                    return null;
+                }
+
+                string[] targetCodes = task.NextAddress.Split("-");
+                if (targetCodes.Length == 3)
+                {
+                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
+                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
+                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
+                }
+                else
+                {
+                    //鏁版嵁閰嶇疆閿欒
+                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
                     return null;
                 }
             }

--
Gitblit v1.9.3