AgvApi.cs 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. using ServiceCenter.Logs;
  2. using ServiceCenter.Redis;
  3. using ServiceCenter.WebApi;
  4. using WCS.WorkEngineering.WebApi.Models.AGV;
  5. using WCS.WorkEngineering.WebApi.Models.AGV.Request;
  6. using WCS.WorkEngineering.WebApi.Models.AGV.Response;
  7. using WCS.WorkEngineering.WebApi.Models.WMS.Request;
  8. using WCS.WorkEngineering.WebApi.Models.WMS.Response;
  9. namespace WCS.WorkEngineering.WebApi.Controllers
  10. {
  11. /// <summary>
  12. /// AGV接口
  13. /// </summary>
  14. public static class AgvApi
  15. {
  16. private static string _AgvUrl = null!;
  17. /// <summary>
  18. /// AGV地址
  19. /// </summary>
  20. public static string AgvUrl
  21. {
  22. get
  23. {
  24. _AgvUrl ??= RedisHub.Default.Check("AgvUrl");
  25. if (string.IsNullOrEmpty(_AgvUrl))
  26. {
  27. throw new KnownException($"请在Redis配置AgvUrl", LogLevelEnum.High);
  28. }
  29. return _AgvUrl;
  30. }
  31. }
  32. #region 任务单生成
  33. /// <summary>
  34. /// 满轮入库
  35. /// </summary>
  36. /// <param name="ctnrCode">RFID</param>
  37. /// <param name="position">取货机台</param>
  38. /// <param name="taskCode">WMS任务号</param>
  39. /// <param name="priority">优先级</param>
  40. /// <returns></returns>
  41. public static GenAgvSchedulingTaskResponse 满轮入库(string ctnrCode, string position, string taskCode, string priority)
  42. {
  43. return GenAgvSchedulingTask("iwms_third", ctnrCode, "4", new List<positionCodeClass>()
  44. {
  45. new positionCodeClass(){ //取货机台
  46. positionCode=position,
  47. type="00"
  48. },
  49. new positionCodeClass(){ //巷道分配点
  50. positionCode="HJLK",
  51. type="00"
  52. },
  53. new positionCodeClass(){ //预分配放货点
  54. positionCode="1015",
  55. type="00"
  56. }
  57. }, priority, taskCode, "ZTGT03", "1");
  58. }
  59. /// <summary>
  60. /// 机台补空
  61. /// </summary>
  62. /// <param name="position">补空机台</param>
  63. /// <param name="taskCode">WMS任务号</param>
  64. /// <param name="priority">优先级</param>
  65. /// <returns></returns>
  66. public static GenAgvSchedulingTaskResponse 机台补空(string position, string taskCode, string priority)
  67. {
  68. return GenAgvSchedulingTask("iWMS", "", "4", new List<positionCodeClass>()
  69. {
  70. new positionCodeClass(){ //合金库空区域
  71. positionCode="21",
  72. type="04"
  73. },
  74. new positionCodeClass(){ //目标机台
  75. positionCode=position,
  76. type="00"
  77. }
  78. }, priority, taskCode, "ZTGT03", "0");
  79. }
  80. /// <summary>
  81. /// 缓存架补空
  82. /// </summary>
  83. /// <param name="taskCode">任务号</param>
  84. /// <param name="nextPositionCode">取货地址</param>
  85. /// <returns></returns>
  86. public static ContinueTaskResponse 缓存架补空(string taskCode, string nextPositionCode)
  87. {
  88. return ContinueTask(taskCode, nextPositionCode);
  89. }
  90. /// <summary>
  91. /// 机台补满
  92. /// </summary>
  93. /// <param name="ctnrCode">RFID</param>
  94. /// <param name="position1">取货站台</param>
  95. /// <param name="position2">放货机台</param>
  96. /// <param name="taskCode">WMS任务号</param>
  97. /// <param name="priority">优先级</param>
  98. /// <returns></returns>
  99. public static GenAgvSchedulingTaskResponse 机台补满(string ctnrCode, string position1, string position2, string taskCode, string priority)
  100. {
  101. return GenAgvSchedulingTask("iWMS", ctnrCode, "1", new List<positionCodeClass>()
  102. {
  103. new positionCodeClass(){ //取货站台
  104. positionCode=position1,
  105. type="00"
  106. },
  107. new positionCodeClass(){ //放货机台
  108. positionCode=position2,
  109. type="00"
  110. }
  111. }, priority, taskCode, "ZTGT21", "-1");
  112. }
  113. /// <summary>
  114. /// Agv任务单生成接口
  115. /// </summary>
  116. /// <param name="clienCode">客户端编号</param>
  117. /// <param name="ctnrCode">容器编号</param>
  118. /// <param name="ctnrTyp">容器类型</param>
  119. /// <param name="positionCodePath">路径</param>
  120. /// <param name="priority">优先级</param>
  121. /// <param name="taskCode">任务单号</param>
  122. /// <param name="taskType">任务类型</param>
  123. /// <param name="hjTaskTy">合金任务模板</param>
  124. /// <returns></returns>
  125. /// <exception cref="KnownException"></exception>
  126. public static GenAgvSchedulingTaskResponse GenAgvSchedulingTask(string clienCode, string ctnrCode, string ctnrTyp, List<positionCodeClass> positionCodePath, string priority, string taskCode, string taskType, string hjTaskTy)
  127. {
  128. var res = APICaller.CallApi2<GenAgvSchedulingTaskResponse>(AgvUrl + "/rcms/services/rest/hikRpcService/genAgvSchedulingTask", new GenAgvSchedulingTaskRequest
  129. {
  130. clientCode = clienCode,
  131. ctnrCode = ctnrCode,
  132. ctnrTyp = ctnrTyp,
  133. interfaceName = "genAgvSchedulingTask",
  134. positionCodePath = positionCodePath,
  135. priority = priority,
  136. reqCode = Guid.NewGuid().ToString().Replace("-", ""),
  137. taskCode = taskCode,
  138. taskTyp = taskType,
  139. hjTaskTy = hjTaskTy,
  140. tokenCode = "56898661ea976b748f328cefa6960434",
  141. });
  142. if (res.code != AgvResponseCode.Success)
  143. {
  144. throw new KnownException(res.message, LogLevelEnum.High);
  145. }
  146. return res;
  147. }
  148. #endregion 任务单生成
  149. #region 继续执行任务
  150. /// <summary>
  151. /// 继续执行任务
  152. /// </summary>
  153. /// <param name="taskCode">AGV任务号</param>
  154. /// <param name="nextPositionCode">下一个地址</param>
  155. /// <returns>接口返回结果</returns>
  156. /// <exception cref="KnownException"></exception>
  157. public static ContinueTaskResponse ContinueTask(string taskCode, string nextPositionCode)
  158. {
  159. var res = APICaller.CallApi2<ContinueTaskResponse>(AgvUrl + "/rcms/services/rest/hikRpcService/continueTask", new ContinueTaskRequest
  160. {
  161. reqCode = Guid.NewGuid().ToString().Replace("-", ""),
  162. taskCode = taskCode,
  163. nextPositionCode = new positionCodeClass()
  164. {
  165. positionCode = nextPositionCode,
  166. type = "00"
  167. }
  168. });
  169. if (res.code != AgvResponseCode.Success)
  170. {
  171. throw new KnownException(res.message, LogLevelEnum.High);
  172. }
  173. return res;
  174. }
  175. #endregion
  176. /// <summary>
  177. /// 取消任务
  178. /// </summary>
  179. /// <param name="taskCode">AGV任务号</param>
  180. /// <returns></returns>
  181. /// <exception cref="KnownException"></exception>
  182. public static CancelTaskResponse CancelAgvTask(string taskCode)
  183. {
  184. var res = APICaller.CallApi2<CancelTaskResponse>(AgvUrl + "/rcms/services/rest/hikRpcService/CancelTaskRequest", new CancelTaskRequest
  185. {
  186. reqCode = Guid.NewGuid().ToString().Replace("-", ""),
  187. taskCode = taskCode,
  188. });
  189. if (res.code != AgvResponseCode.Success)
  190. {
  191. throw new KnownException(res.message, LogLevelEnum.High);
  192. }
  193. return res;
  194. }
  195. public static SRes CancelAgvTask(List<int> taskNo, int state)
  196. {
  197. var res = APICaller.CallApi2<SRes>(AgvUrl + "/rcms/services/rest/hikRpcService/CancelTaskRequest", new CancelTaskRequest
  198. {
  199. //TaskNo = taskNo,
  200. //State = state
  201. });
  202. if (res.ResCode != ResponseStatusCodeEnum.Sucess)
  203. {
  204. throw new KnownException(res.ResMsg, LogLevelEnum.High);
  205. }
  206. return res;
  207. }
  208. }
  209. }