From 3d6db7478d79b824f93708f936c598cc622221f2 Mon Sep 17 00:00:00 2001 From: mk1990 <153958232@qq.com> Date: 星期一, 20 六月 2022 15:10:31 +0800 Subject: [PATCH] fix设备状态查询接口 --- src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java | 108 +++++++++++++++++++++++------------------------------ 1 files changed, 47 insertions(+), 61 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java index d6e614d..ccec148 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java @@ -21,16 +21,22 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import org.apache.commons.compress.utils.IOUtils; +import org.apache.http.HttpResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.context.request.async.DeferredResult; +import javax.servlet.http.HttpServletResponse; import javax.sip.DialogState; +import java.io.*; +import java.nio.file.Files; import java.util.*; @Api(tags = "鍥芥爣璁惧鏌ヨ", value = "鍥芥爣璁惧鏌ヨ") @@ -39,18 +45,18 @@ @RestController @RequestMapping("/api/device/query") public class DeviceQuery { - + private final static Logger logger = LoggerFactory.getLogger(DeviceQuery.class); - + @Autowired private IVideoManagerStorage storager; @Autowired private IRedisCatchStorage redisCatchStorage; - + @Autowired private SIPCommander cmder; - + @Autowired private DeferredResultHolder resultHolder; @@ -74,11 +80,11 @@ }) @GetMapping("/devices/{deviceId}") public ResponseEntity<Device> devices(@PathVariable String deviceId){ - + // if (logger.isDebugEnabled()) { // logger.debug("鏌ヨ瑙嗛璁惧API璋冪敤锛宒eviceId锛�" + deviceId); // } - + Device device = storager.queryVideoDevice(deviceId); return new ResponseEntity<>(device,HttpStatus.OK); } @@ -96,11 +102,11 @@ }) @GetMapping("/devices") public PageInfo<Device> devices(int page, int count){ - + // if (logger.isDebugEnabled()) { // logger.debug("鏌ヨ鎵�鏈夎棰戣澶嘇PI璋冪敤"); // } - + return storager.queryVideoDeviceList(page, count); } @@ -154,7 +160,7 @@ }) @PostMapping("/devices/{deviceId}/sync") public WVPResult<SyncStatus> devicesSync(@PathVariable String deviceId){ - + if (logger.isDebugEnabled()) { logger.debug("璁惧閫氶亾淇℃伅鍚屾API璋冪敤锛宒eviceId锛�" + deviceId); } @@ -187,7 +193,7 @@ }) @DeleteMapping("/devices/{deviceId}/delete") public ResponseEntity<String> delete(@PathVariable String deviceId){ - + if (logger.isDebugEnabled()) { logger.debug("璁惧淇℃伅鍒犻櫎API璋冪敤锛宒eviceId锛�" + deviceId); } @@ -200,6 +206,11 @@ Set<String> allKeys = dynamicTask.getAllKeys(); for (String key : allKeys) { if (key.startsWith(deviceId)) { + Runnable runnable = dynamicTask.get(key); + if (runnable instanceof ISubscribeTask) { + ISubscribeTask subscribeTask = (ISubscribeTask) runnable; + subscribeTask.stop(); + } dynamicTask.stop(key); } } @@ -288,7 +299,8 @@ public ResponseEntity<PageInfo> updateTransport(@PathVariable String deviceId, @PathVariable String streamMode){ Device device = storager.queryVideoDevice(deviceId); device.setStreamMode(streamMode); - storager.updateDevice(device); +// storager.updateDevice(device); + deviceService.updateDevice(device); return new ResponseEntity<>(null,HttpStatus.OK); } @@ -305,51 +317,7 @@ public ResponseEntity<WVPResult<String>> updateDevice(Device device){ if (device != null && device.getDeviceId() != null) { - Device deviceInStore = storager.queryVideoDevice(device.getDeviceId()); - if (!StringUtils.isEmpty(device.getName())) { - deviceInStore.setName(device.getName()); - } - if (!StringUtils.isEmpty(device.getCharset())) { - deviceInStore.setCharset(device.getCharset()); - } - if (!StringUtils.isEmpty(device.getMediaServerId())) { - deviceInStore.setMediaServerId(device.getMediaServerId()); - } - - // 鐩綍璁㈤槄鐩稿叧鐨勪俊鎭� - if (device.getSubscribeCycleForCatalog() > 0) { - if (deviceInStore.getSubscribeCycleForCatalog() == 0 || deviceInStore.getSubscribeCycleForCatalog() != device.getSubscribeCycleForCatalog()) { - deviceInStore.setSubscribeCycleForCatalog(device.getSubscribeCycleForCatalog()); - // 寮�鍚闃� - deviceService.addCatalogSubscribe(deviceInStore); - } - }else if (device.getSubscribeCycleForCatalog() == 0) { - if (deviceInStore.getSubscribeCycleForCatalog() != 0) { - deviceInStore.setSubscribeCycleForCatalog(device.getSubscribeCycleForCatalog()); - // 鍙栨秷璁㈤槄 - deviceService.removeCatalogSubscribe(deviceInStore); - } - } - - // 绉诲姩浣嶇疆璁㈤槄鐩稿叧鐨勪俊鎭� - if (device.getSubscribeCycleForMobilePosition() > 0) { - if (deviceInStore.getSubscribeCycleForMobilePosition() == 0 || deviceInStore.getSubscribeCycleForMobilePosition() != device.getSubscribeCycleForMobilePosition()) { - deviceInStore.setMobilePositionSubmissionInterval(device.getMobilePositionSubmissionInterval()); - deviceInStore.setSubscribeCycleForMobilePosition(device.getSubscribeCycleForMobilePosition()); - // 寮�鍚闃� - deviceService.addMobilePositionSubscribe(deviceInStore); - } - }else if (device.getSubscribeCycleForMobilePosition() == 0) { - if (deviceInStore.getSubscribeCycleForMobilePosition() != 0) { - // 鍙栨秷璁㈤槄 - deviceService.removeMobilePositionSubscribe(deviceInStore); - } - } - - // TODO 鎶ヨ璁㈤槄鐩稿叧鐨勪俊鎭� - - storager.updateDevice(device); - cmder.deviceInfoQuery(device); + deviceService.updateDevice(device); } WVPResult<String> result = new WVPResult<>(); result.setCode(0); @@ -359,7 +327,7 @@ /** * 璁惧鐘舵�佹煡璇㈣姹侫PI鎺ュ彛 - * + * * @param deviceId 璁惧id */ @ApiOperation("璁惧鐘舵�佹煡璇�") @@ -371,9 +339,14 @@ if (logger.isDebugEnabled()) { logger.debug("璁惧鐘舵�佹煡璇PI璋冪敤"); } - Device device = storager.queryVideoDevice(deviceId); String uuid = UUID.randomUUID().toString(); String key = DeferredResultHolder.CALLBACK_CMD_DEVICESTATUS + deviceId; + Device device = storager.queryVideoDevice(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); @@ -381,7 +354,7 @@ 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 @@ -418,8 +391,8 @@ }) @GetMapping("/alarm/{deviceId}") public DeferredResult<ResponseEntity<String>> alarmApi(@PathVariable String deviceId, - @RequestParam(required = false) String startPriority, - @RequestParam(required = false) String endPriority, + @RequestParam(required = false) String startPriority, + @RequestParam(required = false) String endPriority, @RequestParam(required = false) String alarmMethod, @RequestParam(required = false) String alarmType, @RequestParam(required = false) String startTime, @@ -494,4 +467,17 @@ wvpResult.setData(dialogStateMap); return wvpResult; } + + @GetMapping("/snap/{deviceId}/{channelId}") + @ApiOperation(value = "璇锋眰鎴浘", notes = "璇锋眰鎴浘") + public void getSnap(HttpServletResponse resp, @PathVariable String deviceId, @PathVariable String channelId) { + + try { + final InputStream in = Files.newInputStream(new File("snap" + File.separator + deviceId + "_" + channelId + ".jpg").toPath()); + resp.setContentType(MediaType.IMAGE_PNG_VALUE); + IOUtils.copy(in, resp.getOutputStream()); + } catch (IOException e) { + resp.setStatus(HttpServletResponse.SC_NOT_FOUND); + } + } } -- Gitblit v1.8.0