From 850105e8cdf0d048ef843d87520513ac77a64200 Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期三, 23 七月 2025 21:21:53 +0800
Subject: [PATCH] 代码提交

---
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob/CommonRGVJob.cs |  221 ++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 178 insertions(+), 43 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob/CommonRGVJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob/CommonRGVJob.cs"
index 076126c..60de693 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob/CommonRGVJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob/CommonRGVJob.cs"
@@ -19,12 +19,16 @@
 using HslCommunication;
 using Newtonsoft.Json;
 using Quartz;
+using System.Diagnostics.CodeAnalysis;
 using System.Reflection;
 using System.Text;
+using System.Threading.Tasks;
+using WIDESEAWCS_BasicInfoRepository;
 using WIDESEAWCS_Common.TaskEnum;
 using WIDESEAWCS_Core.Caches;
 using WIDESEAWCS_Core.Helper;
 using WIDESEAWCS_Core.HttpContextUser;
+using WIDESEAWCS_IBasicInfoRepository;
 using WIDESEAWCS_IBasicInfoService;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
@@ -33,9 +37,10 @@
 using WIDESEAWCS_QuartzJob;
 using WIDESEAWCS_QuartzJob.DeviceBase;
 using WIDESEAWCS_QuartzJob.DTO;
-using WIDESEAWCS_QuartzJob.RGV;
+using WIDESEAWCS_QuartzJob.Models;
 using WIDESEAWCS_QuartzJob.Service;
 using WIDESEAWCS_SignalR;
+using WIDESEAWCS_Tasks.ConveyorLineJob;
 using WIDESEAWCS_Tasks.RGVJob;
 using WIDESEAWCS_Tasks.StackerCraneJob;
 using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
@@ -50,13 +55,14 @@
         private readonly ITaskExecuteDetailService _taskExecuteDetailService;
         private readonly IRouterService _routerService;
         private readonly IDt_StationManagerService _stationManagerService;
+        private readonly IDt_StationManagerRepository _stationManagerRepository;
         private readonly IMapper _mapper;
         private readonly ICacheService _cacheService;
         private readonly INoticeService _noticeService;
         private static List<string>? userTokenIds;
         private static List<int>? userIds;
 
-        public CommonRGVJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IDt_StationManagerService stationManagerService, IMapper mapper, ICacheService cacheService, INoticeService noticeService, ITaskRepository taskRepository)
+        public CommonRGVJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IDt_StationManagerService stationManagerService, IMapper mapper, ICacheService cacheService, INoticeService noticeService, ITaskRepository taskRepository,IDt_StationManagerRepository stationManagerRepository)
         {
             _taskService = taskService;
             _taskExecuteDetailService = taskExecuteDetailService;
@@ -66,6 +72,7 @@
             _cacheService = cacheService;
             _noticeService = noticeService;
             _taskRepository = taskRepository;
+            _stationManagerRepository = stationManagerRepository;
         }
 
         public Task Execute(IJobExecutionContext context)
@@ -75,25 +82,29 @@
                 CommonRGV commonRGV = (CommonRGV)context.JobDetail.JobDataMap.Get("JobParams");
                 if (commonRGV != null)
                 {
-                    if (!commonRGV.IsEventSubscribed)
+                    //if (!commonRGV.IsEventSubscribed)
+                    //{
+                    //    commonRGV.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//璁㈤槄浠诲姟瀹屾垚浜嬩欢
+                    //}
+
+                    //commonRGV.CheckStackerCraneTaskCompleted();//闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽啀鎵嬪姩瑙﹀彂涓�娆�
+                    if (commonRGV.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.WorkCompleted))
                     {
-                        commonRGV.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//璁㈤槄浠诲姟瀹屾垚浜嬩欢
+                        var x = commonRGV.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum);
+                        RGVTaskFinish(commonRGV, commonRGV.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum));
                     }
 
-                    commonRGV.CheckStackerCraneTaskCompleted();//闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽啀鎵嬪姩瑙﹀彂涓�娆�
-
-
-                    if (commonRGV.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.Automatic) && !commonRGV.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.Fault) && !commonRGV.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.Running))
+                    if (commonRGV.GetValue<RGVDBName, bool>(RGVDBName.Automatic) && !commonRGV.GetValue<RGVDBName, bool>(RGVDBName.Fault) && !commonRGV.GetValue<RGVDBName, bool>(RGVDBName.Running))
                     {
 
-                        Dt_Task? task = GetTask(commonRGV);
+                        Dt_Task? task = GetTask(commonRGV, commonRGV.GetValue<RGVDBName, bool>(RGVDBName.InStock));
                         if (task != null)
                         {
-                            var taskCommand =  _mapper.Map<RGVTaskCommandWrite>(task);
-                            if (taskCommand != null)
+                            RGVTaskCommand? rgvTaskCommand = ConvertToRGVTaskCommand(task);
+                            if (rgvTaskCommand != null)
                             {
                                 Thread.Sleep(1000);
-                                bool sendFlag = commonRGV.SendCommand(taskCommand);
+                                bool sendFlag = SendCommand(commonRGV,rgvTaskCommand);
                                 if (sendFlag)
                                 {
                                     _taskService.UpdateTaskStatusToNext(task.TaskNum);
@@ -117,12 +128,12 @@
                         Automatic = commonRGV.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.Automatic),
                         Fault = commonRGV.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.Fault),
                         Running = commonRGV.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.Running),
-                        commonRGV.StackerCraneAutoStatusDes,
-                        commonRGV.StackerCraneWorkStatusDes,
-                        commonRGV.DeviceCode,
-                        commonRGV.DeviceName,
-                        commonRGV.CurrentTaskNum,
-                        commonRGV.LastTaskNum,
+                        //commonRGV.StackerCraneAutoStatusDes,
+                        //commonRGV.StackerCraneWorkStatusDes,
+                        //commonRGV.DeviceCode,
+                        //commonRGV.DeviceName,
+                        //commonRGV.CurrentTaskNum,
+                        //commonRGV.LastTaskNum,
                     };
                     _noticeService.StackerData(userIds?.FirstOrDefault(), userTokenIds, new { commonRGV.DeviceName, data = obj });
 
@@ -143,23 +154,49 @@
         private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, WIDESEAWCS_QuartzJob.StackerCrane.StackerCraneTaskCompletedEventArgs e)
         {
             CommonRGV? commonRGV = sender as CommonRGV;
+                       
+        }
+
+        public void RGVTaskFinish(CommonRGV commonRGV, int TaskNum)
+        {
             if (commonRGV != null)
             {
-                if (commonRGV.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
+                #region 鏃ュ織璁板綍
+                ConsoleHelper.WriteColorLine($"銆恵commonRGV.DeviceName}銆戝爢鍨涙満浣滀笟鐘舵�侊細銆愩�戞椂闂淬�恵DateTime.Now}銆�", ConsoleColor.Magenta);
+
+                string str = $"銆恵commonRGV.DeviceName}銆戜换鍔″畬鎴�,浠诲姟鍙凤細銆恵TaskNum}銆戞椂闂淬�恵DateTime.Now}銆�";
+                WriteInfo(commonRGV.DeviceName, str);
+                ConsoleHelper.WriteColorLine(str, ConsoleColor.Blue);
+
+                #endregion
+
+                var task = _taskRepository.QueryFirst(x => x.TaskNum == TaskNum);
+                if (task != null)
                 {
-                    ConsoleHelper.WriteColorLine($"銆恵commonRGV.DeviceName}銆戝爢鍨涙満浣滀笟鐘舵�侊細銆恵(int)commonRGV.StackerCraneWorkStatusValue}銆戞椂闂淬�恵DateTime.Now}銆�", ConsoleColor.Magenta);
+                    if (task.TaskState == (int)TaskInStatusEnum.RGV_Indispatch)
+                    {
+                        Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.SourceAddress);
+                        if (stationManager != null)
+                        {
+                            IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManager.stationPLC);
+                            if (device != null)
+                            {
+                                CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
+                                Thread.Sleep(100);
+                                var Barcode = conveyorLine.GetValue<ConveyorLineDBName, string>(ConveyorLineDBName.ConveyorLineBarcode, stationManager.stationChildCode);
 
-                    string str = $"銆恵commonRGV.DeviceName}銆戜换鍔″畬鎴�,浠诲姟鍙凤細銆恵e.TaskNum}銆戞椂闂淬�恵DateTime.Now}銆�";
-                    WriteInfo(commonRGV.DeviceName, str);
-                    ConsoleHelper.WriteColorLine(str, ConsoleColor.Blue);
-
-                    var content = _taskService.StackCraneTaskCompleted(e.TaskNum);
-                    commonRGV.SetValue(StackerCraneDBName.WorkType, 5);
-
-                    var isWorkType = commonRGV.SetValue(StackerCraneDBName.WorkType, 5);
-                    str = $"{commonRGV.DeviceName}銆慦MS|WCS浠诲姟瀹屾垚锛氥�恵content.Status}銆�,鍫嗗灈鏈哄畬鎴愪俊鍙峰啓鍏ワ細銆恵isWorkType}銆�,浠诲姟鍙凤細銆恵e.TaskNum}銆戞椂闂淬�恵DateTime.Now}銆�";
-                    WriteInfo(commonRGV.DeviceName, str);
-                    ConsoleHelper.WriteColorLine(str, ConsoleColor.Blue);
+                                if (Barcode == null)
+                                {
+                                    return;
+                                }
+                                var content = _taskService.RGVTaskCompleted(TaskNum, Barcode);
+                            }
+                        }
+                    }
+                    else
+                    {
+                        var content = _taskService.RGVTaskCompleted(TaskNum);
+                    }
                 }
             }
         }
@@ -169,33 +206,34 @@
         /// </summary>
         /// <param name="commonRGV">鍫嗗灈鏈哄璞�</param>
         /// <returns></returns>
-        private Dt_Task? GetTask(CommonRGV commonRGV)
+        private Dt_Task? GetTask(CommonRGV commonRGV, bool InStock)
         {
             Dt_Task task;
-
-            task = _taskService.QueryRelocationTask(commonRGV.DeviceCode);
-            if (task != null)
+            if (InStock)
             {
-                return task;
+                task = _taskService.QueryRGVExecutingTask(commonRGV.DeviceCode);
+                if (task != null)
+                {
+                    return task;
+                }
             }
-
             if (commonRGV.LastTaskType == null)
             {
-                task = _taskService.QueryStackerCraneTask(commonRGV.DeviceCode);
+                task = _taskService.QueryRGVTask(commonRGV.DeviceCode);
             }
             else
             {
                 if (commonRGV.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                 {
-                    task = _taskService.QueryStackerCraneInTask(commonRGV.DeviceCode);
+                    task = _taskService.QueryRGVInTask(commonRGV.DeviceCode);
                     if (task == null)
                     {
-                        task = _taskService.QueryStackerCraneOutTask(commonRGV.DeviceCode);
+                        task = _taskService.QueryRGVOutTask(commonRGV.DeviceCode);
                     }
                 }
                 else
                 {
-                    task = _taskService.QueryStackerCraneOutTask(commonRGV.DeviceCode);
+                    task = _taskService.QueryRGVOutTask(commonRGV.DeviceCode);
                 }
             }
 
@@ -203,7 +241,7 @@
             {
                 if (task == null)
                 {
-                    task = _taskService.QueryStackerCraneInTask(commonRGV.DeviceCode);
+                    task = _taskService.QueryRGVInTask(commonRGV.DeviceCode);
                 }
                 else
                 {
@@ -212,12 +250,109 @@
             }
             else if (task == null)
             {
-                task = _taskService.QueryStackerCraneInTask(commonRGV.DeviceCode);
+                task = _taskService.QueryRGVInTask(commonRGV.DeviceCode);
             }
 
             return task;
         }
 
+        /// <summary>
+        /// 浠诲姟瀹炰綋杞崲鎴愬懡浠odel
+        /// </summary>
+        /// <param name="task">浠诲姟瀹炰綋</param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        public RGVTaskCommand? ConvertToRGVTaskCommand([NotNull] Dt_Task task)
+        {
+            RGVTaskCommand rgvTaskCommand = new RGVTaskCommand();
+
+            rgvTaskCommand.TaskNum = Convert.ToInt16(task.TaskNum);
+            if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//鍒ゆ柇鏄惁鏄叆搴撲换鍔�
+            {
+                //rgvTaskCommand.TaskType = (byte)Convert.ToSByte(16);
+                //rgvTaskCommand.TaskType = (byte)Convert.ToSByte(64);   閫�鍥�
+                if (task.TaskState == (int)TaskInStatusEnum.InNew)
+                {
+                    Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.SourceAddress);
+                    rgvTaskCommand.TaskType = (byte)Convert.ToSByte(3);
+                    rgvTaskCommand.PickupLocation = (byte)Convert.ToSByte(stationManager.stationRemark);
+                }
+                else if (task.TaskState == (int)TaskInStatusEnum.RGV_IndispatchFinish)
+                {
+                    Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.NextAddress);
+                    rgvTaskCommand.TaskType = (byte)Convert.ToSByte(4);
+                    rgvTaskCommand.PutcargoLocation = (byte)Convert.ToSByte(stationManager.stationRemark);
+                }
+                else
+                {
+                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.NextAddress}銆戜俊鎭紝鏃犳硶鑾峰彇瀵瑰簲鐨勫爢鍨涙満鍙栬揣绔欏彴淇℃伅");
+                    return null;
+                }
+            }
+            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+            {
+
+                if (task.TaskState == (int)TaskOutStatusEnum.Line_OutFinish)
+                {
+                    Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.CurrentAddress);
+                    rgvTaskCommand.TaskType = (byte)Convert.ToSByte(3);
+                    rgvTaskCommand.PickupLocation = (byte)Convert.ToSByte(stationManager.stationRemark);
+                }
+                else if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutdispatchFinish)
+                {
+                    Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.NextAddress);
+                    rgvTaskCommand.TaskType = (byte)Convert.ToSByte(4);
+                    rgvTaskCommand.PutcargoLocation = (byte)Convert.ToSByte(stationManager.stationRemark);
+                }
+                else
+                {
+                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.NextAddress}銆戜俊鎭紝鏃犳硶鑾峰彇瀵瑰簲鐨勫爢鍨涙満鍙栬揣绔欏彴淇℃伅");
+                    return null;
+                }
+            }
+            
+            return rgvTaskCommand;
+        }
+
+        public bool SendCommand(CommonRGV commonRGV, RGVTaskCommand? rgvTaskCommand)
+        {
+            commonRGV.SetValue(StackerCraneDBName.TaskNum, rgvTaskCommand.TaskNum);
+            Thread.Sleep(100);
+            commonRGV.SetValue(StackerCraneDBName.PutcargoLocation, rgvTaskCommand.PutcargoLocation);
+            Thread.Sleep(100);
+            commonRGV.SetValue(StackerCraneDBName.PickupLocation, rgvTaskCommand.PickupLocation);
+            Thread.Sleep(100);
+            commonRGV.SetValue(StackerCraneDBName.TaskType,Convert.ToSByte(rgvTaskCommand.TaskType));
+            for (int i = 0; i < 6; i++)
+            {
+
+                if (commonRGV.GetValue<StackerCraneDBName, short>(StackerCraneDBName.TaskNum) == rgvTaskCommand.TaskNum && commonRGV.GetValue<StackerCraneDBName, byte>(StackerCraneDBName.TaskType) == rgvTaskCommand.TaskType && commonRGV.GetValue<StackerCraneDBName, byte>(StackerCraneDBName.PutcargoLocation) == rgvTaskCommand.PutcargoLocation && commonRGV.GetValue<StackerCraneDBName, byte>(StackerCraneDBName.PickupLocation) == rgvTaskCommand.PickupLocation)
+                {
+                    WriteInfo(commonRGV.DeviceName, $"鍐欏叆浠诲姟鎴愬姛鍐欏叆娆℃暟{i}鍐欏叆浠诲姟銆恵JsonConvert.SerializeObject(rgvTaskCommand)}銆�");
+                    return true;
+                }
+                if (commonRGV.GetValue<StackerCraneDBName, short>(StackerCraneDBName.TaskNum) == rgvTaskCommand.TaskNum)
+                {
+                    commonRGV.SetValue(StackerCraneDBName.TaskNum, rgvTaskCommand.TaskNum);
+                    Thread.Sleep(100);
+                }
+                if (commonRGV.GetValue<StackerCraneDBName, short>(StackerCraneDBName.PutcargoLocation) == rgvTaskCommand.PutcargoLocation)
+                {
+                    commonRGV.SetValue(StackerCraneDBName.PutcargoLocation, rgvTaskCommand.PutcargoLocation);
+                }
+                if (commonRGV.GetValue<StackerCraneDBName, short>(StackerCraneDBName.PickupLocation) == rgvTaskCommand.PickupLocation)
+                {
+                    commonRGV.SetValue(StackerCraneDBName.PickupLocation, rgvTaskCommand.PickupLocation);
+                }
+                if (commonRGV.GetValue<StackerCraneDBName, short>(StackerCraneDBName.TaskType) == rgvTaskCommand.TaskType)
+                {
+                    commonRGV.SetValue(StackerCraneDBName.TaskType, rgvTaskCommand.TaskType);
+                }
+            }
+            WriteInfo(commonRGV.DeviceName, $"RGV浠诲姟鍐欏叆澶辫触銆恵JsonConvert.SerializeObject(rgvTaskCommand)}銆�");
+            return false;
+        }
+
         public async Task LogAndWarn(string deviceName, string log, string color = "red")
         {
             ConsoleHelper.WriteWarningLine(log);

--
Gitblit v1.9.3