刘磊
2024-11-23 222d2040c2a5e958b5fbd0b7047a8e802ec14288
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_After/CommonConveyorLine_AfterJob.cs
@@ -27,6 +27,8 @@
using System.Diagnostics.CodeAnalysis;
using System.Reflection;
using System.Threading.Tasks;
using WIDESEAWCS_BasicInfoRepository;
using WIDESEAWCS_BasicInfoService;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
@@ -50,14 +52,16 @@
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly IRouterService _routerService;
        private readonly IMapper _mapper;
        private readonly IDt_StationManagerService _stationManagerService;
        public CommonConveyorLine_AfterJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, ITaskRepository taskRepository)
        public CommonConveyorLine_AfterJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, ITaskRepository taskRepository, IDt_StationManagerService stationManagerService)
        {
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _routerService = routerService;
            _mapper = mapper;
            _taskRepository = taskRepository;
            _stationManagerService = stationManagerService;
        }
        public Task Execute(IJobExecutionContext context)
@@ -67,13 +71,10 @@
                CommonConveyorLine_After conveyorLine = (CommonConveyorLine_After)context.JobDetail.JobDataMap.Get("JobParams");
                if (conveyorLine != null)
                {
                    List<string> childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode);
                    //List<Task> tasks = new List<Task>();
                    foreach (string childDeviceCode in childDeviceCodes)
                    List<Dt_StationManager> stationManagers = _stationManagerService.GetAllStationByDeviceCode(conveyorLine.DeviceCode);
                    foreach (var station in stationManagers)
                    {
                        ConveyorLineTaskCommand_After command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand_After>(childDeviceCode);
                        if (command.ConveyorLineBarcode.Trim().Contains("\0")) command.ConveyorLineBarcode = "";
                        ConveyorLineTaskCommand_After command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand_After>(station.stationChildCode);
                        DeviceProtocolDetailDTO? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(ConveyorLineTaskCommand_After.InteractiveSignal) && x.ProtocalDetailValue == command.InteractiveSignal.ToString());
                        if (deviceProtocolDetails != null)
@@ -81,16 +82,35 @@
                            MethodInfo? method = GetType().GetMethod(deviceProtocolDetails.ProtocolDetailType);
                            if (method != null)
                            {
                                method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode });
                                method.Invoke(this, new object[] { conveyorLine, command, station });
                            }
                        }
                    }
                    //Task.WaitAll(tasks.ToArray());
                    #region 路由方式
                    //List<string> childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode);
                    //foreach (string childDeviceCode in childDeviceCodes)
                    //{
                    //    ConveyorLineTaskCommand_After command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand_After>(childDeviceCode);
                    //    if (command.ConveyorLineBarcode.Trim().Contains("\0")) command.ConveyorLineBarcode = "";
                    //    DeviceProtocolDetailDTO? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(ConveyorLineTaskCommand_After.InteractiveSignal) && x.ProtocalDetailValue == command.InteractiveSignal.ToString());
                    //    if (deviceProtocolDetails != null)
                    //    {
                    //        MethodInfo? method = GetType().GetMethod(deviceProtocolDetails.ProtocolDetailType);
                    //        if (method != null)
                    //        {
                    //            method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode });
                    //        }
                    //    }
                    //}
                    #endregion
                }
            }
            catch (Exception ex)
            {
                Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString());
                Console.Out.WriteLine(nameof(CommonConveyorLine_AfterJob) + ":" + ex.ToString());
            }
            finally
            {
@@ -106,597 +126,66 @@
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        /// <param name="ProtocalDetailValue">线体当前bool读取偏移地址</param>
        public void RequestInbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
        public void RequestInbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, Dt_StationManager stationInfo)
        {
            var taskNew = _taskService.QueryCraneConveyorLineTask(command.ConveyorLineTaskNum.ObjToInt(), childDeviceCode);
            var taskNew = _taskService.QueryTaskByPalletCode(command.ConveyorLineBarcode, stationInfo.Roadway);
            if (taskNew == null)
            {
                string barcode = command.ConveyorLineBarcode.TrimEnd();
                if (_taskService.RequestWMSTask(command.ConveyorLineBarcode, childDeviceCode).Status)
                if (_taskService.RequestTask(command.ConveyorLineBarcode, stationInfo).Result.Status)
                {
                    Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
                    Dt_Task task = _taskService.QueryTaskByPalletCode(command.ConveyorLineBarcode, stationInfo.Roadway);
                    if (task != null)
                    {
                        ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
                        //ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
                        //taskCommand.InteractiveSignal = command.InteractiveSignal;
                        taskCommand.ResponState = 1;
                        taskCommand.ConveyorLineTaskNum = task.TaskNum;
                        taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(task.NextAddress);
                        conveyorLine.SendCommand(taskCommand, childDeviceCode);
                        //taskCommand.ResponState = 1;
                        //taskCommand.ConveyorLineTaskNum = task.TaskNum;
                        //taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(task.NextAddress);
                        conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, stationInfo.stationChildCode);
                        //conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, 1, task.NextAddress);
                        //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
                        _taskService.UpdateTaskStatusToNext(task);
                    }
                }
            }
            var inTask = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum.ObjToInt(), childDeviceCode);
            if (inTask != null)
            {
                ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(inTask);
                //taskCommand.InteractiveSignal = command.InteractiveSignal;
                taskCommand.ResponState = 1;
                conveyorLine.SendCommand(taskCommand, childDeviceCode);
                _taskService.UpdateTaskStatusToNext(inTask);
            }
        }
        /// <summary>
        /// 输送线请求入库下一地址
        /// 输送线请求入库
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        public void RequestInNextAddress(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
        {
            //if(command)
            Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode);
            if (task != null)
            {
                Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress);
                if (newTask != null)
                {
                    ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(newTask);
                    //taskCommand.InteractiveSignal = command.InteractiveSignal;
                    conveyorLine.SendCommand(taskCommand, childDeviceCode);
                }
            }
        }
        //public void RequestInbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
        //{
        //    var stationInfo = _stationManagerService.GetStationInfoByChildCode(childDeviceCode);
        //    if (stationInfo != null)
        //    {
        //        //_taskService.r
        //    }
        //    var taskNew = _taskService.QueryCraneConveyorLineTask(command.ConveyorLineTaskNum.ObjToInt(), childDeviceCode);
        //    if (taskNew == null)
        //    {
        //        string barcode = command.ConveyorLineBarcode.TrimEnd();
        //        if (_taskService.RequestWMSTask(command.ConveyorLineBarcode, childDeviceCode).Result.Status)
        //        {
        //            Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
        //            if (task != null)
        //            {
        //                ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
        //                //taskCommand.InteractiveSignal = command.InteractiveSignal;
        //                taskCommand.ResponState = 1;
        //                taskCommand.ConveyorLineTaskNum = task.TaskNum;
        //                taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(task.NextAddress);
        //                conveyorLine.SendCommand(taskCommand, childDeviceCode);
        /// <summary>
        /// 输送线入库完成
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        /// <param name="ProtocalDetailValue">线体当前bool读取偏移地址</param>
        public void ConveyorLineInFinish(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
        {
            Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode);
            if (task != null && task.TaskState != (int)TaskInStatusEnum.Line_InFinish)
            {
                //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
        //                //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
                //conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode);
                WebResponseContent content = _taskService.UpdateTaskStatusToNext(task);
                Console.Out.WriteLine(content.Serialize());
            }
        }
        //                _taskService.UpdateTaskStatusToNext(task);
        //            }
        //        }
        //    }
        //}
        /// <summary>
        /// 输送线请求出信息
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        public void RequestOutbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
        {
            Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
            if (task != null)
            {
                // ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
                //taskCommand.InteractiveSignal = command.InteractiveSignal;
                // conveyorLine.SendCommand(taskCommand, childDeviceCode);
                _taskService.UpdateTaskStatusToNext(task);
            }
        }
        /// <summary>
        /// 输送线请求出库下一地址
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        public void RequestOutNextAddress(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
        {
            Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode);
            if (task != null)
            {
                Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress);
                if (newTask != null)
                {
                    ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(newTask);
                    //taskCommand.InteractiveSignal = command.InteractiveSignal;
                    conveyorLine.SendCommand(taskCommand, childDeviceCode);
                }
            }
        }
        /// <summary>
        /// 输送线出库完成
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        public void ConveyorLineOutFinish(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
        {
            Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode);
            if (task != null)
            {
                conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode);
                WebResponseContent content = _taskService.UpdateTaskStatusToNext(task);
                Console.Out.WriteLine(content.Serialize());
            }
        }
        /// <summary>
        /// 输送线交互完成
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="childDeviceCode">子设备编号</param>
        /// <param name="ProtocalDetailValue">线体当前bool读取偏移地址</param>
        /// <param name="value">值</param>
        public void ConveyorLineSendFinish(CommonConveyorLine_After conveyorLine, string childDeviceCode, int ProtocalDetailValue, 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);
        }
    }
}
#endregion
#region MyRegion
//using AutoMapper;
//using HslCommunication;
//using Newtonsoft.Json;
//using Quartz;
//using SqlSugar;
//using System.Reflection;
//using WIDESEAWCS_Common.TaskEnum;
//using WIDESEAWCS_Core;
//using WIDESEAWCS_Core.Helper;
//using WIDESEAWCS_DTO.TaskInfo;
//using WIDESEAWCS_ITaskInfoRepository;
//using WIDESEAWCS_ITaskInfoService;
//using WIDESEAWCS_Model.Models;
//using WIDESEAWCS_QuartzJob;
//using WIDESEAWCS_QuartzJob.DeviceBase;
//using WIDESEAWCS_QuartzJob.DTO;
//using WIDESEAWCS_QuartzJob.Service;
//using WIDESEAWCS_Tasks.ConveyorLineJob;
//namespace WIDESEAWCS_Tasks
//{
//    [DisallowConcurrentExecution]
//    public class CommonConveyorLine_AfterJob : JobBase, IJob
//    {
//        private readonly List<string> _deviceCodes1 = new List<string>() { "1063", "1061", "1060" };
//        private readonly List<string> _deviceCodes2 = new List<string>() { "1067", "1069", "1068" };
//        private readonly string[] HCTrayCode = { "1012", "1013" };
//        private readonly ITaskService _taskService;
//        private readonly ITaskRepository _taskRepository;
//        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
//        private readonly IRouterService _routerService;
//        private readonly IMapper _mapper;
//        public CommonConveyorLine_AfterJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, ITaskRepository taskRepository)
//        {
//            _taskService = taskService;
//            _taskExecuteDetailService = taskExecuteDetailService;
//            _routerService = routerService;
//            _mapper = mapper;
//            _taskRepository = taskRepository;
//        }
//        public Task Execute(IJobExecutionContext context)
//        {
//            try
//            {
//                CommonConveyorLine_After conveyorLine = (CommonConveyorLine_After)context.JobDetail.JobDataMap.Get("JobParams");
//                if (conveyorLine != null)
//                {
//                    List<string> childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode);
//                    List<Task> tasks = new List<Task>();
//                    foreach (string childDeviceCode in childDeviceCodes)
//                    {
//                        //Task task = Task.Run(() =>
//                        //{
//                        ConveyorLineTaskCommand_After command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand_After>(childDeviceCode);
//                        if (command != null)
//                        {
//                            var structs = BitConverter.GetBytes(command.InteractiveSignal).Reverse().ToArray().ToBoolArray();
//                            List<DeviceProtocolDetailDTO>? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.Where(x => x.DeviceProParamName == nameof(ConveyorLineTaskCommand_After.InteractiveSignal)).ToList();
//                            if (deviceProtocolDetails != null)
//                            {
//                                foreach (var item in deviceProtocolDetails)
//                                {
//                                    var outDeviceCodes = _routerService.QueryOutDeviceCodes(conveyorLine.DeviceCode);
//                                    if (structs[item.ProtocalDetailValue.ObjToInt()] == true)
//                                    {
//                                        MethodInfo? method = GetType().GetMethod(item.ProtocolDetailType);
//                                        if (method != null)
//                                        {
//                                            method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode, item.ProtocalDetailValue.ObjToInt() });
//                                        }
//                                    }
//                                    else
//                                    {
//                                        //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] = (item.ProtocalDetailValue.ObjToInt() + 1).ToString();
//                                        //string DeviceProAddress = string.Join(".", x);
//                                        //var writeRead = conveyorLine.Communicator.Read<bool>(DeviceProAddress);
//                                        //if (writeRead)
//                                        //{
//                                        //    ConveyorLineSendFinish(conveyorLine, childDeviceCode, item.ProtocalDetailValue.ObjToInt(), false);
//                                        //}
//                                    }
//                                }
//                            }
//                        }
//                        //});
//                        //tasks.Add(task);
//                    }
//                    Task.WaitAll(tasks.ToArray());
//                }
//            }
//            catch (Exception ex)
//            {
//                Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString());
//            }
//            finally
//            {
//                //WriteDebug("CommonConveyorLineJob", "test");
//                //Console.Out.WriteLine(DateTime.Now);
//            }
//            return Task.CompletedTask;
//        }
//        /// <summary>
//        /// 输送线请求入库
//        /// </summary>
//        /// <param name="conveyorLine">输送线实例对象</param>
//        /// <param name="command">读取的请求信息</param>
//        /// <param name="childDeviceCode">子设备编号</param>
//        /// <param name="ProtocalDetailValue">线体当前bool读取偏移地址</param>
//        public void RequestInbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, int ProtocalDetailValue)
//        {
//            var taskNew = _taskService.QueryCraneConveyorLineTask(command.Barcode.ObjToInt(), childDeviceCode);
//            var Taskout = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
//            if (Taskout != null)
//            {
//                // 空托盘任务
//                if (Taskout.TaskType == (int)TaskOutboundTypeEnum.OutTray)
//                {
//                    if (Taskout.TaskState == (int)TaskOutStatusEnum.SC_OutFinish)
//                    {
//                        ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(Taskout);
//                        taskCommand.InteractiveSignal = command.InteractiveSignal;
//                        if (command.Barcode == "")
//                        {
//                            taskCommand.TargetAddress = 1092;
//                        }
//                        conveyorLine.SendCommand(taskCommand, childDeviceCode);
//                        ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
//                        _taskService.UpdateTaskStatusToNext(Taskout);
//                    }
//                    else if (Taskout.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting)
//                    {
//                        if (command.Barcode == "")
//                        {
//                            ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(Taskout);
//                            taskCommand.InteractiveSignal = command.InteractiveSignal;
//                            taskCommand.TargetAddress = 1092;
//                            conveyorLine.SendCommand(taskCommand, childDeviceCode);
//                            ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
//                            _taskService.UpdateTaskStatusToNext(Taskout);
//                        }
//                    }
//                }
//                else if (Taskout.TaskType == (int)TaskOutboundTypeEnum.Outbound)
//                {
//                    if (Taskout.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
//                    {
//                        ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(Taskout);
//                        taskCommand.InteractiveSignal = command.InteractiveSignal;
//                        if (command.Barcode == "")
//                        {
//                            //todo 没有明确异常口,送到目标巷道的NG口
//                            //taskCommand.TargetAddress = 1092;
//                        }
//                        conveyorLine.SendCommand(taskCommand, childDeviceCode);
//                        ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
//                        _taskService.UpdateTaskStatusToNext(Taskout);
//                    }
//                    else if (Taskout.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting)
//                    {
//                        if (command.Barcode == "")
//                        {
//                            ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(Taskout);
//                            taskCommand.InteractiveSignal = command.InteractiveSignal;
//                            // todo  送到目标巷道的NG口
//                            taskCommand.TargetAddress = 1092;
//                            conveyorLine.SendCommand(taskCommand, childDeviceCode);
//                            ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
//                            _taskService.UpdateTaskStatusToNext(Taskout);
//                        }
//                        else
//                        {
//                            // todo 调用WMS任务完成接口
//                            var x = new { taskNum = Taskout.TaskNum };
//                            var result = HttpHelper.GetAsync("http:127.0.0.1:8098/api/Task/CompleteTaskAsync", x.ToJsonString()).Result;
//                            WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result);
//                            if (content.Status)
//                            {
//                                ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
//                                _taskService.UpdateTaskStatusToNext(Taskout);
//                            }
//                        }
//                    }
//                }
//            }
//            if (taskNew == null)
//            {
//                if (_taskService.RequestWMSTask(command.Barcode, childDeviceCode).Status)
//                {
//                    Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
//                    if (task != null)
//                    {
//                        ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
//                        taskCommand.InteractiveSignal = command.InteractiveSignal;
//                        conveyorLine.SendCommand(taskCommand, childDeviceCode);
//                        ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
//                        _taskService.UpdateTaskStatusToNext(task);
//                    }
//                }
//            }
//        }
//        //
//        /// <summary>
//        /// 空托盘回流
//        /// </summary>
//        /// <param name="conveyorLine">输送线实例对象</param>
//        /// <param name="command">读取的请求信息</param>
//        /// <param name="childDeviceCode">子设备编号</param>
//        /// <param name="index">读取的第一个位置</param>
//        public void EmptyTrayReturn(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, int index)
//        {
//            var tasks = _taskRepository.QueryData(x => (x.TaskState == (int)TaskOutStatusEnum.OutNew || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting) && x.TaskType == (int)TaskOutboundTypeEnum.OutTray);
//            if (tasks.Count <= index)
//            {
//                WMSTaskDTO taskDTO = new WMSTaskDTO()
//                {
//                    TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
//                    Grade = 1,
//                    PalletCode = DateTime.Now.ToString("yyyyMMddHHmmss"),
//                    RoadWay = "CHSC01",
//                    SourceAddress = "001-001-001",
//                    TargetAddress = childDeviceCode,
//                    TaskState = (int)TaskOutStatusEnum.OutNew,
//                    Id = 0,
//                    TaskType = (int)TaskOutboundTypeEnum.OutTray
//                };
//                #region 真实数据
//                // TODO: 调用接口获取下一个地址
//                //RequestTaskDto request = new RequestTaskDto()
//                //{
//                //    Position = sourceAddress,
//                //    PalletCode = palletCode,
//                //};
//                //// 发送请求并等待响应
//                //var result = HttpHelper.PostAsync("http:127.0.0.1:8098/api/Task/RequestTaskAsync", request.ToJsonString()).Result;
//                //// 反序列化响应内容
//                //WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result);
//                //// 检查状态并返回
//                ////if (!content.Status)
//                ////    return content;
//                //// 反序列化任务数据
//                //WMSTaskDTO task = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
//                #endregion
//                var content = _taskService.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
//                if (content.Status)
//                {
//                    Console.WriteLine("空托盘呼叫成功");
//                }
//            }
//        }
//        ///// <summary>
//        ///// 陈化出库
//        ///// </summary>
//        ///// <param name="conveyorLine">输送线实例对象</param>
//        ///// <param name="command">读取的请求信息</param>
//        ///// <param name="childDeviceCode">子设备编号</param>
//        ///// <param name="index">线体当前bool读取偏移地址</param>
//        //public void ChuanhuaOutbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, int index)
//        //{
//        //    var tasks = _taskRepository.QueryData(x => (x.TaskState == (int)TaskOutStatusEnum.OutNew || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting) && x.TaskType == (int)TaskOutboundTypeEnum.Outbound);
//        //    if (tasks.Count <= index)
//        //    {
//        //        WMSTaskDTO taskDTO = new WMSTaskDTO()
//        //        {
//        //            TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
//        //            Grade = 1,
//        //            PalletCode = DateTime.Now.ToString("MMddHHmmss"),
//        //            RoadWay = "CHSC01",
//        //            SourceAddress = "001-001-001",
//        //            TargetAddress = childDeviceCode,
//        //            TaskState = (int)TaskOutStatusEnum.OutNew,
//        //            Id = 0,
//        //            TaskType = (int)TaskOutboundTypeEnum.Outbound,
//        //        };
//        //        var content = _taskService.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
//        //        if (content.Status)
//        //        {
//        //            Console.WriteLine("出库呼叫成功");
//        //        }
//        //    }
//        //    else
//        //    {
//        //        Dt_Task task = tasks[index];
//        //        if (task != null)
//        //        {
//        //            ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
//        //            taskCommand.InteractiveSignal = command.InteractiveSignal;
//        //            conveyorLine.SendCommand(taskCommand, childDeviceCode);
//        //        }
//        //    }
//        //}
//        /// <summary>
//        /// 输送线请求入库下一地址
//        /// </summary>
//        /// <param name="conveyorLine">输送线实例对象</param>
//        /// <param name="command">读取的请求信息</param>
//        /// <param name="childDeviceCode">子设备编号</param>
//        public void RequestInNextAddress(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
//        {
//            Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode);
//            if (task != null)
//            {
//                Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress);
//                if (newTask != null)
//                {
//                    ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(newTask);
//                    taskCommand.InteractiveSignal = command.InteractiveSignal;
//                    conveyorLine.SendCommand(taskCommand, childDeviceCode);
//                }
//            }
//        }
//        /// <summary>
//        /// 输送线入库完成
//        /// </summary>
//        /// <param name="conveyorLine">输送线实例对象</param>
//        /// <param name="command">读取的请求信息</param>
//        /// <param name="childDeviceCode">子设备编号</param>
//        /// <param name="ProtocalDetailValue">线体当前bool读取偏移地址</param>
//        public void ConveyorLineInFinish(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, int ProtocalDetailValue)
//        {
//            Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode);
//            if (task != null && task.TaskState != (int)TaskInStatusEnum.Line_InFinish)
//            {
//                ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
//                //conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode);
//                WebResponseContent content = _taskService.UpdateTaskStatusToNext(task);
//                Console.Out.WriteLine(content.Serialize());
//            }
//        }
//        /// <summary>
//        /// 输送线请求出信息
//        /// </summary>
//        /// <param name="conveyorLine">输送线实例对象</param>
//        /// <param name="command">读取的请求信息</param>
//        /// <param name="childDeviceCode">子设备编号</param>
//        public void RequestOutbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
//        {
//            Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
//            if (task != null)
//            {
//                ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
//                taskCommand.InteractiveSignal = command.InteractiveSignal;
//                conveyorLine.SendCommand(taskCommand, childDeviceCode);
//                _taskService.UpdateTaskStatusToNext(task);
//            }
//        }
//        /// <summary>
//        /// 输送线请求出库下一地址
//        /// </summary>
//        /// <param name="conveyorLine">输送线实例对象</param>
//        /// <param name="command">读取的请求信息</param>
//        /// <param name="childDeviceCode">子设备编号</param>
//        public void RequestOutNextAddress(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
//        {
//            Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode);
//            if (task != null)
//            {
//                Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress);
//                if (newTask != null)
//                {
//                    ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(newTask);
//                    taskCommand.InteractiveSignal = command.InteractiveSignal;
//                    conveyorLine.SendCommand(taskCommand, childDeviceCode);
//                }
//            }
//        }
//        /// <summary>
//        /// 输送线出库完成
//        /// </summary>
//        /// <param name="conveyorLine">输送线实例对象</param>
//        /// <param name="command">读取的请求信息</param>
//        /// <param name="childDeviceCode">子设备编号</param>
//        public void ConveyorLineOutFinish(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
//        {
//            Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode);
//            if (task != null)
//            {
//                conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode);
//                WebResponseContent content = _taskService.UpdateTaskStatusToNext(task);
//                Console.Out.WriteLine(content.Serialize());
//            }
//        }
//        /// <summary>
//        /// 输送线交互完成
//        /// </summary>
//        /// <param name="conveyorLine">输送线实例对象</param>
//        /// <param name="childDeviceCode">子设备编号</param>
//        /// <param name="ProtocalDetailValue">线体当前bool读取偏移地址</param>
//        /// <param name="value">值</param>
//        public void ConveyorLineSendFinish(CommonConveyorLine_After conveyorLine, string childDeviceCode, int ProtocalDetailValue, 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);
//        }
//    }
//}
#endregion