dengsixing недель назад: 2
Родитель
Сommit
670e4e656e

+ 71 - 0
src/main/java/com/fdkankan/contro/entity/SceneEvidence.java

@@ -0,0 +1,71 @@
+package com.fdkankan.contro.entity;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 痕迹物证表
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-08
+ */
+@Getter
+@Setter
+@TableName(value = "t_scene_evidence", autoResultMap = true)
+public class SceneEvidence implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 场景码
+     */
+    @TableField("num")
+    private String num;
+
+    /**
+     * sid
+     */
+    @TableField("sid")
+    private String sid;
+
+    /**
+     * mid
+     */
+    @TableField("mid")
+    private Long mid;
+
+    /**
+     * 痕迹物证信息
+     */
+    @TableField(value = "evidence_content", typeHandler = FastjsonTypeHandler.class)
+    private JSONObject evidenceContent;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 修改时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A", delval = "I")
+    private String recStatus;
+
+
+}

+ 107 - 0
src/main/java/com/fdkankan/contro/entity/Surveillance.java

@@ -0,0 +1,107 @@
+package com.fdkankan.contro.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 监控推拉流信息
+ * </p>
+ *
+ * @author 
+ * @since 2022-09-16
+ */
+@Getter
+@Setter
+@TableName("t_surveillance")
+public class Surveillance implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 场景码
+     */
+    @TableField("num")
+    private String num;
+
+    /**
+     * 监控名称
+     */
+    @TableField("name")
+    private String name;
+
+    /**
+     * 监控唯一标识
+     */
+    @TableField("sid")
+    private String sid;
+
+    /**
+     * panoId
+     */
+    @TableField("pano_id")
+    private String panoId;
+
+    /**
+     * 摄像头设置信息
+     */
+    @TableField("data")
+    private String data;
+
+    /**
+     * 播放地址
+     */
+    @TableField("play_url")
+    private String playUrl;
+
+    /**
+     * 类型
+     */
+    @TableField("url_type")
+    private Integer urlType;
+
+
+    /**
+     * 播放地址
+     */
+    @TableField("file_name")
+    private String  fileName;
+
+    /**
+     * 封面图
+     */
+    @TableField("poster")
+    private String  poster;
+
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A", delval = "I")
+    private String recStatus;
+
+    /**
+     * 类型
+     */
+    @TableField("file_size")
+    private Integer fileSize;
+
+
+}

+ 18 - 0
src/main/java/com/fdkankan/contro/mapper/ISceneEvidenceMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.contro.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.contro.entity.SceneEvidence;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 痕迹物证表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-08
+ */
+@Mapper
+public interface ISceneEvidenceMapper extends BaseMapper<SceneEvidence> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/contro/mapper/ISurveillanceMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.contro.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.contro.entity.Surveillance;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 监控推拉流信息 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-09-16
+ */
+@Mapper
+public interface ISurveillanceMapper extends BaseMapper<Surveillance> {
+
+}

+ 131 - 76
src/main/java/com/fdkankan/contro/mq/listener/UploadSceneListener.java

@@ -71,7 +71,10 @@ public class UploadSceneListener {
     private ICommonService commonService;
     @Resource
     private RedisUtil redisUtil;
-
+    @Autowired
+    private ISurveillanceService surveillanceService;
+    @Autowired
+    private ISceneEvidenceService sceneEvidenceService;
 
 
     /**
@@ -237,110 +240,162 @@ public class UploadSceneListener {
         sceneEditControls.setCreateTime(null);
         sceneEditControlsService.save(sceneEditControls);
 
+        //监控视频
+        surveillanceService.removeByNum(num);
+        String ossKey = String.format(UploadFilePath.USER_VIEW_PATH,num) + "surveillance.json";
+        if(fYunFileService.fileExist(ossKey)){
+            String str = fYunFileService.getFileContent(ossKey);
+            List<Surveillance> list = JSON.parseObject(str, List.class);
+            if(CollUtil.isNotEmpty(list)){
+                list.stream().forEach(v->{
+                    v.setId(null);
+                    v.setNum(num);
+                });
+                surveillanceService.saveBatch(list);
+            }
+        }
+
+        //痕迹物证
+        sceneEvidenceService.removeByNum(num);
+        ossKey = String.format(UploadFilePath.USER_VIEW_PATH,num) + "evidence.json";
+        if(fYunFileService.fileExist(ossKey)){
+            String str = fYunFileService.getFileContent(ossKey);
+            List<JSONObject> evidenceContents = JSON.parseObject(str, List.class);
+            if(CollUtil.isNotEmpty(evidenceContents)){
+                List<SceneEvidence> sceneEvidenceList = evidenceContents.stream().map(v -> {
+                    SceneEvidence sceneEvidence = new SceneEvidence();
+                    sceneEvidence.setNum(num);
+                    sceneEvidence.setSid(v.getString("sid"));
+                    sceneEvidence.setEvidenceContent(v);
+                    return sceneEvidence;
+                }).collect(Collectors.toList());
+                sceneEvidenceService.saveBatch(sceneEvidenceList);
+            }
+        }
+
+
         //马赛克
-        String mosaicStr = fYunFileService.getFileContent(String.format(UploadFilePath.USER_VIEW_PATH,num) + "mosaic.json");
-        JSONArray mosaicArr = JSON.parseArray(mosaicStr);
+        redisUtil.del(String.format(RedisKey.SCENE_MOSAIC_DATA, num));
+        JSONArray mosaicArr = jsonObject.getJSONArray("mosaicList");
         if(CollUtil.isNotEmpty(mosaicArr)){
-            Map<String, String> map = mosaicArr.stream().collect(Collectors.toMap(v->((JSONObject)v).getString("sid"), v->JSON.toJSONString(v)));
+            Map<String, String> map = mosaicArr.stream().collect(Collectors.toMap(v->((JSONObject)v).getString("panoId"), v->JSON.toJSONString(v)));
             if(CollUtil.isNotEmpty(map)){
-                redisUtil.del(String.format(RedisKey.SCENE_MOSAIC_DATA, num));
                 redisUtil.hmset(String.format(RedisKey.SCENE_MOSAIC_DATA, num), map);
             }
         }
 
         //热点
-        String hotJsonStr = fYunFileService.getFileContent(String.format(UploadFilePath.USER_VIEW_PATH, num) + "hot.json");
-        JSONArray hotJsonArr = JSON.parseArray(hotJsonStr);
-        if(CollUtil.isNotEmpty(hotJsonArr)){
-            Map<String, String> allTagsMap = hotJsonArr.stream().collect(Collectors.toMap(v->((JSONObject)v).getString("sid"), v->JSON.toJSONString(v)));
-            if(CollUtil.isNotEmpty(allTagsMap)){
-                redisUtil.hmset(String.format(RedisKey.SCENE_HOT_DATA, num), allTagsMap);
-
-                //热点图标
-                List<JSONObject> tags = allTagsMap.entrySet().stream().map(entry -> JSON.parseObject(entry.getValue())).collect(Collectors.toList());
-                Set<String> icons = tags.stream()
-                        .filter(v-> StrUtil.isNotEmpty(v.getString("icon")) && !v.getString("icon").contains("svg"))
-                        .map(v-> v.getString("icon"))
-                        .collect(Collectors.toSet());
-                if(!icons.isEmpty()){
-                    redisUtil.del(String.format(RedisKey.SCENE_HOT_ICONS, num));
-                    redisUtil.sSet(String.format(RedisKey.SCENE_HOT_ICONS, num), icons.toArray());
+        redisUtil.del(String.format(RedisKey.SCENE_HOT_DATA, num));
+        redisUtil.del(String.format(RedisKey.SCENE_HOT_ICONS, num));
+        ossKey = String.format(UploadFilePath.USER_VIEW_PATH, num) + "hot.json";
+        if(fYunFileService.fileExist(ossKey)){
+            String hotJsonStr = fYunFileService.getFileContent(ossKey);
+            JSONArray hotJsonArr = JSON.parseArray(hotJsonStr);
+            if(CollUtil.isNotEmpty(hotJsonArr)){
+                Map<String, String> allTagsMap = hotJsonArr.stream().collect(Collectors.toMap(v->((JSONObject)v).getString("sid"), v->JSON.toJSONString(v)));
+                if(CollUtil.isNotEmpty(allTagsMap)){
+                    redisUtil.hmset(String.format(RedisKey.SCENE_HOT_DATA, num), allTagsMap);
+
+                    //热点图标
+                    List<JSONObject> tags = allTagsMap.entrySet().stream().map(entry -> JSON.parseObject(entry.getValue())).collect(Collectors.toList());
+                    Set<String> icons = tags.stream()
+                            .filter(v-> StrUtil.isNotEmpty(v.getString("icon")) && !v.getString("icon").contains("svg"))
+                            .map(v-> v.getString("icon"))
+                            .collect(Collectors.toSet());
+                    if(!icons.isEmpty()){
+                        redisUtil.sSet(String.format(RedisKey.SCENE_HOT_ICONS, num), icons.toArray());
+                    }
                 }
             }
         }
 
         //场景关联
-        String linkStr = fYunFileService.getFileContent(String.format(UploadFilePath.USER_VIEW_PATH,num) + "links.json");
-        JSONArray LinkArr = JSON.parseArray(linkStr);
-        if(CollUtil.isNotEmpty(LinkArr)){
-            Map<String, String> map = LinkArr.stream().collect(Collectors.toMap(v->((JSONObject)v).getString("sid"), v->JSON.toJSONString(v)));
-            if(CollUtil.isNotEmpty(map)){
-                redisUtil.del(String.format(RedisKey.SCENE_LINKPAN_DATA, num));
-                redisUtil.hmset(String.format(RedisKey.SCENE_LINKPAN_DATA, num), map);
+        redisUtil.del(String.format(RedisKey.SCENE_LINKPAN_DATA, num));
+        ossKey = String.format(UploadFilePath.USER_VIEW_PATH,num) + "links.json";
+        if(fYunFileService.fileExist(ossKey)){
+            String linkStr = fYunFileService.getFileContent(ossKey);
+            JSONArray LinkArr = JSON.parseArray(linkStr);
+            if(CollUtil.isNotEmpty(LinkArr)){
+                Map<String, String> map = LinkArr.stream().collect(Collectors.toMap(v->((JSONObject)v).getString("sid"), v->JSON.toJSONString(v)));
+                if(CollUtil.isNotEmpty(map)){
+                    redisUtil.hmset(String.format(RedisKey.SCENE_LINKPAN_DATA, num), map);
+                }
             }
-
-            //{"createTime":1768997242023,"type":"enter","url":"enter-style-InWWW972225.jpg","sid":"InWWW972225"}
         }
 
         //滤镜
-        String fileContent = fYunFileService.getFileContent(String.format(UploadFilePath.USER_VIEW_PATH, num) + "filter.json");
-        List<JSONObject> collect = JSON.parseObject(fileContent, ArrayList.class);
-        if(CollUtil.isNotEmpty(collect)){
-            List<String> list = collect.stream().map(v->JSON.toJSONString(v)).collect(Collectors.toList());
-            if(!list.isEmpty()){
-                redisUtil.del(String.format(RedisKey.SCENE_filter_DATA, num));
-                redisUtil.lLeftPushAll(String.format(RedisKey.SCENE_filter_DATA, num), list);
+        redisUtil.del(String.format(RedisKey.SCENE_filter_DATA, num));
+        ossKey = String.format(UploadFilePath.USER_VIEW_PATH, num) + "filter.json";
+        if(fYunFileService.fileExist(ossKey)){
+            String fileContent = fYunFileService.getFileContent(ossKey);
+            List<JSONObject> collect = JSON.parseObject(fileContent, ArrayList.class);
+            if(CollUtil.isNotEmpty(collect)){
+                List<String> list = collect.stream().map(v->JSON.toJSONString(v)).collect(Collectors.toList());
+                if(!list.isEmpty()){
+                    redisUtil.lLeftPushAll(String.format(RedisKey.SCENE_filter_DATA, num), list);
+                }
             }
         }
 
+
         //指示牌
-        String billboardsStr = fYunFileService.getFileContent(String.format(UploadFilePath.USER_VIEW_PATH, num) + "billboards.json");
-        JSONArray billboards = JSON.parseArray(billboardsStr);
-        if(CollUtil.isNotEmpty(billboards)){
-            Map<String, String> allTagsMap = billboards.stream().collect(Collectors.toMap(v->((JSONObject)v).getString("sid"), v->JSON.toJSONString(v)));
-            if(!allTagsMap.isEmpty()){
-                redisUtil.del(String.format(RedisKey.SCENE_BILLBOARDS, num));
-                redisUtil.hmset(String.format(RedisKey.SCENE_BILLBOARDS, num), allTagsMap);
-            }
-            List<JSONObject> billboardList = allTagsMap.values().stream().map(str -> JSON.parseObject(str)).collect(Collectors.toList());
-
-            //指示牌图标
-            List<String> sytlelist = billboardList.stream()
-                    .filter(v->StrUtil.isNotEmpty(v.getString("icon")) && !v.getString("icon").contains("style-"))
-                    .map(v-> {
-                        String url = v.getString("icon");
-                        String sid = FileUtil.getPrefix(url);
-                        JSONObject iconObj = new JSONObject();
-                        iconObj.put("url", url);
-                        iconObj.put("sid", sid);
-                        iconObj.put("createTime", Calendar.getInstance().getTimeInMillis());
-                        return iconObj.toJSONString();
-                    }).collect(Collectors.toList());
-            if(CollUtil.isNotEmpty(sytlelist)){
-                redisUtil.del(String.format(RedisKey.SCENE_BILLBOARDS_STYLES, num));
-                redisUtil.sSet(String.format(RedisKey.SCENE_BILLBOARDS_STYLES, num), new HashSet<>(sytlelist).toArray());
+        redisUtil.del(String.format(RedisKey.SCENE_BILLBOARDS, num));
+        redisUtil.del(String.format(RedisKey.SCENE_BILLBOARDS_STYLES, num));
+        ossKey = String.format(UploadFilePath.USER_VIEW_PATH, num) + "billboards.json";
+        if(fYunFileService.fileExist(ossKey)){
+            String billboardsStr = fYunFileService.getFileContent(ossKey);
+            JSONArray billboards = JSON.parseArray(billboardsStr);
+            if(CollUtil.isNotEmpty(billboards)){
+                Map<String, String> allTagsMap = billboards.stream().collect(Collectors.toMap(v->((JSONObject)v).getString("sid"), v->JSON.toJSONString(v)));
+                if(!allTagsMap.isEmpty()){
+                    redisUtil.hmset(String.format(RedisKey.SCENE_BILLBOARDS, num), allTagsMap);
+                }
+                List<JSONObject> billboardList = allTagsMap.values().stream().map(str -> JSON.parseObject(str)).collect(Collectors.toList());
+
+                //指示牌图标
+                List<String> sytlelist = billboardList.stream()
+                        .filter(v->StrUtil.isNotEmpty(v.getString("icon")) && !v.getString("icon").contains("style-"))
+                        .map(v-> {
+                            String url = v.getString("icon");
+                            String sid = FileUtil.getPrefix(url);
+                            JSONObject iconObj = new JSONObject();
+                            iconObj.put("url", url);
+                            iconObj.put("sid", sid);
+                            iconObj.put("createTime", Calendar.getInstance().getTimeInMillis());
+                            return iconObj.toJSONString();
+                        }).collect(Collectors.toList());
+                if(CollUtil.isNotEmpty(sytlelist)){
+                    redisUtil.sSet(String.format(RedisKey.SCENE_BILLBOARDS_STYLES, num), new HashSet<>(sytlelist).toArray());
+                }
             }
         }
 
+
         //模型裁剪
-        String cutModelStr = fYunFileService.getFileContent(String.format(UploadFilePath.USER_VIEW_PATH, num) + "cutModel.json");
-        if(StrUtil.isNotEmpty(cutModelStr)){
-            JSONArray cutModels = JSON.parseArray(cutModelStr);
-            Map<String, String> map = cutModels.stream().collect(Collectors.toMap(v->((JSONObject)v).getString("sid"), v->JSON.toJSONString(v)));
-            if(!map.isEmpty()){
-                redisUtil.del(String.format(RedisKey.SCENE_CUT_MODEL, num));
-                redisUtil.hmset(String.format(RedisKey.SCENE_CUT_MODEL, num), map);
+        redisUtil.del(String.format(RedisKey.SCENE_CUT_MODEL, num));
+        ossKey = String.format(UploadFilePath.USER_VIEW_PATH, num) + "cutModel.json";
+        if(fYunFileService.fileExist(ossKey)){
+            String cutModelStr = fYunFileService.getFileContent(ossKey);
+            if(StrUtil.isNotEmpty(cutModelStr)){
+                JSONArray cutModels = JSON.parseArray(cutModelStr);
+                Map<String, String> map = cutModels.stream().collect(Collectors.toMap(v->((JSONObject)v).getString("sid"), v->JSON.toJSONString(v)));
+                if(!map.isEmpty()){
+                    redisUtil.hmset(String.format(RedisKey.SCENE_CUT_MODEL, num), map);
+                }
             }
         }
 
         //空间绘制
-        String sceneDrawFileContent = fYunFileService.getFileContent(String.format(UploadFilePath.USER_VIEW_PATH, num) + "sceneDraw.json");
-        if(StrUtil.isNotEmpty(sceneDrawFileContent)){
-            JSONArray objects = JSON.parseArray(sceneDrawFileContent);
-            Map<String, String> map = objects.stream().collect(Collectors.toMap(v->((JSONObject)v).getString("sid"), v->JSON.toJSONString(v)));
-            if(!map.isEmpty()){
-                redisUtil.del(String.format(RedisKey.SCENE_DRAW, num));
-                redisUtil.hmset(String.format(RedisKey.SCENE_DRAW, num), map);
+        redisUtil.del(String.format(RedisKey.SCENE_DRAW, num));
+        ossKey = String.format(UploadFilePath.USER_VIEW_PATH, num) + "sceneDraw.json";
+        if(fYunFileService.fileExist(ossKey)){
+            String sceneDrawFileContent = fYunFileService.getFileContent(ossKey);
+            if(StrUtil.isNotEmpty(sceneDrawFileContent)){
+                JSONArray objects = JSON.parseArray(sceneDrawFileContent);
+                Map<String, String> map = objects.stream().collect(Collectors.toMap(v->((JSONObject)v).getString("sid"), v->JSON.toJSONString(v)));
+                if(!map.isEmpty()){
+                    redisUtil.hmset(String.format(RedisKey.SCENE_DRAW, num), map);
+                }
             }
         }
     }

+ 17 - 0
src/main/java/com/fdkankan/contro/service/ISceneEvidenceService.java

@@ -0,0 +1,17 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.contro.entity.SceneEvidence;
+
+/**
+ * <p>
+ * 痕迹物证表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-08
+ */
+public interface ISceneEvidenceService extends IService<SceneEvidence> {
+
+    void removeByNum(String num);
+}

+ 18 - 0
src/main/java/com/fdkankan/contro/service/ISurveillanceService.java

@@ -0,0 +1,18 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.contro.entity.Surveillance;
+
+/**
+ * <p>
+ * 监控推拉流信息 服务类
+ * </p>
+ *
+ * @author
+ * @since 2022-09-16
+ */
+public interface ISurveillanceService extends IService<Surveillance> {
+
+
+    void removeByNum(String num);
+}

+ 26 - 0
src/main/java/com/fdkankan/contro/service/impl/SceneEvidenceServiceImpl.java

@@ -0,0 +1,26 @@
+package com.fdkankan.contro.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.contro.entity.SceneEvidence;
+import com.fdkankan.contro.mapper.ISceneEvidenceMapper;
+import com.fdkankan.contro.service.ISceneEvidenceService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 痕迹物证表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-08
+ */
+@Slf4j
+@Service
+public class SceneEvidenceServiceImpl extends ServiceImpl<ISceneEvidenceMapper, SceneEvidence> implements ISceneEvidenceService {
+
+    @Override
+    public void removeByNum(String num) {
+        lambdaUpdate().eq(SceneEvidence::getNum, num).remove();
+    }
+}

+ 25 - 0
src/main/java/com/fdkankan/contro/service/impl/SurveillanceServiceImpl.java

@@ -0,0 +1,25 @@
+package com.fdkankan.contro.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.contro.entity.Surveillance;
+import com.fdkankan.contro.mapper.ISurveillanceMapper;
+import com.fdkankan.contro.service.ISurveillanceService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 监控推拉流信息 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2022-09-16
+ */
+@Service
+public class SurveillanceServiceImpl extends ServiceImpl<ISurveillanceMapper, Surveillance> implements ISurveillanceService {
+
+
+    @Override
+    public void removeByNum(String num) {
+        lambdaUpdate().eq(Surveillance::getNum, num).remove();
+    }
+}

+ 5 - 0
src/main/resources/mapper/contro/SurveillanceMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.contro.mapper.ISurveillanceMapper">
+
+</mapper>