ApiControlController.java 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. package com.genersoft.iot.vmp.web.gb28181;
  2. import com.genersoft.iot.vmp.conf.exception.ControllerException;
  3. import com.genersoft.iot.vmp.gb28181.bean.Device;
  4. import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
  5. import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
  6. import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
  7. import org.slf4j.Logger;
  8. import org.slf4j.LoggerFactory;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.web.bind.annotation.GetMapping;
  11. import org.springframework.web.bind.annotation.RequestMapping;
  12. import org.springframework.web.bind.annotation.RequestParam;
  13. import org.springframework.web.bind.annotation.RestController;
  14. import javax.sip.InvalidArgumentException;
  15. import javax.sip.SipException;
  16. import java.text.ParseException;
  17. /**
  18. * API兼容:设备控制
  19. */
  20. @RestController
  21. @RequestMapping(value = "/api/v1/control")
  22. public class ApiControlController {
  23. private final static Logger logger = LoggerFactory.getLogger(ApiControlController.class);
  24. @Autowired
  25. private SIPCommander cmder;
  26. @Autowired
  27. private IVideoManagerStorage storager;
  28. /**
  29. * 设备控制 - 云台控制
  30. * @param serial 设备编号
  31. * @param command 控制指令 允许值: left, right, up, down, upleft, upright, downleft, downright, zoomin, zoomout, stop
  32. * @param channel 通道序号
  33. * @param code 通道编号
  34. * @param speed 速度(0~255) 默认值: 129
  35. * @return
  36. */
  37. @GetMapping(value = "/ptz")
  38. private void list(String serial,String command,
  39. @RequestParam(required = false)Integer channel,
  40. @RequestParam(required = false)String code,
  41. @RequestParam(required = false)Integer speed){
  42. if (logger.isDebugEnabled()) {
  43. logger.debug("模拟接口> 设备云台控制 API调用,deviceId:{} ,channelId:{} ,command:{} ,speed:{} ",
  44. serial, code, command, speed);
  45. }
  46. if (channel == null) {channel = 0;}
  47. if (speed == null) {speed = 0;}
  48. Device device = storager.queryVideoDevice(serial);
  49. if (device == null) {
  50. throw new ControllerException(ErrorCode.ERROR100.getCode(), "device[ " + serial + " ]未找到");
  51. }
  52. int cmdCode = 0;
  53. switch (command){
  54. case "left":
  55. cmdCode = 2;
  56. break;
  57. case "right":
  58. cmdCode = 1;
  59. break;
  60. case "up":
  61. cmdCode = 8;
  62. break;
  63. case "down":
  64. cmdCode = 4;
  65. break;
  66. case "upleft":
  67. cmdCode = 10;
  68. break;
  69. case "upright":
  70. cmdCode = 9;
  71. break;
  72. case "downleft":
  73. cmdCode = 6;
  74. break;
  75. case "downright":
  76. cmdCode = 5;
  77. break;
  78. case "zoomin":
  79. cmdCode = 16;
  80. break;
  81. case "zoomout":
  82. cmdCode = 32;
  83. break;
  84. case "stop":
  85. cmdCode = 0;
  86. break;
  87. default:
  88. break;
  89. }
  90. // 默认值 50
  91. try {
  92. cmder.frontEndCmd(device, code, cmdCode, speed, speed, speed);
  93. } catch (SipException | InvalidArgumentException | ParseException e) {
  94. logger.error("[命令发送失败] 云台控制: {}", e.getMessage());
  95. throw new ControllerException(ErrorCode.ERROR100.getCode(), "命令发送失败: " + e.getMessage());
  96. }
  97. }
  98. /**
  99. * 设备控制 - 预置位控制
  100. * @param serial 设备编号
  101. * @param code 通道编号,通过 /api/v1/device/channellist 获取的 ChannelList.ID, 该参数和 channel 二选一传递即可
  102. * @param channel 通道序号, 默认值: 1
  103. * @param command 控制指令 允许值: set, goto, remove
  104. * @param preset 预置位编号(1~255)
  105. * @param name 预置位名称, command=set 时有效
  106. * @return
  107. */
  108. @GetMapping(value = "/preset")
  109. private void list(String serial,String command,
  110. @RequestParam(required = false)Integer channel,
  111. @RequestParam(required = false)String code,
  112. @RequestParam(required = false)String name,
  113. @RequestParam(required = false)Integer preset){
  114. if (logger.isDebugEnabled()) {
  115. logger.debug("模拟接口> 预置位控制 API调用,deviceId:{} ,channelId:{} ,command:{} ,name:{} ,preset:{} ",
  116. serial, code, command, name, preset);
  117. }
  118. if (channel == null) {channel = 0;}
  119. Device device = storager.queryVideoDevice(serial);
  120. if (device == null) {
  121. throw new ControllerException(ErrorCode.ERROR100.getCode(), "device[ " + serial + " ]未找到");
  122. }
  123. int cmdCode = 0;
  124. switch (command){
  125. case "set":
  126. cmdCode = 129;
  127. break;
  128. case "goto":
  129. cmdCode = 130;
  130. break;
  131. case "remove":
  132. cmdCode = 131;
  133. break;
  134. default:
  135. break;
  136. }
  137. try {
  138. cmder.frontEndCmd(device, code, cmdCode, 0, preset, 0);
  139. } catch (SipException | InvalidArgumentException | ParseException e) {
  140. logger.error("[命令发送失败] 预置位控制: {}", e.getMessage());
  141. throw new ControllerException(ErrorCode.ERROR100.getCode(), "命令发送失败: " + e.getMessage());
  142. }
  143. }
  144. }