AgvController.cs 4.8 KB

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