Przeglądaj źródła

需求:新增一个根据文件md5删除文件的接口

lijie 3 lat temu
rodzic
commit
50c4002d08

+ 14 - 0
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/controller/FileController.java

@@ -22,6 +22,7 @@ import javax.xml.transform.Result;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * 文件管理Controller
@@ -71,6 +72,19 @@ public class FileController {
         return ResultHelper.success();
     }
 
+    @PostMapping("/deleteByFileMd5s")
+    public CommonResult<String> deleteByFileMd5s(@RequestBody Set<String> fileMd5s) {
+        if(CollUtil.isEmpty(fileMd5s)) {
+            throw new BusinessException(ResponseCode.A0400.getCode(), ResponseCode.A0400.getDesc());
+        }
+        List<FileInfo> fileInfos = fileService.queryByFileMd5s(fileMd5s);
+        if (CollUtil.isEmpty(fileInfos)){
+            return ResultHelper.success();
+        }
+        fileService.deleteFileByFileMd5s(fileInfos);
+        return ResultHelper.success();
+    }
+
     @PostMapping("/load")
     public CommonResult<FileInfo> load(@RequestBody String id) {
         if(StrUtil.isBlank(id)) {

+ 8 - 0
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/dao/FileMapper.java

@@ -50,6 +50,14 @@ public interface FileMapper extends BaseMapper<FileInfo> {
      */
     List<FileInfo> getFileInfoByIds(@Param("fileIds") Set<String> fileIds);
     /***
+     * Description: 根据文件id查询文件信息
+     * @param fileMd5Ids : 文件md5的id集合
+     * @return : com.persagy.dmp.file.model.FileInfo
+     * @author : lijie
+     * Update By lijie 2021/10/23 13:20
+     */
+    List<FileInfo> getFileInfoByFileMd5s(@Param("fileMd5Ids") Set<String> fileMd5Ids);
+    /***
      * Description: 获得文件key列表
      * @param schema : 库名称前缀
      * @param groupCode : 集团编码

+ 8 - 0
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/service/IFileService.java

@@ -113,4 +113,12 @@ public interface IFileService extends IService<FileInfo> {
      * Update By 2021/12/23 10:29
      */
     Map<String,String> queryFetchUrlsByFileIds(Set<String> fileIds);
+    /**
+     * 根据文件md5值批量删除文件
+     * @param fileInfos : 文件信息集合
+     * return : void
+     * @author : lijie
+     * Update By 2022/2/14 10:46
+     */
+    void deleteFileByFileMd5s(List<FileInfo> fileInfos);
 }

+ 54 - 6
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/service/impl/FileServiceImpl.java

@@ -258,12 +258,7 @@ public class FileServiceImpl extends ServiceImpl<FileMapper, FileInfo> implement
      */
     @Override
     public List<FileInfo> queryByFileMd5s(Set<String> fileMd5s) {
-        LambdaQueryWrapper<FileInfo> queryWrapper = new LambdaQueryWrapper<>();
-        if (CollUtil.isNotEmpty(fileMd5s)){
-            queryWrapper.in(FileInfo::getFileMd5,fileMd5s);
-        }
-        queryWrapper.eq(FileInfo::getValid,true);
-        return this.list(queryWrapper);
+        return fileMapper.getFileInfoByFileMd5s(fileMd5s);
     }
     /***
      * Description: 初始化文件下载
@@ -354,6 +349,59 @@ public class FileServiceImpl extends ServiceImpl<FileMapper, FileInfo> implement
         return map;
     }
 
+    /**
+     * 根据文件md5值批量删除文件
+     * @param fileInfos : 文件信息集合
+     * return : void
+     * @author : lijie
+     * Update By 2022/2/14 10:46
+     */
+    @Override
+    @Transactional(rollbackFor = BusinessException.class)
+    public void deleteFileByFileMd5s(List<FileInfo> fileInfos) {
+        Set<String> fileMd5s = fileInfos.stream().map(FileInfo::getFileMd5).collect(Collectors.toSet());
+        Set<String> fileIds = fileInfos.stream().map(FileInfo::getId).collect(Collectors.toSet());
+        Map<String, Set<String>> deleteFileMap = fileInfos.stream()
+                .collect(Collectors
+                        .groupingBy(FileInfo::getFileBucket, Collectors.mapping(FileInfo::getFilePath, Collectors.toSet())));
+        // 1.根据md5删除文件信息
+        deleteFileByIds(fileIds);
+        // 2.根据md5删除文件md5信息
+        deleteFileMd5ByMd5s(fileMd5s);
+        // 3.根据文件信息删除文件
+        FileStorageFactory.getService().batchDelete(deleteFileMap);
+    }
+
+    /**
+     * 根据文件md5删除md5信息
+     * @param fileMd5s : 文件md5集合
+     * return : void
+     * @author : lijie
+     * Update By 2022/2/14 11:05
+     */
+    private void deleteFileMd5ByMd5s(Set<String> fileMd5s) {
+        LambdaQueryWrapper<FileMd5> queryWrapper=new LambdaQueryWrapper<>();
+        queryWrapper.in(FileMd5::getFileMd5,fileMd5s);
+        FileMd5 fileMd5 = new FileMd5();
+        fileMd5.setValid(0);
+        fileMd5Service.update(fileMd5,queryWrapper);
+    }
+
+    /**
+     * 根据文件id删除文件
+     * @param fileIds :文件id集合
+     * return : void
+     * @author : lijie
+     * Update By 2022/2/14 11:02
+     */
+    private void deleteFileByIds(Set<String> fileIds) {
+        LambdaQueryWrapper<FileInfo> queryWrapper=new LambdaQueryWrapper<>();
+        queryWrapper.in(FileInfo::getId,fileIds);
+        FileInfo fileInfo = new FileInfo();
+        fileInfo.setValid(0);
+        this.update(fileInfo,queryWrapper);
+    }
+
     /***
      * Description: 初次上传和已有文件信息但未上传任何分片的情况下则直接生成所有上传url
      * @param requestData :

+ 9 - 0
dmp-cloud/dmp-file/src/main/resources/mapper/FileMapper.xml

@@ -61,6 +61,15 @@
             #{fileId}
         </foreach>
     </select>
+    <select id="getFileInfoByFileMd5s" resultMap="FileMap">
+        <include refid="selectPart"/>
+        <include refid="fromPart"/>
+        <if test="null!=fileMd5Ids and fileMd5Ids.size()>0">
+            <foreach collection="fileMd5Ids" separator="," open="WHERE dt_file_info.file_md5 IN(" close=")" item="fileMd5Id">
+                #{fileMd5Id}
+            </foreach>
+        </if>
+    </select>
     <select id="queryFileKeysByInfos" resultType="java.lang.String">
         SELECT
         <choose>