JgrController.cs 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. using AmrControl.ADS;
  2. using AmrControl.Common;
  3. using AmrControl.DB.Models;
  4. using AmrControl.Dto;
  5. using AmrControl.JGR;
  6. using AmrControl.services;
  7. using AmrControl.Vo;
  8. using Microsoft.AspNetCore.Mvc;
  9. using NPOI.SS.Formula.Functions;
  10. using Org.BouncyCastle.Asn1.Ocsp;
  11. using System.Threading.Tasks;
  12. namespace AmrControl.Controllers
  13. {
  14. [ApiController]
  15. public class JgrController : ControllerBase
  16. {
  17. /// <summary>
  18. /// 给车的命令
  19. /// </summary>
  20. /// <returns></returns>
  21. ///
  22. [HttpPost]
  23. [Route("api/v1/jgr/cmd")]
  24. public HttpStatus<string> SetCmd([FromBody] JgrDebugDto debugDto)
  25. {
  26. string str = JGRManager.GetInstance().SetCmd(debugDto);
  27. if(str == "0")
  28. {
  29. HttpStatus<string> status = new HttpStatus<string>();
  30. status.Code = Dto.Code.Success;
  31. return status;
  32. }
  33. else
  34. {
  35. HttpStatus<string> status = new HttpStatus<string>();
  36. status.Code = Dto.Code.Error;
  37. status.Data = str;
  38. return status;
  39. }
  40. }
  41. [HttpGet]
  42. [Route("api/v1/jgr/call-car")]
  43. public HttpStatus<string> CallCar([FromQuery] string stanCode)
  44. {
  45. HttpStatus<string> status = new HttpStatus<string>();
  46. if (!string.IsNullOrEmpty(stanCode) && !string.IsNullOrWhiteSpace(stanCode))
  47. {
  48. var station = JGRManager.GetInstance().getStationByNo(stanCode);
  49. if (station == null || station == default)
  50. {
  51. status.Code = Dto.Code.Error;
  52. status.Msg = "非法的工站编号";
  53. return status;
  54. }
  55. //获取空的地车
  56. string taskId = TaskExecManager.getInstance().genTaskId();
  57. Proxy taskProxy = new Proxy(() =>
  58. {
  59. JGRManager.GetInstance().moveCarToDestAsync(JgrType.RailCar, station.positionX, station.positionY);
  60. });
  61. TaskExecManager.getInstance().addTask(taskProxy, taskId);
  62. status.Code = Dto.Code.Success;
  63. status.Data = taskId;
  64. return status;
  65. }
  66. status.Code = Dto.Code.Error;
  67. status.Msg = "非法的工站编号";
  68. return status;
  69. }
  70. /// <summary>
  71. /// 呼叫空闲轨道车到工位
  72. /// </summary>
  73. /// <param name="dto"></param>
  74. /// <returns></returns>
  75. [HttpPost]
  76. [Route("/api/v1/jgr/call-amr-car")]
  77. public HttpStatus<string> CallAmrCar([FromBody] CallAmrCarDTO dto)
  78. {
  79. HttpStatus<string> status = new HttpStatus<string>();
  80. if (!string.IsNullOrEmpty(dto.stanCode) && !string.IsNullOrWhiteSpace(dto.stanCode))
  81. {
  82. var station = JGRManager.GetInstance().getStationByNo(dto.stanCode);
  83. if (station == null || station == default)
  84. {
  85. status.Code = Dto.Code.Error;
  86. status.Msg = "非法的工站编号";
  87. return status;
  88. }
  89. string taskId = TaskExecManager.getInstance().genTaskId();
  90. Proxy taskProxy = new Proxy(() =>
  91. {
  92. JGRManager.GetInstance().moveCarToDestAsync(JgrType.RailCar, station.positionX, station.positionY);
  93. });
  94. TaskExecManager.getInstance().addTask(taskProxy, taskId);
  95. status.Code = Dto.Code.Success;
  96. status.Data = taskId;
  97. return status;
  98. }
  99. status.Code = Dto.Code.Error;
  100. status.Msg = "非法的工站编号";
  101. return status;
  102. }
  103. /// <summary>
  104. /// 移动车辆到指定位置
  105. /// </summary>
  106. /// <param name="dto"></param>
  107. /// <returns></returns>
  108. [HttpPost]
  109. [Route("/api/v1/jgr/call-car-to-position")]
  110. public HttpStatus<string> callCarToPosition([FromBody] MoveCarToPosDTO dto)
  111. {
  112. HttpStatus<string> status = new();
  113. if (!string.IsNullOrEmpty(dto.carId) && !string.IsNullOrWhiteSpace(dto.carId))
  114. {
  115. //查找车辆信息
  116. List<JGR_Tc_Model> carStatus = JGRManager.GetInstance().GetJgrs();
  117. var carInfo = carStatus.Where(m => m.jgrSN == dto.carId).FirstOrDefault();
  118. if (carInfo == null)
  119. {
  120. status.Code = Dto.Code.Error;
  121. status.Msg = "非法的车辆编号信息";
  122. return status;
  123. }
  124. string taskId = TaskExecManager.getInstance().genTaskId();
  125. int dx = -1, dy = -1;
  126. if (!string.IsNullOrEmpty(dto.stanCode) && !string.IsNullOrWhiteSpace(dto.stanCode))
  127. {
  128. var station = JGRManager.GetInstance().getStationByNo(dto.stanCode);
  129. if (station == null || station == default)
  130. {
  131. status.Code = Dto.Code.Error;
  132. status.Msg = "非法的工站编号";
  133. return status;
  134. }
  135. dx = station.positionX;
  136. dy = station.positionY;
  137. } else
  138. {
  139. //判断新坐标数据是否存在
  140. if(dto.x>0 && dto.y>0)
  141. {
  142. dx = dto.x;
  143. dy = dto.y;
  144. } else
  145. {
  146. status.Code = Dto.Code.Error;
  147. status.Msg = "位置坐标异常";
  148. return status;
  149. }
  150. }
  151. if (dx > 0 && dy > 0)
  152. {
  153. Proxy taskProxy = new Proxy(() =>
  154. {
  155. JGRManager.GetInstance().moveCarToDestAsync(carInfo, dx, dy);
  156. });
  157. TaskExecManager.getInstance().addTask(taskProxy, taskId);
  158. status.Code = Dto.Code.Success;
  159. status.Data = taskId;
  160. return status;
  161. }
  162. else
  163. {
  164. status.Code = Dto.Code.Error;
  165. status.Msg = "位置坐标异常";
  166. return status;
  167. }
  168. }
  169. status.Code = Dto.Code.Error;
  170. status.Msg = "非法的车辆编号信息";
  171. return status;
  172. }
  173. /// <summary>
  174. /// 查询指定车辆状态
  175. /// </summary>
  176. /// <param name="carId"></param>
  177. /// <returns></returns>
  178. [HttpGet]
  179. [Route("api/v1/jgr/query-car-state")]
  180. public HttpStatus<JGR_Tc_Model> QueryCarState([FromQuery] string carId)
  181. {
  182. return new() {
  183. Code = Dto.Code.Success,
  184. Data = JGRManager.GetInstance().Get_Tc_Models().Where(item => item.jgrSN == carId).First()
  185. };
  186. }
  187. /// <summary>
  188. /// 设置车或者充电桩的当前位置
  189. /// </summary>
  190. /// <param name="pos"></param>
  191. /// <returns></returns>
  192. [HttpPost]
  193. [Route("api/v1/jgr/xy")]
  194. public HttpStatus<string> SetXY([FromBody] NewJgrDto pos)
  195. {
  196. HttpStatus<string> status = new HttpStatus<string>();
  197. status.Code = Dto.Code.Success;
  198. status.Data = JGRManager.GetInstance().SetNewXY(pos.SN, pos.positionX, pos.positionY);
  199. return status;
  200. }
  201. }
  202. }