dengsixing il y a 2 mois
Parent
commit
d1841373c8

+ 2 - 1
src/main/java/com/fdkankan/scene/bean/JMErrorCode.java

@@ -2,7 +2,8 @@ package com.fdkankan.scene.bean;
 
 public enum JMErrorCode {
 
-    FAILURE_CODE_20000(20000, "痕迹物证重复导入")
+    FAILURE_CODE_20000(20000, "痕迹物证重复导入"),
+    FAILURE_CODE_20001(20001, "部分数据成功导入")
     ;
 
     private Integer code;

+ 53 - 8
src/main/java/com/fdkankan/scene/service/impl/SceneEvidenceServiceImpl.java

@@ -14,6 +14,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.common.constant.CommonStatus;
 import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.constant.ServerCode;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.db.response.PageInfo;
@@ -420,23 +421,55 @@ public class SceneEvidenceServiceImpl extends ServiceImpl<ISceneEvidenceMapper,
 
     @Override
     public ResultData syncTraceEvidence(SaveEvidenceParamVO param) throws Exception {
+        Integer resCode = ServerCode.SUCCESS.code();
         ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
         if (scenePlus == null)
             throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
 
         //检验重复导入,一个痕迹物证在同一场景不能被多次导入
-        Map<String, Long> idMap = new HashMap<>();
+        Map<Long, String> idMap = new HashMap<>();
         for (EvidenceParamVO evidenceParamVO : param.getDataList()) {
             JSONArray media = evidenceParamVO.getData().getJSONArray("media");
             for (Object o : media) {
                 JSONObject mediaObj = JSON.parseObject(JSON.toJSONString(o));
-                idMap.put(mediaObj.getString("sid"), mediaObj.getLong("mid"));
+                idMap.put(mediaObj.getLong("mid"), mediaObj.getString("sid"));
+            }
+
+            JSONObject bgm = evidenceParamVO.getData().getJSONObject("bgm");
+            if (Objects.nonNull(bgm)) {
+                idMap.put(bgm.getLong("mid"), bgm.getString("sid"));
+            }
+        }
+        Set<Long> repeatMids = null;
+        List<SceneMid> list = sceneMidService.list(new LambdaQueryWrapper<SceneMid>().eq(SceneMid::getNum, param.getNum()).in(SceneMid::getMid, idMap.keySet()));
+        if(CollUtil.isNotEmpty(list)){
+            if(list.size() == idMap.size()) {//如果数据库中的mid和参数中的mid数量完全一样,代表完全重复,直接返回
+                throw new BusinessException(JMErrorCode.FAILURE_CODE_20000.code(), JMErrorCode.FAILURE_CODE_20000.message());
+            } else{//否则可以导入不重复的mid部分
+                resCode = JMErrorCode.FAILURE_CODE_20001.code();
+                Set<Long> dbMids = list.stream().map(v -> v.getMid()).collect(Collectors.toSet());
+                repeatMids = idMap.keySet().stream().filter(mid -> dbMids.contains(mid)).collect(Collectors.toSet());
+                dataList : for (int i = 0; i < param.getDataList().size(); i++) {
+                    EvidenceParamVO evidenceParamVO = param.getDataList().get(i);
+                    JSONArray media = evidenceParamVO.getData().getJSONArray("media");
+                    for (Object m : media) {
+                        JSONObject mediaObj = (JSONObject) m;
+                        if(repeatMids.contains(mediaObj.getLong("mid"))){
+                            param.getDataList().remove(i);
+                            continue dataList;
+                        }
+                    }
+                    JSONObject bgm = evidenceParamVO.getData().getJSONObject("bgm");
+                    if (Objects.nonNull(bgm)) {
+                        if(repeatMids.contains(bgm.getLong("mid"))){
+                            param.getDataList().remove(i);
+                        }
+                    }
+                }
             }
         }
-        long count = sceneMidService.count(new LambdaQueryWrapper<SceneMid>().eq(SceneMid::getNum, param.getNum()).in(SceneMid::getMid, new HashSet<>(idMap.values())));
-        if(count > 0)
-            throw new BusinessException(JMErrorCode.FAILURE_CODE_20000.code(), JMErrorCode.FAILURE_CODE_20000.message());
 
+        Map<String, Long> importMap = new HashMap<>();
         List<JSONObject> collect = param.getDataList().stream().map(v -> {
             JSONObject data = v.getData();
             JSONArray medias = data.getJSONArray("media");
@@ -444,6 +477,7 @@ public class SceneEvidenceServiceImpl extends ServiceImpl<ISceneEvidenceMapper,
                 medias.stream().forEach(m -> {
                     LinkedHashMap media = (LinkedHashMap) m;
                     String sid = (String) media.get("sid");
+                    Long mid = (Long) media.get("mid");
                     String path = (String)media.get("src");
                     String fileName = FileUtil.getName(path);
                     String newFileName = sid + "." + FileUtil.extName(fileName);
@@ -453,23 +487,34 @@ public class SceneEvidenceServiceImpl extends ServiceImpl<ISceneEvidenceMapper,
                     }
                     fYunFileServiceInterface.copyFileInBucket(path, meshKey);
                     media.put("src", newFileName);
+                    importMap.put(sid, mid);
                 });
             }
+            JSONObject bgm = data.getJSONObject("bgm");
+            if(Objects.nonNull(bgm)){
+                String sid = bgm.getString("sid");
+                Long mid = bgm.getLong("mid");
+                importMap.put(sid, mid);
+            }
             return data;
         }).collect(Collectors.toList());
 
-        List<SceneMid> sceneMidList = idMap.keySet().stream().map(v -> {
+        List<SceneMid> sceneMidList = importMap.keySet().stream().map(v -> {
             SceneMid sm = new SceneMid();
             sm.setNum(param.getNum());
             sm.setSid(v);
-            sm.setMid(idMap.get(v));
+            sm.setMid(importMap.get(v));
             return sm;
         }).collect(Collectors.toList());
         sceneMidService.saveBatch(sceneMidList);
 
         this.saveEvidence(param, null);
+        if(resCode == ServerCode.SUCCESS.code()){
+            return ResultData.ok(collect);
+        }else{
+            return ResultData.error(resCode, "系统已为您去掉重复内容。", collect);
+        }
 
-        return ResultData.ok(collect);
     }
 
 //    @Override