using System; 
 | 
using System.Collections.Generic; 
 | 
using System.Linq; 
 | 
using System.Text; 
 | 
using System.Threading.Tasks; 
 | 
using WIDESEA_DTO.Agv; 
 | 
using WIDESEAWCS_Common.APIEnum; 
 | 
using WIDESEAWCS_Common.TaskEnum; 
 | 
using WIDESEAWCS_Core; 
 | 
using WIDESEAWCS_Core.Helper; 
 | 
using WIDESEAWCS_Model.Models; 
 | 
using WIDESEAWCS_Tasks.StackerCraneJob; 
 | 
  
 | 
namespace WIDESEAWCS_Tasks 
 | 
{ 
 | 
    public partial class AGV_FLJob 
 | 
    { 
 | 
        /// <summary> 
 | 
        /// 下发AGV任务 
 | 
        /// </summary> 
 | 
        public void SendAGVTask() 
 | 
        { 
 | 
            try 
 | 
            { 
 | 
                var newTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == TaskStatusEnum.New.ObjToInt() && nameof(AGV_FLJob).Contains(x.DeviceCode) && !string.IsNullOrEmpty(x.DeviceCode)).ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList(); 
 | 
                foreach (var task in newTasks) 
 | 
                { 
 | 
                    try 
 | 
                    { 
 | 
                        if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutEmpty.ObjToInt()) 
 | 
                            task.CurrentAddress = GetAGVAddress(task.CurrentAddress); 
 | 
                        else 
 | 
                            task.NextAddress = GetAGVAddress(task.NextAddress); 
 | 
                        AgvTaskDTO taskDTO = new AgvTaskDTO() 
 | 
                        { 
 | 
                            TaskCode = task.AgvTaskNum, 
 | 
                            ReqCode = DateTime.Now.ToString("yyyyMMddHHmmss"), 
 | 
                            TaskTyp = task.TaskType < TaskTypeEnum.Inbound.ObjToInt() ? "FLC" : "FLR", 
 | 
                            ctnrCode = task.PalletCode, 
 | 
                            PositionCodePath = new List<CodePath>() 
 | 
                        { 
 | 
                            new CodePath() 
 | 
                            { 
 | 
                                type="05", 
 | 
                                positionCode=task.CurrentAddress 
 | 
                            }, 
 | 
                            new CodePath() 
 | 
                            { 
 | 
                                type="05", 
 | 
                                positionCode=task.NextAddress 
 | 
                            } 
 | 
                        }, 
 | 
                        }; 
 | 
                        WebResponseContent content = _taskService.AgvSendTask(taskDTO, APIEnum.Agv_FLSendTask); 
 | 
                        if (!content.Status) throw new Exception(content.Message); 
 | 
  
 | 
                        task.TaskState = TaskStatusEnum.AGV_Executing.ObjToInt(); 
 | 
  
 | 
                    } 
 | 
                    catch (Exception ex) 
 | 
                    { 
 | 
                        task.TaskState = TaskStatusEnum.Exception.ObjToInt(); 
 | 
                        task.ExceptionMessage = ex.Message; 
 | 
                    } 
 | 
                } 
 | 
                _taskService.UpdateData(newTasks); 
 | 
            } 
 | 
            catch (Exception ex) 
 | 
            { 
 | 
                WriteError(nameof(AGV_FLJob), ex.Message, ex); 
 | 
            } 
 | 
        } 
 | 
        /// <summary> 
 | 
        /// 获取AGV地址 
 | 
        /// </summary> 
 | 
        /// <param name="Address"></param> 
 | 
        /// <returns></returns> 
 | 
        public static string GetAGVAddress(string Address) 
 | 
        { 
 | 
            string[] targetCodes = Address.Split("-"); 
 | 
            if (targetCodes.Length == 5) 
 | 
            { 
 | 
                var Row = Convert.ToInt16(targetCodes[1]); 
 | 
                var Column = Convert.ToInt16(targetCodes[2]); 
 | 
                var Layer = Convert.ToInt16(targetCodes[3]); 
 | 
                var a = Row switch 
 | 
                { 
 | 
                    1 => "A1", 
 | 
                    2 => "B1", 
 | 
                    3 => "C1", 
 | 
                    4 => "D1", 
 | 
                    5 => "E1", 
 | 
                    _ => throw new Exception($"未定义的排,地址:【{Address}】"), 
 | 
                }; 
 | 
                var b = Layer > 9 ? "" + Layer : "0" + Layer; 
 | 
                var c = Column > 9 ? "" + Column : "0" + Column; 
 | 
                if (Column == 10) c = "010"; 
 | 
                Address = a + b + c; 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
                throw new Exception($"地址有误,地址:【{Address}】"); 
 | 
            } 
 | 
            return Address; 
 | 
        } 
 | 
    } 
 | 
} 
 |