Forráskód Böngészése

优化围栏闯禁事件处理和数据记录

- 修改MQTT主题订阅,简化EVT_LOCATION_TOPIC- 在BdFenceVioEvt模型中添加evtTime字段,用于记录事件时间
- 更新BdFenceVioEvtMapper.xml,添加evtTime字段的映射
- 在FenceBreakInEngine中添加事件时间记录,使用DateTimeUtil处理时间格式
- 优化FenceBreakInEngine中的围栏闯禁事件处理逻辑
-调整PointFusionEngine初始化方法
- 修改UWBLocationSubscribeListener日志级别为debug,减少日志输出
- 移除未使用的MQTT主题订阅函数
chen.cheng 9 hónapja
szülő
commit
67a382954b

+ 10 - 0
bd-location/src/main/java/com/ruoyi/bd/domain/BdFenceVioEvt.java

@@ -45,6 +45,8 @@ public class BdFenceVioEvt extends BaseEntity
 
     private String evtStatus;
 
+    private String evtTime;
+
     public void setId(Long id)
     {
         this.id = id;
@@ -117,6 +119,14 @@ public class BdFenceVioEvt extends BaseEntity
         this.evtStatus = evtStatus;
     }
 
+    public String getEvtTime() {
+        return evtTime;
+    }
+
+    public void setEvtTime(String evtTime) {
+        this.evtTime = evtTime;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

+ 9 - 1
bd-location/src/main/java/com/ruoyi/bd/service/engine/impl/FenceBreakInEngine.java

@@ -12,9 +12,11 @@ import com.ruoyi.common.BDConst;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.enums.EvtStatus;
 import com.ruoyi.common.enums.EvtType;
+import com.ruoyi.common.utils.DateTimeUtil;
 import com.ruoyi.common.utils.geo.GeoUtils;
 import net.dreamlu.iot.mqtt.spring.client.MqttClientTemplate;
 import org.apache.commons.lang3.ObjectUtils;
+import org.locationtech.jts.geom.Polygon;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -49,6 +51,7 @@ public class FenceBreakInEngine extends EvtFusionEngine {
 
     @PostConstruct
     public void init() {
+        super.init();
         this.setEngineName("围栏闯禁事件融合");
         if (!redisCache.hasKey(BDConst.REDIS_KEY.FENCE)) {
             List<BdFenceInfo> bdFenceInfos = fenceInfoService.selectBdFenceInfoList(new BdFenceInfo());
@@ -56,6 +59,7 @@ public class FenceBreakInEngine extends EvtFusionEngine {
                 bdFenceInfos = new ArrayList<>();
             }
             bdFenceInfos.removeIf(item -> ObjectUtils.isEmpty(item.getPoly()) || ObjectUtils.isEmpty(GeoUtils.getPolygon(item.getPoly())));
+
             redisCache.setCacheList(BDConst.REDIS_KEY.FENCE, bdFenceInfos);
         }
     }
@@ -81,6 +85,7 @@ public class FenceBreakInEngine extends EvtFusionEngine {
         bdFenceVioEvt.setLng(msg.getLongitude());
         bdFenceVioEvt.setEvtStatus(EvtStatus.NEW.getCode());
         bdFenceVioEvt.setEvtType(EvtType.FENCE_IN.getCode());
+        bdFenceVioEvt.setEvtTime(DateTimeUtil.getDateFromMills(msg.getSrcTimestamp()));
         bdFenceVioEvt.setEvtDesc(String.format("围栏闯禁: %s", msg.getMsg().getString("fenceName")));
         vioEvtService.insertBdFenceVioEvt(bdFenceVioEvt);
         msg.setBizId(bdFenceVioEvt.getId().toString());
@@ -98,11 +103,14 @@ public class FenceBreakInEngine extends EvtFusionEngine {
 
     public void generateEvt(JSONObject msg, byte[] payload) {
         List<BdFenceInfo> cacheList = redisCache.getCacheList(BDConst.REDIS_KEY.FENCE);
+        Polygon polygon;
         for (BdFenceInfo fenceInfo : cacheList) {
-            if (GeoUtils.isPointInGeoFence(fenceInfo.getPolygon(), msg.getString("longitude"), msg.getString("latitude"))) {
+            polygon = GeoUtils.getPolygon(fenceInfo.getPoly());
+            if (GeoUtils.isPointInGeoFence(polygon, msg.getString("longitude"), msg.getString("latitude"))) {
                 msg.put("fenceId", fenceInfo.getId());
                 msg.put("fenceName", fenceInfo.getDefenceName());
                 client.publish(BDConst.MQTT_TOPIC.EVT_LOCATION_TOPIC, JSON.toJSONBytes(msg));
+                break;
             }
         }
     }

+ 1 - 0
bd-location/src/main/java/com/ruoyi/bd/service/engine/impl/PointFusionEngine.java

@@ -41,6 +41,7 @@ public class PointFusionEngine extends EvtFusionEngine {
 
     @PostConstruct
     public void init() {
+        super.init();
         this.setEngineName("坐标点位抽稀");
     }
 

+ 1 - 2
bd-location/src/main/java/com/ruoyi/common/BDConst.java

@@ -9,8 +9,7 @@ public interface BDConst {
 
     public interface MQTT_TOPIC {
         String POINT_LOCATION_TOPIC = "/uwb/point/#";
-        String EVT_LOCATION_TOPIC = "/uwb/evt/#";
-
+        String EVT_LOCATION_TOPIC = "/uwb/evt";
 
     }
 }

+ 2 - 9
bd-location/src/main/java/com/ruoyi/mqtt/UWBLocationSubscribeListener.java

@@ -33,7 +33,7 @@ public class UWBLocationSubscribeListener {
 
     @MqttClientSubscribe(value = BDConst.MQTT_TOPIC.POINT_LOCATION_TOPIC)
     public void subQos0(String topic, byte[] payload) {
-        logger.info("topic:{} payload:{}", topic, new String(payload, StandardCharsets.UTF_8));
+        logger.debug("topic:{} payload:{}", topic, new String(payload, StandardCharsets.UTF_8));
         JSONObject jsonObject = JSON.parseObject(payload);
         pointFusionEngine.push(jsonObject);
         fenceBreakInEngine.generateEvt(JSON.parseObject(payload), payload);
@@ -41,14 +41,7 @@ public class UWBLocationSubscribeListener {
 
     @MqttClientSubscribe(value = BDConst.MQTT_TOPIC.EVT_LOCATION_TOPIC, qos = MqttQoS.QOS0)
     public void subQos1(String topic, byte[] payload) {
-        logger.info("topic:{} payload:{}", topic, new String(payload, StandardCharsets.UTF_8));
+        logger.debug("topic:{} payload:{}", topic, new String(payload, StandardCharsets.UTF_8));
         fenceBreakInEngine.push(JSON.parseObject(payload));
     }
-
-    @MqttClientSubscribe("/sys/${productKey}/${deviceName}/thing/sub/register")
-    public void thingSubRegister(String topic, byte[] payload) {
-        // 1.3.8 开始支持,@MqttClientSubscribe 注解支持 ${} 变量替换,会默认替换成 +
-        // 注意:mica-mqtt 会先从 Spring boot 配置中替换参数 ${},如果存在配置会优先被替换。
-        logger.info("topic:{} payload:{}", topic, new String(payload, StandardCharsets.UTF_8));
-    }
 }

+ 5 - 0
bd-location/src/main/resources/mapper/bd/BdFenceVioEvtMapper.xml

@@ -13,6 +13,7 @@
         <result property="lat" column="lat"/>
         <result property="fenceId" column="fence_id"/>
         <result property="evtStatus" column="evt_status"/>
+        <result property="evtTime" column="evt_time"/>
         <result property="updateTime" column="update_time"/>
         <result property="createTime" column="create_time"/>
         <result property="createBy" column="create_by"/>
@@ -28,6 +29,7 @@
                lat,
                fence_id,
                evt_status,
+               evt_time,
                update_time,
                create_time,
                create_by,
@@ -59,6 +61,7 @@
             <if test="lat != null">lat,</if>
             <if test="fenceId != null">fence_id,</if>
             <if test="evtStatus !=null">evt_status,</if>
+            <if test="evtTime !=null">evt_time,</if>
             <if test="updateTime != null">update_time,</if>
             <if test="createTime != null">create_time,</if>
             <if test="createBy != null">create_by,</if>
@@ -72,6 +75,7 @@
             <if test="lat != null">#{lat},</if>
             <if test="fenceId != null">#{fenceId},</if>
             <if test="evtStatus !=null">#{evtStatus},</if>
+            <if test="evtTime !=null">#{evtTime},</if>
             <if test="updateTime != null">#{updateTime},</if>
             <if test="createTime != null">#{createTime},</if>
             <if test="createBy != null">#{createBy},</if>
@@ -89,6 +93,7 @@
             <if test="lat != null">lat = #{lat},</if>
             <if test="fenceId != null">fence_id = #{fenceId},</if>
             <if test="evtStatus !=null">evt_status = #{evtStatus},</if>
+            <if test="evtTime !=null">evt_time = #{evtTime},</if>
             <if test="updateTime != null">update_time = #{updateTime},</if>
             <if test="createTime != null">create_time = #{createTime},</if>
             <if test="createBy != null">create_by = #{createBy},</if>

+ 10 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/DateTimeUtil.java

@@ -120,6 +120,16 @@ public class DateTimeUtil {
         return hour * 60 * 60 / step + second / step;
     }
 
+    public static String getDateFromMills(long mills, String formatRegex) {
+        LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(mills), ZoneId.systemDefault());
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(formatRegex);
+        return localDateTime.format(formatter);
+    }
+
+    public static String getDateFromMills(long mills) {
+        return getDateFromMills(mills, DateFormatter.yyyy_MM_dd_HHmmss);
+    }
+
 
     /**
      * Parse local date local date time.