ApiControlController.java 5.5 KB

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