xubinbin
2023-12-12 42a2772d1aa7493bcc4fac3e24ee8eda4eebc23d
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
old mode 100644 new mode 100755
@@ -1,11 +1,10 @@
package com.genersoft.iot.vmp.vmanager.gb28181.device;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSONObject;
import com.genersoft.iot.vmp.conf.DynamicTask;
import com.genersoft.iot.vmp.conf.exception.ControllerException;
import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
import com.genersoft.iot.vmp.gb28181.bean.SubscribeHolder;
import com.genersoft.iot.vmp.gb28181.bean.SyncStatus;
import com.genersoft.iot.vmp.gb28181.task.ISubscribeTask;
import com.genersoft.iot.vmp.gb28181.task.impl.CatalogSubscribeTask;
@@ -15,6 +14,7 @@
import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
import com.genersoft.iot.vmp.service.IDeviceChannelService;
import com.genersoft.iot.vmp.service.IDeviceService;
import com.genersoft.iot.vmp.service.IInviteStreamService;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
import com.genersoft.iot.vmp.vmanager.bean.BaseTree;
@@ -25,7 +25,7 @@
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.commons.compress.utils.IOUtils;
import org.apache.http.HttpResponse;
import org.apache.ibatis.annotations.Options;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -33,22 +33,23 @@
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.async.DeferredResult;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.sip.DialogState;
import javax.sip.InvalidArgumentException;
import javax.sip.SipException;
import java.io.*;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.text.ParseException;
import java.util.*;
@Tag(name  = "国标设备查询", description = "国标设备查询")
@SuppressWarnings("rawtypes")
@CrossOrigin
@RestController
@RequestMapping("/api/device/query")
public class DeviceQuery {
@@ -63,6 +64,9 @@
   @Autowired
   private IRedisCatchStorage redisCatchStorage;
   @Autowired
   private IInviteStreamService inviteStreamService;
   
   @Autowired
   private SIPCommander cmder;
@@ -99,9 +103,11 @@
   @Parameter(name = "page", description = "当前页", required = true)
   @Parameter(name = "count", description = "每页查询数量", required = true)
   @GetMapping("/devices")
   @Options()
   public PageInfo<Device> devices(int page, int count){
      return storager.queryVideoDeviceList(page, count);
//      if (page == null) page = 0;
//      if (count == null) count = 20;
      return storager.queryVideoDeviceList(page, count,null);
   }
   /**
@@ -125,7 +131,7 @@
   @Parameter(name = "online", description = "是否在线")
   @Parameter(name = "channelType", description = "设备/子目录-> false/true")
   @Parameter(name = "catalogUnderDevice", description = "是否直属与设备的目录")
   public PageInfo channels(@PathVariable String deviceId,
   public PageInfo<DeviceChannel> channels(@PathVariable String deviceId,
                                    int page, int count,
                                    @RequestParam(required = false) String query,
                                    @RequestParam(required = false) Boolean online,
@@ -145,7 +151,7 @@
    */
   @Operation(summary = "同步设备通道")
   @Parameter(name = "deviceId", description = "设备国标编号", required = true)
   @PostMapping("/devices/{deviceId}/sync")
   @GetMapping("/devices/{deviceId}/sync")
   public WVPResult<SyncStatus> devicesSync(@PathVariable String deviceId){
      
      if (logger.isDebugEnabled()) {
@@ -183,7 +189,7 @@
      // 清除redis记录
      boolean isSuccess = deviceService.delete(deviceId);
      if (isSuccess) {
         redisCatchStorage.clearCatchByDeviceId(deviceId);
         inviteStreamService.clearInviteInfo(deviceId);
         // 停止此设备的订阅更新
         Set<String> allKeys = dynamicTask.getAllKeys();
         for (String key : allKeys) {
@@ -225,7 +231,7 @@
   @Parameter(name = "online", description = "是否在线")
   @Parameter(name = "channelType", description = "设备/子目录-> false/true")
   @GetMapping("/sub_channels/{deviceId}/{channelId}/channels")
   public PageInfo subChannels(@PathVariable String deviceId,
   public PageInfo<DeviceChannel> subChannels(@PathVariable String deviceId,
                                      @PathVariable String channelId,
                                      int page,
                                      int count,
@@ -239,8 +245,7 @@
         return deviceChannelPageResult;
      }
      PageInfo pageResult = storager.querySubChannels(deviceId, channelId, query, channelType, online, page, count);
      return pageResult;
      return storager.querySubChannels(deviceId, channelId, query, channelType, online, page, count);
   }
   /**
@@ -462,12 +467,16 @@
   @Operation(summary = "请求截图")
   @Parameter(name = "deviceId", description = "设备国标编号", required = true)
   @Parameter(name = "channelId", description = "通道国标编号", required = true)
   public void getSnap(HttpServletResponse resp, @PathVariable String deviceId, @PathVariable String channelId) {
   @Parameter(name = "mark", description = "标识", required = false)
   public void getSnap(HttpServletResponse resp, @PathVariable String deviceId, @PathVariable String channelId, @RequestParam(required = false) String mark) {
      try {
         final InputStream in = Files.newInputStream(new File("snap" + File.separator + deviceId + "_" + channelId + ".jpg").toPath());
         final InputStream in = Files.newInputStream(new File("snap" + File.separator + deviceId + "_" + channelId + (mark == null? ".jpg": ("_" + mark + ".jpg"))).toPath());
         resp.setContentType(MediaType.IMAGE_PNG_VALUE);
         ServletOutputStream outputStream = resp.getOutputStream();
         IOUtils.copy(in, resp.getOutputStream());
         in.close();
         outputStream.close();
      } catch (IOException e) {
         resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
      }