using HslCommunication.WebSocket; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using SqlSugar.Extensions; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseController; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_TaskInfoRepository; using WIDESEAWCS_TaskInfoService; using WIDESEAWCS_Tasks; namespace WIDESEAWCS_WCSServer.Controllers.Task { [Route("api/Task")] [ApiController] public class TaskController : ApiBaseController { private readonly IHttpContextAccessor _httpContextAccessor; private readonly IRouterExtension _routerExtension; //private readonly WebSocketServer _webSocketServer; private readonly ITaskService _taskService; private readonly ITaskRepository _taskRepository; public TaskController(ITaskService service, IHttpContextAccessor httpContextAccessor, IRouterExtension routerExtension ,ITaskService taskService,ITaskRepository taskRepository /*, WebSocketServer webSocketServer*/) : base(service) { _httpContextAccessor = httpContextAccessor; _routerExtension = routerExtension; _taskService = taskService; _taskRepository = taskRepository; //_webSocketServer = webSocketServer; } [HttpPost, Route("ReceiveTask"), AllowAnonymous] public WebResponseContent ReceiveWMSTask([FromBody] List taskDTOs) { return Service.ReceiveWMSTask(taskDTOs); } [HttpPost, HttpGet, Route("RequestAssignLocation"), AllowAnonymous] public string? RequestAssignLocation(int taskNum, string roadwayNo) { return Service.RequestAssignLocation(taskNum, roadwayNo); } [HttpPost, HttpGet, Route("UpdateTaskExceptionMessage")] public WebResponseContent UpdateTaskExceptionMessage(int taskNum, string message) { return Service.UpdateTaskExceptionMessage(taskNum, message); } //[HttpPost, HttpGet, Route("UpdateTaskStatusToNext")] //public WebResponseContent UpdateTaskStatusToNext(int taskNum) //{ // return Service.UpdateTaskStatusToNext(taskNum); //} [HttpPost, HttpGet, Route("TaskStatusRecovery")] public WebResponseContent TaskStatusRecovery(int taskNum) { return Service.TaskStatusRecovery(taskNum); } [HttpPost, HttpGet, Route("RollbackTaskStatusToLast")] public WebResponseContent RollbackTaskStatusToLast(int taskNum) { return Service.RollbackTaskStatusToLast(taskNum); } /// /// 回复AGV安全信号 /// /// /// [HttpPost, HttpGet, Route("SendSecureReplyToAgv")] public WebResponseContent SendSecureReplyToAgv(int taskNum) { return Service.SendSecureReplyToAgv(taskNum); } [HttpPost, HttpGet, Route("GetRouteEndPoint"), AllowAnonymous] public WebResponseContent GetRouteEndPoint(string startPoint, int routeType) { return WebResponseContent.Instance.OK(data: _routerExtension.GetEndPoint(startPoint, routeType)); } [HttpPost, HttpGet, Route("AgvCarrying"), AllowAnonymous] public WebResponseContent AgvCarrying(int row, int startColumn, int endColumn, int layer, int targetLayer) { return Service.AgvCarrying(row, startColumn, endColumn, layer, targetLayer); } //[HttpPost, HttpGet, Route("WebSocketPushMessage"), AllowAnonymous] //public WebResponseContent WebSocketPushMessage(string message) //{ // try // { // _webSocketServer.PublishAllClientPayload(message); // return WebResponseContent.Instance.OK(); // } // catch(Exception ex) // { // return WebResponseContent.Instance.Error(ex.Message); // } //} [HttpPost, HttpGet, Route("RecWMSTaskCompleted"), AllowAnonymous] public WebResponseContent RecWMSTaskCompleted(int taskNum) { return Service.RecWMSTaskCompleted(taskNum); } //堆垛机任务重发 [HttpPost, HttpGet, Route("StackerCraneTaskResending"), AllowAnonymous] public WebResponseContent StackerCraneTaskResending(int taskNum) { try { Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == taskNum); if (task == null) { return WebResponseContent.Instance.Error("未找到该任务信息"); } if(task.TaskState == TaskStatusEnum.SC_Executing.ObjToInt()) { _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute); } else { return WebResponseContent.Instance.Error("非堆垛机执行中状态"); } return WebResponseContent.Instance.OK(); } catch(Exception ex) { return WebResponseContent.Instance.Error(ex.Message); } } //堆垛机任务优先执行 [HttpPost, HttpGet, Route("StackerCraneTaskPriority"), AllowAnonymous] public WebResponseContent StackerCraneTaskPriority(int taskNum) { try { Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == taskNum); if (task == null) { return WebResponseContent.Instance.Error("未找到该任务信息"); } if (task.TaskState == TaskStatusEnum.SC_Execute.ObjToInt()) { task.Grade = 98; } else { return WebResponseContent.Instance.Error("非堆垛机待执行状态"); } _taskRepository.UpdateData(task); return WebResponseContent.Instance.OK(); } catch (Exception ex) { return WebResponseContent.Instance.Error(ex.Message); } } } }