|
|
@@ -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
|