瀏覽代碼

删除目录,判断素材是否别引用
目录表 添加祖先id;

wuweihao 2 年之前
父節點
當前提交
733c026fa4

+ 3 - 0
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/DirDto.java

@@ -27,5 +27,8 @@ public class DirDto {
     @ApiModelProperty(value = "类型, 全景图:pano, 图片:image, 音频:audio, 视频:video", required = true)
     private String type;
 
+    @ApiModelProperty(value = "目录祖先")
+    private String ancestors;
+
 
 }

+ 3 - 0
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/DirMoveDto.java

@@ -24,5 +24,8 @@ public class DirMoveDto {
     @ApiModelProperty(value = "父目录Id, 根目录:1", required = true)
     private Long parentId;
 
+    @ApiModelProperty(value = "目录祖先", notes = "移动目录使用")
+    private String ancestors;
+
 
 }

+ 3 - 0
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/entity/DirEntity.java

@@ -30,6 +30,9 @@ public class DirEntity extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "类型, 全景图:pano, 图片:image, 音频:audio, 视频:video")
     private String type;
 
+    @ApiModelProperty(value = "目录祖先")
+    private String ancestors;
+
 //    @ApiModelProperty(value = "层级:第一级1, 最大5级")
 //    private Integer level;
 

+ 4 - 0
720yun_fd_manage/gis_mapper/src/main/java/com/gis/mapper/DirMapper.java

@@ -7,6 +7,7 @@ import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.SelectProvider;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
 
 
 @Component
@@ -15,4 +16,7 @@ public interface DirMapper extends IBaseMapper<DirEntity, Long> {
 
     @SelectProvider(type = BaseProvider.class, method = "selectSql")
     void updateParentId(String sqlStr);
+
+    @SelectProvider(type = BaseProvider.class, method = "selectSql")
+    List<String> getListStr(String sqlStr);
 }

+ 7 - 4
720yun_fd_manage/gis_mapper/src/main/java/com/gis/mapper/FodderMapper.java

@@ -31,14 +31,17 @@ public interface FodderMapper extends IBaseMapper<FodderEntity, Long> {
     Integer countSize(String phone);
 
     @SelectProvider(type = BaseProvider.class, method = "selectSql")
-    List<FodderEntity> batchBySceneCodes(String strSq);
+    List<FodderEntity> batchBySceneCodes(String strSql);
 
     @SelectProvider(type = BaseProvider.class, method = "selectSql")
-    List<FodderEntity> mapperFindAll(String strSq);
+    List<FodderEntity> mapperFindAll(String strSql);
 
     @SelectProvider(type = BaseProvider.class, method = "selectSql")
-    void updateDirId(String strSq);
+    void updateDirId(String strSql);
 
     @SelectProvider(type = BaseProvider.class, method = "selectSql")
-    List<FodderVo> listAndDir(String strSq);
+    List<FodderVo> listAndDir(String strSql);
+
+    @SelectProvider(type = BaseProvider.class, method = "selectSql")
+    List<String> getListStr(String strSql);
 }

+ 2 - 0
720yun_fd_manage/gis_service/src/main/java/com/gis/service/DirService.java

@@ -14,4 +14,6 @@ public interface DirService extends IBaseService<DirEntity, Long>{
     Result getMyTree(String type);
 
     Result move(DirMoveDto param);
+
+    Result remove(Long id);
 }

+ 2 - 0
720yun_fd_manage/gis_service/src/main/java/com/gis/service/FodderService.java

@@ -41,4 +41,6 @@ public interface FodderService extends IBaseService<FodderEntity, Long> {
     Result listAndDir(FodderPageDto param);
 
     void updateDirId(Long parentId, String fodderIds);
+
+    List<String> getSceneCodeByParentIds(String dirs);
 }

+ 3 - 0
720yun_fd_manage/gis_service/src/main/java/com/gis/service/WorkService.java

@@ -41,4 +41,7 @@ public interface WorkService extends IBaseService<WorkEntity, String> {
 
 
     List<WorkEntity> findByStatus(int i);
+
+    // 获取用户作品
+    List<WorkEntity> getUserWork();
 }

+ 80 - 3
720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/DirServiceImpl.java

@@ -7,10 +7,12 @@ import com.gis.common.util.Result;
 import com.gis.domain.dto.DirDto;
 import com.gis.domain.dto.DirMoveDto;
 import com.gis.domain.entity.DirEntity;
+import com.gis.domain.entity.WorkEntity;
 import com.gis.mapper.DirMapper;
 import com.gis.mapper.IBaseMapper;
 import com.gis.service.DirService;
 import com.gis.service.FodderService;
+import com.gis.service.WorkService;
 import com.gis.tree.DirTreeUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
@@ -33,6 +35,9 @@ public class DirServiceImpl extends IBaseServiceImpl<DirEntity, Long> implements
     @Autowired
     FodderService fodderService;
 
+    @Autowired
+    WorkService workService;
+
     @Override
     public IBaseMapper<DirEntity, Long> getBaseMapper() {
         return this.entityMapper;
@@ -72,16 +77,88 @@ public class DirServiceImpl extends IBaseServiceImpl<DirEntity, Long> implements
     @Override
     public Result move(DirMoveDto param) {
 
-        this.updateParentId(param.getParentId(), param.getDirIds());
+        // 移动目录
+        this.updateParentId(param.getParentId(), param.getDirIds(), param.getAncestors());
+        // 移动素材
         fodderService.updateDirId(param.getParentId(), param.getFodderIds());
 
         return Result.success();
     }
 
-    private void updateParentId(Long parentId, String dirIds){
+    /**
+     * 删除目录
+     * 若删除的文件夹包括图片、视频、音频,可直接删除
+     * 若删除的对象包括被全景作品或三维场景引用的全景图,则提示无法删除,文件夹或未被引用的素材可删除
+     * @param id
+     * @return
+     */
+    @Override
+    public Result remove(Long id) {
+        DirEntity entity = this.findById(id);
+        String type = entity.getType();
+        if ("pano".equals(type)){
+            // 查询子节点
+            String dirs = getChildIdById(id);
+            BaseRuntimeException.isTrue(checkPanoUse(dirs), ErrorEnum.FAILURE_CODE_3101.code(), ErrorEnum.FAILURE_CODE_3101.message());
+
+            this.remove(id);
+
+        } else {
+            // 子目录跟子素材没有进行递归删除
+            this.remove(id);
+        }
+
+        return Result.success();
+    }
+
+    // 根据目录id获取子目录id
+    private String getChildIdById(Long id){
+        String format = StrUtil.format("SELECT id FROM tb_dir WHERE is_delete=0 and ( id = {} or find_in_set({} , ancestors ))", id, id);
+        List<String> list = entityMapper.getListStr(format);
+        StringBuilder builder = new StringBuilder();
+        String ids = null;
+        if (list.size() > 0){
+            for (String s : list) {
+                builder.append(s).append(",");
+            }
+            ids = builder.toString();
+            ids = StrUtil.subBefore(ids, ",", true);
+
+        }
+        log.info("查询的子目录跟本身目录id:{}", ids);
+        return ids;
+    }
+
+    // 检查该目录下的场景是否被使用
+    private boolean checkPanoUse(String dirs){
+        log.info("检查的目录集合id: {}", dirs);
+        boolean isUser = false;
+        // 查询目录下的场景码
+        List<String> sceneCodes = fodderService.getSceneCodeByParentIds(dirs);
+        // 查找该用户的作品
+        List<WorkEntity> works = workService.getUserWork();
+        // 匹配场景码
+        for (String sceneCode : sceneCodes) {
+            for (WorkEntity entity : works) {
+                String codes = entity.getSceneCodes();
+                if (StrUtil.isNotBlank(codes)){
+                    continue;
+                }
+                if (codes.contains(sceneCode)){
+                    log.error("此场景:{} 被该作品:{} 引用", sceneCode, entity.getId());
+                    isUser =  true;
+                    break;
+                }
+            }
+        }
+        return isUser;
+
+    }
+
+    private void updateParentId(Long parentId, String dirIds, String ancestors){
         if (StrUtil.isNotBlank(dirIds)){
             log.info("移动目录: {} 到 {}", dirIds, parentId);
-            entityMapper.updateParentId(StrUtil.format("update tb_dir set parent_id={} where is_delete=0 and id in ({}) ", parentId, dirIds));
+            entityMapper.updateParentId(StrUtil.format("update tb_dir set parent_id={}, ancestors={} where is_delete=0 and id in ({}) ", parentId,ancestors, dirIds));
         }
 
     }

+ 8 - 0
720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/FodderServiceImpl.java

@@ -470,6 +470,14 @@ public class FodderServiceImpl extends IBaseServiceImpl<FodderEntity, Long> impl
         }
     }
 
+    @Override
+    public List<String> getSceneCodeByParentIds(String dirs) {
+        if (StrUtil.isNotBlank(dirs)){
+            return entityMapper.getListStr(StrUtil.format("select scene_code from tb_fodder " +
+                    "where is_delete=0 and type='pano' and parent_id in ({})  ", dirs));
+        }
+        return new ArrayList<>();
+    }
 
 
     private List<FodderEntity> myMapperFindAll(FodderPageDto param){

+ 8 - 0
720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/WorkServiceImpl.java

@@ -247,6 +247,14 @@ public class WorkServiceImpl extends IBaseStrServiceImpl<WorkEntity, String> imp
     }
 
     @Override
+    public List<WorkEntity> getUserWork() {
+        Condition condition = new Condition(WorkEntity.class);
+        condition.and().andEqualTo("status", 1);
+        condition.and().andEqualTo("userId", this.getUserNameForToken());
+        return this.findAll(condition);
+    }
+
+    @Override
     public Result edit(SomeDataDto param) {
         long startTime = System.currentTimeMillis();
 

+ 6 - 0
720yun_fd_manage/gis_web/src/main/java/com/gis/web/controller/DirController.java

@@ -48,4 +48,10 @@ public class DirController {
         return dirService.move(param);
     }
 
+    @ApiOperation(value = "删除")
+    @PostMapping("/remove/{id}")
+    public Result remove( @PathVariable Long id) {
+        return dirService.remove(id);
+    }
+
 }