using Microsoft.IdentityModel.Tokens; using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; 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_DTO.Agv; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; namespace WIDESEAWCS_Tasks { public partial class AGV_CPJob { public void SendAGVTask() { try { var newTasks = _taskService.Db.Queryable().Where(x => (x.TaskState == TaskStatusEnum.AGV_Execute.ObjToInt()|| x.TaskState == TaskStatusEnum.New.ObjToInt()) && x.DeviceCode=="AGV").ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList(); if (newTasks.Count>0) { foreach (var task in newTasks) { try { Guid guid = Guid.NewGuid(); AgvTaskSendDTO agvTaskSend = new AgvTaskSendDTO() { SysToken=guid.ToString().Replace("-",""), ReceiveTaskID=task.TaskNum.ToString(), MapCode="01", Variables=new List() }; Dt_StationManger stationMangerStart = _stationMangerRepository.QueryFirst(x=>x.StationCode==task.CurrentAddress); Dt_StationManger stationMangerEnd = _stationMangerRepository.QueryFirst(x => x.StationCode == task.NextAddress); //添加任务路径及高度 if (stationMangerStart !=null && stationMangerEnd != null) { PointDetail pointDetail1 = new PointDetail() { Code= "GoodPoint", Value=stationMangerStart.AGVStationCode }; //判断是否有前置点 if (!string.IsNullOrEmpty(stationMangerStart.AGVFrontCode)) { PointDetail pointDetail2 = new PointDetail() { Code = "CostPoint", Value = stationMangerStart.AGVFrontCode }; agvTaskSend.Variables.Add(pointDetail2); } PointDetail pointDetail3 = new PointDetail() { Code = "PointB", Value = stationMangerEnd.AGVStationCode }; //判断是否有前置点 if (!string.IsNullOrEmpty(stationMangerEnd.AGVFrontCode)) { PointDetail pointDetail4 = new PointDetail() { Code = "PointA", Value = stationMangerEnd.AGVFrontCode }; agvTaskSend.Variables.Add(pointDetail4); } PointDetail pointDetail5 = new PointDetail() { Code = "QUQTH", Value = stationMangerStart.AGVStationHeight.ToString() }; PointDetail pointDetail6 = new PointDetail() { Code = "FHMH", Value = stationMangerEnd.AGVStationHeight.ToString() }; agvTaskSend.Variables.Add(pointDetail1); agvTaskSend.Variables.Add(pointDetail3); agvTaskSend.Variables.Add(pointDetail5); agvTaskSend.Variables.Add(pointDetail6); } else { throw new Exception("未找到AGV站点"); } //取放任务模版 if (stationMangerStart.StationCode.Contains("PNT") && !stationMangerEnd.StationCode.Contains("PNT"))//请求放 { agvTaskSend.TaskCode = "DUIGAO1"; if (stationMangerStart.StationType == 998 || stationMangerEnd.StationType == 998)//潜伏顶升车 { agvTaskSend.TaskCode = "DUOLUN1"; } } else if (!stationMangerStart.StationCode.Contains("PNT") && stationMangerEnd.StationCode.Contains("PNT"))//请求取 { agvTaskSend.TaskCode = "DUIGAO2"; if (stationMangerStart.StationType==998 || stationMangerEnd.StationType == 998)//潜伏顶升车 { agvTaskSend.TaskCode = "DUOLUN2"; } } else if (!stationMangerStart.StationCode.Contains("PNT") && !stationMangerEnd.StationCode.Contains("PNT"))//请求取放 { agvTaskSend.TaskCode = "DUIGAO3"; if (stationMangerStart.StationType == 998 || stationMangerEnd.StationType == 998)//潜伏顶升车 { agvTaskSend.TaskCode = "DUOLUN3"; } } else if (stationMangerStart.StationCode.Contains("PNT") && stationMangerEnd.StationCode.Contains("PNT"))//无请求 { agvTaskSend.TaskCode = "DUIGAO4"; if (stationMangerStart.StationType == 998 || stationMangerEnd.StationType == 998)//潜伏顶升车 { agvTaskSend.TaskCode = "DUOLUN4"; } } if (stationMangerStart.StationType == 998 || stationMangerEnd.StationType == 998)//潜伏顶升车 { agvTaskSend.Variables.FirstOrDefault(x => x.Code == "FHMH").Value = "0"; agvTaskSend.Variables.FirstOrDefault(x => x.Code == "GoodPoint").Value = ""; //下发任务AGV任务集群 agvTaskSend.AgvGroupCode = "QianF"; PointDetail pointDetail2 = new PointDetail() { Code = "CostPoint", Value = stationMangerStart.AGVStationCode }; agvTaskSend.Variables.Add(pointDetail2); } //延时 Thread.Sleep(500); //发送AGV任务 WebResponseContent content = _taskService.AgvSendTask(agvTaskSend, APIEnum.AgvSendTask); if (!content.Status) throw new Exception(content.Message); task.Dispatchertime = DateTime.Now; _taskService.UpdateTask(task, TaskStatusEnum.AGV_Executing); Thread.Sleep(200); } catch (Exception ex) { task.TaskState = TaskStatusEnum.Exception.ObjToInt(); task.ExceptionMessage = ex.Message; } } //更新任务 if (newTasks.Count > 0) { _taskService.UpdateData(newTasks); } } } catch (Exception ex) { WriteError(nameof(AGV_CPJob), ex.Message, ex); } } } }