|
@@ -0,0 +1,148 @@
|
|
|
+package com.fdkankan.scene.service.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+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.exception.BusinessException;
|
|
|
+import com.fdkankan.redis.constant.RedisKey;
|
|
|
+import com.fdkankan.scene.entity.*;
|
|
|
+import com.fdkankan.scene.mapper.ISceneEvidenceMapper;
|
|
|
+import com.fdkankan.scene.service.ISceneEditInfoService;
|
|
|
+import com.fdkankan.scene.service.ISceneEvidenceService;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.fdkankan.scene.service.ISceneIconService;
|
|
|
+import com.fdkankan.scene.service.IScenePlusService;
|
|
|
+import com.fdkankan.scene.vo.DeleteSidListParamVO;
|
|
|
+import com.fdkankan.scene.vo.EvidenceParamVO;
|
|
|
+import com.fdkankan.scene.vo.HotParamVO;
|
|
|
+import com.fdkankan.scene.vo.SaveEvidenceParamVO;
|
|
|
+import com.fdkankan.web.response.ResultData;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * <p>
|
|
|
+ * 痕迹物证表 服务实现类
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @author
|
|
|
+ * @since 2025-08-08
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class SceneEvidenceServiceImpl extends ServiceImpl<ISceneEvidenceMapper, SceneEvidence> implements ISceneEvidenceService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IScenePlusService scenePlusService;
|
|
|
+ @Autowired
|
|
|
+ private ISceneEditInfoService sceneEditInfoService;
|
|
|
+ @Autowired
|
|
|
+ private ISceneIconService sceneIconService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void saveEvidence(SaveEvidenceParamVO param) throws Exception {
|
|
|
+
|
|
|
+ ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
|
|
|
+ if (scenePlus == null)
|
|
|
+ throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
|
|
|
+
|
|
|
+ this.addOrUpdateData(param.getNum(), param.getDataList());
|
|
|
+
|
|
|
+ this.addOrUpdateIcons(param.getNum(), param.getIcons());
|
|
|
+
|
|
|
+ //保存数据库
|
|
|
+ SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(scenePlus.getId());
|
|
|
+ this.saveEvidenceToSceneEditInfo(param.getNum(), sceneEditInfo);
|
|
|
+ sceneEditInfoService.updateById(sceneEditInfo);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void addOrUpdateData(String num, List<EvidenceParamVO> dataList) throws Exception{
|
|
|
+ Set<String> sidList = dataList.stream().map(v->v.getSid()).collect(Collectors.toSet());
|
|
|
+ List<SceneEvidence> sceneEvidences = this.listByNumAndSids(num, sidList);
|
|
|
+ Map<String, SceneEvidence> dbMap = new HashMap<>();
|
|
|
+ if(CollUtil.isNotEmpty(sceneEvidences)){
|
|
|
+ dbMap = sceneEvidences.stream().collect(Collectors.toMap(v -> v.getSid(), v -> v));
|
|
|
+ }
|
|
|
+ Map<String, SceneEvidence> finalDbMap = dbMap;
|
|
|
+ List<SceneEvidence> collect = dataList.stream().map(v -> {
|
|
|
+ SceneEvidence sceneEvidence = finalDbMap.get(v.getSid());
|
|
|
+ if (Objects.isNull(sceneEvidence)) {
|
|
|
+ sceneEvidence = new SceneEvidence();
|
|
|
+ sceneEvidence.setNum(num);
|
|
|
+ sceneEvidence.setSid(v.getSid());
|
|
|
+ }
|
|
|
+ sceneEvidence.setUpdateTime(null);
|
|
|
+ sceneEvidence.setEvidenceContent(v.getData());
|
|
|
+ return sceneEvidence;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ this.saveOrUpdateBatch(collect);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void addOrUpdateIcons(String num, List<String> icons) throws Exception{
|
|
|
+ if(CollUtil.isEmpty(icons)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<SceneIcon> sceneIconList = icons.stream().map(v -> {
|
|
|
+ String sid = v.split(".")[0];
|
|
|
+ SceneIcon sceneIcon = new SceneIcon();
|
|
|
+ sceneIcon.setNum(num);
|
|
|
+ sceneIcon.setSid(sid);
|
|
|
+ sceneIcon.setFileName(v);
|
|
|
+ sceneIcon.setBizType("evidence");
|
|
|
+ return sceneIcon;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ sceneIconService.saveBatch(sceneIconList);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void saveEvidenceToSceneEditInfo(String num, SceneEditInfo sceneEditInfo){
|
|
|
+ long count = this.count(new LambdaQueryWrapper<SceneEvidence>().eq(SceneEvidence::getNum, num));
|
|
|
+ sceneEditInfo.setEvidence(count > 0 ? CommonStatus.YES.code() : CommonStatus.NO.code());
|
|
|
+ sceneEditInfo.setVersion(sceneEditInfo.getVersion() + 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<SceneEvidence> listByNumAndSids(String num, Set<String> sids) {
|
|
|
+ return this.list(new LambdaQueryWrapper<SceneEvidence>().eq(SceneEvidence::getNum, num).in(SceneEvidence::getSid, sids));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<SceneEvidence> listByNum(String num) {
|
|
|
+ return this.list(new LambdaQueryWrapper<SceneEvidence>().eq(SceneEvidence::getNum, num).orderByDesc(SceneEvidence::getUpdateTime));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void deleteEvidence(DeleteSidListParamVO param) {
|
|
|
+ ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
|
|
|
+ if (scenePlus == null)
|
|
|
+ throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
|
|
|
+
|
|
|
+ //处理删除状态数据
|
|
|
+// this.deleteHotData(param.getNum(), deleteSidList, bucket);
|
|
|
+ this.remove(new LambdaQueryWrapper<SceneEvidence>().eq(SceneEvidence::getNum, param.getNum()).in(SceneEvidence::getSid, param.getSidList()));
|
|
|
+
|
|
|
+// //删除导览中的热点数据
|
|
|
+// this.deleteHotDataFromTourJson(param.getNum(), param.getSidList(), bucket);
|
|
|
+
|
|
|
+ //保存数据库
|
|
|
+ SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(scenePlus.getId());
|
|
|
+ sceneEditInfoService.saveTagsToSceneEditInfo(param.getNum(), sceneEditInfo);
|
|
|
+ sceneEditInfoService.updateById(sceneEditInfo);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ResultData listEvidences(String num) {
|
|
|
+ JSONObject result = new JSONObject();
|
|
|
+ List<SceneEvidence> sceneEvidences = this.listByNum(num);
|
|
|
+ List<JSONObject> evidenceContent = sceneEvidences.stream().map(v -> v.getEvidenceContent()).collect(Collectors.toList());
|
|
|
+
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+}
|