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 WIDESEA_DTO.Agv; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO.TaskInfo; 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 UpTasks = new List(); var newTasks = _taskService.Db.Queryable().Where(x => x.TaskState == TaskStatusEnum.AGV_Execute.ObjToInt() || x.TaskState == TaskStatusEnum.New.ObjToInt()).ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList(); foreach (var agvTask in newTasks) { AgvTaskDTO taskDTO = new AgvTaskDTO() { ReqCode = agvTask.TaskNum.ToString(), TaskTyp = AgvTaskType(agvTask.TaskType, agvTask.DeviceCode), PositionCodePath = new List() { new CodePath() { type="", positionCode="" }, new CodePath() { type="", positionCode="" } }, PodTyp = agvTask.PalletType == 1 ? "XX" : "DD", }; WebResponseContent content = _taskService.AgvSendTask(taskDTO); if (content.Status) { agvTask.TaskState = TaskStatusEnum.AGV_Execute.ObjToInt(); UpTasks.Add(agvTask); } } _taskService.UpdateData(UpTasks); } catch (Exception ex) { Console.Out.WriteLine(nameof(AGVJob) + ":" + ex.Message); } return Task.CompletedTask; } public string AgvTaskType(int TaskType, string DeviceCode) { switch (DeviceCode) { case "SC01-CSJ": { return TaskType == TaskTypeEnum.ProductionReturn.ObjToInt() ? "23" : "24"; } case "SC01-ZH": { if (TaskType == TaskTypeEnum.InboundXB.ObjToInt()) return "20"; else if (TaskType == TaskTypeEnum.InboundJT.ObjToInt()) return "21"; else return "22"; } default: throw new NotImplementedException(); } } } }