Browse Source

+ 新增uwb视频跟随socketserver

chen.cheng 6 months ago
parent
commit
c619aac4d2
15 changed files with 179 additions and 30 deletions
  1. 2 8
      bd-park/park-backend/park-application/pom.xml
  2. 1 1
      bd-park/park-backend/park-application/src/main/java/com/huashe/park/application/BDApplication.java
  3. 1 1
      bd-park/park-backend/park-application/src/main/java/com/huashe/park/application/web/controller/bd/BdFenceInfoController.java
  4. 20 0
      bd-park/park-backend/park-infrastructure/pom.xml
  5. 2 2
      bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/cfg/forest/CustomForestCfg.java
  6. 2 2
      bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/cfg/forest/UWBForestCfg.java
  7. 1 1
      bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/socket/cfg/EnableSocketServer.java
  8. 1 1
      bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/socket/cfg/SessionHandshakeInterceptor.java
  9. 1 1
      bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/socket/cfg/SocketServerFactoryBean.java
  10. 1 1
      bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/socket/cfg/SocketServerRegistrar.java
  11. 9 10
      bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/socket/cfg/WebSocketConfig.java
  12. 131 0
      bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/socket/client/UWBCfg.java
  13. 1 1
      bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/socket/client/UWBSocketClient.java
  14. 1 1
      bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/socket/server/UwbVideoTraceSocketServer.java
  15. 5 0
      bd-park/park-backend/pom.xml

+ 2 - 8
bd-park/park-backend/park-application/pom.xml

@@ -66,10 +66,7 @@
             <groupId>com.dtflys.forest</groupId>
             <artifactId>forest-spring-boot-starter</artifactId>
         </dependency>
-        <dependency>
-            <groupId>net.dreamlu</groupId>
-            <artifactId>mica-mqtt-client-spring-boot-starter</artifactId>
-        </dependency>
+
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-websocket</artifactId>
@@ -84,10 +81,7 @@
             <artifactId>park-core</artifactId>
             <version>${park.version}</version>
         </dependency>
-        <dependency>
-            <groupId>org.java-websocket</groupId>
-            <artifactId>Java-WebSocket</artifactId>
-        </dependency>
+
 
     </dependencies>
     <build>

+ 1 - 1
bd-park/park-backend/park-application/src/main/java/com/huashe/park/application/BDApplication.java

@@ -1,7 +1,7 @@
 package com.huashe.park.application;
 
 import com.dtflys.forest.springboot.annotation.ForestScan;
-import com.huashe.park.application.socket.cfg.EnableSocketServer;
+import com.huashe.park.infrastructure.socket.cfg.EnableSocketServer;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;

+ 1 - 1
bd-park/park-backend/park-application/src/main/java/com/huashe/park/application/web/controller/bd/BdFenceInfoController.java

@@ -1,7 +1,7 @@
 package com.huashe.park.application.web.controller.bd;
 
 import com.huashe.common.domain.AjaxResult;
-import com.huashe.park.application.socket.server.UwbVideoTraceSocketServer;
+import com.huashe.park.infrastructure.socket.server.UwbVideoTraceSocketServer;
 import com.huashe.park.core.service.IBdFenceInfoService;
 import com.huashe.park.domain.entity.BdFenceInfo;
 import com.ruoyi.common.annotation.Anonymous;

+ 20 - 0
bd-park/park-backend/park-infrastructure/pom.xml

@@ -22,6 +22,10 @@
             <artifactId>park-domain</artifactId>
         </dependency>
         <dependency>
+            <groupId>com.huashe.park</groupId>
+            <artifactId>park-common</artifactId>
+        </dependency>
+        <dependency>
             <groupId>com.dtflys.forest</groupId>
             <artifactId>forest-spring-boot-starter</artifactId>
         </dependency>
@@ -29,6 +33,22 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-autoconfigure</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-websocket</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>net.dreamlu</groupId>
+            <artifactId>mica-mqtt-client-spring-boot-starter</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.java-websocket</groupId>
+            <artifactId>Java-WebSocket</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-core</artifactId>
+        </dependency>
     </dependencies>
 
 </project>

+ 2 - 2
bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/cfg/forest/CustomForestCfg.java

@@ -12,11 +12,11 @@ public class CustomForestCfg {
     private String holiday;
 
     @Autowired
-    private UWBCfg uwbCfg;
+    private UWBForestCfg uwbForestCfg;
 
     @BindingVar("uwbBaseUrl")
     public String getBaseUrl(ForestMethod method) {
-        return uwbCfg.getUwbHost();
+        return uwbForestCfg.getUwbHost();
     }
 
     @BindingVar("holidayBaseUrl")

+ 2 - 2
bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/cfg/forest/UWBCfg.java → bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/cfg/forest/UWBForestCfg.java

@@ -10,8 +10,8 @@ import org.springframework.context.annotation.Configuration;
 @Configuration
 @ConfigurationProperties(prefix = "forest.custom.uwb")
 @ConditionalOnProperty(name = "forest.custom.uwb.enabled", havingValue = "true")
-public class UWBCfg {
-    private static final Logger log = LoggerFactory.getLogger(UWBCfg.class);
+public class UWBForestCfg {
+    private static final Logger log = LoggerFactory.getLogger(UWBForestCfg.class);
 
     private String uwbSocket;
 

+ 1 - 1
bd-park/park-backend/park-application/src/main/java/com/huashe/park/application/socket/cfg/EnableSocketServer.java → bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/socket/cfg/EnableSocketServer.java

@@ -1,4 +1,4 @@
-package com.huashe.park.application.socket.cfg;
+package com.huashe.park.infrastructure.socket.cfg;
 
 import org.springframework.context.annotation.Import;
 

+ 1 - 1
bd-park/park-backend/park-application/src/main/java/com/huashe/park/application/socket/cfg/SessionHandshakeInterceptor.java → bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/socket/cfg/SessionHandshakeInterceptor.java

@@ -1,4 +1,4 @@
-package com.huashe.park.application.socket.cfg;
+package com.huashe.park.infrastructure.socket.cfg;
 
 import org.springframework.http.server.ServerHttpRequest;
 import org.springframework.http.server.ServerHttpResponse;

+ 1 - 1
bd-park/park-backend/park-application/src/main/java/com/huashe/park/application/socket/cfg/SocketServerFactoryBean.java → bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/socket/cfg/SocketServerFactoryBean.java

@@ -1,4 +1,4 @@
-package com.huashe.park.application.socket.cfg;
+package com.huashe.park.infrastructure.socket.cfg;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

+ 1 - 1
bd-park/park-backend/park-application/src/main/java/com/huashe/park/application/socket/cfg/SocketServerRegistrar.java → bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/socket/cfg/SocketServerRegistrar.java

@@ -1,4 +1,4 @@
-package com.huashe.park.application.socket.cfg;
+package com.huashe.park.infrastructure.socket.cfg;
 
 import com.huashe.park.common.websocket.SocketEndPoint;
 import org.slf4j.Logger;

+ 9 - 10
bd-park/park-backend/park-application/src/main/java/com/huashe/park/application/socket/cfg/WebSocketConfig.java → bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/socket/cfg/WebSocketConfig.java

@@ -1,9 +1,7 @@
-package com.huashe.park.application.socket.cfg;
+package com.huashe.park.infrastructure.socket.cfg;
+
+import java.util.Map;
 
-import com.huashe.park.common.SpringBeanUtils;
-import com.huashe.park.common.websocket.SocketEndPoint;
-import com.huashe.park.common.websocket.SocketHandle;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.core.annotation.AnnotationUtils;
@@ -13,7 +11,8 @@ import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
 import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
 import org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean;
 
-import java.util.Map;
+import com.huashe.park.common.SpringBeanUtils;
+import com.huashe.park.common.websocket.SocketEndPoint;
 
 @Configuration
 @EnableWebSocket
@@ -24,10 +23,10 @@ public class WebSocketConfig implements WebSocketConfigurer {
         beansOfType.forEach((k, v) -> {
             SocketEndPoint annotation = AnnotationUtils.findAnnotation(v.getClass(), SocketEndPoint.class);
             registry.addHandler(v, annotation.url())
-                    // 添加拦截器,可以获取连接的param和 header 用作认证鉴权
-                    .addInterceptors(new SessionHandshakeInterceptor())
-                    // 设置运行跨域
-                    .setAllowedOrigins("*");
+                // 添加拦截器,可以获取连接的param和 header 用作认证鉴权
+                .addInterceptors(new SessionHandshakeInterceptor())
+                // 设置运行跨域
+                .setAllowedOrigins("*");
         });
     }
 

+ 131 - 0
bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/socket/client/UWBCfg.java

@@ -0,0 +1,131 @@
+package com.huashe.park.infrastructure.socket.client;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Timer;
+import java.util.TimerTask;
+
+import javax.annotation.Resource;
+
+import cn.hutool.core.map.MapUtil;
+import com.huashe.park.common.DateTimeUtil;
+import com.huashe.park.domain.dto.UWBAuth;
+import com.huashe.park.infrastructure.uwb.UWBWebService;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.java_websocket.client.WebSocketClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import com.alibaba.fastjson2.JSONObject;
+
+@Configuration
+@ConfigurationProperties(prefix = "bd.uwb")
+@ConditionalOnProperty(name = "bd.uwb.enabled", havingValue = "true")
+public class UWBCfg {
+    private static final Logger log = LoggerFactory.getLogger(UWBCfg.class);
+
+    private String uwbSocket;
+
+    private String uwbUsr;
+
+    private String uwbPwd;
+
+    private String uwbHost;
+
+    public String getUwbHost() {
+        return uwbHost;
+    }
+
+    public void setUwbHost(String uwbHost) {
+        this.uwbHost = uwbHost;
+    }
+
+    @Resource
+    private UWBWebService uwbWebService;
+
+    public String getUwbSocket() {
+        return uwbSocket;
+    }
+
+    public void setUwbSocket(String uwbSocket) {
+        this.uwbSocket = uwbSocket;
+    }
+
+    public String getUwbUsr() {
+        return uwbUsr;
+    }
+
+    public void setUwbUsr(String uwbUsr) {
+        this.uwbUsr = uwbUsr;
+    }
+
+    public String getUwbPwd() {
+        return uwbPwd;
+    }
+
+    public void setUwbPwd(String uwbPwd) {
+        this.uwbPwd = uwbPwd;
+    }
+
+    @Bean
+    public WebSocketClient webSocketClient() throws URISyntaxException {
+        String ws = this.getUwbSocket();
+        UWBSocketClient webSocketClient = new UWBSocketClient(new URI(ws));
+        UWBAuth uwbAuth = authUWB();
+        if (ObjectUtils.isEmpty(uwbAuth)) {
+            return null;
+        }
+        webSocketClient.setAuthToken(uwbAuth);
+        webSocketClient.connect();
+        Timer t = new Timer();
+        t.scheduleAtFixedRate(new TimerTask() {
+            @Override
+            public void run() {
+                if (webSocketClient.isClosed()) {
+                    UWBAuth uwbAuth = authUWB();
+                    if (ObjectUtils.isEmpty(uwbAuth)) {
+                        return;
+                    }
+                    webSocketClient.setAuthToken(uwbAuth);
+                    webSocketClient.reconnect();
+                }
+            }
+        }, 1000, 5000);
+        return webSocketClient;
+    }
+
+    private UWBAuth authUWB() {
+        Map map = uwbWebService.exchangeToken(new HashMap<String, Object>() {
+            {
+                {
+                    put("username", uwbUsr);
+                    put("password", uwbPwd);
+                    put("isfresh", 1);
+                }
+            }
+        });
+        Integer code = MapUtil.getInt(map, "code", 400);
+        if (code != 200) {
+            log.error("获取token失败");
+            return null;
+        }
+        JSONObject data = MapUtil.get(map, "data", JSONObject.class);
+        UWBAuth uwbAuth = new UWBAuth();
+        String accessToken = data.getString("access_token");
+        if (StringUtils.isBlank(accessToken)) {
+            log.error("获取token失败{}", data);
+            return null;
+        }
+        uwbAuth.setAccessToken(data.getString("access_token"));
+        uwbAuth.setRegister(Long.toString(DateTimeUtil.timestampMillis()));
+        return uwbAuth;
+    }
+
+}

+ 1 - 1
bd-park/park-backend/park-application/src/main/java/com/huashe/park/application/socket/client/UWBSocketClient.java → bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/socket/client/UWBSocketClient.java

@@ -1,4 +1,4 @@
-package com.huashe.park.application.socket.client;
+package com.huashe.park.infrastructure.socket.client;
 
 import java.net.URI;
 import java.nio.ByteBuffer;

+ 1 - 1
bd-park/park-backend/park-application/src/main/java/com/huashe/park/application/socket/server/UwbVideoTraceSocketServer.java → bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/socket/server/UwbVideoTraceSocketServer.java

@@ -1,4 +1,4 @@
-package com.huashe.park.application.socket.server;
+package com.huashe.park.infrastructure.socket.server;
 
 import java.util.HashMap;
 import java.util.List;

+ 5 - 0
bd-park/park-backend/pom.xml

@@ -249,6 +249,11 @@
             </dependency>
             <dependency>
                 <groupId>com.huashe.park</groupId>
+                <artifactId>park-common</artifactId>
+                <version>${park.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.huashe.park</groupId>
                 <artifactId>park-core</artifactId>
                 <version>${park.version}</version>
             </dependency>