|  |  | 
 |  |  |                     // 判断任务类型是否为出库任务 | 
 |  |  |                     if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) | 
 |  |  |                     { | 
 |  |  |                         if ((task.Roadway == "1326"||task.Roadway == "1529" )&& ( task.TaskType == (int)TaskOutboundTypeEnum.OutTray|| task.TaskType == (int)TaskOutboundTypeEnum.InToOut)) | 
 |  |  |                         if ((task.Roadway == "2000"||task.Roadway == "1529" )&& ( task.TaskType == (int)TaskOutboundTypeEnum.OutTray|| task.TaskType == (int)TaskOutboundTypeEnum.InToOut)) | 
 |  |  |                         { | 
 |  |  |                             // 设置任务状态为出库新建 | 
 |  |  |                             //task.TaskState = (int)TaskOutStatusEnum.SC_OutFinish; | 
 |  |  | 
 |  |  |                             task.NextAddress = item.TargetAddress; | 
 |  |  |                         } | 
 |  |  |                         // 判断任务目标地址和路径是否满足特定条件 | 
 |  |  |                         else if ((task.TargetAddress == "002-071-001" || task.TargetAddress == "001-061-001") && (task.Roadway.Contains("JZ")|| task.Roadway.Contains("CH"))) | 
 |  |  |                         else if (((task.TargetAddress == "002-071-001" || task.TargetAddress == "001-061-001") && (task.Roadway.Contains("JZ")|| task.Roadway.Contains("CH")))|| task.TaskType == (int)TaskOutboundTypeEnum.OutFireAlarm) | 
 |  |  |                         { | 
 |  |  |                             // 设置任务状态为出库新建 | 
 |  |  |                             task.TaskState = (int)TaskOutStatusEnum.OutNew; | 
 |  |  | 
 |  |  |                 var hasTask = await BaseDal.QueryFirstAsync(x => x.PalletCode == palletCode); | 
 |  |  |                 if (hasTask != null) | 
 |  |  |                 { | 
 |  |  |                     return content.OK("当前托盘存在任务"); | 
 |  |  |                     var taskExecuting = BaseDal.QueryFirst(x => x.PalletCode == palletCode && x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting); | 
 |  |  |  | 
 |  |  |                     if (taskExecuting != null) | 
 |  |  |                     { | 
 |  |  |                         taskExecuting.ExceptionMessage = "未接收到线体完成信号系统内部自动完成"; | 
 |  |  |                         Delete(taskExecuting); | 
 |  |  |                     } | 
 |  |  |                     ConsoleHelper.WriteErrorLine($"当前托盘存在任务:【{palletCode}】"); | 
 |  |  |                     QuartzLogger.WriteLogToFile($"任务异常未完成", $"当前托盘存在任务:【{palletCode}】{Environment.NewLine}"); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 var wmsIpAddrss = string.Empty; | 
 |  |  | 
 |  |  |         { | 
 |  |  |             Dt_Task task = null; | 
 |  |  |               task= BaseDal.QueryFirst(x => ((TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew) || (TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish)) && x.CurrentAddress == currentAddress, TaskOrderBy); | 
 |  |  |             if(task == null) | 
 |  |  |             if (task == null) | 
 |  |  |             { | 
 |  |  |                 task= BaseDal.QueryFirst(x => x.Roadway==currentAddress&& x.TaskType== (int)TaskOutboundTypeEnum.TrayInToOut&&x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); | 
 |  |  |                 task = BaseDal.QueryFirst(x => x.Roadway == currentAddress && x.TaskType == (int)TaskOutboundTypeEnum.TrayInToOut && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); | 
 |  |  |             } | 
 |  |  |             return task; | 
 |  |  |         } | 
 |  |  | 
 |  |  |         public Dt_Task QueryExecutingConveyorLineTask(int taskNum, string nextAddress,string Barcode) | 
 |  |  |         { | 
 |  |  |             return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting) && x.PalletCode == Barcode, TaskOrderBy); | 
 |  |  |         } | 
 |  |  |         /// <summary> | 
 |  |  |         /// 根据托盘号、下一地址查询输送线执行中的任务 | 
 |  |  |         /// </summary> | 
 |  |  |         /// <param name="taskNum">任务号</param> | 
 |  |  |         /// <param name="nextAddress">下一地址</param> | 
 |  |  |         /// <returns></returns> | 
 |  |  |         public Dt_Task QueryExecutingConveyorLineTask(string nextAddress, string Barcode) | 
 |  |  |         { | 
 |  |  |             return BaseDal.QueryFirst(x => (x.NextAddress == nextAddress || x.TargetAddress == nextAddress) && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting) && x.PalletCode == Barcode, TaskOrderBy); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         /// <summary> | 
 |  |  | 
 |  |  |                 var wmsIpAddress = wmsBase + completeTask; | 
 |  |  |  | 
 |  |  |                 var result = HttpHelper.GetAsync(wmsIpAddress, keys).Result; | 
 |  |  |                 content = JsonConvert.DeserializeObject<WebResponseContent>(result); | 
 |  |  |                 if (!content.Data.IsNullOrEmpty()) | 
 |  |  |  | 
 |  |  |                 if (result != null) | 
 |  |  |                 { | 
 |  |  |                     if (content.Data.ToString() == "NG") | 
 |  |  |                     content = JsonConvert.DeserializeObject<WebResponseContent>(result); | 
 |  |  |                     if (!content.Data.IsNullOrEmpty()) | 
 |  |  |                     { | 
 |  |  |                         task.Remark = "NG"; | 
 |  |  |                         //BaseDal.UpdateData(task); | 
 |  |  |                         //_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成,MOM返回NG"); | 
 |  |  |                         if (content.Data.ToString() == "NG") | 
 |  |  |                         { | 
 |  |  |                             task.Remark = "NG"; | 
 |  |  |                             //BaseDal.UpdateData(task); | 
 |  |  |                             //_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成,MOM返回NG"); | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 task.ExceptionMessage += "   " + content.Message; | 
 |  |  | 
 |  |  |  | 
 |  |  |                 if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting) | 
 |  |  |                 { | 
 |  |  |                     if (!task.Roadway.Contains("GW")) | 
 |  |  |                     if (task.Roadway.Contains("GW") || (task.Roadway.Contains("JZ") && task.TaskType == (int)TaskOutboundTypeEnum.OutTray)|| (task.Roadway.Contains("CW") && task.TaskType == (int)TaskOutboundTypeEnum.InToOut)) | 
 |  |  |                     { | 
 |  |  |                         task.TaskState = (int)TaskOutStatusEnum.OutFinish; | 
 |  |  |                         //如高温出库后 NG 则将任务标记为NG 并在出库申请后将任务出至NG口 | 
 |  |  |                         if (task.Remark == "NG") | 
 |  |  |                         { | 
 |  |  |                             BaseDal.UpdateData(task); | 
 |  |  |                         } | 
 |  |  |                         else | 
 |  |  |                         { | 
 |  |  |                             BaseDal.DeleteData(task); | 
 |  |  |                             ConsoleHelper.WriteWarningLine($"{(task.Roadway)}出库目的地址{task.TargetAddress}"); | 
 |  |  |                         } | 
 |  |  |  | 
 |  |  |                         var taskHty = task.Adapt<Dt_Task_Hty>(); | 
 |  |  |                         _taskHtyRepository.AddData(taskHty); | 
 |  |  |                         _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成"); | 
 |  |  |                     } | 
 |  |  |                     else | 
 |  |  |                     { | 
 |  |  |  | 
 |  |  |                         var routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress); | 
 |  |  |                         if (!routers.Any()) return WebResponseContent.Instance.Error($"未找到设备路由信息"); | 
 |  |  |  | 
 |  |  | 
 |  |  |  | 
 |  |  |                         _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成"); | 
 |  |  |                     } | 
 |  |  |                     else | 
 |  |  |                     { | 
 |  |  |                         task.TaskState = (int)TaskOutStatusEnum.OutFinish; | 
 |  |  |                         //如高温出库后 NG 则将任务标记为NG 并在出库申请后将任务出至NG口 | 
 |  |  |                         if (task.Remark == "NG") | 
 |  |  |                         { | 
 |  |  |                             BaseDal.UpdateData(task); | 
 |  |  |                         } | 
 |  |  |                         else | 
 |  |  |                         { | 
 |  |  |                             BaseDal.DeleteData(task); | 
 |  |  |                             ConsoleHelper.WriteWarningLine($"高温出库目的地址{task.TargetAddress}"); | 
 |  |  |                         } | 
 |  |  |  | 
 |  |  |                         var taskHty = task.Adapt<Dt_Task_Hty>(); | 
 |  |  |                         _taskHtyRepository.AddData(taskHty); | 
 |  |  |                         _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成"); | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                     //暂不考虑多个出库口 | 
 |  |  |                 } | 
 |  |  |                 else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting) | 
 |  |  | 
 |  |  |             catch (Exception ex) | 
 |  |  |             { | 
 |  |  |                 content = WebResponseContent.Instance.Error($"任务完成异常,任务号:【{taskNum}】"); | 
 |  |  |                 QuartzLogger.WriteLogToFile($"Info_任务完成", $"任务完成异常,任务号:【{taskNum}】异常信息【{ex.Message}】{Environment.NewLine}{Environment.NewLine}"); | 
 |  |  |                 QuartzLogger.WriteLogToFile($"Info_任务完成", $"任务完成异常,任务号:【{taskNum}】异常信息【{ex.StackTrace}】{Environment.NewLine}{Environment.NewLine}"); | 
 |  |  |             } | 
 |  |  |             QuartzLogger.WriteLogToFile($"Info_任务完成", $"任务完成,任务号:【{taskNum}】返回参数【{JsonConvert.SerializeObject(content)}】{Environment.NewLine}{Environment.NewLine}"); | 
 |  |  |             return content; | 
 |  |  | 
 |  |  |             return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.TaskType == (int)TaskRelocationTypeEnum.Relocation && x.TaskState == (int)TaskStatus.Created); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public Dt_Task QueryOutFireAlarmTask(string deviceNo) | 
 |  |  |         { | 
 |  |  |             return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.TaskType == (int)TaskOutboundTypeEnum.OutFireAlarm && x.TaskState == (int)TaskOutStatusEnum.OutNew); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public Dt_Task QueryExecutingTaskByBarcode(string barcode, string nextAddress) | 
 |  |  |         { | 
 |  |  |             return BaseDal.QueryFirst(x => x.PalletCode == barcode && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy); | 
 |  |  | 
 |  |  |             return wcsBasez + address; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public WebResponseContent Delete(Dt_Task task) | 
 |  |  |         { | 
 |  |  |             var taskHty = task.Adapt<Dt_Task_Hty>(); | 
 |  |  |             taskHty.Creater = App.User.UserName != null ? App.User.UserName : "System"; | 
 |  |  |             _taskHtyRepository.AddData(taskHty); | 
 |  |  |             return base.DeleteData(task); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         #region 重写方法 | 
 |  |  |  | 
 |  |  |         public override WebResponseContent DeleteData(object[] key) |