AgvController.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. using Microsoft.AspNetCore.Mvc;
  2. using ServiceCenter.Redis;
  3. using ServiceCenter.SqlSugars;
  4. using WCS.Entity;
  5. using WCS.WorkEngineering.WebApi.Models.AGV;
  6. using WCS.WorkEngineering.WebApi.Models.AGV.Request;
  7. using WCS.WorkEngineering.WebApi.Models.AGV.Response;
  8. namespace WCS.WorkEngineering.WebApi.Controllers
  9. {
  10. /// <summary>
  11. /// AGV相关接口控制器
  12. /// </summary>
  13. [ApiController]
  14. [Route("api/[controller]/[action]")]
  15. public class AgvController : ControllerBase
  16. {
  17. /// <summary>
  18. /// AGV任务下发测试
  19. /// </summary>
  20. /// <param name="type">任务类型</param>
  21. /// <param name="code">RFID</param>
  22. /// <param name="pos">目标位置</param>
  23. /// <returns></returns>
  24. [HttpPost]
  25. public string AgvDebug(int type, string code, string pos)
  26. {
  27. try
  28. {
  29. switch (type)
  30. {
  31. case 1:
  32. //AgvApi.机台补空(pos, code, "1");
  33. break;
  34. case 2:
  35. //AgvApi.机台补满();
  36. break;
  37. case 3:
  38. //AgvApi.满轮入库(code, pos, Guid.NewGuid().ToString().Replace("-", ""), "1");
  39. break;
  40. }
  41. return "成功";
  42. }
  43. catch (Exception ex)
  44. {
  45. return $"Error-----" +
  46. $"{ex.Message}------" +
  47. $"{ex.StackTrace}";
  48. }
  49. }
  50. /// <summary>
  51. /// AGV执行回调
  52. /// </summary>
  53. /// <param name="reqDto"></param>
  54. /// <returns></returns>
  55. [HttpPost]
  56. public AgvCallbackResponse AgvCallback([FromBody] AgvCallbackRequest reqDto)
  57. {
  58. var key = $"WCS:Lock:AGV:{nameof(AgvCallback)}";
  59. var res = new AgvCallbackResponse() { code = AgvResponseCode.Success, message = "失败" };
  60. try
  61. {
  62. RedisHub.Do(key, redis =>
  63. {
  64. SqlSugarHelper.Do(db =>
  65. {
  66. //跟据AGVid找到对应的AGV任务
  67. var agvTask = db.Default.Queryable<WCS_AgvTaskInfo>().SplitTable(tabs => tabs.Take(2))
  68. .First(v => v.AgvID == reqDto.taskCode && v.Status < AGVTaskStatus.MissionCompleted);
  69. if (agvTask == null)
  70. {
  71. res.code = AgvResponseCode.Fail;
  72. res.message = "未找到对应的AGV任务";
  73. return;
  74. }
  75. switch (reqDto.method)
  76. {
  77. case "applyContinue": //表示请求巷道
  78. agvTask.AgvStatus = AGVTaskStatus.RequestOrPermission1;
  79. break;
  80. case "outbin": //小车退出取货位
  81. agvTask.AgvStatus = AGVTaskStatus.LeaveGet;
  82. break;
  83. case "applySecurity": //表示请求放货或取货
  84. agvTask.AgvStatus = AGVTaskStatus.RequestOrPermission2;
  85. break;
  86. case "applySecurityPut": //表示请求放货或取货
  87. agvTask.AgvStatus = AGVTaskStatus.PutRequestOrPermission;
  88. break;
  89. case "FJend": //任务完成
  90. agvTask.AgvStatus = AGVTaskStatus.MissionCompleted;
  91. break;
  92. case "cancel": //取消任务
  93. //agvTask.AgvStatus = AGVTaskStatus.Cancel;
  94. break;
  95. }
  96. db.Default.Updateable(agvTask).SplitTable(x=>x.Take(2)).ExecuteCommand();
  97. res.code = AgvResponseCode.Success;
  98. res.message = "成功";
  99. });
  100. });
  101. }
  102. catch (Exception ex)
  103. {
  104. res.code = AgvResponseCode.Error;
  105. res.message = ex.Message;
  106. }
  107. return res;
  108. }
  109. }
  110. }