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