using HslCommunication.WebSocket; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseController; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_IBasicInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; using WIDESEAWCS_Tasks; using WIDESEAWCS_Tasks.ConveyorLineJob; using WIDESEAWCS_Tasks.DBNames; using WIDESEAWCS_Tasks.StackPlateJob; 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 IStationMangerRepository _stationMangerRepository; public TaskController(ITaskService service, IHttpContextAccessor httpContextAccessor, IRouterExtension routerExtension/*, WebSocketServer webSocketServer*/, IStationMangerRepository stationMangerRepository) : base(service) { _httpContextAccessor = httpContextAccessor; _routerExtension = routerExtension; _stationMangerRepository=stationMangerRepository; //_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); } [HttpPost, HttpGet, Route("GetRouteEndPoint"), AllowAnonymous] public WebResponseContent GetRouteEndPoint(string startPoint, int routeType) { return WebResponseContent.Instance.OK(data: _routerExtension.GetEndPoint(startPoint, routeType)); } /// /// 测试堆垛机出库 /// [HttpPost, HttpGet, Route("SCOUT"), AllowAnonymous] public WebResponseContent SCCarrying(string sourceAddress, string roadWay, int taskType) { WMSTaskDTO taskDTO = new WMSTaskDTO() { Id = 1, SourceAddress = sourceAddress, TaskNum = DateTime.Now.ToString("mmss").ObjToInt(), PalletCode= roadWay+ DateTime.Now.ToString("mmss"), RoadWay = roadWay, TaskType = taskType, TaskStatus = TaskStatusEnum.New.ObjToInt(), TargetAddress = "", Grade = 0, WarehouseId = 1, PalletType = 1 }; return Service.ReceiveWMSTask(new List { taskDTO }); } [HttpPost, HttpGet, Route("AssignCPRoadwayNo"), AllowAnonymous] public WebResponseContent AssignCPRoadwayNo() { return Service.AssignCPRoadwayNo(); } /// /// 请求入库任务 /// /// 托盘号 /// 起始地址 /// 巷道 /// [HttpPost, HttpGet, Route("SCIN"), AllowAnonymous] public WebResponseContent RequestWMSTaskSimple(string palletCode, string sourceAddress, string roadWay, int taskType = 0) { return Service.RequestWMSTaskSimple(palletCode,sourceAddress, roadWay, taskType); } /// /// WMS任务完成同步 /// /// /// [HttpPost, HttpGet, Route("RecWMSTaskCompleted"), AllowAnonymous] public WebResponseContent RecWMSTaskCompleted(int taskNum) { return Service.RecWMSTaskCompleted(taskNum); } [HttpPost, HttpGet, Route("YLPurchasePush"), AllowAnonymous] public WebResponseContent YLPurchasePush(string code) { WebResponseContent content = new WebResponseContent(); try { Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == code); IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode); if (device == null) { return content.Error($"未找到对应设备"); } OtherDevice otherDevice = (OtherDevice)device; short request = otherDevice.GetValue(WR_CLineYLDB.WR_Request, stationManger.StationCode); if (request!=86) { return content.Error($"设备状态不允许启动"); } otherDevice.SetValue(WR_CLineYLDB.WR_Reresult, 86, stationManger.StationCode); return content.OK(); } catch (Exception ex) { return content.Error(ex.Message); } } } }