|  |  | 
 |  |  |             try | 
 |  |  |             { | 
 |  |  |                 var task = _taskService.QueryBarCodeConveyorLineTask(command.ConveyorLineBarcode, childDeviceCode); | 
 |  |  |                 //HandleTaskOut(conveyorLine, command, childDeviceCode, task); | 
 |  |  |                 // && command.ConveyorLineBarcode != "NoRead" && !command.ConveyorLineBarcode.IsNotEmptyOrNull() | 
 |  |  |                 var log = $"【{conveyorLine.DeviceName}】托盘号:【{command.ConveyorLineBarcode}】任务号:【{command.ConveyorLineTaskNum}】设备编码:【{childDeviceCode}】"; | 
 |  |  |                 ConsoleHelper.WriteSuccessLine(log); | 
 |  |  |  | 
 |  |  | 
 |  |  |                 } | 
 |  |  |                 else | 
 |  |  |                 { | 
 |  |  |                     ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task); | 
 |  |  |                     conveyorLine.SendCommand(taskCommand, childDeviceCode); | 
 |  |  |                     conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTaskNum, (long)task.TaskNum, childDeviceCode); | 
 |  |  |                     conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, task.NextAddress, childDeviceCode); | 
 |  |  |                     conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineBarcode, task.PalletCode, childDeviceCode); | 
 |  |  |                     conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode); | 
 |  |  |  | 
 |  |  |                     _taskService.UpdateTaskStatusToNext(task); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  | 
 |  |  |         /// <param name="childDeviceCode">子设备编号</param> | 
 |  |  |         public void RequestInNextAddress(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) | 
 |  |  |         { | 
 |  |  |             Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode); | 
 |  |  |             Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode, command.ConveyorLineBarcode); | 
 |  |  |             if (task != null) | 
 |  |  |             { | 
 |  |  |                 if (command.ConveyorLineBarcode != task.PalletCode) | 
 |  |  | 
 |  |  |                 Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress); | 
 |  |  |                 if (newTask != null) | 
 |  |  |                 { | 
 |  |  |                     //conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTaskNum, newTask.TaskNum, childDeviceCode); | 
 |  |  |                     //conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, newTask.NextAddress, childDeviceCode); | 
 |  |  |                     //conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineBarcode, command.ConveyorLineBarcode, childDeviceCode); | 
 |  |  |                     ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(newTask); | 
 |  |  |                     //taskCommand.InteractiveSignal = command.InteractiveSignal; | 
 |  |  |                     conveyorLine.SendCommand(taskCommand, childDeviceCode); | 
 |  |  |                     conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTaskNum, (long)newTask.TaskNum, childDeviceCode); | 
 |  |  |                     conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, newTask.NextAddress, childDeviceCode); | 
 |  |  |                     conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineBarcode, newTask.PalletCode, childDeviceCode); | 
 |  |  |                     conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode); | 
 |  |  |                     _taskService.UpdateData(newTask); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  | 
 |  |  |             var task = _taskService.QueryExecutingTaskByBarcode(command.ConveyorLineBarcode, childDeviceCode); | 
 |  |  |             if (task != null && task.TaskState != (int)TaskInStatusEnum.Line_InFinish) | 
 |  |  |             { | 
 |  |  |                 //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); | 
 |  |  |  | 
 |  |  |                 WebResponseContent content = _taskService.UpdateTaskStatusToNext(task); | 
 |  |  |  | 
 |  |  |                 if (content.Status) | 
 |  |  | 
 |  |  |         public void RequestOutbound(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) | 
 |  |  |         { | 
 |  |  |             var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); | 
 |  |  |             //var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode, command.ConveyorLineBarcode); | 
 |  |  |             if (task != null) | 
 |  |  |             { | 
 |  |  |                 ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task); | 
 |  |  |                 conveyorLine.SendCommand(taskCommand, childDeviceCode); | 
 |  |  |                 conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTaskNum, (long)task.TaskNum, childDeviceCode); | 
 |  |  |                 conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, task.NextAddress, childDeviceCode); | 
 |  |  |                 conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineBarcode, task.PalletCode, childDeviceCode); | 
 |  |  |                 conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode); | 
 |  |  |  | 
 |  |  |                 //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); | 
 |  |  | 
 |  |  |         /// <param name="childDeviceCode">子设备编号</param> | 
 |  |  |         public void RequestOutNextAddress(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) | 
 |  |  |         { | 
 |  |  |             Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode); | 
 |  |  |             //Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode); | 
 |  |  |             Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode, command.ConveyorLineBarcode); | 
 |  |  |             if (task != null) | 
 |  |  |             { | 
 |  |  |                 var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); | 
 |  |  | 
 |  |  |                     Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress); | 
 |  |  |                     if (newTask != null) | 
 |  |  |                     { | 
 |  |  |                         ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(newTask); | 
 |  |  |                         conveyorLine.SendCommand(taskCommand, childDeviceCode); | 
 |  |  |                         conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTaskNum, (long)newTask.TaskNum, childDeviceCode); | 
 |  |  |                         conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, newTask.NextAddress, childDeviceCode); | 
 |  |  |                         conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineBarcode, newTask.PalletCode, childDeviceCode); | 
 |  |  |                         conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode); | 
 |  |  |                         _taskService.UpdateData(newTask); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 else | 
 |  |  |                 { | 
 |  |  |                     ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task); | 
 |  |  |                     taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(stationManager.stationNGChildCode); | 
 |  |  |                     conveyorLine.SendCommand(taskCommand, childDeviceCode); | 
 |  |  |                     conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTaskNum, (long)task.TaskNum, childDeviceCode); | 
 |  |  |                     conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, task.NextAddress, childDeviceCode); | 
 |  |  |                     conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineBarcode, task.PalletCode, childDeviceCode); | 
 |  |  |                     conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode); | 
 |  |  |                     _taskService.UpdateTaskStatusToNext(task); | 
 |  |  |                 } | 
 |  |  | 
 |  |  |         { | 
 |  |  |             try | 
 |  |  |             { | 
 |  |  |                 var task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode); | 
 |  |  |                 var log = $"【{conveyorLine.DeviceName}】托盘号:【{command.ConveyorLineBarcode}】任务号:【{command.ConveyorLineTaskNum}】设备编码:【{childDeviceCode}】"; | 
 |  |  |                 ConsoleHelper.WriteSuccessLine(log); | 
 |  |  |  | 
 |  |  |                 _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); | 
 |  |  |                 WriteInfo(conveyorLine.DeviceName, log); | 
 |  |  |  | 
 |  |  |                 var task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode, command.ConveyorLineBarcode); | 
 |  |  |                 if (task != null) | 
 |  |  |                 { | 
 |  |  |                     WebResponseContent content = new WebResponseContent(); | 
 |  |  | 
 |  |  |                     Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationPLC == conveyorLine.DeviceCode && x.stationChildCode == childDeviceCode); | 
 |  |  |                     if (task.PalletCode != command.ConveyorLineBarcode) | 
 |  |  |                     { | 
 |  |  |                         //var NGAddress = _platFormRepository.QueryFirst(x => x.PlatCode == task.TargetAddress).Capacity; | 
 |  |  |                         //taskCommand.ConveyorLineTargetAddress = (short)NGAddress; | 
 |  |  |                         taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(stationManager.stationNGChildCode); | 
 |  |  |                     } | 
 |  |  |                     else | 
 |  |  |                     { | 
 |  |  |                         //Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationPLC == conveyorLine.DeviceCode && x.stationChildCode == childDeviceCode); | 
 |  |  |                         taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(stationManager.stationLocation); | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  | 
 |  |  |                     conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, taskCommand.ConveyorLineTargetAddress, childDeviceCode); | 
 |  |  |                     conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineBarcode, taskCommand.ConveyorLineBarcode, childDeviceCode); | 
 |  |  |                     conveyorLine.Communicator.Write(address, 1); | 
 |  |  |                     //conveyorLine.SetValue(ConveyorLineDBName_After.InteractiveSignal, taskCommand.InteractiveSignal, childDeviceCode); | 
 |  |  |                     //conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode); | 
 |  |  |  | 
 |  |  |  | 
 |  |  |                     var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == childDeviceCode && x.stationArea == "Call" && x.stationType == 12); | 
 |  |  |                     CommonConveyorLine_BZ? commonConveyorBZ = Storage.Devices.FirstOrDefault(x => x.DeviceCode == station.stationPLC) as CommonConveyorLine_BZ; | 
 |  |  |                     if (commonConveyorBZ != null) | 
 |  |  |                     { | 
 |  |  |                         ConveyorLineTaskCommand_After readSignal = conveyorLine.ReadCustomer<ConveyorLineTaskCommand_After>(station.stationLocation); | 
 |  |  |                         if (readSignal.Reserved5 == 1) | 
 |  |  |                         { | 
 |  |  |                             var tasks = _taskRepository.QueryData(x => x.TargetAddress == childDeviceCode); | 
 |  |  |                             if (tasks.Count == 0) | 
 |  |  |                             { | 
 |  |  |                                 commonConveyorBZ.SetValue(ConveyorLineDBName_After.ResponState, Convert.ToInt16(1), station.stationLocation); | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                     WriteInfo($"{conveyorLine.DeviceName}输送线出库完成", $"子节点【{childDeviceCode}】托盘号:【{command.ConveyorLineBarcode}】"); | 
 |  |  |                 } | 
 |  |  |                 else | 
 |  |  |                 { | 
 |  |  |                     var taskNext = _taskService.QueryExecutingConveyorLineTask(childDeviceCode, command.ConveyorLineBarcode); | 
 |  |  |                     if (taskNext != null) | 
 |  |  |                     { | 
 |  |  |                         WebResponseContent content = new WebResponseContent(); | 
 |  |  |                         ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(taskNext); | 
 |  |  |                         taskCommand.InteractiveSignal = command.InteractiveSignal; | 
 |  |  |                         Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationPLC == conveyorLine.DeviceCode && x.stationChildCode == childDeviceCode); | 
 |  |  |                         if (taskNext.PalletCode != command.ConveyorLineBarcode) | 
 |  |  |                         { | 
 |  |  |                             taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(stationManager.stationNGChildCode); | 
 |  |  |                         } | 
 |  |  |                         else | 
 |  |  |                         { | 
 |  |  |                             taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(stationManager.stationLocation); | 
 |  |  |                         } | 
 |  |  |  | 
 |  |  |                         if (stationManager.stationPLC == "1007" && stationManager.stationArea == "Cache")  //更新在途数据 | 
 |  |  |                         { | 
 |  |  |                             dt_needBarcode needBarcode = _needBarcodeRepository.QueryFirst(x => x.productLine == stationManager.productLine && x.toArea == stationManager.stationChildCode); | 
 |  |  |  | 
 |  |  |                             if (needBarcode != null) | 
 |  |  |                             { | 
 |  |  |                                 if (needBarcode.inLineNum == 0 || needBarcode.inLineNum > 0) | 
 |  |  |                                 { | 
 |  |  |                                     needBarcode.inLineNum = 0; | 
 |  |  |                                 } | 
 |  |  |                                 else | 
 |  |  |                                 { | 
 |  |  |                                     needBarcode.inLineNum--; | 
 |  |  |                                 } | 
 |  |  |                                 _needBarcodeRepository.UpdateData(needBarcode); | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                         taskNext.ExceptionMessage = log; | 
 |  |  |                         content = _taskService.UpdateTaskStatusToNext(taskNext); | 
 |  |  |                         var proAddress = conveyorLine.DeviceProDTOs | 
 |  |  |                                         .FirstOrDefault(x => x.DeviceChildCode == childDeviceCode && x.DeviceProParamName == ConveyorLineDBName_After.InteractiveSignal.ToString()) | 
 |  |  |                                         ?.DeviceProAddress; | 
 |  |  |                         string address = proAddress.Contains(".0") ? proAddress : proAddress + ".0"; | 
 |  |  |                         conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTaskNum, taskCommand.ConveyorLineTaskNum, childDeviceCode); | 
 |  |  |                         conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, taskCommand.ConveyorLineTargetAddress, childDeviceCode); | 
 |  |  |                         conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineBarcode, taskCommand.ConveyorLineBarcode, childDeviceCode); | 
 |  |  |                         conveyorLine.Communicator.Write(address, 1); | 
 |  |  |  | 
 |  |  |                         var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == childDeviceCode && x.stationArea == "Call" && x.stationType == 12); | 
 |  |  |                         CommonConveyorLine_BZ? commonConveyorBZ = Storage.Devices.FirstOrDefault(x => x.DeviceCode == station.stationPLC) as CommonConveyorLine_BZ; | 
 |  |  |                         if (commonConveyorBZ != null) | 
 |  |  |                         { | 
 |  |  |                             ConveyorLineTaskCommand_After readSignal = conveyorLine.ReadCustomer<ConveyorLineTaskCommand_After>(station.stationLocation); | 
 |  |  |                             if (readSignal.Reserved5 == 1) | 
 |  |  |                             { | 
 |  |  |                                 var tasks = _taskRepository.QueryData(x => x.TargetAddress == childDeviceCode); | 
 |  |  |                                 if (tasks.Count == 0) | 
 |  |  |                                 { | 
 |  |  |                                     commonConveyorBZ.SetValue(ConveyorLineDBName_After.ResponState, Convert.ToInt16(1), station.stationLocation); | 
 |  |  |                                 } | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                         WriteInfo($"{conveyorLine.DeviceName}输送线出库完成", $"子节点【{childDeviceCode}】托盘号:【{command.ConveyorLineBarcode}】"); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             catch (Exception ex) | 
 |  |  | 
 |  |  |                 WriteInfo($"{conveyorLine.DeviceName}输送线出库完成", $"异常信息【{JsonConvert.SerializeObject(ex.Message)}】,子节点【{childDeviceCode}】托盘号:【{command.ConveyorLineBarcode}】"); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         /// <summary> | 
 |  |  |         /// 输送线交互完成 | 
 |  |  |         /// </summary> | 
 |  |  |         /// <param name="conveyorLine">输送线实例对象</param> | 
 |  |  |         /// <param name="childDeviceCode">子设备编号</param> | 
 |  |  |         /// <param name="ProtocalDetailValue">线体当前bool读取偏移地址</param> | 
 |  |  |         /// <param name="value">值</param> | 
 |  |  |         //public void ConveyorLineSendFinish(CommonConveyorLine conveyorLine, string childDeviceCode, int ProtocalDeValue, bool value) | 
 |  |  |         //{ | 
 |  |  |         //    DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand) && x.DeviceChildCode == childDeviceCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); | 
 |  |  |         //    string[] x = devicePro.DeviceProAddress.Split('.'); | 
 |  |  |         //    x[x.Length - 1] = (ProtocalDetailValue + 1).ToString(); | 
 |  |  |         //    string DeviceProAddress = string.Join(".", x); | 
 |  |  |         //    conveyorLine.Communicator.Write(DeviceProAddress, value); | 
 |  |  |         //} | 
 |  |  |  | 
 |  |  |         /// <summary> | 
 |  |  |         /// 监测空托盘实盘出库 | 
 |  |  | 
 |  |  |                 } | 
 |  |  |                 var wmsIpAddress = wmsBase + requestTrayOutTask; | 
 |  |  |  | 
 |  |  |                 var device = _deviceInfoRepository.QueryData(x => x.DeviceStatus == "1" && x.DeviceRemark == platform.Id.ToString()); | 
 |  |  |                 var deviceCode = device.Select(x => x.DeviceCode).ToList(); | 
 |  |  |                 //var device = _deviceInfoRepository.QueryData(x => x.DeviceStatus == "1" && x.DeviceRemark == platform.Id.ToString()); | 
 |  |  |                 //var deviceCode = device.Select(x => x.DeviceCode).ToList(); | 
 |  |  |                 List<string> strings = platform.Location.Split(',').ToList(); | 
 |  |  |  | 
 |  |  |                 var result = await HttpHelper.PostAsync(wmsIpAddress, new { Position = childDeviceCode, Tag = (int)taskType, AreaCdoe = platform.Stacker, AreaCdoes = strings, platform.ProductionLine }.ToJsonString()); | 
 |  |  | 
 |  |  |                     return; | 
 |  |  |  | 
 |  |  |                 taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString()); | 
 |  |  |                 //WriteInfo("出库", $"【{JsonConvert.SerializeObject(taskDTO)}】"); | 
 |  |  |                 WriteInfo("出库", $"【{JsonConvert.SerializeObject(taskDTO)}】"); | 
 |  |  |                 #endregion 调用WMS获取出库任务 | 
 |  |  |  | 
 |  |  |                 CreateAndSendTask(taskDTO); |