From 6a9cbabce3dab5b74fa466d6f7ab27bd1a1be3cb Mon Sep 17 00:00:00 2001 From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com> Date: 星期六, 11 十月 2025 14:16:50 +0800 Subject: [PATCH] 优化任务逻辑并新增文件与文档支持 移除字段 "生产产线" 相关代码,优化 AGV 同层搬运与入库任务逻辑,新增对写入信号的判断处理,提升任务执行可靠性。 新增 `HttpHelper.cs`、`TaskEnumHelper.cs`、`PDAController.cs` 等文件,调整文档布局,更新索引与视图状态。 清理无用代码,完善堆垛机任务完成逻辑,新增日志记录。 新增与数据库相关的二进制文件及 Excel 文件支持。 --- 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs | 219 +++++++++++++++++++++++++++++++++--------------------- 1 files changed, 133 insertions(+), 86 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..8b0fbea 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,70 +434,25 @@ { 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) + 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(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; - } + 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.NextAddress}銆戜俊鎭紝鏃犳硶鑾峰彇瀵瑰簲鐨勫爢鍨涙満鍙栬揣绔欏彴淇℃伅"); + //鏁版嵁閰嶇疆閿欒 + _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�"); 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) { @@ -464,9 +463,12 @@ else { //鏁版嵁閰嶇疆閿欒 - _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.NextAddress}銆�"); + _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�"); return null; } + } + else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) + { string[] sourceCodes = task.CurrentAddress.Split("-"); if (sourceCodes.Length == 3) { @@ -477,7 +479,52 @@ else { //鏁版嵁閰嶇疆閿欒 - _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�"); + _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]) % 2 != 0 ? (short)1 : (short)2; + 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]) % 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; + } + + 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.CurrentAddress}銆�"); return null; } } -- Gitblit v1.9.3