dengsixing 5 months ago
parent
commit
7c3551ac8c

+ 28 - 0
src/main/java/com/fdkankan/scene/bean/JMErrorCode.java

@@ -0,0 +1,28 @@
+package com.fdkankan.scene.bean;
+
+public enum JMErrorCode {
+
+    FAILURE_CODE_20000(20000, "痕迹物证重复导入")
+    ;
+
+    private Integer code;
+    private String message;
+
+    private JMErrorCode(Integer code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    public Integer code() {
+        return code;
+    }
+
+    public String message() {
+        return message;
+    }
+
+    public String formatMessage(Object... args){
+        return String.format(message, args);
+    }
+
+}

+ 6 - 0
src/main/java/com/fdkankan/scene/entity/SceneEvidence.java

@@ -43,6 +43,12 @@ public class SceneEvidence implements Serializable {
     private String sid;
 
     /**
+     * mid
+     */
+    @TableField("mid")
+    private Long mid;
+
+    /**
      * 痕迹物证信息
      */
     @TableField(value = "evidence_content", typeHandler = FastjsonTypeHandler.class)

+ 48 - 0
src/main/java/com/fdkankan/scene/entity/SceneMid.java

@@ -0,0 +1,48 @@
+package com.fdkankan.scene.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2025-10-15
+ */
+@Getter
+@Setter
+@TableName("t_scene_mid")
+public class SceneMid implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @TableField("num")
+    private String num;
+
+    @TableField("mid")
+    private Long mid;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+    @TableField("rec_status")
+    @TableLogic
+    private String recStatus;
+
+
+}

+ 2 - 2
src/main/java/com/fdkankan/scene/generate/AutoGenerate.java

@@ -18,7 +18,7 @@ public class AutoGenerate {
         String path =System.getProperty("user.dir");
 
         generate(path,"scene", getTables(new String[]{
-                "t_scene_icon"
+                "t_scene_mid"
         }));
 
 //        generate(path,"goods", getTables(new String[]{
@@ -46,7 +46,7 @@ public class AutoGenerate {
 
 
     public static void  generate(String path,String moduleName,  List<String> tables){
-        FastAutoGenerator.create("jdbc:mysql://119.23.182.50:3306/4dkankan_v4",
+        FastAutoGenerator.create("jdbc:mysql://192.168.0.125:13306/4dkankan_v4",
             "root","4dkk2023cuikuan%")
                 .globalConfig(builder -> {
                     builder.author("")               //作者

+ 18 - 0
src/main/java/com/fdkankan/scene/mapper/ISceneMidMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.scene.mapper;
+
+import com.fdkankan.scene.entity.SceneMid;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2025-10-15
+ */
+@Mapper
+public interface ISceneMidMapper extends BaseMapper<SceneMid> {
+
+}

+ 16 - 0
src/main/java/com/fdkankan/scene/service/ISceneMidService.java

@@ -0,0 +1,16 @@
+package com.fdkankan.scene.service;
+
+import com.fdkankan.scene.entity.SceneMid;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2025-10-15
+ */
+public interface ISceneMidService extends IService<SceneMid> {
+
+}

+ 38 - 9
src/main/java/com/fdkankan/scene/service/impl/SceneEvidenceServiceImpl.java

@@ -23,14 +23,12 @@ import com.fdkankan.model.constants.UploadFilePath;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.scene.bean.EvidenceBean;
 import com.fdkankan.scene.bean.IconBean;
+import com.fdkankan.scene.bean.JMErrorCode;
 import com.fdkankan.scene.entity.*;
 import com.fdkankan.scene.httpclient.ManageHttpClient;
 import com.fdkankan.scene.mapper.ISceneEvidenceMapper;
-import com.fdkankan.scene.service.ISceneEditInfoService;
-import com.fdkankan.scene.service.ISceneEvidenceService;
+import com.fdkankan.scene.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fdkankan.scene.service.ISceneIconService;
-import com.fdkankan.scene.service.IScenePlusService;
 import com.fdkankan.scene.util.JmgaSSOLoginHelper;
 import com.fdkankan.scene.vo.*;
 import com.fdkankan.web.response.ResultData;
@@ -75,6 +73,8 @@ public class SceneEvidenceServiceImpl extends ServiceImpl<ISceneEvidenceMapper,
     private String basePath;
     @Autowired
     private JmgaSSOLoginHelper jmgaSSOLoginHelper;
+    @Autowired
+    private ISceneMidService sceneMidService;
 
     @Override
     public void saveEvidence(SaveEvidenceParamVO param, String token) throws Exception {
@@ -96,8 +96,28 @@ public class SceneEvidenceServiceImpl extends ServiceImpl<ISceneEvidenceMapper,
         sceneEditInfoService.updateById(sceneEditInfo);
 
         //推送媒体库
-        this.batchPushMedia(param, token, scenePlus);
-
+        Set<Long> newMids = this.batchPushMedia(param, token, scenePlus);
+
+        Set<Long> dbMids = param.getDataList().stream()
+                .filter(v -> v.getData().containsKey("mid") && v.getData().getLong("mid") != null)
+                .map(v -> v.getData().getLong("mid")).collect(Collectors.toSet());
+        Set<Long> mids = new HashSet<>();
+        if(CollUtil.isNotEmpty(newMids)){
+            mids.addAll(newMids);
+        }
+        if(CollUtil.isNotEmpty(dbMids)){
+            mids.addAll(dbMids);
+        }
+        if(CollUtil.isNotEmpty(mids)){
+            //保存场景码与媒体库id关系
+            List<SceneMid> sms = mids.stream().map(v -> {
+                SceneMid sm = new SceneMid();
+                sm.setNum(param.getNum());
+                sm.setMid(v);
+                return sm;
+            }).collect(Collectors.toList());
+            sceneMidService.saveBatch(sms);
+        }
     }
 
     private void generalConfig(String num, JSONObject generalConfig){
@@ -117,7 +137,7 @@ public class SceneEvidenceServiceImpl extends ServiceImpl<ISceneEvidenceMapper,
         this.updateBatchById(sceneEvidences);
     }
 
-    private void batchPushMedia(SaveEvidenceParamVO param, String token, ScenePlus scenePlus){
+    private Set<Long> batchPushMedia(SaveEvidenceParamVO param, String token, ScenePlus scenePlus){
         log.info("--------------SaveEvidenceParamVO:{}", JSON.toJSONString(param));
         SSOUser ssoUser = jmgaSSOLoginHelper.getSsoUser(token);
         List<JSONObject> params = new ArrayList<>();
@@ -179,11 +199,12 @@ public class SceneEvidenceServiceImpl extends ServiceImpl<ISceneEvidenceMapper,
 
         //调用案件系统接口,进行推送
         if(CollUtil.isEmpty(params)){
-            return;
+            return null;
         }
         JSONObject playLoad = new JSONObject();
         playLoad.put("params", params);
-        manageHttpClient.addMediaLibrarys(basePath, token, playLoad);
+        ResultData<List<JSONObject>> resultData = manageHttpClient.addMediaLibrarys(basePath, token, playLoad);
+        return resultData.getData().stream().map(v -> v.getLong("id")).collect(Collectors.toSet());
     }
 
     private void addOrUpdateData(String num, List<EvidenceParamVO> dataList) throws Exception{
@@ -196,10 +217,12 @@ public class SceneEvidenceServiceImpl extends ServiceImpl<ISceneEvidenceMapper,
         Map<String, SceneEvidence> finalDbMap = dbMap;
         List<SceneEvidence> collect = dataList.stream().map(v -> {
             SceneEvidence sceneEvidence = finalDbMap.get(v.getSid());
+            Long mid = v.getData().getLong("mid");
             if (Objects.isNull(sceneEvidence)) {
                 sceneEvidence = new SceneEvidence();
                 sceneEvidence.setNum(num);
                 sceneEvidence.setSid(v.getSid());
+                sceneEvidence.setMid(mid);
             }
             sceneEvidence.setUpdateTime(null);
             JSONObject evidenceContent = JSON.parseObject(v.getData().toString());
@@ -347,6 +370,12 @@ public class SceneEvidenceServiceImpl extends ServiceImpl<ISceneEvidenceMapper,
         if (scenePlus == null)
             throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
 
+        //检验重复导入,一个痕迹物证在同一场景不能被多次导入
+        List<Long> midList = param.getDataList().stream().map(v -> v.getData().getLong("mid")).collect(Collectors.toList());
+        long count = this.count(new LambdaQueryWrapper<SceneEvidence>().eq(SceneEvidence::getNum, param.getNum()).in(SceneEvidence::getMid, midList));
+        if(count > 0)
+            throw new BusinessException(JMErrorCode.FAILURE_CODE_20000.code(), JMErrorCode.FAILURE_CODE_20000.message());
+
         List<JSONObject> collect = param.getDataList().stream().map(v -> {
             JSONObject data = v.getData();
             JSONArray medias = data.getJSONArray("media");

+ 20 - 0
src/main/java/com/fdkankan/scene/service/impl/SceneMidServiceImpl.java

@@ -0,0 +1,20 @@
+package com.fdkankan.scene.service.impl;
+
+import com.fdkankan.scene.entity.SceneMid;
+import com.fdkankan.scene.mapper.ISceneMidMapper;
+import com.fdkankan.scene.service.ISceneMidService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2025-10-15
+ */
+@Service
+public class SceneMidServiceImpl extends ServiceImpl<ISceneMidMapper, SceneMid> implements ISceneMidService {
+
+}

+ 5 - 0
src/main/resources/mapper/scene/ISceneMidMapper.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.scene.mapper.ISceneMidMapper">
+
+</mapper>