wangxinhui
4 天以前 a9bba690fdead98f549d000ec29aa0cd6887cd22
ÏîÄ¿´úÂë/WIDESEA_WCSServer/WIDESEAWCS_Tasks/AGV/CommonAGVJob.cs
@@ -9,6 +9,7 @@
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.Log;
@@ -35,7 +36,7 @@
        private readonly ITaskService _taskService;
        private readonly ISys_ConfigService _sys_ConfigService;
        private readonly IDt_StationManagerRepository _stationManagerRepository;
        public CommonAGVJob(ITaskRepository taskRepository,ITaskService taskService,ISys_ConfigService configService,IDt_StationManagerRepository stationManagerRepository)
        public CommonAGVJob(ITaskRepository taskRepository, ITaskService taskService, ISys_ConfigService configService, IDt_StationManagerRepository stationManagerRepository)
        {
            _taskRepository = taskRepository;
            _taskService = taskService;
@@ -45,76 +46,70 @@
        public Task Execute(IJobExecutionContext context)
        {
            var newTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => (x.TaskState == TaskAGVCarryStatusEnum.AGV_CarryNew.ObjToInt())).ToList().OrderBy(x => x.Grade).ThenBy(x => x.TaskNum).ToList();
            var newTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => (x.TaskState == (int)TaskAGVCarryStatusEnum.AGV_CarryNew)).ToList().OrderBy(x => x.Grade).ThenBy(x => x.TaskNum).ToList();
            #region ä»»åŠ¡ä¸‹å‘
            if (newTasks.Count > 0)
            {
                WriteLog.Write_Log("AGV任务下发", "任务下发接口", "添加任务", $"任务:{newTasks.ToJson()}");
                try
                foreach (var task in newTasks)
                {
                    AgvTaskSendDTO agvTaskSend = new AgvTaskSendDTO()
                    try
                    {
                        MissionData = new List<MissionDataItem>()
                    };
                    string taskGroupId = Guid.NewGuid().ToString().Replace("-", "");
                        AgvTaskSendDTO agvTaskSend = new AgvTaskSendDTO()
                        {
                            MissionData = new List<MissionDataItem>()
                        };
                        string taskGroupId = Guid.NewGuid().ToString().Replace("-", "");
                    foreach (var task in newTasks)
                    {
                        //获取目标点货位
                        //Dt_StationManager stationManagerStart = _stationManagerRepository.QueryFirst(x => x.stationLocation == task.CurrentAddress);
                        //获取拣选出库站台
                        Dt_StationManager stationManagerEnd = _stationManagerRepository.QueryFirst(x => x.stationLocation == task.NextAddress);
                        // èŽ·å–èµ·å§‹ç«™å°
                        Dt_StationManager stationManagerEnd = _stationManagerRepository.QueryFirst(x => x.stationLocation == task.SourceAddress);
                        // èŽ·å–ç›®çš„ç«™å°
                        Dt_StationManager finalmission = _stationManagerRepository.QueryFirst(x => x.stationLocation == task.TargetAddress);
                        if (stationManagerEnd == null) throw new Exception($"未找到任务号${task.TaskNum}目标点{task.NextAddress}位置信息");
                        if (stationManagerEnd == null) throw new Exception($"未找到任务号${task.TaskId}起始点{task.SourceAddress}位置信息");
                        if (finalmission == null) throw new Exception($"未找到任务号${task.TaskId}目标点{task.TargetAddress}位置信息");
                        agvTaskSend.RequestId = taskGroupId;
                        agvTaskSend.MissionCode = task.TaskNum.ToString();
                        agvTaskSend.MissionCode = task.TaskId.ToString();
                        agvTaskSend.ViewBoardType = "W01";
                        //货架子搬运任务
                        MissionDataItem missionDataItem = new MissionDataItem()
                        MissionDataItem Startingmission = new MissionDataItem() // èµ·ç‚¹
                        {
                            Sequence = task.TaskNum,
                            Sequence = 1,
                            Position = stationManagerEnd.stationLocation,
                            //BinCode = task.PalletCode,
                            //StartPosition = stationManagerStart.stationLocation,
                            //EndPosition = stationManagerEnd.stationLocation,
                            //TakeActionConfirm = false,
                            //TakeActionInform = false,
                            //PutActionConfirm = true,
                            //PutActionInform = true,
                        };
                        agvTaskSend.MissionData.Add(missionDataItem);
                    }
                    if (newTasks.OrderByDescending(x => x.Grade).FirstOrDefault()?.Grade == 0)
                    {
                        agvTaskSend.Priority = 99;
                    }
                    else
                    {
                        agvTaskSend.Priority = 99 - newTasks.OrderByDescending(x => x.Grade).FirstOrDefault().Grade;
                    }
                    //发送AGV任务
                    WebResponseContent content = _taskService.AgvSendTask(agvTaskSend, APIEnum.AgvSendTask);
                    if (!content.Status)
                        throw new Exception(content.Message);
                    newTasks.ForEach(x =>
                    {
                        x.Dispatchertime = DateTime.Now;
                        x.TaskState = TaskAGVCarryStatusEnum.AGV_CarryExecuting.ObjToInt();
                    });
                    _taskService.UpdateData(newTasks);
                    Thread.Sleep(500);
                }
                catch (Exception ex)
                {
                    newTasks.ForEach(x =>
                    {
                        x.TaskState = TaskAGVCarryStatusEnum.AGV_CarryException.ObjToInt();
                        x.ExceptionMessage = ex.Message;
                    });
                    _taskService.UpdateData(newTasks);
                }
                        MissionDataItem Finalmission = new MissionDataItem() // ç»ˆç‚¹
                        {
                            Sequence = 2,
                            Position = finalmission.stationLocation,
                        };
                        agvTaskSend.MissionData.Add(Startingmission);
                        agvTaskSend.MissionData.Add(Finalmission);
                        if (task.Grade == 0)
                        {
                            agvTaskSend.Priority = 99;
                        }
                        else
                        {
                            agvTaskSend.Priority = 99 - task.Grade;
                        }
                        //发送AGV任务
                        WebResponseContent content = _taskService.AgvSendTask(agvTaskSend, APIEnum.AgvSendTask);
                        if (!content.Status)
                            throw new Exception(content.Message);
                        task.Dispatchertime = DateTime.Now;
                        task.TaskState = (int)TaskAGVCarryStatusEnum.AGV_CarryExecuting;
                        _taskService.UpdateData(newTasks);
                        Thread.Sleep(500);
                    }
                    catch (Exception ex)
                    {
                        task.TaskState = (int)TaskAGVCarryStatusEnum.AGV_CarryException;
                        task.ExceptionMessage = ex.Message;
                        _taskService.UpdateData(newTasks);
                    }
                }
            }
            #endregion
            return Task.CompletedTask;