123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- 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
- {
- /// <summary>
- /// AGV相关接口控制器
- /// </summary>
- [ApiController]
- [Route("api/[controller]/[action]")]
- public class AgvController : ControllerBase
- {
- /// <summary>
- /// AGV任务下发
- /// </summary>
- /// <param name="type">任务类型</param>
- /// <param name="code">agv任务号</param>
- /// <param name="startPos">起始位置</param>
- /// <param name="endPos">目标位置</param>
- /// <param name="nextPos">下个位置</param>
- /// <param name="barCode">容器编码</param>
- /// <returns></returns>
- [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}";
- }
- }
-
- /// <summary>
- /// AGV执行回调
- /// </summary>
- /// <param name="reqDto"></param>
- /// <returns></returns>
- [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<WCS_AgvTaskInfo>().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;
- }
- }
- }
|