AgvController.cs 4.9 KB

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