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