|  |  | 
 |  |  | using Microsoft.VisualBasic; | 
 |  |  | using MoYu.Logging; | 
 |  |  | using Newtonsoft.Json; | 
 |  |  | using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; | 
 |  |  | using SqlSugar; | 
 |  |  | using System.Text.RegularExpressions; | 
 |  |  | using System.Threading.Tasks; | 
 |  |  | using WIDESEAWCS_Common; | 
 |  |  | 
 |  |  | using WIDESEAWCS_DTO.WMS; | 
 |  |  | using WIDESEAWCS_Model.Models; | 
 |  |  | using WIDESEAWCS_QuartzJob; | 
 |  |  | using WIDESEAWCS_QuartzJob.Models; | 
 |  |  | using WIDESEAWCS_Tasks.ConveyorLineJob; | 
 |  |  | using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database; | 
 |  |  |  | 
 |  |  | 
 |  |  |         { | 
 |  |  |             // 使用正则表达式匹配类似 -数字 的模式,并替换为空字符串 | 
 |  |  |             task.NextAddress = Regex.Replace(task.NextAddress, @"-(\d+)", ""); | 
 |  |  |             if (Convert.ToInt32(task.NextAddress) > 1999) | 
 |  |  |             { | 
 |  |  |                 task.NextAddress = (Convert.ToInt32(task.NextAddress) - 1000).ToString(); | 
 |  |  |             } | 
 |  |  |             //if (Convert.ToInt32(task.NextAddress) > 2999) | 
 |  |  |             //{ | 
 |  |  |             //    task.NextAddress = (Convert.ToInt32(task.NextAddress) - 1000).ToString(); | 
 |  |  |             //} | 
 |  |  |             var comm = _mapper.Map<ConveyorLineTaskCommand>(task); | 
 |  |  |             comm.InteractiveSignal = command.InteractiveSignal; | 
 |  |  |             return comm; | 
 |  |  | 
 |  |  |         { | 
 |  |  |             if (command.Barcode != "NoRead") | 
 |  |  |             { | 
 |  |  |                 if (_taskRepository.QueryFirst(x => x.PalletCode == command.Barcode) != null) | 
 |  |  |                 { | 
 |  |  |                     var taskExecuting = _taskRepository.QueryFirst(x => x.PalletCode == command.Barcode && (x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting || x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish)); | 
 |  |  |  | 
 |  |  |                     if (taskExecuting != null) | 
 |  |  |                     { | 
 |  |  |                         taskExecuting.ExceptionMessage = "未接收到线体完成信号系统内部自动完成"; | 
 |  |  |                         _taskService.Delete(taskExecuting); | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                     ConsoleHelper.WriteErrorLine($"当前托盘存在任务:【{command.Barcode}】"); | 
 |  |  |  | 
 |  |  |                     WriteInfo(conveyorLine.DeviceName, $"当前托盘存在任务{command.Barcode}"); | 
 |  |  |  | 
 |  |  |                 } | 
 |  |  |                 string isTrue = string.Empty; | 
 |  |  |  | 
 |  |  |                 ResultTrayCellsStatus result = GetResultTrayCellsStatus(command, stationManager); | 
 |  |  | 
 |  |  |                     taskDTO = CreateEmptyTrayTaskDto(command.Barcode, childDeviceCode); ; | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 if (_taskRepository.QueryFirst(x => x.PalletCode == taskDTO.PalletCode) != null) | 
 |  |  |                 { | 
 |  |  |                     WriteInfo(conveyorLine.DeviceName, "当前托盘存在任务"); | 
 |  |  |                 } | 
 |  |  |                 CreateEmptyTryTask(conveyorLine, command, childDeviceCode, ProtocalDetailValue, taskDTO); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  | 
 |  |  |             var content = CreateAndSendTask(taskDTO); | 
 |  |  |             if (content.Status) | 
 |  |  |             { | 
 |  |  |                 var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); | 
 |  |  |                 //var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); | 
 |  |  |                 var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode, command.Barcode); | 
 |  |  |                 if (task != null) | 
 |  |  |                 { | 
 |  |  |                     var next = task.NextAddress; | 
 |  |  | 
 |  |  |         /// </summary> | 
 |  |  |         private async Task RequestWmsTask(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue, Dt_StationManager stationManager) | 
 |  |  |         { | 
 |  |  |             string isTrue = string.Empty; | 
 |  |  |  | 
 |  |  |             ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode); | 
 |  |  |  | 
 |  |  |             ResultTrayCellsStatus result = GetResultTrayCellsStatus(command, stationManager); | 
 |  |  |  | 
 |  |  |             if (result.SerialNos.Count == 0) | 
 |  |  |             if (childDeviceCode == "1435") | 
 |  |  |             { | 
 |  |  |                 var Traycontent = await _taskService.RequestWMSTask(command.Barcode, childDeviceCode); | 
 |  |  |                 if (Traycontent.Status) | 
 |  |  |                 { | 
 |  |  |                     ConsoleHelper.WriteSuccessLine("二封空框请求回流"); | 
 |  |  |                     ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |                 ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode); | 
 |  |  |  | 
 |  |  |             List<string> strings = stationManager.Roadway.Split(",").ToList(); | 
 |  |  |             foreach (string item in strings) | 
 |  |  |             { | 
 |  |  |                 isTrue = RequestInboundPlatform(item, result.ProductionLine, false); | 
 |  |  |                 if (isTrue != null) | 
 |  |  |                 var serialNosError = result.SerialNos.Where(x => x.SerialNoStatus != 1 && x.SerialNoStatus != 4).ToList(); | 
 |  |  |  | 
 |  |  |                 if (serialNosError.Count > 0 || !result.Success || result.SerialNos.Count == 0) | 
 |  |  |                 { | 
 |  |  |                     break; | 
 |  |  |                     WMSTaskDTO taskDTO = new WMSTaskDTO | 
 |  |  |                     { | 
 |  |  |                         TaskNum = _taskRepository.GetTaskNo().Result, | 
 |  |  |                         Grade = 1, | 
 |  |  |                         PalletCode = command.Barcode, | 
 |  |  |                         RoadWay = "CHSC4", | 
 |  |  |                         SourceAddress = childDeviceCode, | 
 |  |  |                         TargetAddress = "CHSC4", | 
 |  |  |                         TaskState = (int)TaskInStatusEnum.InNew, | 
 |  |  |                         Id = 2, | 
 |  |  |                         TaskType = (int)TaskInboundTypeEnum.InNG, | 
 |  |  |                         ProductionLine = result.ProductionLine, | 
 |  |  |                     }; | 
 |  |  |                     var Taskcontent = _taskService.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO }); | 
 |  |  |                     if (Taskcontent.Status) | 
 |  |  |                     { | 
 |  |  |                         ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode); | 
 |  |  |                     } | 
 |  |  |                     ConsoleHelper.WriteSuccessLine($"【{stationManager.stationRemark}】【{stationManager.stationChildCode}】{result.MOMMessage}"); | 
 |  |  |                     return; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             if (isTrue != null && isTrue != string.Empty) | 
 |  |  |             { | 
 |  |  |                 WMSTaskDTO taskDTO = new WMSTaskDTO | 
 |  |  |                 else | 
 |  |  |                 { | 
 |  |  |                     TaskNum = _taskRepository.GetTaskNo().Result, | 
 |  |  |                     Grade = 1, | 
 |  |  |                     PalletCode = command.Barcode, | 
 |  |  |                     RoadWay = childDeviceCode, | 
 |  |  |                     SourceAddress = childDeviceCode, | 
 |  |  |                     TargetAddress = isTrue, | 
 |  |  |                     TaskState = (int)TaskOutStatusEnum.SC_OutFinish, | 
 |  |  |                     Id = 2, | 
 |  |  |                     TaskType = (int)TaskOutboundTypeEnum.OutTray, | 
 |  |  |                     ProductionLine = result.ProductionLine, | 
 |  |  |                 }; | 
 |  |  |                 var Taskcontent = _taskService.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO }); | 
 |  |  |                 if (Taskcontent.Status) | 
 |  |  |                 { | 
 |  |  |                     ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode); | 
 |  |  |                     var Taskcontent = await _taskService.RequestWMSTask(command.Barcode, childDeviceCode); | 
 |  |  |                     if (Taskcontent.Status) | 
 |  |  |                     { | 
 |  |  |                         ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |             } | 
 |  |  |             else | 
 |  |  |             { | 
 |  |  |                 var Taskcontent = await _taskService.RequestWMSTask(command.Barcode, childDeviceCode); | 
 |  |  |                 if (Taskcontent.Status) | 
 |  |  |                 string isTrue = string.Empty; | 
 |  |  |  | 
 |  |  |                 ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode); | 
 |  |  |  | 
 |  |  |                 if (result.SerialNos.Count == 0) | 
 |  |  |                 { | 
 |  |  |                     ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode); | 
 |  |  |                     var Traycontent = await _taskService.RequestWMSTask(command.Barcode, childDeviceCode); | 
 |  |  |                     if (Traycontent.Status) | 
 |  |  |                     { | 
 |  |  |                         ConsoleHelper.WriteSuccessLine("二封空框请求回流"); | 
 |  |  |                         ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 List<string> strings = stationManager.Roadway.Split(",").ToList(); | 
 |  |  |                 foreach (string item in strings) | 
 |  |  |                 { | 
 |  |  |                     isTrue = RequestInboundPlatform(item, result.ProductionLine, false); | 
 |  |  |                     if (isTrue != null) | 
 |  |  |                     { | 
 |  |  |                         break; | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 if (isTrue != null && isTrue != string.Empty) | 
 |  |  |                 { | 
 |  |  |                     WMSTaskDTO taskDTO = new WMSTaskDTO | 
 |  |  |                     { | 
 |  |  |                         TaskNum = _taskRepository.GetTaskNo().Result, | 
 |  |  |                         Grade = 1, | 
 |  |  |                         PalletCode = command.Barcode, | 
 |  |  |                         RoadWay = childDeviceCode, | 
 |  |  |                         SourceAddress = childDeviceCode, | 
 |  |  |                         TargetAddress = isTrue, | 
 |  |  |                         TaskState = (int)TaskOutStatusEnum.SC_OutFinish, | 
 |  |  |                         Id = 2, | 
 |  |  |                         TaskType = (int)TaskOutboundTypeEnum.OutTray, | 
 |  |  |                         ProductionLine = result.ProductionLine, | 
 |  |  |                     }; | 
 |  |  |                     var Taskcontent = _taskService.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO }); | 
 |  |  |                     if (Taskcontent.Status) | 
 |  |  |                     { | 
 |  |  |                         ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode); | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                 } | 
 |  |  |                 else | 
 |  |  |                 { | 
 |  |  |                     var Taskcontent = await _taskService.RequestWMSTask(command.Barcode, childDeviceCode); | 
 |  |  |                     if (Taskcontent.Status) | 
 |  |  |                     { | 
 |  |  |                         ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  | 
 |  |  |                     LogAndSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, logMessage, conveyorLineTaskCommand.TargetAddress.ToString()); | 
 |  |  |                     return; | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 var configz = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); | 
 |  |  |                 var wmsbase = configz.Where(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE).FirstOrDefault()?.ConfigValue; | 
 |  |  |                 var address = configz.Where(x => x.ConfigKey == SysConfigKeyConst.QueryLocationFreeJZ).FirstOrDefault()?.ConfigValue; | 
 |  |  |                 if (wmsbase == null || address == null) | 
 |  |  |                 { | 
 |  |  |                     throw new InvalidOperationException("WMS IP 未配置"); | 
 |  |  |                 } | 
 |  |  |                 var wmsIpAddrss = wmsbase + address; | 
 |  |  |                 var x = await HttpHelper.PostAsync(wmsIpAddrss, new { RoadwayNo = "JZSC" }.ToJsonString()); | 
 |  |  |                 var LocationFree = JsonConvert.DeserializeObject<WebResponseContent>(x); | 
 |  |  |                 if (!LocationFree.Status) | 
 |  |  |                 { | 
 |  |  |                     ConsoleHelper.WriteErrorLine(LocationFree.Message); | 
 |  |  |                     return; | 
 |  |  |                 } | 
 |  |  |                 if (resultTrayCellsStatus.SerialNos.Count == 0) | 
 |  |  |                 { | 
 |  |  |                     var Traycontent = await _taskService.RequestWMSTask(command.Barcode, childDeviceCode); | 
 |  |  | 
 |  |  |                 } | 
 |  |  |                 else | 
 |  |  |                 { | 
 |  |  |                     var configz = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); | 
 |  |  |                     var wmsbase = configz.Where(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE).FirstOrDefault()?.ConfigValue; | 
 |  |  |                     var address = configz.Where(x => x.ConfigKey == SysConfigKeyConst.QueryStockInfoForRealTrayJZAsync).FirstOrDefault()?.ConfigValue; | 
 |  |  |                     if (wmsbase == null || address == null) | 
 |  |  |                     var QueryStockInfoForRealTrayJZ = configz.Where(x => x.ConfigKey == SysConfigKeyConst.QueryStockInfoForRealTrayJZAsync).FirstOrDefault()?.ConfigValue; | 
 |  |  |                     if (wmsbase == null || QueryStockInfoForRealTrayJZ == null) | 
 |  |  |                     { | 
 |  |  |                         throw new InvalidOperationException("WMS IP 未配置"); | 
 |  |  |                     } | 
 |  |  |                     var wmsIpAddrss = wmsbase + address; | 
 |  |  |                     wmsIpAddrss = wmsbase + QueryStockInfoForRealTrayJZ; | 
 |  |  |                     var result = await HttpHelper.PostAsync(wmsIpAddrss, new { ProductLine = resultTrayCellsStatus.ProductionLine, PalletCode = command.Barcode }.ToJsonString()); | 
 |  |  |                     var StockInfocontent = JsonConvert.DeserializeObject<WebResponseContent>(result); | 
 |  |  |                     if (StockInfocontent.Status) | 
 |  |  | 
 |  |  |                             { | 
 |  |  |                                 ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode); | 
 |  |  |                             } | 
 |  |  |                             #region | 
 |  |  |                             //if (task != null && task.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting && task.CurrentAddress == "1537") | 
 |  |  |                             //{ | 
 |  |  |                             //    ConveyorLineTaskCommand command1 = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(stationManager.stationLocation); | 
 |  |  |  | 
 |  |  |                             //    if (command1.InteractiveSignal != 2) | 
 |  |  |                             //    { | 
 |  |  |                             //        ConsoleHelper.WriteSuccessLine("化成实托请求入静置"); | 
 |  |  |                             //        if (StaticVariable.isStackerRun == true) | 
 |  |  |                             //        { | 
 |  |  |                             //            ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode); | 
 |  |  |                             //        } | 
 |  |  |                             //        return; | 
 |  |  |                             //    } | 
 |  |  |                             //    else | 
 |  |  |                             //    { | 
 |  |  |                             //        ConsoleHelper.WriteWarningLine("出库任务未完成"); | 
 |  |  |                             //        return; | 
 |  |  |                             //    } | 
 |  |  |                             //} | 
 |  |  |                             //else if (task != null && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting) | 
 |  |  |                             //{ | 
 |  |  |                             //    ConsoleHelper.WriteWarningLine("已存在静置出库任务"); | 
 |  |  |                             //    return; | 
 |  |  |                             //} | 
 |  |  |                             //else | 
 |  |  |                             //{ | 
 |  |  |                             //    var Task = await _taskService.RequestWMSTask(command.Barcode, childDeviceCode); | 
 |  |  |                             //    if (Task.Status) | 
 |  |  |                             //    { | 
 |  |  |                             //        if (StaticVariable.isStackerRun == true) | 
 |  |  |                             //        { | 
 |  |  |                             //            ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode); | 
 |  |  |                             //        } | 
 |  |  |                             //    } | 
 |  |  |                             //    return; | 
 |  |  |                             //} | 
 |  |  |                             #endregion | 
 |  |  |                         } | 
 |  |  |                         else | 
 |  |  |                         { | 
 |  |  | 
 |  |  |             else if (task.Roadway.Contains("JZ")) | 
 |  |  |             { | 
 |  |  |                 // 查询是否存在静置出库任务 | 
 |  |  |                 var outJZTask = _taskRepository.QueryData(x => x.Roadway == task.Roadway && | 
 |  |  |                     (x.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting || | 
 |  |  |                      x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish || x.TaskState == (int)TaskOutStatusEnum.OutNew)); | 
 |  |  |                 var outJZTask = _taskRepository.QueryData(x => x.Roadway == task.Roadway && x.TaskType == (int)TaskOutboundTypeEnum.Outbound && (x.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting || x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish || x.TaskState == (int)TaskOutStatusEnum.OutNew)); | 
 |  |  |  | 
 |  |  |                 if (!outJZTask.Any()) | 
 |  |  |                 if (!outJZTask.Any() || outJZTask.Count() == 0) | 
 |  |  |                 { | 
 |  |  |                     // 映射任务命令 | 
 |  |  |                     var taskCommand = MapTaskCommand(task, command); | 
 |  |  | 
 |  |  |  | 
 |  |  |                     // 更新任务状态 | 
 |  |  |                     _taskService.UpdateTaskStatusToNext(task); | 
 |  |  |  | 
 |  |  |                     WriteInfo(conveyorLine.DeviceName, $"静置存在出库任务{outJZTask.Count()}"); | 
 |  |  |                 } | 
 |  |  |                 else | 
 |  |  |                 { |