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<Dt_Task>().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<PointDetail>()
|
};
|
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);
|
}
|
}
|
}
|
}
|