using Masuit.Tools; 
 | 
using Masuit.Tools.Systems; 
 | 
using Newtonsoft.Json; 
 | 
using System.Threading.Tasks; 
 | 
using WIDESEAWCS_Common; 
 | 
using WIDESEAWCS_Common.TaskEnum; 
 | 
using WIDESEAWCS_Core; 
 | 
using WIDESEAWCS_Core.Helper; 
 | 
using WIDESEAWCS_DTO.MOM; 
 | 
using WIDESEAWCS_DTO.TaskInfo; 
 | 
using WIDESEAWCS_DTO.WMS; 
 | 
using WIDESEAWCS_Model.Models; 
 | 
using WIDESEAWCS_QuartzJob; 
 | 
using WIDESEAWCS_QuartzJob.DeviceBase; 
 | 
using WIDESEAWCS_Tasks.ConveyorLineJob; 
 | 
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database; 
 | 
  
 | 
namespace WIDESEAWCS_Tasks 
 | 
{ 
 | 
    public partial class CommonConveyorLine_GWJob 
 | 
    { 
 | 
        /// <summary> 
 | 
        /// 处理出库任务 
 | 
        /// </summary> 
 | 
        private void HandleTaskOut(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, int ProtocalDetailValue, Dt_Task taskOut) 
 | 
        { 
 | 
            if (taskOut == null) return; 
 | 
  
 | 
            var taskCommand = MapTaskCommand(taskOut, command); 
 | 
  
 | 
            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) 
 | 
            { 
 | 
                conveyorLine.SendCommand(taskCommand, childDeviceCode); 
 | 
                //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.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode); 
 | 
                _taskService.UpdateTaskStatusToNext(taskOut); 
 | 
            } 
 | 
            else if (taskOut.TaskType == (int)TaskOutboundTypeEnum.OutTray && taskOut.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting) 
 | 
            { 
 | 
                CompleteWmsTask(taskOut, command, conveyorLine, childDeviceCode, ProtocalDetailValue); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 处理新任务 
 | 
        /// </summary> 
 | 
        private void HandleNewTask(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) 
 | 
        { 
 | 
            Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationPLC == conveyorLine.DeviceCode && x.stationChildCode == childDeviceCode); 
 | 
  
 | 
            if (stationManager == null) 
 | 
            { 
 | 
                // Handle the case where stationManager is not found, if necessary 
 | 
                Console.WriteLine($"未找到{childDeviceCode}站台"); 
 | 
                return; 
 | 
            } 
 | 
  
 | 
            // 根据站类型执行相应的方法 
 | 
            switch (stationManager.stationType) 
 | 
            { 
 | 
                case 8: 
 | 
                case 9: 
 | 
                case 11: 
 | 
                case 12: 
 | 
                    var task = _taskService.QueryExecutingTaskByBarcode(command.ConveyorLineBarcode, childDeviceCode); 
 | 
                    if (task != null) 
 | 
                    { 
 | 
                        ExecuteStationAction(stationManager, conveyorLine, command, childDeviceCode); 
 | 
                    } 
 | 
                    break; 
 | 
                case 1: 
 | 
                case 6: 
 | 
                case 10: 
 | 
                    ExecuteStationAction(stationManager, conveyorLine, command, childDeviceCode); 
 | 
                    break; 
 | 
            } 
 | 
  
 | 
            #region 
 | 
            //Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationPLC == conveyorLine.DeviceCode && x.stationChildCode == childDeviceCode); 
 | 
  
 | 
            //if (stationManager.stationType == 8) 
 | 
            //{ 
 | 
            //    var task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode); 
 | 
            //    if (task != null) 
 | 
            //    { 
 | 
            //        RequestInNextAddress(conveyorLine, command, childDeviceCode); 
 | 
            //    } 
 | 
            //} 
 | 
            //else if (stationManager.stationType == 9) 
 | 
            //{ 
 | 
            //    var task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode); 
 | 
            //    if (task != null) 
 | 
            //    { 
 | 
            //        ConveyorLineInFinish(conveyorLine, command, childDeviceCode); 
 | 
            //    } 
 | 
            //} 
 | 
            //else if (stationManager.stationType == 1) 
 | 
            //{ 
 | 
            //    if (stationManager.stationArea.Contains("GW")) 
 | 
            //    { 
 | 
            //        var taskGW = _taskRepository.QueryFirst(x => x.TargetAddress == childDeviceCode && x.TaskState == (int)TaskOutStatusEnum.OutFinish); 
 | 
            //        if (taskGW != null) 
 | 
            //        { 
 | 
            //            command.ConveyorLineBarcode = taskGW.PalletCode; 
 | 
            //        } 
 | 
            //    } 
 | 
            //    RequestWmsTask(conveyorLine, command, childDeviceCode); 
 | 
            //} 
 | 
            //else if (stationManager.stationType == 10) 
 | 
            //{ 
 | 
            //    var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); 
 | 
            //    if (task != null) 
 | 
            //    { 
 | 
            //        RequestOutbound(conveyorLine, command, childDeviceCode); 
 | 
            //    } 
 | 
            //} 
 | 
            //else if (stationManager.stationType == 11) 
 | 
            //{ 
 | 
            //    var task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode); 
 | 
            //    if (task != null) 
 | 
            //    { 
 | 
            //        RequestOutNextAddress(conveyorLine, command, childDeviceCode); 
 | 
            //    } 
 | 
            //} 
 | 
            //else if (stationManager.stationType == 12) 
 | 
            //{ 
 | 
            //    var task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode); 
 | 
            //    if (task != null) 
 | 
            //    { 
 | 
            //        ConveyorLineOutFinish(conveyorLine, command, childDeviceCode); 
 | 
            //    } 
 | 
            //} 
 | 
            #endregion 
 | 
        } 
 | 
  
 | 
        private void ExecuteStationAction(Dt_StationManager stationManager, CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) 
 | 
        { 
 | 
            switch (stationManager.stationType) 
 | 
            { 
 | 
                case 8: 
 | 
                    RequestInNextAddress(conveyorLine, command, childDeviceCode); 
 | 
                    break; 
 | 
  
 | 
                case 9: 
 | 
                    ConveyorLineInFinish(conveyorLine, command, childDeviceCode); 
 | 
                    break; 
 | 
  
 | 
                case 10: 
 | 
                    RequestOutbound(conveyorLine, command, childDeviceCode); 
 | 
                    break; 
 | 
  
 | 
                case 11: 
 | 
                    RequestOutNextAddress(conveyorLine, command, childDeviceCode); 
 | 
                    break; 
 | 
  
 | 
                case 12: 
 | 
                    ConveyorLineOutFinish(conveyorLine, command, childDeviceCode); 
 | 
                    break; 
 | 
  
 | 
                case 6: 
 | 
                    CreateAndSendEmptyTrayTask(conveyorLine, command, childDeviceCode); 
 | 
                    break; 
 | 
                case 16: 
 | 
                    AbNormalStationBZTask(conveyorLine, command, childDeviceCode); 
 | 
                    break; 
 | 
                case 1: 
 | 
                    RequestWmsTask(conveyorLine, command, childDeviceCode, stationManager); 
 | 
                    break; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 映射任务命令 
 | 
        /// </summary> 
 | 
        private ConveyorLineTaskCommand_After MapTaskCommand(Dt_Task task, ConveyorLineTaskCommand_After command) 
 | 
        { 
 | 
            var comm = _mapper.Map<ConveyorLineTaskCommand_After>(task); 
 | 
            comm.ResponState = 1; 
 | 
            comm.InteractiveSignal = command.InteractiveSignal; 
 | 
            return comm; 
 | 
        } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 完成WMS任务 
 | 
        /// </summary> 
 | 
        private void CompleteWmsTask(Dt_Task taskOut, ConveyorLineTaskCommand_After command, CommonConveyorLine_GW conveyorLine, string childDeviceCode, int ProtocalDetailValue) 
 | 
        { 
 | 
            if (command.ConveyorLineBarcode == "NoRead") 
 | 
            { 
 | 
                var NGAddress = _platFormRepository.QueryFirst(x => x.PlatCode == taskOut.TargetAddress).Capacity; 
 | 
                taskOut.TargetAddress = NGAddress.ToString(); 
 | 
            } 
 | 
  
 | 
            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) 
 | 
            { 
 | 
                _taskService.UpdateTaskStatusToNext(taskOut); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 创建并发送空托盘任务 
 | 
        /// </summary> 
 | 
        public void CreateAndSendEmptyTrayTask(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) 
 | 
        { 
 | 
            if (command.ConveyorLineBarcode != "NoRead") 
 | 
            { 
 | 
                #region 
 | 
                //var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); 
 | 
                //var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.MOMIP_BASE)?.ConfigValue; 
 | 
                //var ipAddress = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.TrayCellsStatus)?.ConfigValue; 
 | 
                //if (wmsBase == null || ipAddress == null) 
 | 
                //{ 
 | 
                //    throw new InvalidOperationException("MOM IP 未配置"); 
 | 
                //} 
 | 
                //var stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == childDeviceCode); 
 | 
                //TrayCellsStatusDto trayCells = new TrayCellsStatusDto() 
 | 
                //{ 
 | 
                //    Software = "WMS", 
 | 
                //    TrayBarcode = command.ConveyorLineBarcode, 
 | 
                //    EquipmentCode = stationManager.stationEquipMOM, 
 | 
                //    SessionId = Guid.NewGuid().ToString(), 
 | 
                //    EmployeeNo = "MITest", 
 | 
                //    SceneType = "4", 
 | 
                //    RequestTime = TimeZoneInfo.ConvertTimeToUtc(DateTime.Now).ToString("yyyy-MM-ddTHH:mm:ss.fffZ") 
 | 
                //}; 
 | 
  
 | 
                //var MOMIpAddress = wmsBase + ipAddress; 
 | 
  
 | 
                //var result = HttpHelper.PostAsync(MOMIpAddress, trayCells.ToJsonString()).Result; 
 | 
                //WriteInfo("入站校验", $"【{stationManager.stationChildCode}】入站校验请求参数【{trayCells.ToJsonString()}】"); 
 | 
                //WriteInfo("入站校验", ""); 
 | 
                //WriteInfo("入站校验", $"【{stationManager.stationChildCode}】入站校验返回参数【{result}】"); 
 | 
                //ResultTrayCellsStatus result1 = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(result); 
 | 
  
 | 
                //if (result1.Success) 
 | 
                //{ 
 | 
                //    var serialNosError = result1.SerialNos.Where(x => x.SerialNoStatus != 1 && x.SerialNoStatus != 4).ToList(); 
 | 
                //    if (serialNosError.Count > 0) 
 | 
                //    { 
 | 
                //        if (result1.ProcessCode == "AG01") 
 | 
                //        { 
 | 
                //            var strings = new List<string>() { "2234", "2226", "2218" }; 
 | 
                //            foreach (var item in strings) 
 | 
                //            { 
 | 
                //                var station = _stationManagerRepository.QueryFirst(x => x.productLine == result1.ProductionLine && x.stationChildCode == item); 
 | 
                //                if (station != null) 
 | 
                //                { 
 | 
                //                    IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == station.stationPLC); 
 | 
                //                    if (device != null) 
 | 
                //                    { 
 | 
                //                        CommonConveyorLine_After CommonConveyorLine_After = (CommonConveyorLine_After)device; 
 | 
  
 | 
                //                        ConveyorLineTaskCommand_After taskCommand = new ConveyorLineTaskCommand_After() 
 | 
                //                        { 
 | 
                //                            ConveyorLineTaskNum = Convert.ToInt32(1), 
 | 
                //                            ConveyorLineTargetAddress = Convert.ToInt16(2234), 
 | 
                //                            ConveyorLineBarcode = command.ConveyorLineBarcode.ToString(), 
 | 
                //                        }; 
 | 
                //                        CommonConveyorLine_After.SendCommand(taskCommand, station.stationChildCode); 
 | 
                //                        CommonConveyorLine_After.SetValue(ConveyorLineDBName_After.ResponState, 1, station.stationChildCode); 
 | 
                //                    } 
 | 
                //                    //发送到分容 
 | 
                //                    return; 
 | 
                //                } 
 | 
                //            } 
 | 
                //        } 
 | 
                //    } 
 | 
                //    else 
 | 
                //    { 
 | 
                //        var strings = new List<string>() { "2142", "2094", "2046" }; 
 | 
  
 | 
                //        foreach (var item in strings) 
 | 
                //        { 
 | 
                //            var station = _stationManagerRepository.QueryFirst(x => x.productLine == result1.ProductionLine && x.stationChildCode == item); 
 | 
                //            if (station != null) 
 | 
                //            { 
 | 
                //                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == station.stationPLC); 
 | 
                //                if (device != null) 
 | 
                //                { 
 | 
                //                    CommonConveyorLine_After CommonConveyorLine_After = (CommonConveyorLine_After)device; 
 | 
                //                    ConveyorLineTaskCommand_After conveyorLineAfter = CommonConveyorLine_After.ReadCustomer<ConveyorLineTaskCommand_After>(Convert.ToInt32(station.stationChildCode).ToString()); 
 | 
                //                    if (conveyorLineAfter.InteractiveSignal == 16) 
 | 
                //                    { 
 | 
                //                        var TaskNum = SnowFlake.LongId; 
 | 
                //                        Dt_Task task = new Dt_Task() 
 | 
                //                        { 
 | 
                //                            TaskNum = _taskRepository.GetTaskNo().Result, 
 | 
                //                            Grade = 1, 
 | 
                //                            PalletCode = command.ConveyorLineBarcode, 
 | 
                //                            Roadway = station.Roadway, 
 | 
                //                            SourceAddress = childDeviceCode, 
 | 
                //                            TargetAddress = station.stationChildCode, 
 | 
                //                            CurrentAddress = childDeviceCode, 
 | 
                //                            NextAddress = station.stationChildCode, 
 | 
                //                            TaskState = (int)TaskInStatusEnum.InNew, 
 | 
                //                            ExceptionMessage = "", 
 | 
                //                            TaskId = 0, 
 | 
                //                            TaskType = (int)TaskInboundTypeEnum.InTray, 
 | 
                //                            ProductionLine = result1.ProductionLine, 
 | 
                //                        }; 
 | 
                //                        _taskRepository.AddData(task); 
 | 
                //                        ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task); 
 | 
                //                        conveyorLine.SendCommand(taskCommand, childDeviceCode); 
 | 
                //                        conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode); 
 | 
                //                        _taskService.UpdateTaskStatusToNext(task); 
 | 
                //                    } 
 | 
                //                } 
 | 
                //                //发送到分容 
 | 
                //                return; 
 | 
                //            } 
 | 
                //        } 
 | 
                //        var taskDTO = CreateEmptyTrayTaskDto(command.ConveyorLineBarcode, childDeviceCode); 
 | 
  
 | 
                //        if (_taskRepository.QueryFirst(x => x.PalletCode == taskDTO.PalletCode) != null) 
 | 
                //        { 
 | 
                //            WriteInfo(conveyorLine.DeviceName, "当前托盘存在任务"); 
 | 
                //            return; 
 | 
                //        } 
 | 
  
 | 
                //        var content = CreateAndSendTask(taskDTO); 
 | 
                //        if (content.Status) 
 | 
                //        { 
 | 
                //            var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); 
 | 
                //            if (task != null) 
 | 
                //            { 
 | 
                //                var taskCommand = MapTaskCommand(task, command); 
 | 
                //                conveyorLine.SendCommand(taskCommand, childDeviceCode); 
 | 
                //                _taskService.UpdateTaskStatusToNext(task); 
 | 
                //            } 
 | 
                //        } 
 | 
                //    } 
 | 
  
 | 
                //} 
 | 
                //else 
 | 
                //{ 
 | 
                //    ConsoleHelper.WriteErrorLine(result1.MOMMessage); 
 | 
                //} 
 | 
                #endregion 
 | 
  
 | 
                if (_taskRepository.QueryFirst(x => x.PalletCode == command.ConveyorLineBarcode) != null) 
 | 
                { 
 | 
                    List<string> strings = new List<string>() { "3637", "3633", "3629" }; 
 | 
  
 | 
                    var taskExecuting = _taskRepository.QueryFirst(x => x.PalletCode == command.ConveyorLineBarcode && x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting && strings.Contains(x.TargetAddress)); 
 | 
  
 | 
                    if (taskExecuting != null) 
 | 
                    { 
 | 
                        taskExecuting.ExceptionMessage = "未接收到线体完成信号系统内部自动完成"; 
 | 
                        _taskService.Delete(taskExecuting); 
 | 
                    } 
 | 
  
 | 
                    ConsoleHelper.WriteErrorLine($"当前托盘存在任务:【{command.ConveyorLineBarcode}】"); 
 | 
  
 | 
                    WriteInfo(conveyorLine.DeviceName, $"当前托盘存在任务{command.ConveyorLineBarcode}"); 
 | 
                    return; 
 | 
                } 
 | 
  
 | 
  
 | 
                var taskDTO = CreateEmptyTrayTaskDto(command.ConveyorLineBarcode, childDeviceCode); 
 | 
  
 | 
  
 | 
                var content = CreateAndSendTask(taskDTO); 
 | 
                if (content.Status) 
 | 
                { 
 | 
                    var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode, command.ConveyorLineBarcode); 
 | 
                    if (task != null) 
 | 
                    { 
 | 
                        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); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 创建空托盘任务DTO 
 | 
        /// </summary> 
 | 
        private WMSTaskDTO CreateEmptyTrayTaskDto(string barcode, string childDeviceCode) 
 | 
        { 
 | 
            var request = new RequestTaskDto() 
 | 
            { 
 | 
                Position = childDeviceCode, 
 | 
                PalletCode = barcode, 
 | 
            }; 
 | 
  
 | 
            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 new WMSTaskDTO(); 
 | 
  
 | 
            return JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString()); 
 | 
        } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 请求WMS任务 
 | 
        /// </summary> 
 | 
        private async void RequestWmsTask(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, Dt_StationManager stationManager) 
 | 
        { 
 | 
            if (command.ConveyorLineBarcode.IsNullOrEmpty()) return; 
 | 
  
 | 
            var Hastask = _taskService.QueryBarCodeConveyorLineTask(command.ConveyorLineBarcode, childDeviceCode); 
 | 
            if (Hastask != null) 
 | 
            { 
 | 
                conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTaskNum, (long)Hastask.TaskNum, childDeviceCode); 
 | 
                conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, Hastask.NextAddress, childDeviceCode); 
 | 
                conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineBarcode, Hastask.PalletCode, childDeviceCode); 
 | 
                conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode); 
 | 
                return; 
 | 
            } 
 | 
  
 | 
            var content = await _taskService.RequestWMSTask(command.ConveyorLineBarcode, childDeviceCode); 
 | 
            if (content.Status) 
 | 
            { 
 | 
                var task = _taskService.QueryBarCodeConveyorLineTask(command.ConveyorLineBarcode, childDeviceCode); 
 | 
                if (task != null) 
 | 
                { 
 | 
                    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); 
 | 
                } 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
                if (content.Message != "请求过于频繁,请稍后再试" && content.Message != "无法获取目标地址") 
 | 
                { 
 | 
                    WriteInfo(conveyorLine.DeviceName, content.Message); 
 | 
                    conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, stationManager.stationNGChildCode, childDeviceCode); 
 | 
                    conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode); 
 | 
                    ConsoleHelper.WriteErrorLine($"【{conveyorLine.DeviceName}】托盘号:【{command.ConveyorLineBarcode}】请求点位:【{childDeviceCode}】异常信息【{content.Message}】"); 
 | 
                } 
 | 
                ConsoleHelper.WriteErrorLine($"【{conveyorLine.DeviceName}】托盘号:【{command.ConveyorLineBarcode}】请求点位:【{childDeviceCode}】异常信息【{content.Message}】"); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 高温出库后任务完成 如果任务标识NG则将任务改为异常排出任务 
 | 
        /// </summary> 
 | 
        /// <param name="conveyorLine"></param> 
 | 
        /// <param name="command"></param> 
 | 
        /// <param name="childDeviceCode"></param> 
 | 
        /// <param name="task"></param> 
 | 
        /// <exception cref="Exception"></exception> 
 | 
        private void CreateAbNormalOutbound(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, Dt_Task task) 
 | 
        { 
 | 
            Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == childDeviceCode); 
 | 
  
 | 
            if (stationManager == null || string.IsNullOrWhiteSpace(stationManager.stationNGChildCode) || string.IsNullOrWhiteSpace(stationManager.stationNGLocation)) 
 | 
            { 
 | 
                throw new Exception("未配置站台的对应NG口信息"); 
 | 
            } 
 | 
  
 | 
            task.SourceAddress = task.TargetAddress; 
 | 
            task.TargetAddress = stationManager.stationNGLocation; 
 | 
            task.TaskState = (int)TaskOutStatusEnum.OutNew; 
 | 
            task.TaskType = (int)TaskOutboundTypeEnum.InToOut; 
 | 
            task.Grade = 10;    //此处 出库至异常排出口的任务应除火警外最优先执行 
 | 
  
 | 
            _taskRepository.UpdateData(task); 
 | 
            //Dt_Task task= _taskRepository.QueryFirst(x=>) 
 | 
            //_taskRepository.QueryFirst() 
 | 
        } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 包装异常排出口逻辑 
 | 
        /// </summary> 
 | 
        /// <param name="conveyorLine"></param> 
 | 
        /// <param name="command"></param> 
 | 
        /// <param name="childDeviceCode"></param> 
 | 
        private void AbNormalStationBZTask(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) 
 | 
        { 
 | 
            Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == childDeviceCode && x.stationPLC == conveyorLine.DeviceCode); 
 | 
  
 | 
            if (command.ConveyorLineBarcode.IsNullOrEmpty()) 
 | 
            { 
 | 
                conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 2, childDeviceCode); 
 | 
                return; 
 | 
            } 
 | 
  
 | 
  
 | 
            if (conveyorLine.ReadValue(ConveyorLineDBName_After.InteractiveSignal, childDeviceCode).ObjToInt() == 0) //托盘正反信号 
 | 
            { 
 | 
  
 | 
            }; 
 | 
  
 | 
            conveyorLine.ReadValue(ConveyorLineDBName_After.InteractiveSignal, childDeviceCode);  //托盘有无电芯信号 
 | 
  
 | 
  
 | 
  
 | 
        } 
 | 
  
 | 
    } 
 | 
} 
 |