xiaojiao
3 天以前 2c69e642303e9f9c3b2e37194c4c6cdf7e1b3001
ÏîÄ¿´úÂë/WIDESEA_WCSServer/WIDESEAWCS_Tasks/AGV/CommonAGVJob.cs
@@ -4,18 +4,23 @@
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;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.APIEnum;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO.Agv;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_DTO.WMS;
using WIDESEAWCS_IBasicInfoRepository;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
@@ -30,15 +35,86 @@
        private readonly ITaskRepository _taskRepository;
        private readonly ITaskService _taskService;
        private readonly ISys_ConfigService _sys_ConfigService;
        public CommonAGVJob(ITaskRepository taskRepository,ITaskService taskService,ISys_ConfigService configService)
        private readonly IDt_StationManagerRepository _stationManagerRepository;
        public CommonAGVJob(ITaskRepository taskRepository, ITaskService taskService, ISys_ConfigService configService, IDt_StationManagerRepository stationManagerRepository)
        {
            _taskRepository = taskRepository;
            _taskService = taskService;
            _sys_ConfigService = configService;
            _stationManagerRepository = stationManagerRepository;
        }
        public Task Execute(IJobExecutionContext context)
        {
            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()}");
                foreach (var task in newTasks)
                {
                    try
                    {
                        AgvTaskSendDTO agvTaskSend = new AgvTaskSendDTO()
                        {
                            MissionData = new List<MissionDataItem>()
                        };
                        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;
        }