From a6ea79849f0142b5280f0c5d4b15ecc83f0d015a Mon Sep 17 00:00:00 2001 From: 刘磊 <1161824510@qq.com> Date: 星期六, 21 十二月 2024 09:52:27 +0800 Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/HuaYiZhongHeng/BaiBuLiKu --- Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/RequestInbound.cs | 205 ++++++++++++++++++++++++++++++++------------------ 1 files changed, 131 insertions(+), 74 deletions(-) diff --git a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/RequestInbound.cs b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/RequestInbound.cs index 78f336f..7fd4c81 100644 --- a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/RequestInbound.cs +++ b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/RequestInbound.cs @@ -1,19 +1,16 @@ -锘縰sing Newtonsoft.Json; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +锘縰sing HslCommunication; +using Newtonsoft.Json; +using System.Text.RegularExpressions; using System.Threading.Tasks; +using WIDESEAWCS_Common; using WIDESEAWCS_Common.TaskEnum; -using WIDESEAWCS_Core.Helper; using WIDESEAWCS_Core; +using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO.TaskInfo; +using WIDESEAWCS_DTO.WMS; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; using WIDESEAWCS_Tasks.ConveyorLineJob; -using HslCommunication; -using OfficeOpenXml.ConditionalFormatting; -using WIDESEAWCS_DTO.WMS; namespace WIDESEAWCS_Tasks { @@ -24,29 +21,28 @@ /// </summary> private void HandleTaskOut(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue, Dt_Task taskOut) { - // 濡傛灉娌℃湁浠诲姟锛岀洿鎺ヨ繑鍥� if (taskOut == null) return; + //ConveyorLineTaskCommand? taskCommand = MapTaskCommand(taskOut, command); - // 鏄犲皠浠诲姟鍛戒护 + var next = taskOut.NextAddress; var taskCommand = MapTaskCommand(taskOut, command); + taskOut.NextAddress = next; - // 鏍规嵁涓嶅悓鐨勪换鍔$被鍨嬪拰鐘舵�佹墽琛屼笉鍚岀殑閫昏緫 bool isOutTray = taskOut.TaskType == (int)TaskOutboundTypeEnum.OutTray; bool isOutboundAndOutFinish = taskOut.TaskType == (int)TaskOutboundTypeEnum.Outbound && taskOut.TaskState == (int)TaskOutStatusEnum.SC_OutFinish; bool isOutboundAndLineOutExecuting = taskOut.TaskType == (int)TaskOutboundTypeEnum.Outbound && taskOut.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting; - if (isOutTray || isOutboundAndOutFinish || isOutboundAndLineOutExecuting) + if (isOutTray || isOutboundAndOutFinish || !isOutboundAndLineOutExecuting) { - // 鍙戦�佸懡浠ゅ埌杈撻�佺嚎 conveyorLine.SendCommand(taskCommand, childDeviceCode); - // 鏍囪鍙戦�佸畬鎴� + + ConsoleHelper.WriteWarningLine($"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣姹傛壂鐮佸叆搴�,涓嬩竴鐩爣鍦板潃銆恵taskCommand.TargetAddress}銆�"); + ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); - // 鏇存柊浠诲姟鐘舵�� _taskService.UpdateTaskStatusToNext(taskOut); } else if (taskOut.TaskType == (int)TaskOutboundTypeEnum.OutTray && taskOut.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting) { - // 瀹屾垚WMS浠诲姟 CompleteWmsTask(taskOut, command, conveyorLine, childDeviceCode, ProtocalDetailValue); } } @@ -54,23 +50,48 @@ /// <summary> /// 澶勭悊鏂颁换鍔� /// </summary> - private void HandleNewTask(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) + private async void HandleNewTask(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) { - // 鐗瑰畾鏉′欢涓嬪垱寤哄苟鍙戦�佺┖鎵樼洏鍏ュ簱浠诲姟 - if ((conveyorLine.DeviceCode == "1003" && childDeviceCode == "1016") || (conveyorLine.DeviceCode == "1005" && childDeviceCode == "1048")) + var stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == childDeviceCode && x.stationPLC == conveyorLine.DeviceCode); + + switch (stationManager.stationType) { - // 璇锋眰WMS绌烘墭鐩樹换鍔� - CreateAndSendEmptyTrayTask(conveyorLine, command, childDeviceCode, ProtocalDetailValue); + case 5: + case 1: + await RequestWmsTask(conveyorLine, command, childDeviceCode, ProtocalDetailValue); + break; + + case 2: + case 3: + case 4: + case 6: + await CreateAndSendEmptyTrayTask(conveyorLine, command, childDeviceCode, ProtocalDetailValue); + break; + + case 7: + RequestOutNextAddress(conveyorLine, command, childDeviceCode, ProtocalDetailValue); + break; + + case 10: + ConveyorLineOutFinish(conveyorLine, command, childDeviceCode, ProtocalDetailValue); + break; + + default: + break; } - else if ((conveyorLine.DeviceCode == "1001" && childDeviceCode == "1088") || (conveyorLine.DeviceCode == "1004" && childDeviceCode == "1339")) - { - // 璇锋眰WMS鍏ュ簱浠诲姟 - RequestWmsTask(conveyorLine, command, childDeviceCode, ProtocalDetailValue); - } - else if ((conveyorLine.DeviceCode == "1001" && childDeviceCode == "1073") || (conveyorLine.DeviceCode == "1003" && childDeviceCode == "1002")) - { - //TODO 鍙戦�佺洿鎺ュ幓NG鍙d换鍔� - } + + //if ((conveyorLine.DeviceCode == "1003" && childDeviceCode == "1016") || (conveyorLine.DeviceCode == "1005" && childDeviceCode == "1048")) + //{ + // await CreateAndSendEmptyTrayTask(conveyorLine, command, childDeviceCode, ProtocalDetailValue); + //} + //else if ((conveyorLine.DeviceCode == "1001" && childDeviceCode == "1088") || (conveyorLine.DeviceCode == "1004" && childDeviceCode == "1339")) + //{ + // await RequestWmsTask(conveyorLine, command, childDeviceCode, ProtocalDetailValue); + //} + //else if ((conveyorLine.DeviceCode == "1001" && childDeviceCode == "1068")) + //{ + // ConveyorLineOutFinish(conveyorLine, command, childDeviceCode, ProtocalDetailValue); + //} } /// <summary> @@ -78,7 +99,12 @@ /// </summary> private ConveyorLineTaskCommand MapTaskCommand(Dt_Task task, ConveyorLineTaskCommand command) { - // 浣跨敤mapper鏄犲皠浠诲姟鍛戒护 + // 浣跨敤姝e垯琛ㄨ揪寮忓尮閰嶇被浼� -鏁板瓧 鐨勬ā寮忥紝骞舵浛鎹负绌哄瓧绗︿覆 + task.NextAddress = Regex.Replace(task.NextAddress, @"-(\d+)", ""); + if (Convert.ToInt32(task.NextAddress) > 1999) + { + task.NextAddress = (Convert.ToInt32(task.NextAddress) - 1000).ToString(); + } var comm = _mapper.Map<ConveyorLineTaskCommand>(task); comm.InteractiveSignal = command.InteractiveSignal; return comm; @@ -89,25 +115,30 @@ /// </summary> private void CompleteWmsTask(Dt_Task taskOut, ConveyorLineTaskCommand command, CommonConveyorLine conveyorLine, string childDeviceCode, int ProtocalDetailValue) { - // 濡傛灉娌℃湁鏉$爜淇℃伅锛屽垯璁剧疆鐩爣鍦板潃涓篘G鍦板潃 if (command.Barcode == "NoRead") { var NGAddress = _platFormRepository.QueryFirst(x => x.PlatCode == taskOut.TargetAddress).Capacity; taskOut.TargetAddress = NGAddress.ToString(); } - // TODO璋冪敤WMS浠诲姟瀹屾垚鎺ュ彛 var keys = new Dictionary<string, object>() - { - {"taskNum", taskOut.TaskNum} - }; - var result = HttpHelper.GetAsync($"http://127.0.0.1:5000/api/Task/CompleteTaskAsync", keys).Result; + { + {"taskNum", taskOut.TaskNum} + }; + var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); + var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue; + var completeTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.CompleteTask)?.ConfigValue; + if (wmsBase == null || completeTask == null) + { + throw new InvalidOperationException("WMS IP 鏈厤缃�"); + } + var wmsIpAddress = wmsBase + completeTask; + + var result = HttpHelper.GetAsync(wmsIpAddress, keys).Result; WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result); if (content.Status) { - // 鏍囪鍙戦�佸畬鎴� ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); - // 鏇存柊浠诲姟鐘舵�� _taskService.UpdateTaskStatusToNext(taskOut); } } @@ -115,31 +146,38 @@ /// <summary> /// 鍒涘缓骞跺彂閫佺┖鎵樼洏浠诲姟 /// </summary> - public void CreateAndSendEmptyTrayTask(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) + public Task CreateAndSendEmptyTrayTask(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) { if (command.Barcode != "NoRead") { - // 鍒涘缓绌烘墭鐩樹换鍔TO - WMSTaskDTO taskDTO = CreateEmptyTrayTaskDto(command.Barcode, childDeviceCode); - // 鍒涘缓骞跺彂閫佷换鍔� - WebResponseContent content = CreateAndSendTask(taskDTO); + var taskDTO = CreateEmptyTrayTaskDto(command.Barcode, childDeviceCode); + + if (_taskRepository.QueryFirst(x => x.PalletCode == taskDTO.PalletCode) != null) + { + WriteInfo(conveyorLine.DeviceName, "褰撳墠鎵樼洏瀛樺湪浠诲姟"); + } + + var content = CreateAndSendTask(taskDTO); if (content.Status) { - // 鏌ヨ浠诲姟 - Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); + var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); if (task != null) { - // 鏄犲皠浠诲姟鍛戒护 - ConveyorLineTaskCommand taskCommand = MapTaskCommand(task, command); - // 鍙戦�佸懡浠ゅ埌杈撻�佺嚎 + //var taskCommand = MapTaskCommand(task, command); + var next = task.NextAddress; + var taskCommand = MapTaskCommand(task, command); + task.NextAddress = next; + + ConsoleHelper.WriteWarningLine($"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣姹傛壂鐮佸叆搴�(绌烘墭鐩�),涓嬩竴鐩爣鍦板潃銆恵taskCommand.TargetAddress}銆�"); + conveyorLine.SendCommand(taskCommand, childDeviceCode); - // 鏍囪鍙戦�佸畬鎴� ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); - // 鏇存柊浠诲姟鐘舵�� _taskService.UpdateTaskStatusToNext(task); } } } + + return Task.CompletedTask; } /// <summary> @@ -147,49 +185,68 @@ /// </summary> private WMSTaskDTO CreateEmptyTrayTaskDto(string barcode, string childDeviceCode) { - #region 鍚慦MS璇锋眰绌烘墭鐩樹换鍔� - WMSTaskDTO wMSTaskDTO = new WMSTaskDTO(); - RequestTaskDto request = new RequestTaskDto() + var request = new RequestTaskDto() { Position = childDeviceCode, PalletCode = barcode, }; - var result = HttpHelper.PostAsync("http://127.0.0.1:5000/api/Task/RequestTrayInTaskAsync", request.ToJsonString()).Result; + + var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); + var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue; + var requestTrayInTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.RequestTrayInTask)?.ConfigValue; + if (wmsBase == null || requestTrayInTask == null) + { + throw new InvalidOperationException("WMS IP 鏈厤缃�"); + } + var wmsIpAddrss = wmsBase + requestTrayInTask; + var result = HttpHelper.PostAsync(wmsIpAddrss, request.ToJsonString()).Result; if (result == null) - return wMSTaskDTO; + return new WMSTaskDTO(); WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result); - // 妫�鏌ョ姸鎬佸苟杩斿洖 if (!content.Status) - return wMSTaskDTO; + return new WMSTaskDTO(); return JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString()); - - #endregion 鍚慦MS璇锋眰绌烘墭鐩樹换鍔� } /// <summary> /// 璇锋眰WMS浠诲姟 /// </summary> - private void RequestWmsTask(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) + private async Task RequestWmsTask(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) { - // 璇锋眰WMS浠诲姟 - if (_taskService.RequestWMSTask(command.Barcode, childDeviceCode).Status) + var content = await _taskService.RequestWMSTask(command.Barcode, childDeviceCode); + if (content.Status) { - // 鏌ヨ浠诲姟 - Dt_Task task = _taskService.QueryBarCodeConveyorLineTask(command.Barcode, childDeviceCode); + var task = _taskService.QueryBarCodeConveyorLineTask(command.Barcode, childDeviceCode); if (task != null) { - // 鏄犲皠浠诲姟鍛戒护 - ConveyorLineTaskCommand taskCommand = MapTaskCommand(task, command); - // 鍙戦�佸懡浠ゅ埌杈撻�佺嚎 - conveyorLine.SendCommand(taskCommand, childDeviceCode); - // 鏍囪鍙戦�佸畬鎴� - ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); - // 鏇存柊浠诲姟鐘舵�� - _taskService.UpdateTaskStatusToNext(task); + if (task.NextAddress.Contains("JZ")) + { + int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>(); + task.TaskState = nextStatus; + + ConsoleHelper.WriteWarningLine($"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵task.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵task.PalletCode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣姹傛壂鐮佸叆搴�(瀹炵洏),涓嬩竴鐩爣鍦板潃銆恵task.TargetAddress}銆�"); + _taskService.UpdateTaskStatusToNext(task); + ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); + } + else + { + //var taskCommand = MapTaskCommand(task, command); + var next = task.NextAddress; + var taskCommand = MapTaskCommand(task, command); + task.NextAddress = next; + + ConsoleHelper.WriteWarningLine($"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣姹傛壂鐮佸叆搴�(瀹炵洏),涓嬩竴鐩爣鍦板潃銆恵taskCommand.TargetAddress}銆�"); + + conveyorLine.SendCommand(taskCommand, childDeviceCode); + ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); + _taskService.UpdateTaskStatusToNext(task); + } } } + else + WriteInfo(conveyorLine.DeviceName, content.Message); } } } \ No newline at end of file -- Gitblit v1.9.3