Browse Source

修改拷贝场景补拍获取fileId逻辑

tianboguang 2 years ago
parent
commit
adb0cb101a

+ 30 - 6
src/main/java/com/fdkankan/contro/service/impl/SceneFileBuildServiceImpl.java

@@ -31,6 +31,7 @@ import com.fdkankan.model.constants.ConstantFilePath;
 import com.fdkankan.model.constants.UploadFilePath;
 import com.fdkankan.model.constants.UploadFilePath;
 import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
 import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
 import com.fdkankan.rabbitmq.util.RabbitMqProducer;
 import com.fdkankan.rabbitmq.util.RabbitMqProducer;
+import com.fdkankan.redis.util.RedisLockUtil;
 import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.web.response.Result;
 import com.fdkankan.web.response.Result;
 import com.fdkankan.web.response.ResultData;
 import com.fdkankan.web.response.ResultData;
@@ -138,6 +139,9 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
     @Autowired
     @Autowired
     private IFdkkLaserService fdkkLaserService;
     private IFdkkLaserService fdkkLaserService;
 
 
+    @Autowired
+    private RedisLockUtil redisLockUtil;
+
     private RestTemplate restTemplate = new RestTemplate();
     private RestTemplate restTemplate = new RestTemplate();
 
 
     @Override
     @Override
@@ -206,16 +210,36 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         }
         }
 
 
         // 加锁
         // 加锁
-        long incr = redisUtil.incr(String.format(RedisConstants.FOLDER_LOCK_BUILD, folderName), 1);
-        if (incr > 1) {
+        boolean lock = redisLockUtil.lock(String.format(RedisConstants.FOLDER_LOCK_BUILD, folderName), 120);
+        if (!lock) {
             throw new BusinessException(ErrorCode.FAILURE_CODE_5052);
             throw new BusinessException(ErrorCode.FAILURE_CODE_5052);
         }
         }
-        redisUtil.expire(String.format(RedisConstants.FOLDER_LOCK_BUILD, folderName), 120);
 
 
-        log.info("开始新生成build数据");
-        fileId = new SnowflakeIdGenerator(0, 0).nextId() + "";
-        log.info("新生成build数据,{}", fileId);
+        // 查找场景表
+        LambdaQueryWrapper<ScenePro> proWrapper = new LambdaQueryWrapper<>();
+        proWrapper.like(ScenePro::getDataSource, "/" + folderName).eq(ScenePro::getRecStatus, 'A');
+        ScenePro pro = sceneProService.getOne(proWrapper);
+
+        String dataSource = null;
+
+        if (!ObjectUtils.isEmpty(pro)) {
+            dataSource = pro.getDataSource();
+        } else {
+            dataSource = scenePlusService.getDataSourceLikeUnicode("/" + folderName);
+        }
+
+        if (!ObjectUtils.isEmpty(dataSource)) {
+            log.info("从数据库中查到与 fileId:{} 匹配的路径为:{}", fileId, dataSource);
+            int n = dataSource.split("/").length;
+            if (n > 1) {
+                fileId = pro.getDataSource().split("/")[n - 2];
+            }
+        }
 
 
+        if (ObjectUtils.isEmpty(fileId)) {
+            fileId = new SnowflakeIdGenerator(0, 0).nextId() + "";
+            log.info("新生成build数据,{}", fileId);
+        }
         sceneFileBuild = new SceneFileBuild();
         sceneFileBuild = new SceneFileBuild();
         sceneFileBuild.setChildName(mac);
         sceneFileBuild.setChildName(mac);
         sceneFileBuild.setFileId(fileId);
         sceneFileBuild.setFileId(fileId);

+ 26 - 37
src/main/java/com/fdkankan/contro/service/impl/ScenePlusServiceImpl.java

@@ -1,47 +1,22 @@
 package com.fdkankan.contro.service.impl;
 package com.fdkankan.contro.service.impl;
 
 
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.util.StrUtil;
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fdkankan.common.constant.CameraConstant;
-import com.fdkankan.common.constant.CommonStatus;
-import com.fdkankan.common.constant.ConstantUrl;
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.constant.ErrorCode;
-import com.fdkankan.common.constant.SceneStatus;
-import com.fdkankan.common.exception.BusinessException;
-import com.fdkankan.common.util.FileUtils;
-import com.fdkankan.contro.entity.Camera;
-import com.fdkankan.contro.entity.CameraDetail;
-import com.fdkankan.contro.entity.SSOUser;
 import com.fdkankan.contro.entity.ScenePlus;
 import com.fdkankan.contro.entity.ScenePlus;
 import com.fdkankan.contro.entity.ScenePlusExt;
 import com.fdkankan.contro.entity.ScenePlusExt;
-import com.fdkankan.contro.entity.ScenePro;
 import com.fdkankan.contro.mapper.IScenePlusMapper;
 import com.fdkankan.contro.mapper.IScenePlusMapper;
 import com.fdkankan.contro.service.ICameraDetailService;
 import com.fdkankan.contro.service.ICameraDetailService;
-import com.fdkankan.contro.service.ICameraService;
 import com.fdkankan.contro.service.IScenePlusExtService;
 import com.fdkankan.contro.service.IScenePlusExtService;
 import com.fdkankan.contro.service.IScenePlusService;
 import com.fdkankan.contro.service.IScenePlusService;
-import com.fdkankan.contro.service.ISceneProService;
-import com.fdkankan.contro.service.IUserService;
-import com.fdkankan.contro.vo.ScenePlusVO;
-import com.fdkankan.fyun.constant.FYunTypeEnum;
-import com.fdkankan.fyun.face.FYunFileServiceInterface;
-import com.fdkankan.model.constants.ConstantFilePath;
-import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
 import com.fdkankan.web.response.ResultData;
 import com.fdkankan.web.response.ResultData;
-import java.io.File;
-import java.util.Date;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
-import org.joda.time.DateTime;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
 
 
+import java.util.List;
 import java.util.Objects;
 import java.util.Objects;
-import org.springframework.util.ObjectUtils;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -89,29 +64,43 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
 
 
     @Override
     @Override
     public String getDataSourceLikeUnicode(String unicode) {
     public String getDataSourceLikeUnicode(String unicode) {
-
-        ScenePlusExt scenePlusExt = scenePlusExtService.getOne(
+        // 防止plus表删除,ext表未删除
+        List<ScenePlusExt> scenePlusExts = scenePlusExtService.list(
             new LambdaQueryWrapper<ScenePlusExt>().like(ScenePlusExt::getDataSource, unicode)
             new LambdaQueryWrapper<ScenePlusExt>().like(ScenePlusExt::getDataSource, unicode)
                     .eq(ScenePlusExt::getRecStatus,"A"));
                     .eq(ScenePlusExt::getRecStatus,"A"));
 
 
-        if(Objects.isNull(scenePlusExt)){
+        if (ObjectUtils.isEmpty(scenePlusExts)) {
             return null;
             return null;
         }
         }
 
 
-        return scenePlusExt.getDataSource();
+        if (scenePlusExts.size() > 1) {
+            for (ScenePlusExt scenePlusExt : scenePlusExts) {
+                ScenePlus plus = getById(scenePlusExt.getPlusId());
+                if (!ObjectUtils.isEmpty(plus) && plus.getRecStatus().equals("A")) {
+                    return scenePlusExt.getDataSource();
+                }
+            }
+        }
+        return scenePlusExts.get(0).getDataSource();
     }
     }
 
 
     @Override
     @Override
     public ScenePlus getByFileId(String fileId) {
     public ScenePlus getByFileId(String fileId) {
+        // 防止plus表删除,ext表未删除
+        List<ScenePlusExt> scenePlusExts = scenePlusExtService.list(
+                new LambdaQueryWrapper<ScenePlusExt>().like(ScenePlusExt::getDataSource, fileId)
+                        .eq(ScenePlusExt::getRecStatus, "A"));
 
 
-        ScenePlusExt scenePlusExt = scenePlusExtService.getOne(
-            new LambdaQueryWrapper<ScenePlusExt>().like(ScenePlusExt::getDataSource, fileId)
-                    .eq(ScenePlusExt::getRecStatus,"A"));
-
-        if(Objects.isNull(scenePlusExt)){
+        if (ObjectUtils.isEmpty(scenePlusExts)) {
             return null;
             return null;
         }
         }
-        return this.getById(scenePlusExt.getPlusId());
+        for (ScenePlusExt scenePlusExt : scenePlusExts) {
+            ScenePlus plus = getById(scenePlusExt.getPlusId());
+            if (!ObjectUtils.isEmpty(plus) && plus.getRecStatus().equals("A")) {
+                return plus;
+            }
+        }
+        return null;
     }
     }
 
 
 }
 }