|  |  | 
 |  |  |         private readonly IDt_StationManagerRepository _stationManagerRepository; | 
 |  |  |         private readonly ITask_HtyRepository _htyRepository; | 
 |  |  |         private readonly ISys_ConfigService _sys_ConfigService; | 
 |  |  |         private static List<string>? userTokenIds; | 
 |  |  |         private static List<int>? userIds; | 
 |  |  |  | 
 |  |  |         public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IProcessRepository processRepository, ICacheService cacheService, INoticeService noticeService, IDt_StationManagerRepository stationManagerRepository, ITask_HtyRepository htyRepository, ISys_ConfigService sys_ConfigService) | 
 |  |  |         { | 
 |  |  | 
 |  |  |                                     if (taskNum == 0) | 
 |  |  |                                     { | 
 |  |  |                                         ConsoleHelper.WriteColorLine($"【{commonStackerCrane.DeviceName}】任务号为【{0}】,任务号不一致可以下发任务", ConsoleColor.DarkBlue); | 
 |  |  |  | 
 |  |  |                                         Thread.Sleep(1000); | 
 |  |  |                                         bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand); | 
 |  |  |                                         if (sendFlag) | 
 |  |  |                                         { | 
 |  |  | 
 |  |  |             { | 
 |  |  |                 if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5) | 
 |  |  |                 { | 
 |  |  |                     string str = $"【{commonStackerCrane.DeviceName}】任务完成,任务号:【{e.TaskNum}】"; | 
 |  |  |                     ConsoleHelper.WriteColorLine($"【{commonStackerCrane.DeviceName}】堆垛机作业状态:【{(int)commonStackerCrane.StackerCraneWorkStatusValue}】时间【{DateTime.Now}】", ConsoleColor.Magenta); | 
 |  |  |  | 
 |  |  |                     string str = $"【{commonStackerCrane.DeviceName}】任务完成,任务号:【{e.TaskNum}】时间【{DateTime.Now}】"; | 
 |  |  |                     WriteInfo(commonStackerCrane.DeviceName, str); | 
 |  |  |                     ConsoleHelper.WriteColorLine(str, ConsoleColor.Blue); | 
 |  |  |                     var task = _taskRepository.QueryFirst(x => x.TaskNum == e.TaskNum); | 
 |  |  | 
 |  |  |                     { | 
 |  |  |                         task = _taskRepository.QueryFirst(x => x.TaskNum == e.TaskNum); | 
 |  |  |                         Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress); | 
 |  |  |                         _taskService.UpdateData(newTask); | 
 |  |  |                     } | 
 |  |  |                     if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && (task.TargetAddress == "002-021-001" || task.TargetAddress == "001-021-001")) | 
 |  |  |                     if ((task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && (task.TargetAddress == "002-021-001" || task.TargetAddress == "001-021-001"))|| task.TaskType == (int)TaskOutboundTypeEnum.OutFireAlarm) | 
 |  |  |                     { | 
 |  |  |                         var TASKHTY = task.Adapt<Dt_Task_Hty>(); | 
 |  |  |                         _taskRepository.DeleteData(task); | 
 |  |  |                         _htyRepository.AddData(TASKHTY); | 
 |  |  |                     } | 
 |  |  |                     var isWorkType = commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5); | 
 |  |  |                     str = $"WMS|WCS任务完成:【{content.Status}】,堆垛机完成信号写入:【{isWorkType}】,任务号:【{e.TaskNum}】,托盘号:【{task.PalletCode}】"; | 
 |  |  |                     str = $"{commonStackerCrane.DeviceName}】WMS|WCS任务完成:【{content.Status}】,堆垛机完成信号写入:【{isWorkType}】,任务号:【{e.TaskNum}】时间【{DateTime.Now}】"; | 
 |  |  |                     WriteInfo(commonStackerCrane.DeviceName, str); | 
 |  |  |                     ConsoleHelper.WriteColorLine(str, ConsoleColor.Blue); | 
 |  |  |                 } | 
 |  |  | 
 |  |  |         private Dt_Task? GetTask(CommonStackerCrane commonStackerCrane) | 
 |  |  |         { | 
 |  |  |             Dt_Task task; | 
 |  |  |             task = _taskService.QueryOutFireAlarmTask(commonStackerCrane.DeviceCode); | 
 |  |  |             if (task != null) | 
 |  |  |             { | 
 |  |  |                 return task; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             if (commonStackerCrane.LastTaskType == null) | 
 |  |  |             { | 
 |  |  |                 task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode); | 
 |  |  | 
 |  |  |                 if (occupiedStation == null) | 
 |  |  |                 { | 
 |  |  |                     // 如果当前出库任务站台不允许放货,排除当前任务,查找其他出库任务 | 
 |  |  |                     ConsoleHelper.WriteErrorLine($"任务号:【{task.TaskNum}】出库地址:【{task.NextAddress}】不允许放货"); | 
 |  |  |  | 
 |  |  |                     var log = $"任务号:【{task.TaskNum}】出库地址:【{task.NextAddress}】不允许放货"; | 
 |  |  |                     ConsoleHelper.WriteErrorLine(log); | 
 |  |  |  | 
 |  |  |                     _noticeService.Logs(userTokenIds, new { commonStackerCrane.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); | 
 |  |  |                     WriteInfo(commonStackerCrane.DeviceName, log); | 
 |  |  |  | 
 |  |  |                     task = FindAnotherOutboundTask(commonStackerCrane.DeviceCode, task.TaskId); | 
 |  |  |  | 
 |  |  |                     if (task == null) | 
 |  |  |                     { | 
 |  |  |                         task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 else | 
 |  |  |                 { | 
 |  |  |                     return task; | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |             } | 
 |  |  |             else if (task == null) | 
 |  |  |             { | 
 |  |  |                 task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             return task; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  | 
 |  |  |                 { | 
 |  |  |                     return candidateTask; | 
 |  |  |                 } | 
 |  |  |                 ConsoleHelper.WriteErrorLine($"任务号:【{candidateTask.TaskNum}】出库地址:【{candidateTask.NextAddress}】不允许放货"); | 
 |  |  |                 var log = $"任务号:【{candidateTask.TaskNum}】出库地址:【{candidateTask.NextAddress}】不允许放货"; | 
 |  |  |                 ConsoleHelper.WriteErrorLine(log); | 
 |  |  |  | 
 |  |  |                 _noticeService.Logs(userTokenIds, new { deviceCode, log = log, time = DateTime.Now.ToString("G"), color = "red" }); | 
 |  |  |                 WriteInfo(deviceCode, log); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             return null; | 
 |  |  | 
 |  |  |             } | 
 |  |  |             else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) | 
 |  |  |             { | 
 |  |  |                 if (task.Roadway.Contains("GW")) | 
 |  |  |                 if (task.Roadway.Contains("GW")|| task.TaskType == (int)TaskOutboundTypeEnum.OutFireAlarm) | 
 |  |  |                 { | 
 |  |  |                     string[] endCodes = task.NextAddress.Split("-"); | 
 |  |  |                     stackerCraneTaskCommand.EndRow = Convert.ToInt16(endCodes[0]); | 
 |  |  | 
 |  |  |                 } | 
 |  |  |                 else | 
 |  |  |                 { | 
 |  |  |                     if (task.TargetAddress == "002-021-001" && task.Roadway.Contains("JZ") && task.TaskType == (int)TaskOutboundTypeEnum.OutTray) | 
 |  |  |                     if (((task.TargetAddress == "002-021-001" || task.TargetAddress == "001-021-001") && task.Roadway.Contains("JZ")) || task.TaskType == (int)TaskOutboundTypeEnum.OutFireAlarm) | 
 |  |  |                     { | 
 |  |  |                         string[] endCodes = task.NextAddress.Split("-"); | 
 |  |  |                         stackerCraneTaskCommand.EndRow = Convert.ToInt16(endCodes[0]); |