| 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<ITaskService, Dt_Task> | 
|     { | 
|         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<WMSTaskDTO> 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); | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 回复AGV安全信号 | 
|         /// </summary> | 
|         /// <param name="taskNum"></param> | 
|         /// <returns></returns> | 
|         [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); | 
|             } | 
|         } | 
|     } | 
| } |