AgvController.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. using Microsoft.AspNetCore.Mvc;
  2. using ServiceCenter.SqlSugars;
  3. using WCS.Entity;
  4. using WCS.WorkEngineering.WebApi.Models.AGV;
  5. using WCS.WorkEngineering.WebApi.Models.AGV.Request;
  6. using WCS.WorkEngineering.WebApi.Models.AGV.Response;
  7. namespace WCS.WorkEngineering.WebApi.Controllers
  8. {
  9. /// <summary>
  10. /// AGV相关接口控制器
  11. /// </summary>
  12. [ApiController]
  13. [Route("api/[controller]/[action]")]
  14. public class AgvController : ControllerBase
  15. {
  16. /// <summary>
  17. /// AGV任务下发测试
  18. /// </summary>
  19. /// <param name="type">任务类型</param>
  20. /// <param name="code">RFID</param>
  21. /// <param name="pos">目标位置</param>
  22. /// <returns></returns>
  23. [HttpPost]
  24. public string AgvDebug(int type, string code, string pos)
  25. {
  26. try
  27. {
  28. switch (type)
  29. {
  30. case 1:
  31. AgvApi.机台补空(pos, code, "1");
  32. break;
  33. case 2:
  34. //AgvApi.机台补满();
  35. break;
  36. case 3:
  37. AgvApi.满轮入库(code, pos, Guid.NewGuid().ToString().Replace("-", ""), "1");
  38. break;
  39. default:
  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(AgvCallbackRequest reqDto)
  58. {
  59. var msg = "成功";
  60. var code = AgvResponseCode.Success;
  61. try
  62. {
  63. SqlSugarHelper.Do(db =>
  64. {
  65. //跟据AGVid找到对应的AGV任务
  66. var agvTask = db.Default.Queryable<WCS_AgvTaskInfo>().SplitTable(tabs => tabs.Take(3)).First(v => v.AgvID == reqDto.taskCode);
  67. if (agvTask == null)
  68. {
  69. msg = "未找到对应的AGV任务";
  70. code = AgvResponseCode.Fail;
  71. }
  72. switch (reqDto.method)
  73. {
  74. case "applyContinue": //表示请求巷道
  75. agvTask.Status = AGVTaskStatus.RequestOrPermission1;
  76. break;
  77. case "applySecurity": //表示请求放货或取货
  78. //agvTask.Status = AGVTaskStatus.RequestOrPermission2;
  79. AgvApi.ContinueTask(reqDto.taskCode, "1015");
  80. break;
  81. case "hjend_2": //补空任务完成
  82. agvTask.Status = AGVTaskStatus.MissionCompleted;
  83. break;
  84. case "endhjBM": //取满任务完成
  85. agvTask.Status = AGVTaskStatus.MissionCompleted;
  86. break;
  87. case "applyEmpty": //申请补空任务
  88. db.Default.Insertable(new WCS_AgvTaskInfo()
  89. {
  90. AgvID = reqDto.taskCode,
  91. TaskType = AGVTaskType.CallForMaterial,
  92. Status = AGVTaskStatus.NewBuild,
  93. }).AddQueue();
  94. AgvApi.缓存架补空(reqDto.taskCode, "1016");
  95. break;
  96. case "exc_end": //异常信息上抛-值不匹配
  97. agvTask.Status = AGVTaskStatus.MissionCompleted;
  98. break;
  99. default:
  100. break;
  101. }
  102. db.Default.Updateable(agvTask).AddQueue();
  103. db.Default.SaveQueues();
  104. });
  105. }
  106. catch (Exception ex)
  107. {
  108. code = AgvResponseCode.Error;
  109. msg = ex.Message;
  110. }
  111. var res = new AgvCallbackResponse() { code = code, message = msg };
  112. return res;
  113. }
  114. }
  115. }