´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/³ÉÆ·²Ö/AGV_CPExtend.cs
@@ -28,153 +28,33 @@
                    var newTasksIn = AllTasks.Where(x => (x.TaskState == TaskStatusEnum.AGV_Execute.ObjToInt()) && x.TaskType>=TaskTypeEnum.Inbound.ObjToInt() && nameof(AGV_CPJob).Contains(x.DeviceCode) && !string.IsNullOrEmpty(x.DeviceCode) && x.TaskType!=999).ToList().OrderByDescending(x => x.Grade).ThenBy(x => x.CreateDate).ToList();
                    if (newTasksIn.Count>0)
                    {
                        foreach (var task in newTasksIn)
                        {
                            try
                            {
                                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                                    task.CurrentAddress = GetAGVAddress(task.CurrentAddress);
                                else
                                    task.NextAddress = GetAGVAddress(task.NextAddress);
                                AgvTaskDTO taskDTO = new AgvTaskDTO()
                                {
                                    TaskCode = task.AgvTaskNum,
                                    ReqCode = DateTime.Now.ToString("yyMMdd") + task.AgvTaskNum,
                                    TaskTyp = task.TaskType < TaskTypeEnum.Inbound.ObjToInt() ? "CPC" : "CPR",
                                    ctnrCode = task.PalletCode,
                                    PositionCodePath = new List<CodePath>()
                                    {
                                        new CodePath()
                                        {
                                            type = "05",
                                            positionCode = task.CurrentAddress
                                        },
                                        new CodePath()
                                        {
                                            type = "05",
                                            positionCode = task.NextAddress
                                        }
                                    }
                                };
                                if (taskDTO.TaskTyp== "CPC")
                                {
                                    taskDTO.Priority = task.Grade.ToString();
                                }
                                if (task.GroupId.IsNotEmptyOrNull())
                                {
                                    taskDTO.GroupId=task.GroupId;
                                }
                                if (task.TaskType==TaskTypeEnum.OutMesRworkProduct.ObjToInt())
                                {
                                    taskDTO.Priority = "127";
                                }
                                //发送AGV任务
                                WebResponseContent content = _taskService.AgvSendTask(taskDTO, APIEnum.Agv_CPSendTask);
                                if (!content.Status)
                                    throw new Exception(content.Message);
                                if (taskDTO.TaskTyp == "CPC")
                                {
                                    task.Dispatchertime = DateTime.Now;
                                    _taskService.UpdateTask(task, TaskStatusEnum.AGV_Executing);
                                }
                                else
                                {
                                    task.Dispatchertime = DateTime.Now;
                                    _taskService.UpdateTask(task, TaskStatusEnum.AGV_Takeing);
                                }
                                Thread.Sleep(500);
                            }
                            catch (Exception ex)
                            {
                                task.TaskState = TaskStatusEnum.Exception.ObjToInt();
                                task.ExceptionMessage = ex.Message;
                            }
                        }
                        if (newTasksIn.Count > 0)
                        {
                            _taskService.UpdateData(newTasksIn);
                        }
                        SendAgvTasks(newTasksIn);
                    }
                }
                #endregion
                DateTime _taskStartTime = DateTime.Today;
                #region å‡ºåº“推送任务1线
                {
                    var newTasksOut1 = AllTasks.Where(x => (x.TaskState == TaskStatusEnum.New.ObjToInt()) && x.TaskType < TaskTypeEnum.Inbound.ObjToInt() && x.NextAddress=="5236").OrderByDescending(x => x.Grade).ThenBy(x => x.GroupId).Take(5).ToList();
                    //按时间查找
                    var timeTasksOut1 = AllTasks.Where(x => (x.TaskState == TaskStatusEnum.New.ObjToInt()) && x.TaskType < TaskTypeEnum.Inbound.ObjToInt() && x.NextAddress == "5236" && x.CreateDate<= _taskStartTime).OrderByDescending(x => x.Grade).ThenBy(x => x.CreateDate).Take(5).ToList();
                    //新创建任务
                    var newTasksOut1 = AllTasks.Where(x => (x.TaskState == TaskStatusEnum.New.ObjToInt()) && x.TaskType < TaskTypeEnum.Inbound.ObjToInt() && x.NextAddress=="5236").OrderByDescending(x => x.Grade).ThenBy(x => x.CreateDate).Take(5).ToList();
                    var pushTasks1= timeTasksOut1.Count<=0 ? newTasksOut1 : timeTasksOut1;
                    //当前线体任务
                    var downTasksOut1 = AllTasks.Where(x => (x.TaskState > TaskStatusEnum.New.ObjToInt()) && x.TaskType < TaskTypeEnum.Inbound.ObjToInt() && x.NextAddress == "5236").ToList();
                    Dt_StationManger? stationManger = stationMangers.FirstOrDefault(x => x.AGVStationCode == "5236");
                    IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
                    if (device != null)
                    {
                        OtherDevice otherDevice = (OtherDevice)device;
                        short stationCurrentStatus = device.Communicator.Read<short>("DB29.112");
                        if (newTasksOut1.Count > 0 && downTasksOut1.Count <= 0 && stationCurrentStatus == 1)
                        if (pushTasks1.Count > 0 && downTasksOut1.Count <= 0 && stationCurrentStatus == 1)
                        {
                            foreach (var task in newTasksOut1)
                            {
                                try
                                {
                                    if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                                        task.CurrentAddress = GetAGVAddress(task.CurrentAddress);
                                    else
                                        task.NextAddress = GetAGVAddress(task.NextAddress);
                                    AgvTaskDTO taskDTO = new AgvTaskDTO()
                                    {
                                        TaskCode = task.AgvTaskNum,
                                        ReqCode = DateTime.Now.ToString("yyMMdd") + task.AgvTaskNum,
                                        TaskTyp = task.TaskType < TaskTypeEnum.Inbound.ObjToInt() ? "CPC" : "CPR",
                                        ctnrCode = task.PalletCode,
                                        PositionCodePath = new List<CodePath>()
                                    {
                                        new CodePath()
                                        {
                                            type = "05",
                                            positionCode = task.CurrentAddress
                                        },
                                        new CodePath()
                                        {
                                            type = "05",
                                            positionCode = task.NextAddress
                                        }
                                    }
                                    };
                                    if (taskDTO.TaskTyp == "CPC")
                                    {
                                        taskDTO.Priority = task.Grade.ToString();
                                    }
                                    if (task.GroupId.IsNotEmptyOrNull())
                                    {
                                        taskDTO.GroupId = task.GroupId;
                                    }
                                    if (task.TaskType == TaskTypeEnum.OutMesRworkProduct.ObjToInt())
                                    {
                                        taskDTO.Priority = "127";
                                    }
                                    //发送AGV任务
                                    WebResponseContent content = _taskService.AgvSendTask(taskDTO, APIEnum.Agv_CPSendTask);
                                    if (!content.Status)
                                        throw new Exception(content.Message);
                                    if (taskDTO.TaskTyp == "CPC")
                                    {
                                        task.Dispatchertime = DateTime.Now;
                                        _taskService.UpdateTask(task, TaskStatusEnum.AGV_Executing);
                                    }
                                    else
                                    {
                                        task.Dispatchertime = DateTime.Now;
                                        _taskService.UpdateTask(task, TaskStatusEnum.AGV_Takeing);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    task.TaskState = TaskStatusEnum.Exception.ObjToInt();
                                    task.ExceptionMessage = ex.Message;
                                }
                            }
                            if (newTasksOut1.Count > 0)
                            {
                                _taskService.UpdateData(newTasksOut1);
                            }
                            WriteInfo("5236", $"1线5236无任务,状态{stationCurrentStatus}可下发,下发任务:{newTasksOut1.Select(x => x.TaskNum)}");
                            SendAgvTasks(pushTasks1);
                            WriteInfo("5236", $"1线5236无任务,状态{stationCurrentStatus}可下发,下发任务:{pushTasks1.Select(x => x.TaskNum)}");
                        }
                    }
                    
@@ -182,174 +62,56 @@
                #endregion
                #region å‡ºåº“推送任务2线
                {
                    var newTasksOut2 = AllTasks.Where(x => (x.TaskState == TaskStatusEnum.New.ObjToInt()) && x.TaskType < TaskTypeEnum.Inbound.ObjToInt() && x.NextAddress == "5243").OrderByDescending(x => x.Grade).ThenBy(x => x.GroupId).Take(5).ToList();
                    //按时间查找
                    var timeTasksOut2 = AllTasks.Where(x => (x.TaskState == TaskStatusEnum.New.ObjToInt()) && x.TaskType < TaskTypeEnum.Inbound.ObjToInt() && x.NextAddress == "5243" && x.CreateDate <= _taskStartTime).OrderByDescending(x => x.Grade).ThenBy(x => x.CreateDate).Take(5).ToList();
                    //新创建任务
                    var newTasksOut2 = AllTasks.Where(x => (x.TaskState == TaskStatusEnum.New.ObjToInt()) && x.TaskType < TaskTypeEnum.Inbound.ObjToInt() && x.NextAddress == "5243").OrderByDescending(x => x.Grade).ThenBy(x => x.CreateDate).Take(5).ToList();
                    var pushTasks2 = timeTasksOut2.Count <= 0 ? newTasksOut2 : timeTasksOut2;
                    //当前线体任务
                    var downTasksOut2 = AllTasks.Where(x => (x.TaskState > TaskStatusEnum.New.ObjToInt()) && x.TaskType < TaskTypeEnum.Inbound.ObjToInt() && x.NextAddress == "5243").ToList();
                    Dt_StationManger? stationManger = stationMangers.FirstOrDefault(x => x.AGVStationCode == "5243");
                    IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
                    if (device != null)
                    {
                        OtherDevice otherDevice = (OtherDevice)device;
                        short stationCurrentStatus = device.Communicator.Read<short>("DB29.126");
                        if (newTasksOut2.Count > 0 && downTasksOut2.Count <= 0 && stationCurrentStatus == 1)
                        if (pushTasks2.Count > 0 && downTasksOut2.Count <= 0 && stationCurrentStatus == 1)
                        {
                            foreach (var task in newTasksOut2)
                            {
                                try
                                {
                                    if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                                        task.CurrentAddress = GetAGVAddress(task.CurrentAddress);
                                    else
                                        task.NextAddress = GetAGVAddress(task.NextAddress);
                                    AgvTaskDTO taskDTO = new AgvTaskDTO()
                                    {
                                        TaskCode = task.AgvTaskNum,
                                        ReqCode = DateTime.Now.ToString("yyMMdd") + task.AgvTaskNum,
                                        TaskTyp = task.TaskType < TaskTypeEnum.Inbound.ObjToInt() ? "CPC" : "CPR",
                                        ctnrCode = task.PalletCode,
                                        PositionCodePath = new List<CodePath>()
                                    {
                                        new CodePath()
                                        {
                                            type = "05",
                                            positionCode = task.CurrentAddress
                                        },
                                        new CodePath()
                                        {
                                            type = "05",
                                            positionCode = task.NextAddress
                                        }
                                    }
                                    };
                                    if (taskDTO.TaskTyp == "CPC")
                                    {
                                        taskDTO.Priority = task.Grade.ToString();
                                    }
                                    if (task.GroupId.IsNotEmptyOrNull())
                                    {
                                        taskDTO.GroupId = task.GroupId;
                                    }
                                    if (task.TaskType == TaskTypeEnum.OutMesRworkProduct.ObjToInt())
                                    {
                                        taskDTO.Priority = "127";
                                    }
                                    //发送AGV任务
                                    WebResponseContent content = _taskService.AgvSendTask(taskDTO, APIEnum.Agv_CPSendTask);
                                    if (!content.Status)
                                        throw new Exception(content.Message);
                                    if (taskDTO.TaskTyp == "CPC")
                                    {
                                        task.Dispatchertime = DateTime.Now;
                                        _taskService.UpdateTask(task, TaskStatusEnum.AGV_Executing);
                                    }
                                    else
                                    {
                                        task.Dispatchertime = DateTime.Now;
                                        _taskService.UpdateTask(task, TaskStatusEnum.AGV_Takeing);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    task.TaskState = TaskStatusEnum.Exception.ObjToInt();
                                    task.ExceptionMessage = ex.Message;
                                }
                            }
                            if (newTasksOut2.Count > 0)
                            {
                                _taskService.UpdateData(newTasksOut2);
                            }
                            WriteInfo("5243", $"2线5243无任务,状态{stationCurrentStatus}可下发,下发任务:{newTasksOut2.Select(x => x.TaskNum)}");
                            SendAgvTasks(pushTasks2);
                            WriteInfo("5243", $"2线5243无任务,状态{stationCurrentStatus}可下发,下发任务:{pushTasks2.Select(x => x.TaskNum)}");
                        }
                        //else
                        //{
                        //    WriteInfo(nameof(AGV_CPJob), $"2线无任务,状态{stationCurrentStatus}");
                        //}
                    }
                }
                #endregion
                #region å‡ºåº“推送任务3线
                {
                    var newTasksOut3 = AllTasks.Where(x => (x.TaskState == TaskStatusEnum.New.ObjToInt()) && x.TaskType < TaskTypeEnum.Inbound.ObjToInt() && x.NextAddress == "5250").OrderByDescending(x => x.Grade).ThenBy(x => x.GroupId).Take(5).ToList();
                    //按时间查找
                    var timeTasksOut3 = AllTasks.Where(x => (x.TaskState == TaskStatusEnum.New.ObjToInt()) && x.TaskType < TaskTypeEnum.Inbound.ObjToInt() && x.NextAddress == "5250" && x.CreateDate <= _taskStartTime).OrderByDescending(x => x.Grade).ThenBy(x => x.CreateDate).Take(5).ToList();
                    //新创建任务
                    var newTasksOut3 = AllTasks.Where(x => (x.TaskState == TaskStatusEnum.New.ObjToInt()) && x.TaskType < TaskTypeEnum.Inbound.ObjToInt() && x.NextAddress == "5250").OrderByDescending(x => x.Grade).ThenBy(x => x.CreateDate).Take(5).ToList();
                    var pushTasks3 = timeTasksOut3.Count <= 0 ? newTasksOut3 : timeTasksOut3;
                    //当前线体任务
                    var downTasksOut3 = AllTasks.Where(x => (x.TaskState > TaskStatusEnum.New.ObjToInt()) && x.TaskType < TaskTypeEnum.Inbound.ObjToInt() && x.NextAddress == "5250").ToList();
                    Dt_StationManger? stationManger = stationMangers.FirstOrDefault(x => x.AGVStationCode == "5250");
                    IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
                    if (device != null)
                    {
                        OtherDevice otherDevice = (OtherDevice)device;
                        short stationCurrentStatus = device.Communicator.Read<short>("DB29.140");
                        if (newTasksOut3.Count > 0 && downTasksOut3.Count <= 0 && stationCurrentStatus == 1)
                        if (pushTasks3.Count > 0 && downTasksOut3.Count <= 0 && stationCurrentStatus == 1)
                        {
                            foreach (var task in newTasksOut3)
                            {
                                try
                                {
                                    if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                                        task.CurrentAddress = GetAGVAddress(task.CurrentAddress);
                                    else
                                        task.NextAddress = GetAGVAddress(task.NextAddress);
                                    AgvTaskDTO taskDTO = new AgvTaskDTO()
                                    {
                                        TaskCode = task.AgvTaskNum,
                                        ReqCode = DateTime.Now.ToString("yyMMdd") + task.AgvTaskNum,
                                        TaskTyp = task.TaskType < TaskTypeEnum.Inbound.ObjToInt() ? "CPC" : "CPR",
                                        ctnrCode = task.PalletCode,
                                        PositionCodePath = new List<CodePath>()
                                    {
                                        new CodePath()
                                        {
                                            type = "05",
                                            positionCode = task.CurrentAddress
                                        },
                                        new CodePath()
                                        {
                                            type = "05",
                                            positionCode = task.NextAddress
                                        }
                                    }
                                    };
                                    if (taskDTO.TaskTyp == "CPC")
                                    {
                                        taskDTO.Priority = task.Grade.ToString();
                                    }
                                    if (task.GroupId.IsNotEmptyOrNull())
                                    {
                                        taskDTO.GroupId = task.GroupId;
                                    }
                                    if (task.TaskType == TaskTypeEnum.OutMesRworkProduct.ObjToInt())
                                    {
                                        taskDTO.Priority = "127";
                                    }
                                    //发送AGV任务
                                    WebResponseContent content = _taskService.AgvSendTask(taskDTO, APIEnum.Agv_CPSendTask);
                                    if (!content.Status)
                                        throw new Exception(content.Message);
                                    if (taskDTO.TaskTyp == "CPC")
                                    {
                                        task.Dispatchertime = DateTime.Now;
                                        _taskService.UpdateTask(task, TaskStatusEnum.AGV_Executing);
                                    }
                                    else
                                    {
                                        task.Dispatchertime = DateTime.Now;
                                        _taskService.UpdateTask(task, TaskStatusEnum.AGV_Takeing);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    task.TaskState = TaskStatusEnum.Exception.ObjToInt();
                                    task.ExceptionMessage = ex.Message;
                                }
                            }
                            if (newTasksOut3.Count > 0)
                            {
                                _taskService.UpdateData(newTasksOut3);
                            }
                            WriteInfo("5250", $"3线5250无任务,状态{stationCurrentStatus}可下发,下发任务:{newTasksOut3.Select(x => x.TaskNum)}");
                            SendAgvTasks(pushTasks3);
                            WriteInfo("5250", $"3线5250无任务,状态{stationCurrentStatus}可下发,下发任务:{pushTasks3.Select(x => x.TaskNum)}");
                        }
                        //else
                        //{
                        //    WriteInfo(nameof(AGV_CPJob), $"3线无任务,状态{stationCurrentStatus}");
                        //}
                    }
                }
@@ -498,6 +260,75 @@
            }
        }
        /// <summary>
        /// ä¸‹å‘AGV任务
        /// </summary>
        /// <param name="tasks"></param>
        public void SendAgvTasks(List<Dt_Task> tasks)
        {
            foreach (var task in tasks)
            {
                try
                {
                    if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                        task.CurrentAddress = GetAGVAddress(task.CurrentAddress);
                    else
                        task.NextAddress = GetAGVAddress(task.NextAddress);
                    AgvTaskDTO taskDTO = new AgvTaskDTO()
                    {
                        TaskCode = task.AgvTaskNum,
                        ReqCode = DateTime.Now.ToString("yyMMdd") + task.AgvTaskNum,
                        TaskTyp = task.TaskType < TaskTypeEnum.Inbound.ObjToInt() ? "CPC" : "CPR",
                        ctnrCode = task.PalletCode,
                        PositionCodePath = new List<CodePath>()
                                    {
                                        new CodePath()
                                        {
                                            type = "05",
                                            positionCode = task.CurrentAddress
                                        },
                                        new CodePath()
                                        {
                                            type = "05",
                                            positionCode = task.NextAddress
                                        }
                                    }
                    };
                    if (taskDTO.TaskTyp == "CPC")
                    {
                        taskDTO.Priority = task.Grade.ToString();
                    }
                    if (task.GroupId.IsNotEmptyOrNull())
                    {
                        taskDTO.GroupId = task.GroupId;
                    }
                    if (task.TaskType == TaskTypeEnum.OutMesRworkProduct.ObjToInt())
                    {
                        taskDTO.Priority = "127";
                    }
                    //发送AGV任务
                    WebResponseContent content = _taskService.AgvSendTask(taskDTO, APIEnum.Agv_CPSendTask);
                    if (!content.Status)
                        throw new Exception(content.Message);
                    if (taskDTO.TaskTyp == "CPC")
                    {
                        task.Dispatchertime = DateTime.Now;
                        _taskService.UpdateTask(task, TaskStatusEnum.AGV_Executing);
                    }
                    else
                    {
                        task.Dispatchertime = DateTime.Now;
                        _taskService.UpdateTask(task, TaskStatusEnum.AGV_Takeing);
                    }
                }
                catch (Exception ex)
                {
                    task.TaskState = TaskStatusEnum.Exception.ObjToInt();
                    task.ExceptionMessage = ex.Message;
                    _taskService.UpdateTask(task, TaskStatusEnum.Exception);
                }
            }
        }
        /// <summary>
        /// èŽ·å–AGV地址
        /// </summary>
        /// <param name="Address"></param>