xiaojiao
3 天以前 2c69e642303e9f9c3b2e37194c4c6cdf7e1b3001
ÏîÄ¿´úÂë/WIDESEA_WCSServer/WIDESEAWCS_Tasks/AGV/CommonAGVJob.cs
@@ -4,10 +4,12 @@
using Newtonsoft.Json.Linq;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Information;
using Quartz;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.Log;
@@ -34,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;
@@ -44,74 +46,73 @@
        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();
            return Task.CompletedTask;
            #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("-", "");
                    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);
                        if (stationManagerStart == null || stationManagerStart == null) throw new Exception($"未找到任务号${task.TaskNum}起始点{task.CurrentAddress}或目标点{task.NextAddress}位置信息");
                        agvTaskSend.RequestId = taskGroupId;
                        agvTaskSend.MissionCode = task.TaskNum.ToString();
                        agvTaskSend.ViewBoardType = "W01";
                        //料箱子搬运任务
                        MissionDataItem missionDataItem = new MissionDataItem()
                        AgvTaskSendDTO agvTaskSend = new AgvTaskSendDTO()
                        {
                            Sequence = task.TaskNum,
                            BinCode = task.PalletCode,
                            StartPosition = stationManagerStart.stationLocation,
                            EndPosition = stationManagerEnd.stationLocation,
                            TakeActionConfirm = false,
                            TakeActionInform = false,
                            PutActionConfirm = true,
                            PutActionInform = true,
                            MissionData = new List<MissionDataItem>()
                        };
                        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);
                }
                        string taskGroupId = Guid.NewGuid().ToString().Replace("-", "");
                        // èŽ·å–èµ·å§‹ç«™å°
                        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.TaskId}起始点{task.SourceAddress}位置信息");
                        if (finalmission == null) throw new Exception($"未找到任务号${task.TaskId}目标点{task.TargetAddress}位置信息");
                        agvTaskSend.RequestId = taskGroupId;
                        agvTaskSend.MissionCode = task.TaskId.ToString();
                        agvTaskSend.ViewBoardType = "W01";
                        agvTaskSend.ContainerCode = task.PalletCode;
                        //货架子搬运任务
                        MissionDataItem Startingmission = new MissionDataItem() // èµ·ç‚¹
                        {
                            Sequence = 1,
                            Position = stationManagerEnd.StationLocation,
                        };
                        MissionDataItem Finalmission = new MissionDataItem() // ç»ˆç‚¹
                        {
                            Sequence = 2,
                            Position = finalmission.StationLocation,
                            PutDown = true,
                        };
                        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(task);
                        Thread.Sleep(500);
                    }
                    catch (Exception ex)
                    {
                        task.TaskState = (int)TaskAGVCarryStatusEnum.AGV_CarryException;
                        task.ExceptionMessage = ex.Message;
                        _taskService.UpdateData(newTasks);
                    }
                }
            }
            #endregion
            return Task.CompletedTask;