using Microsoft.AspNetCore.Mvc; using NetTaste; using Newtonsoft.Json; using PlcSiemens.Core.Extension; using ServiceCenter.Attributes; using ServiceCenter.Logs; using ServiceCenter.Redis; using ServiceCenter.SqlSugars; using WCS.Core; using WCS.Entity; using WCS.WorkEngineering.Extensions; using WCS.WorkEngineering.Protocol.Station; using WCS.WorkEngineering.Systems; using WCS.WorkEngineering.WebApi.Models.AGV; using WCS.WorkEngineering.WebApi.Models.AGV.Request; using WCS.WorkEngineering.WebApi.Models.AGV.Response; namespace WCS.WorkEngineering.WebApi.Controllers { /// /// AGV相关接口控制器 /// [ApiController] [Route("api/[controller]/[action]")] public class AgvController : ControllerBase { /// /// AGV任务下发 /// /// 任务类型 /// agv任务号 /// 起始位置 /// 目标位置 /// 下个位置 /// 容器编码 /// [HttpPost] public string AgvDebug(int type, string code, string startPos,string endPos,string nextPos,string barCode) { try { switch (type) { case 1: AgvApi.盘条入库(startPos,nextPos,endPos,barCode, code, "1"); break; //case 2: //AgvApi.机台补满(); //break; case 3: AgvApi.ContinueTask(code, nextPos); break; case 4: AgvApi.搬运(barCode,startPos,endPos,code, "1"); break; case 5: AgvApi.搬运_wmsStart(barCode, startPos,endPos, code, "1"); break; case 6: AgvApi.出库搬运_wms(barCode, startPos, endPos, code, "1"); break; default: break; } return "成功"; } catch (Exception ex) { return $"Error-----" + $"{ex.Message}------" + $"{ex.StackTrace}"; } } /// /// AGV执行回调 /// /// /// [HttpPost] public AgvCallbackResponse AgvCallback([FromBody] AgvCallbackRequest reqDto) { var key = $"WCS:Lock:AGV:{nameof(AgvCallback)}"; var res = new AgvCallbackResponse() { code = AgvResponseCode.Fail, message = "失败" }; try { if (RedisHub.Default.Get(key) != null) { res.code = AgvResponseCode.Error; res.message = $"[{nameof(AgvCallback)}]--触发并发管控"; } else { RedisHub.Default.Set(key, nameof(AgvCallback)); WCS_TaskInfo taskInfo = null; try { SqlSugarHelper.Do(db => { //跟据AGVid找到对应的AGV任务 var agvTask = db.Default.Queryable().SplitTable(tabs => tabs.Take(2)).First(v => v.AgvID == reqDto.taskCode && v.Status < AGVTaskStatus.MissionCompleted); if (agvTask == null) { res.code = AgvResponseCode.Fail; res.message = "未找到对应的AGV任务"; } else { switch (reqDto.method) { //case "start": //表示请求巷道 // agvTask.Status = AGVTaskStatus.RequestOrPermission1; // break; //case "end": //表示请求巷道 // agvTask.Status = AGVTaskStatus.RequestOrPermission1; // break; //入库任务、叫料任务、搬运任务 case "outbin": //入库小车取货后退出取货位 agvTask.AgvStatus = AGVTaskStatus.LeaveGet; break; case "applyContinue": //表示请求巷道 agvTask.AgvStatus = AGVTaskStatus.RequestOrPermission1; break; case "applyQuqGet": //表示请求取货 agvTask.AgvStatus = AGVTaskStatus.RequestOrPermission2; break; case "applyQuqPut": //表示请求放货 agvTask.AgvStatus = AGVTaskStatus.PutRequestOrPermission; break; case "finishIn": //入库任务完成 agvTask.AgvStatus = AGVTaskStatus.MissionCompleted; break; case "finishOut": //出库任务完成 agvTask.AgvStatus = AGVTaskStatus.MissionCompleted; break; case "finishMove": //搬运任务完成 agvTask.AgvStatus = AGVTaskStatus.MissionCompleted; break; case "tcEnd": //机台补空任务完成 agvTask.AgvStatus = AGVTaskStatus.MissionCompleted; break; case "exc_end": //异常信息上抛-值不匹配 agvTask.AgvStatus = AGVTaskStatus.MissionCompleted; break; case "cancel": //取消任务 //agvTask.AgvStatus = AGVTaskStatus.Cancel; break; default: break; } db.Default.Updateable(agvTask).SplitTable().ExecuteCommand(); res.code = AgvResponseCode.Success; res.message = "成功"; } }); } catch (Exception ex) { res.code = AgvResponseCode.Error; res.message = ex.Message; } } } finally { RedisHub.Default.Del(key); } return res; } } }