|  |  | 
 |  |  | 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; | 
 |  |  | 
 |  |  |    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); | 
 |  |  | 
 |  |  |       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); | 
 |  |  | 
 |  |  |          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 | 
 |  |  | 
 |  |  |          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); | 
 |  |  |    } | 
 |  |  | } |