소스 검색

+ 视频跟随uwb坐标监控

chen.cheng 6 달 전
부모
커밋
bcf49ba965
16개의 변경된 파일130개의 추가작업 그리고 70개의 파일을 삭제
  1. 0 6
      bd-park/park-backend/park-application/pom.xml
  2. 23 15
      bd-park/park-backend/park-application/src/main/java/com/huashe/park/application/engine/EvtFusionEngine.java
  3. 10 1
      bd-park/park-backend/park-application/src/main/java/com/huashe/park/application/engine/LocationInfo.java
  4. 2 2
      bd-park/park-backend/park-application/src/main/java/com/huashe/park/application/engine/impl/FenceBreakInEngine.java
  5. 3 2
      bd-park/park-backend/park-application/src/main/java/com/huashe/park/application/engine/impl/RoomBreakInEngine.java
  6. 13 12
      bd-park/park-backend/park-application/src/main/java/com/huashe/park/application/engine/impl/VideoTrailEngine.java
  7. 7 0
      bd-park/park-backend/park-application/src/main/java/com/huashe/park/application/mqtt/UWBLocationListener.java
  8. 17 13
      bd-park/park-backend/park-application/src/main/java/com/huashe/park/application/web/controller/bd/BdFenceInfoController.java
  9. 5 5
      bd-park/park-backend/park-application/src/main/resources/application-druid.yml
  10. 0 5
      bd-park/park-backend/park-application/src/main/resources/application.yml
  11. 33 0
      bd-park/park-backend/park-cloud/src/main/java/com/huashe/park/cloud/controller/AdmEmsElecPgIndexController.java
  12. 0 2
      bd-park/park-backend/park-core/pom.xml
  13. 3 0
      bd-park/park-backend/park-core/src/main/java/com/huashe/park/core/service/impl/BdCameraInfoServiceImpl.java
  14. 8 5
      bd-park/park-backend/park-core/src/main/java/com/huashe/park/core/service/impl/BdFenceInfoServiceImpl.java
  15. 5 1
      bd-park/park-backend/park-domain/src/main/java/com/huashe/park/domain/dto/VideoFence.java
  16. 1 1
      bd-park/park-backend/pom.xml

+ 0 - 6
bd-park/park-backend/park-application/pom.xml

@@ -22,12 +22,6 @@
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     </properties>
     <dependencies>
-        <!-- spring-boot-devtools -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-devtools</artifactId>
-            <optional>true</optional> <!-- 表示依赖不会传递 -->
-        </dependency>
 
         <!-- swagger3-->
         <dependency>

+ 23 - 15
bd-park/park-backend/park-application/src/main/java/com/huashe/park/application/engine/EvtFusionEngine.java

@@ -1,17 +1,20 @@
 package com.huashe.park.application.engine;
 
-import com.alibaba.fastjson2.JSONObject;
-import com.huashe.common.utils.StringUtils;
-import com.huashe.park.common.DateTimeUtil;
+import java.util.List;
+import java.util.concurrent.LinkedBlockingQueue;
+
+import javax.annotation.Resource;
+
+
 import com.huashe.park.core.redis.RedisProxy;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 
-import javax.annotation.Resource;
-import java.util.List;
-import java.util.concurrent.LinkedBlockingQueue;
+import com.alibaba.fastjson2.JSONObject;
+import com.huashe.common.utils.StringUtils;
+import com.huashe.park.common.DateTimeUtil;
 
 public abstract class EvtFusionEngine implements IFusionEngine {
     private final static Logger logger = LoggerFactory.getLogger(EvtFusionEngine.class);
@@ -34,7 +37,6 @@ public abstract class EvtFusionEngine implements IFusionEngine {
         }
     }
 
-
     public void setEngineName(String name) {
         this.engineName = name;
     }
@@ -57,10 +59,13 @@ public abstract class EvtFusionEngine implements IFusionEngine {
             threadPoolTaskExecutor.execute(() -> {
                 while (true) {
                     try {
+                        logger.info("{} is running", this.engineName);
                         JSONObject msg = queue.get(finalI).take();
-                        LocationInfo locationInfoNew = new LocationInfo(msg.getDouble("latitude"), msg.getDouble("longitude"), msg.getLong("srcTimestamp"));
+                        LocationInfo locationInfoNew = new LocationInfo(msg.getDouble("latitude"),
+                            msg.getDouble("longitude"), msg.getLong("srcTimestamp"));
                         locationInfoNew.setMsg(msg);
                         String key = getKey(locationInfoNew);
+                        logger.info("{} is running {}", this.engineName, key);
                         if (!redisService.hasKey(key)) {
                             getBizId(locationInfoNew);
                             redisService.setCacheObject(key, locationInfoNew);
@@ -74,14 +79,16 @@ public abstract class EvtFusionEngine implements IFusionEngine {
                             locationInfo.setSrcTimestamp(locationInfoNew.getSrcTimestamp());
                             locationInfo.setHandleTimestamp(DateTimeUtil.timestampMillis());
                             redisService.setCacheObject(key, locationInfo);
-                        } else {
+                        }
+                        else {
                             // 老数据释放
                             processOlderData(locationInfo);
                             getBizId(locationInfoNew);
                             redisService.setCacheObject(key, locationInfoNew);
                             newEvtCallback(locationInfoNew);
                         }
-                    } catch (InterruptedException e) {
+                    }
+                    catch (InterruptedException e) {
                         logger.error("{} error", this.engineName, e);
                         // 重置中断状态
                         Thread.currentThread().interrupt();
@@ -90,7 +97,8 @@ public abstract class EvtFusionEngine implements IFusionEngine {
                             logger.error("任务已中断,不再继续执行");
                             break;
                         }
-                    } catch (Exception e) {
+                    }
+                    catch (Exception e) {
                         logger.error("{} error", this.engineName, e);
                     }
                 }
@@ -101,20 +109,20 @@ public abstract class EvtFusionEngine implements IFusionEngine {
     /**
      * 计算字符串的哈希值并对某个数取余数。
      *
-     * @param str    字符串
+     * @param str 字符串
      * @param modulo 取余数的基数
      * @return 字符串哈希值对 modulo 取余的结果
      */
     private int computeHashModulo(String str, int modulo) {
         long hash = 0;
         long base = 31;
-        long baseMod = base % modulo;  // 预计算乘法因子
+        long baseMod = base % modulo; // 预计算乘法因子
 
         for (char c : str.toCharArray()) {
-            hash = (hash * baseMod + c) % modulo;  // 避免整数溢出
+            hash = (hash * baseMod + c) % modulo; // 避免整数溢出
         }
 
-        return (int) (hash % modulo);  // 最终结果转换为 int
+        return (int) (hash % modulo); // 最终结果转换为 int
     }
 
 }

+ 10 - 1
bd-park/park-backend/park-application/src/main/java/com/huashe/park/application/engine/LocationInfo.java

@@ -1,10 +1,16 @@
 package com.huashe.park.application.engine;
 
+import java.io.Serializable;
+
 import com.alibaba.fastjson2.JSONObject;
 
-public class LocationInfo {
+public class LocationInfo implements Serializable {
+    private static final long serialVersionUID = 1L;
+
     double latitude;
+
     double longitude;
+
     long srcTimestamp; // 时间戳,单位毫秒
 
     long handleTimestamp;
@@ -15,6 +21,9 @@ public class LocationInfo {
 
     JSONObject msg;
 
+    public LocationInfo() {
+    }
+
     public LocationInfo(double latitude, double longitude, long srcTimestamp) {
         this.latitude = latitude;
         this.longitude = longitude;

+ 2 - 2
bd-park/park-backend/park-application/src/main/java/com/huashe/park/application/engine/impl/FenceBreakInEngine.java

@@ -6,7 +6,7 @@ import java.util.concurrent.LinkedBlockingQueue;
 
 import javax.annotation.PostConstruct;
 
-import com.huashe.park.core.redis.RedisProxy;
+import com.ruoyi.common.core.redis.RedisCache;
 import org.apache.commons.lang3.ObjectUtils;
 import org.locationtech.jts.geom.Polygon;
 import org.slf4j.Logger;
@@ -47,7 +47,7 @@ public class FenceBreakInEngine extends EvtFusionEngine {
     private IBdFenceVioEvtService vioEvtService;
 
     @Autowired
-    private RedisProxy redisService;
+    private RedisCache redisService;
 
     @Autowired
     private MqttClientTemplate client;

+ 3 - 2
bd-park/park-backend/park-application/src/main/java/com/huashe/park/application/engine/impl/RoomBreakInEngine.java

@@ -7,7 +7,8 @@ import java.util.concurrent.LinkedBlockingQueue;
 import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
 
-import com.huashe.park.core.redis.RedisProxy;
+
+import com.ruoyi.common.core.redis.RedisCache;
 import org.apache.commons.lang3.ObjectUtils;
 import org.locationtech.jts.geom.Polygon;
 import org.slf4j.Logger;
@@ -52,7 +53,7 @@ public class RoomBreakInEngine extends EvtFusionEngine {
     private IBdFenceVioEvtService vioEvtService;
 
     @Resource
-    private RedisProxy redisService;
+    private RedisCache redisService;
 
     @Autowired
     private MqttClientTemplate client;

+ 13 - 12
bd-park/park-backend/park-application/src/main/java/com/huashe/park/application/engine/impl/VideoTrailEngine.java

@@ -8,6 +8,7 @@ import java.util.concurrent.LinkedBlockingQueue;
 import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
 
+import com.huashe.park.core.redis.RedisProxy;
 import org.apache.commons.lang3.ObjectUtils;
 import org.locationtech.jts.geom.Polygon;
 import org.slf4j.Logger;
@@ -26,7 +27,6 @@ import com.huashe.park.application.web.core.config.MqttCfg;
 import com.huashe.park.common.DateTimeUtil;
 import com.huashe.park.common.consts.BDConst;
 import com.huashe.park.common.geo.GeoUtils;
-import com.huashe.park.core.redis.RedisProxy;
 import com.huashe.park.core.service.IBdCameraInfoService;
 import com.huashe.park.domain.dto.VideoFence;
 import com.huashe.park.infrastructure.socket.server.UwbVideoTraceSocketServer;
@@ -96,7 +96,7 @@ public class VideoTrailEngine extends EvtFusionEngine {
      */
     @Override
     public String getKey(LocationInfo msg) {
-        return String.format("%s-%s-%s", BDConst.REDIS_KEY.FENCE_VIDEO_TRACE_KEY, msg.getMsg().getString("tagId"),
+        return String.format("%s%s-%s", BDConst.REDIS_KEY.FENCE_VIDEO_TRACE_KEY, msg.getMsg().getString("key"),
             msg.getMsg().getString("fenceId"));
     }
 
@@ -107,6 +107,7 @@ public class VideoTrailEngine extends EvtFusionEngine {
 
     @Override
     public void newEvtCallback(LocationInfo msg) {
+        logger.info("视频轨迹: {}", msg);
         videoTraceSocketServer.sendMessage(msg.getMsg().getString("tagId"), JSONObject.from(msg));
     }
 
@@ -116,26 +117,26 @@ public class VideoTrailEngine extends EvtFusionEngine {
             return;
         }
         Polygon polygon;
-        logger.debug("fence info size: {}", msg);
+        HashMap<String, Object> video;
+        JSONObject location;
+        JSONObject properties = (JSONObject) JSONPath.eval(msg, "$.data.features[0].properties");
         for (VideoFence fenceInfo : cacheList) {
             polygon = GeoUtils.getPolygon(fenceInfo.getPoly());
-            JSONObject properties = (JSONObject) JSONPath.eval(msg, "$.data.features.properties");
             String tagId = properties.getString("tag_id");
+            logger.info("?>>>>>fence bool size: {}",
+                GeoUtils.isPointInGeoFence(polygon, properties.getString("pos_x"), properties.getString("pos_y")));
             if (GeoUtils.isPointInGeoFence(polygon, properties.getString("pos_x"), properties.getString("pos_y"))) {
-                logger.debug("?>>>>>fence info size: {}", properties);
-                JSONObject location = new JSONObject();
+                location = new JSONObject();
                 location.put("fenceId", fenceInfo.getId());
                 location.put("fenceName", fenceInfo.getDefenceName());
                 location.put("key", tagId);
                 location.put("srcTimestamp", DateTimeUtil.timestampMillis());
                 location.put("longitude", properties.getString("pos_x"));
                 location.put("latitude", properties.getString("pos_y"));
-                location.put("video", new HashMap<String, Object>() {
-                    {
-                        put("cameraName", fenceInfo.getCameraName());
-                        put("cameraStream", fenceInfo.getCameraStream());
-                    }
-                });
+                video = new HashMap<>();
+                video.put("cameraName", fenceInfo.getCameraName());
+                video.put("cameraStream", fenceInfo.getCameraStream());
+                location.put("video", video);
                 push(location);
                 break;
             }

+ 7 - 0
bd-park/park-backend/park-application/src/main/java/com/huashe/park/application/mqtt/UWBLocationListener.java

@@ -18,6 +18,8 @@ import net.dreamlu.iot.mqtt.spring.client.MqttClientSubscribe;
 import net.dreamlu.iot.mqtt.spring.client.event.MqttConnectedEvent;
 import net.dreamlu.iot.mqtt.spring.client.event.MqttDisconnectEvent;
 
+import javax.annotation.PostConstruct;
+
 @Service
 @ConditionalOnBean(MqttCfg.class)
 public class UWBLocationListener {
@@ -29,6 +31,11 @@ public class UWBLocationListener {
     @Autowired
     private VideoTrailEngine videoTrailEngine;
 
+    @PostConstruct
+    public void init() {
+        videoTrailEngine.start();
+    }
+
     @EventListener
     public void onConnected(MqttConnectedEvent event) {
         logger.info("MqttConnectedEvent:{}", event);

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

@@ -1,15 +1,11 @@
 package com.huashe.park.application.web.controller.bd;
 
-import com.huashe.common.domain.AjaxResult;
-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;
-import com.ruoyi.common.annotation.Log;
-import com.ruoyi.common.core.controller.BaseController;
-import com.ruoyi.common.core.page.TableDataInfo;
-import com.ruoyi.common.enums.BusinessType;
-import com.ruoyi.common.utils.poi.ExcelUtil;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.DeleteMapping;
@@ -21,9 +17,17 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletResponse;
-import java.util.List;
+import com.huashe.common.domain.AjaxResult;
+import com.huashe.park.core.service.IBdFenceInfoService;
+import com.huashe.park.domain.entity.BdFenceInfo;
+import com.huashe.park.infrastructure.socket.server.UwbVideoTraceSocketServer;
+import com.ruoyi.common.annotation.Anonymous;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
 
 /**
  * 围栏基础信息Controller

+ 5 - 5
bd-park/park-backend/park-application/src/main/resources/application-druid.yml

@@ -32,12 +32,12 @@ spring:
         username: root
         password: root
       # 从库数据源
-      slave:
+      pkb:
         # 从数据源开关/默认关闭
-        enabled: false
-        url:
-        username:
-        password:
+        enabled: true
+        url: jdbc:mysql://172.192.10.105:30002/hs_bds?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        username: root
+        password: root
       # 初始连接数
       initialSize: 5
       # 最小连接池数量

+ 0 - 5
bd-park/park-backend/park-application/src/main/resources/application.yml

@@ -66,11 +66,6 @@ spring:
       max-file-size: 10MB
       # 设置总上传的文件大小
       max-request-size: 20MB
-  # 服务模块
-  devtools:
-    restart:
-      # 热部署开关
-      enabled: true
 forest:
   max-connections: 1000        # 连接池最大连接数
   connect-timeout: 3000        # 连接超时时间,单位为毫秒

+ 33 - 0
bd-park/park-backend/park-cloud/src/main/java/com/huashe/park/cloud/controller/AdmEmsElecPgIndexController.java

@@ -0,0 +1,33 @@
+package com.huashe.park.cloud.controller;
+
+import java.util.ArrayList;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.huashe.park.domain.entity.BdFenceInfo;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.page.TableDataInfo;
+
+import io.swagger.annotations.Api;
+
+/**
+ * 电网设施指标Controller
+ * 
+ * @author ruoyi
+ * @date 2024-08-30
+ */
+@RestController
+@RequestMapping("/elecPgIndex")
+@Api(value = "AdmEmsElecPgIndexController", description = "电网设施指标")
+public class AdmEmsElecPgIndexController extends BaseController {
+
+    @GetMapping("/list")
+    public TableDataInfo list(BdFenceInfo elecPgIndex) {
+        startPage();
+
+        return getDataTable(new ArrayList<>());
+    }
+
+}

+ 0 - 2
bd-park/park-backend/park-core/pom.xml

@@ -23,7 +23,6 @@
         <ruoyi.version>3.8.8</ruoyi.version>
         <commons.io.version>2.13.0</commons.io.version>
         <apache.commons.version>3.12.0</apache.commons.version>
-        <fastjson.version>2.0.43</fastjson.version>
     </properties>
 
     <dependencies>
@@ -31,7 +30,6 @@
         <dependency>
             <groupId>com.alibaba.fastjson2</groupId>
             <artifactId>fastjson2</artifactId>
-            <version>${fastjson.version}</version>
         </dependency>
         <!-- Apache Lang3 -->
         <dependency>

+ 3 - 0
bd-park/park-backend/park-core/src/main/java/com/huashe/park/core/service/impl/BdCameraInfoServiceImpl.java

@@ -2,6 +2,8 @@ package com.huashe.park.core.service.impl;
 
 import java.util.List;
 
+import com.huashe.common.annotation.DataSource;
+import com.huashe.common.enums.DataSourceType;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -17,6 +19,7 @@ import com.huashe.park.domain.entity.BdCameraInfo;
  * @date 2025-01-21
  */
 @Service
+@DataSource(DataSourceType.PKB)
 public class BdCameraInfoServiceImpl implements IBdCameraInfoService {
     @Autowired
     private BdCameraInfoMapper bdCameraInfoMapper;

+ 8 - 5
bd-park/park-backend/park-core/src/main/java/com/huashe/park/core/service/impl/BdFenceInfoServiceImpl.java

@@ -1,15 +1,17 @@
 package com.huashe.park.core.service.impl;
 
+import java.util.List;
 
-import com.huashe.park.common.geo.GeoUtils;
-import com.huashe.park.core.mapper.BdFenceInfoMapper;
-import com.huashe.park.core.service.IBdFenceInfoService;
-import com.huashe.park.domain.entity.BdFenceInfo;
 import org.locationtech.jts.geom.Point;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
+import com.huashe.common.annotation.DataSource;
+import com.huashe.common.enums.DataSourceType;
+import com.huashe.park.common.geo.GeoUtils;
+import com.huashe.park.core.mapper.BdFenceInfoMapper;
+import com.huashe.park.core.service.IBdFenceInfoService;
+import com.huashe.park.domain.entity.BdFenceInfo;
 
 /**
  * 围栏基础信息Service业务层处理
@@ -18,6 +20,7 @@ import java.util.List;
  * @date 2024-10-14
  */
 @Service
+@DataSource(DataSourceType.PKB)
 public class BdFenceInfoServiceImpl implements IBdFenceInfoService {
     @Autowired
     private BdFenceInfoMapper bdFenceInfoMapper;

+ 5 - 1
bd-park/park-backend/park-domain/src/main/java/com/huashe/park/domain/dto/VideoFence.java

@@ -1,6 +1,10 @@
 package com.huashe.park.domain.dto;
 
-public class VideoFence {
+import java.io.Serializable;
+
+public class VideoFence implements Serializable {
+    private static final long serialVersionUID = 1L;
+
     private Long id;
 
     private String defenceName;

+ 1 - 1
bd-park/park-backend/pom.xml

@@ -36,7 +36,7 @@
         <swagger.version>3.0.0</swagger.version>
         <kaptcha.version>2.3.3</kaptcha.version>
         <pagehelper.boot.version>1.4.7</pagehelper.boot.version>
-        <fastjson.version>2.0.43</fastjson.version>
+        <fastjson.version>2.0.53</fastjson.version>
         <oshi.version>6.6.1</oshi.version>
         <commons.io.version>2.13.0</commons.io.version>
         <poi.version>4.1.2</poi.version>