using AutoMapper;
|
using Newtonsoft.Json;
|
using Quartz;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Reflection.Metadata;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEAWCS_Common.TaskEnum;
|
using WIDESEAWCS_Core;
|
using WIDESEAWCS_Core.Helper;
|
using WIDESEAWCS_DTO.TaskInfo;
|
using WIDESEAWCS_DTO.WMSInfo;
|
using WIDESEAWCS_ITaskInfoService;
|
using WIDESEAWCS_Model.Models;
|
using WIDESEAWCS_QuartzJob;
|
using WIDESEAWCS_QuartzJob.Service;
|
|
namespace WIDESEAWCS_Tasks
|
{
|
[DisallowConcurrentExecution]
|
public class AGVJob : JobBase, IJob
|
{
|
public readonly ITaskService _taskService;
|
private readonly ITaskExecuteDetailService _taskExecuteDetailService;
|
private readonly IRouterService _routerService;
|
private readonly IMapper _mapper;
|
|
public AGVJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper)
|
{
|
_taskService = taskService;
|
_taskExecuteDetailService = taskExecuteDetailService;
|
_routerService = routerService;
|
_mapper = mapper;
|
}
|
public Task Execute(IJobExecutionContext context)
|
{
|
try
|
{
|
List<Dt_Task> UpTasks = new List<Dt_Task>();
|
var newTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == (int)TaskInStatusEnum.InNew).ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList();
|
foreach (var agvTaskDTO in GetAGVTaskDTOs(newTasks))
|
{
|
var ResultData = HttpHelper.PostAsync(AGVInterfaceAddress.taskSent, agvTaskDTO.ToJson(), headers: new Dictionary<string, string>());
|
if (ResultData.Result == null) throw new Exception($"AGV任务下发接口请求超时");
|
var content = JsonConvert.DeserializeObject<AGVReturnInfo>(ResultData.Result);
|
if (content.code == "20000")
|
{
|
var task = newTasks.Where(x => x.TaskNum == agvTaskDTO.outID.ObjToInt()).First();
|
task.TaskState = TaskInStatusEnum.AGV_InSend.ObjToInt();
|
UpTasks.Add(task);
|
}
|
else
|
{
|
var task = newTasks.Where(x => x.TaskNum == agvTaskDTO.outID.ObjToInt()).First();
|
task.ExceptionMessage = content.message;
|
UpTasks.Add(task);
|
}
|
Thread.Sleep(1000);
|
}
|
var count = _taskService.Db.Updateable(UpTasks).ExecuteCommand();
|
}
|
catch (Exception ex)
|
{
|
Console.Out.WriteLine(nameof(AGVJob) + ":" + ex.Message);
|
}
|
return Task.CompletedTask;
|
}
|
|
public List<AGVTaskDTO> GetAGVTaskDTOs(List<Dt_Task> newTasks)
|
{
|
List<AGVTaskDTO> agvTaskDTOs = new List<AGVTaskDTO>();
|
foreach (var task in newTasks)
|
{
|
AGVTaskDTO aGVTaskDTO = new AGVTaskDTO()
|
{
|
type = "01",
|
level = "2",
|
outID = task.TaskNum.ToString(),
|
points = new List<point>()
|
};
|
point point1 = new point()
|
{
|
sn = "01",
|
pointCode = task.CurrentAddress,
|
pointType = "02"
|
};
|
aGVTaskDTO.points.Add(point1);
|
point point2 = new point()
|
{
|
sn = "02",
|
pointCode = task.NextAddress,
|
pointType = "04",
|
matCode = task.PalletCode
|
};
|
aGVTaskDTO.points.Add(point2);
|
agvTaskDTOs.Add(aGVTaskDTO);
|
}
|
return agvTaskDTOs;
|
}
|
}
|
}
|