From 2a20cd300ab6d9233a708a0f4558ba3d92c9f0a2 Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <1247017146@qq.com>
Date: 星期一, 21 四月 2025 14:16:51 +0800
Subject: [PATCH] 优化入库查询任务方法,高温2号堆垛机缓存俩框

---
 Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/RequestInbound.cs |  242 +++++++++++++++++++++++++++++++-----------------
 1 files changed, 156 insertions(+), 86 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 6f9ab39..18fa8b4 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,17 @@
-锘縰sing Newtonsoft.Json;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+锘縰sing HslCommunication;
+using Mapster;
+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 +22,32 @@
         /// </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);
-                // 鏍囪鍙戦�佸畬鎴�
+
+                var log = $"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣姹傛壂鐮佸叆搴�,涓嬩竴鐩爣鍦板潃銆恵taskCommand.TargetAddress}銆�";
+                ConsoleHelper.WriteWarningLine(log);
+
+                _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
+                WriteInfo(conveyorLine.DeviceName, log);
+
                 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,22 +55,34 @@
         /// <summary>
         /// 澶勭悊鏂颁换鍔�
         /// </summary>
-        private void HandleNewTask(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue)
+        public async Task HandleNewTaskAsync(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);
-            }
-            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换鍔�
+                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;
             }
         }
 
@@ -78,7 +91,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,21 +107,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 result = HttpHelper.GetAsync("http://127.0.0.1:8098/api/Task/CompleteTaskAsync", new { taskNum = taskOut.TaskNum }.ToJsonString()).Result;
+            var keys = new Dictionary<string, object>()
+            {
+                {"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);
             }
         }
@@ -111,31 +138,42 @@
         /// <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, command.Barcode);
                     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;
+
+                        var log = $"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣姹傛壂鐮佸叆搴�(绌烘墭鐩�),涓嬩竴鐩爣鍦板潃銆恵taskCommand.TargetAddress}銆�";
+                        ConsoleHelper.WriteWarningLine(log);
+
+                        _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
+                        WriteInfo(conveyorLine.DeviceName, log);
+
                         conveyorLine.SendCommand(taskCommand, childDeviceCode);
-                        // 鏍囪鍙戦�佸畬鎴�
                         ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
-                        // 鏇存柊浠诲姟鐘舵��
                         _taskService.UpdateTaskStatusToNext(task);
                     }
                 }
             }
+
+            return Task.CompletedTask;
         }
 
         /// <summary>
@@ -143,63 +181,95 @@
         /// </summary>
         private WMSTaskDTO CreateEmptyTrayTaskDto(string barcode, string childDeviceCode)
         {
-            // 鍒涘缓骞惰繑鍥炵┖鎵樼洏浠诲姟DTO
-            //return new WMSTaskDTO
-            //{
-            //    TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
-            //    Grade = 1,
-            //    PalletCode = barcode,
-            //    RoadWay = "JZSC01",
-            //    SourceAddress = childDeviceCode,
-            //    TargetAddress = "JZSC01",
-            //    TaskState = (int)TaskInStatusEnum.InNew,
-            //    Id = 0,
-            //    TaskType = (int)TaskInboundTypeEnum.InTray,
-            //};
-
-            #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:8098/api/Task/RequestTaskAsync", 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 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.QueryConveyorLineTask(conveyorLine.DeviceCode, 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);
+                    var value = _sys_ConfigService.GetByConfigKey(CateGoryConst.CONFIG_SYS_InStation, SysConfigKeyConst.JZNGInBoundStation).ConfigValue;
+                    var valueList = value.Split(',').ToList();
+                    if (valueList.Contains(task.SourceAddress))
+                    {
+                        conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTargetAddress, "1000", childDeviceCode);
+
+                        var log = $"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵task.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵task.PalletCode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣姹傛壂鐮佸叆搴�(瀹炵洏),涓嬩竴鐩爣鍦板潃銆恵1000}銆�";
+                        ConsoleHelper.WriteWarningLine(log);
+
+                        _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
+                        WriteInfo(conveyorLine.DeviceName, log);
+
+                        ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
+                    }
+                    else if (task.TargetAddress == "1020-1")
+                    {
+                        var next = task.NextAddress;
+                        var taskCommand = MapTaskCommand(task, command);
+                        task.NextAddress = next;
+
+                        var log = $"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣姹傛壂鐮佸叆搴�(瀹炵洏),涓嬩竴鐩爣鍦板潃銆恵taskCommand.TargetAddress}銆�";
+                        ConsoleHelper.WriteWarningLine(log);
+
+                        _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
+                        WriteInfo(conveyorLine.DeviceName, log);
+
+                        conveyorLine.SendCommand(taskCommand, childDeviceCode);
+                        ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
+
+                        var taskHty = task.Adapt<Dt_Task_Hty>();
+                        _task_HtyRepository.AddData(taskHty);
+                        _taskService.DeleteData(task);
+                    }
+                    else
+                    {
+                        var next = task.NextAddress;
+                        var taskCommand = MapTaskCommand(task, command);
+                        task.NextAddress = next;
+
+                        var log = $"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣姹傛壂鐮佸叆搴�(瀹炵洏),涓嬩竴鐩爣鍦板潃銆恵taskCommand.TargetAddress}銆�";
+                        ConsoleHelper.WriteWarningLine(log);
+
+                        _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
+                        WriteInfo(conveyorLine.DeviceName, log);
+
+                        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