From 3146e63fc05fddf91e6df086e363a4f5584c1d6b Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期四, 01 九月 2022 17:53:00 +0800 Subject: [PATCH] 优化异常处理 --- src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java | 6 +-- web_src/config/index.js | 4 +- src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java | 9 +++- src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceControl.java | 14 ++----- web_src/src/components/StreamProxyList.vue | 2 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java | 4 + src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java | 4 +- src/main/java/com/genersoft/iot/vmp/conf/GlobalExceptionHandler.java | 1 src/main/java/com/genersoft/iot/vmp/conf/GlobalResponseAdvice.java | 16 ++++++++ src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java | 7 ++- src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java | 2 src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/MobilePosition/MobilePositionController.java | 17 ++------ 12 files changed, 47 insertions(+), 39 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/conf/GlobalExceptionHandler.java b/src/main/java/com/genersoft/iot/vmp/conf/GlobalExceptionHandler.java index f5dff67..0c7c3d2 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/GlobalExceptionHandler.java +++ b/src/main/java/com/genersoft/iot/vmp/conf/GlobalExceptionHandler.java @@ -32,6 +32,7 @@ return WVPResult.fail(ErrorCode.ERROR500.getCode(), e.getMessage()); } + /** * 鑷畾涔夊紓甯稿鐞嗭紝 澶勭悊controller涓繑鍥炵殑閿欒 * @param e 寮傚父 diff --git a/src/main/java/com/genersoft/iot/vmp/conf/GlobalResponseAdvice.java b/src/main/java/com/genersoft/iot/vmp/conf/GlobalResponseAdvice.java index e1088e5..bfe344d 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/GlobalResponseAdvice.java +++ b/src/main/java/com/genersoft/iot/vmp/conf/GlobalResponseAdvice.java @@ -1,16 +1,22 @@ package com.genersoft.iot.vmp.conf; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; import com.genersoft.iot.vmp.vmanager.bean.WVPResult; import org.jetbrains.annotations.NotNull; +import org.springframework.boot.autoconfigure.http.HttpMessageConverters; +import org.springframework.context.annotation.Bean; import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; + +import java.util.List; /** * 鍏ㄥ眬缁熶竴杩斿洖缁撴灉 @@ -24,6 +30,7 @@ public boolean supports(@NotNull MethodParameter returnType, @NotNull Class<? extends HttpMessageConverter<?>> converterType) { return true; } + @Override public Object beforeBodyWrite(Object body, @NotNull MethodParameter returnType, @NotNull MediaType selectedContentType, @NotNull Class<? extends HttpMessageConverter<?>> selectedConverterType, @NotNull ServerHttpRequest request, @NotNull ServerHttpResponse response) { @@ -50,4 +57,13 @@ return WVPResult.success(body); } + + /** + * 闃叉杩斿洖string鏃跺嚭閿� + * @return + */ + @Bean + public HttpMessageConverters custHttpMessageConverter() { + return new HttpMessageConverters(new FastJsonHttpMessageConverter()); + } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java index 13f04b6..71944f9 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java @@ -151,7 +151,9 @@ logger.info("[鍙戦�侀敊璇闃匽"); SipSubscribe.Event subscribe = sipSubscribe.getErrorSubscribe(callIdHeader.getCallId()); SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult(timeoutEvent); - subscribe.response(eventResult); + if (subscribe != null){ + subscribe.response(eventResult); + } sipSubscribe.removeOkSubscribe(callIdHeader.getCallId()); sipSubscribe.removeErrorSubscribe(callIdHeader.getCallId()); } diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java index 87271a3..ce46393 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java @@ -184,8 +184,7 @@ if (!"rtp".equals(param.getApp())) { Map<String, String> paramMap = urlParamToMap(param.getParams()); StreamAuthorityInfo streamAuthorityInfo = redisCatchStorage.getStreamAuthorityInfo(param.getApp(), param.getStream()); - if (streamAuthorityInfo == null - || (streamAuthorityInfo.getCallId() != null && !streamAuthorityInfo.getCallId().equals(paramMap.get("callId")))) { + if (streamAuthorityInfo != null && streamAuthorityInfo.getCallId() != null && !streamAuthorityInfo.getCallId().equals(paramMap.get("callId"))) { ret.put("code", 401); ret.put("msg", "Unauthorized"); return new ResponseEntity<>(ret.toString(),HttpStatus.OK); @@ -476,8 +475,12 @@ if (mediaServerItem != null){ if (regist) { StreamAuthorityInfo streamAuthorityInfo = redisCatchStorage.getStreamAuthorityInfo(app, stream); + String callId = null; + if (streamAuthorityInfo != null) { + callId = streamAuthorityInfo.getCallId(); + } StreamInfo streamInfoByAppAndStream = mediaService.getStreamInfoByAppAndStream(mediaServerItem, - app, stream, tracks, streamAuthorityInfo.getCallId()); + app, stream, tracks, callId); item.setStreamInfo(streamInfoByAppAndStream); redisCatchStorage.addStream(mediaServerItem, type, app, stream, item); if (item.getOriginType() == OriginType.RTSP_PUSH.ordinal() diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java index ab1fd55..6288a16 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java @@ -54,9 +54,10 @@ if (mediaInfo == null) { return null; } + String calld = null; StreamAuthorityInfo streamAuthorityInfo = redisCatchStorage.getStreamAuthorityInfo(app, stream); - if (streamAuthorityInfo == null) { - return null; + if (streamAuthorityInfo != null) { + calld = streamAuthorityInfo.getCallId(); } JSONObject mediaList = zlmresTfulUtils.getMediaList(mediaInfo, app, stream); if (mediaList != null) { @@ -68,7 +69,7 @@ JSONObject mediaJSON = JSON.parseObject(JSON.toJSONString(data.get(0)), JSONObject.class); JSONArray tracks = mediaJSON.getJSONArray("tracks"); if (authority) { - streamInfo = getStreamInfoByAppAndStream(mediaInfo, app, stream, tracks, addr,streamAuthorityInfo.getCallId()); + streamInfo = getStreamInfoByAppAndStream(mediaInfo, app, stream, tracks, addr, calld); }else { streamInfo = getStreamInfoByAppAndStream(mediaInfo, app, stream, tracks, addr,null); } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java index e217ca9..aa197ef 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java @@ -296,7 +296,7 @@ public boolean start(String app, String stream) { boolean result = false; StreamProxyItem streamProxy = videoManagerStorager.queryStreamProxy(app, stream); - if (!streamProxy.isEnable() ) { + if (streamProxy != null && !streamProxy.isEnable() ) { JSONObject jsonObject = addStreamProxyToZlm(streamProxy); if (jsonObject == null) { return false; diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java index 706de93..abff3eb 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java @@ -76,8 +76,8 @@ "WHERE " + "1=1 " + " <if test='query != null'> AND (st.app LIKE '%${query}%' OR st.stream LIKE '%${query}%' OR gs.gbId LIKE '%${query}%' OR gs.name LIKE '%${query}%')</if> " + - " <if test='pushing == true' > AND (gs.gbId is null OR st.status=1)</if>" + - " <if test='pushing == false' > AND st.status=0</if>" + + " <if test='pushing == true' > AND (gs.gbId is null OR st.pushIng=1)</if>" + + " <if test='pushing == false' > AND st.pushIng=0</if>" + " <if test='mediaServerId != null' > AND st.mediaServerId=#{mediaServerId} </if>" + "order by st.createTime desc" + " </script>"}) diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/MobilePosition/MobilePositionController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/MobilePosition/MobilePositionController.java index 6b24f99..e5d928a 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/MobilePosition/MobilePositionController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/MobilePosition/MobilePositionController.java @@ -3,6 +3,7 @@ import java.util.List; import java.util.UUID; +import com.genersoft.iot.vmp.conf.exception.ControllerException; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.MobilePosition; import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; @@ -10,6 +11,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; import com.genersoft.iot.vmp.service.IDeviceService; import com.genersoft.iot.vmp.storager.IVideoManagerStorage; +import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; import com.genersoft.iot.vmp.vmanager.bean.WVPResult; import com.github.pagehelper.util.StringUtil; @@ -136,13 +138,9 @@ @Parameter(name = "expires", description = "璁㈤槄瓒呮椂鏃堕棿", required = true) @Parameter(name = "interval", description = "涓婃姤鏃堕棿闂撮殧", required = true) @GetMapping("/subscribe/{deviceId}") - public String positionSubscribe(@PathVariable String deviceId, + public void positionSubscribe(@PathVariable String deviceId, @RequestParam String expires, @RequestParam String interval) { - String msg = ((expires.equals("0")) ? "鍙栨秷" : "") + "璁㈤槄璁惧" + deviceId + "鐨勭Щ鍔ㄤ綅缃�"; - if (logger.isDebugEnabled()) { - logger.debug(msg); - } if (StringUtil.isEmpty(interval)) { interval = "5"; @@ -151,13 +149,8 @@ device.setSubscribeCycleForMobilePosition(Integer.parseInt(expires)); device.setMobilePositionSubmissionInterval(Integer.parseInt(interval)); deviceService.updateDevice(device); - String result = msg; - if (deviceService.removeMobilePositionSubscribe(device)) { - result += "锛屾垚鍔�"; - } else { - result += "锛屽け璐�"; + if (!deviceService.removeMobilePositionSubscribe(device)) { + throw new ControllerException(ErrorCode.ERROR100); } - - return result; } } diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceControl.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceControl.java index 30320e6..fe363a6 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceControl.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceControl.java @@ -56,20 +56,14 @@ @Operation(summary = "杩滅▼鍚姩鎺у埗鍛戒护") @Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true) @GetMapping("/teleboot/{deviceId}") - public String teleBootApi(@PathVariable String deviceId) { + public void teleBootApi(@PathVariable String deviceId) { if (logger.isDebugEnabled()) { logger.debug("璁惧杩滅▼鍚姩API璋冪敤"); } Device device = storager.queryVideoDevice(deviceId); - boolean sucsess = cmder.teleBootCmd(device); - if (sucsess) { - JSONObject json = new JSONObject(); - json.put("DeviceID", deviceId); - json.put("Result", "OK"); - return json.toJSONString(); - } else { - logger.warn("璁惧杩滅▼鍚姩API璋冪敤澶辫触锛�"); - throw new ControllerException(ErrorCode.ERROR100.getCode(), "璁惧杩滅▼鍚姩API璋冪敤澶辫触锛�"); + if (!cmder.teleBootCmd(device)) { + logger.warn("璁惧杩滅▼鍚姩API璋冪敤澶辫触锛�"); + throw new ControllerException(ErrorCode.ERROR100); } } diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java index bf42189..fa1de00 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java @@ -244,7 +244,7 @@ @Parameter(name = "serverGBId", description = "涓婄骇骞冲彴鐨勫浗鏍囩紪鍙�") @DeleteMapping("/delete/{serverGBId}") @ResponseBody - public String deletePlatform(@PathVariable String serverGBId) { + public void deletePlatform(@PathVariable String serverGBId) { if (logger.isDebugEnabled()) { logger.debug("鍒犻櫎涓婄骇骞冲彴API璋冪敤"); @@ -278,9 +278,7 @@ dynamicTask.stop(key); // 鍒犻櫎缂撳瓨鐨勮闃呬俊鎭� subscribeHolder.removeAllSubscribe(parentPlatform.getServerGBId()); - if (deleteResult) { - return null; - } else { + if (!deleteResult) { throw new ControllerException(ErrorCode.ERROR100); } } diff --git a/web_src/config/index.js b/web_src/config/index.js index b1e1cbe..c5a7452 100644 --- a/web_src/config/index.js +++ b/web_src/config/index.js @@ -12,14 +12,14 @@ assetsPublicPath: '/', proxyTable: { '/debug': { - target: 'http://localhost:18080', + target: 'http://localhost:38080', changeOrigin: true, pathRewrite: { '^/debug': '/' } }, '/static/snap': { - target: 'http://localhost:18080', + target: 'http://localhost:38080', changeOrigin: true, // pathRewrite: { // '^/static/snap': '/static/snap' diff --git a/web_src/src/components/StreamProxyList.vue b/web_src/src/components/StreamProxyList.vue index 99b2226..5eff9d5 100644 --- a/web_src/src/components/StreamProxyList.vue +++ b/web_src/src/components/StreamProxyList.vue @@ -220,7 +220,7 @@ this.getListLoading = true; this.$axios({ method: 'get', - url:`/api/media/stream_info_by_app_and_stream`, + url:`/api/push/getPlayUrl`, params: { app: row.app, stream: row.stream, -- Gitblit v1.8.0