648540858
2022-07-03 e78c402a248ff252ee93e724396c62d806087fab
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
@@ -15,6 +15,7 @@
import com.genersoft.iot.vmp.service.IDeviceService;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
import com.genersoft.iot.vmp.vmanager.bean.BaseTree;
import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
@@ -317,12 +318,7 @@
   public ResponseEntity<WVPResult<String>> updateDevice(Device device){
      if (device != null && device.getDeviceId() != null) {
         // TODO 报警订阅相关的信息
         deviceService.updateDevice(device);
//         cmder.deviceInfoQuery(device);
      }
      WVPResult<String> result = new WVPResult<>();
      result.setCode(0);
@@ -347,6 +343,11 @@
      Device device = storager.queryVideoDevice(deviceId);
      String uuid = UUID.randomUUID().toString();
      String key = DeferredResultHolder.CALLBACK_CMD_DEVICESTATUS + deviceId;
      DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String>>(2*1000L);
      if(device == null) {
         result.setResult(new ResponseEntity(String.format("设备%s不存在", deviceId),HttpStatus.OK));
         return result;
      }
      cmder.deviceStatusQuery(device, event -> {
         RequestMessage msg = new RequestMessage();
         msg.setId(uuid);
@@ -354,7 +355,6 @@
         msg.setData(String.format("获取设备状态失败,错误码: %s, %s", event.statusCode, event.msg));
         resultHolder.invokeResult(msg);
      });
        DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String>>(2*1000L);
      result.onTimeout(()->{
         logger.warn(String.format("获取设备状态超时"));
         // 释放rtpserver
@@ -480,4 +480,99 @@
         resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
      }
   }
   /**
    * 查询国标树
    * @param deviceId 设备ID
    * @param parentId 父ID
    * @param page 当前页
    * @param count 每页条数
    * @return 国标设备
    */
   @ApiOperation("查询国标树")
   @ApiImplicitParams({
         @ApiImplicitParam(name = "deviceId", value = "设备ID", required = true, dataTypeClass = String.class),
         @ApiImplicitParam(name = "parentId", value = "父ID", required = false, dataTypeClass = String.class),
         @ApiImplicitParam(name = "onlyCatalog", value = "只获取目录", required = false, dataTypeClass = Boolean.class),
         @ApiImplicitParam(name="page", value = "当前页", required = true, dataTypeClass = Integer.class),
         @ApiImplicitParam(name="count", value = "每页条数", required = true, dataTypeClass = Integer.class),
   })
   @GetMapping("/tree/{deviceId}")
   public ResponseEntity<PageInfo> getTree(@PathVariable String deviceId, @RequestParam(required = false) String parentId, @RequestParam(required = false) Boolean onlyCatalog, int page, int count){
      if (page <= 0) {
         page = 1;
      }
      if (onlyCatalog == null) {
         onlyCatalog = false;
      }
      List<BaseTree<DeviceChannel>> treeData = deviceService.queryVideoDeviceTree(deviceId, parentId, onlyCatalog);
      if (treeData == null || (page - 1) * count > treeData.size()) {
         PageInfo<BaseTree<DeviceChannel>> pageInfo = new PageInfo<>();
         pageInfo.setPageNum(page);
         pageInfo.setTotal(treeData == null? 0 : treeData.size());
         pageInfo.setSize(0);
         pageInfo.setList(new ArrayList<>());
         return new ResponseEntity<>(pageInfo,HttpStatus.OK);
      }
      int toIndex = Math.min(page * count, treeData.size());
      // 处理分页
      List<BaseTree<DeviceChannel>> trees = treeData.subList((page - 1) * count, toIndex);
      PageInfo<BaseTree<DeviceChannel>> pageInfo = new PageInfo<>();
      pageInfo.setPageNum(page);
      pageInfo.setTotal(treeData.size());
      pageInfo.setSize(trees.size());
      pageInfo.setList(trees);
      return new ResponseEntity<>(pageInfo,HttpStatus.OK);
   }
   /**
    * 查询国标树下的通道
    * @param deviceId 设备ID
    * @param parentId 父ID
    * @param page 当前页
    * @param count 每页条数
    * @return 国标设备
    */
   @ApiOperation("查询国标树下的通道")
   @ApiImplicitParams({
         @ApiImplicitParam(name = "deviceId", value = "设备ID", required = true, dataTypeClass = String.class),
         @ApiImplicitParam(name = "parentId", value = "父ID", required = false, dataTypeClass = String.class),
         @ApiImplicitParam(name="page", value = "当前页", required = true, dataTypeClass = Integer.class),
         @ApiImplicitParam(name="count", value = "每页条数", required = true, dataTypeClass = Integer.class),
   })
   @GetMapping("/tree/channel/{deviceId}")
   public ResponseEntity<PageInfo> getChannelInTreeNode(@PathVariable String deviceId, @RequestParam(required = false) String parentId, int page, int count){
      if (page <= 0) {
         page = 1;
      }
      List<DeviceChannel> treeData = deviceService.queryVideoDeviceInTreeNode(deviceId, parentId);
      if (treeData == null || (page - 1) * count > treeData.size()) {
         PageInfo<BaseTree<DeviceChannel>> pageInfo = new PageInfo<>();
         pageInfo.setPageNum(page);
         pageInfo.setTotal(treeData == null? 0 : treeData.size());
         pageInfo.setSize(0);
         pageInfo.setList(new ArrayList<>());
         return new ResponseEntity<>(pageInfo,HttpStatus.OK);
      }
      int toIndex = Math.min(page * count, treeData.size());
      // 处理分页
      List<DeviceChannel> trees = treeData.subList((page - 1) * count, toIndex);
      PageInfo<DeviceChannel> pageInfo = new PageInfo<>();
      pageInfo.setPageNum(page);
      pageInfo.setTotal(treeData.size());
      pageInfo.setSize(trees.size());
      pageInfo.setList(trees);
      return new ResponseEntity<>(pageInfo,HttpStatus.OK);
   }
}