Sfoglia il codice sorgente

v4.9.0 preUpload 接口增加原始资源目录正在被删除不允许上传的判断

dsx 2 anni fa
parent
commit
12c88cba09

+ 17 - 11
src/main/java/com/fdkankan/contro/service/impl/SceneFileBuildServiceImpl.java

@@ -221,14 +221,23 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
 
         // 检测是否有生成
         String fileId = redisUtil.get(String.format(RedisConstants.FOLDER_FILEID_BUILD, folderName));
-        if (!ObjectUtils.isEmpty(fileId)) {
-            responseSceneFile.setFileId(fileId);
-            return responseSceneFile;
+        if (StrUtil.isEmpty(fileId)) {
+            SceneFileBuild sceneFileBuild = this.findByUnicode(folderName);
+            if (sceneFileBuild != null) {
+                fileId = sceneFileBuild.getFileId();
+            }
         }
+        if(StrUtil.isNotEmpty(fileId)){
+
+            //校验目录是否被上锁,如果上锁,抛出错误(避免删除原始资源定时任务执行过程中,有场景补拍重新上传)
+            String homePath = redisUtil.get(String.format(RedisKey.SCENE_OSS_HOME_DIR_DELETE, folderName));
+            if(StrUtil.isNotEmpty(homePath)){
+                throw new BusinessException(ErrorCode.FAILURE_CODE_5073);
+            }
+            //如果原始资源目录不是正在被定时任务删除中,就加上上传锁,并正常返回
+            homePath = ConstantFilePath.OSS_PREFIX.concat(mac).concat("/").concat(fileId).concat("/").concat(folderName);
+            redisUtil.set(String.format(RedisKey.SCENE_OSS_HOME_DIR_UPLOAD, folderName), homePath, RedisKey.CAMERA_EXPIRE_7_TIME);
 
-        SceneFileBuild sceneFileBuild = this.findByUnicode(folderName);
-        if (sceneFileBuild != null) {
-            fileId = sceneFileBuild.getFileId();
             responseSceneFile.setFileId(fileId);
             redisUtil.set(String.format(RedisConstants.FOLDER_FILEID_BUILD, folderName), fileId, 2 * 24 * 60 * 60);
             return responseSceneFile;
@@ -242,7 +251,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
 
         // 查找场景表
         LambdaQueryWrapper<ScenePro> proWrapper = new LambdaQueryWrapper<>();
-        proWrapper.like(ScenePro::getDataSource, "/" + folderName).eq(ScenePro::getRecStatus, 'A');
+        proWrapper.like(ScenePro::getDataSource, "/" + folderName);
         ScenePro pro = sceneProService.getOne(proWrapper);
 
         String dataSource = null;
@@ -266,10 +275,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
             log.info("新生成build数据,{}", fileId);
         }
 
-        //校验目录是否被上锁,如果上锁,抛出错误(由于定时任务)
-        redisUtil.hget()
-
-        sceneFileBuild = new SceneFileBuild();
+        SceneFileBuild sceneFileBuild = new SceneFileBuild();
         sceneFileBuild.setChildName(mac);
         sceneFileBuild.setFileId(fileId);
         sceneFileBuild.setRecStatus("A");