فهرست منبع

update DiskAlbumController

reghao 6 ماه پیش
والد
کامیت
1ef0c7e49e

+ 10 - 0
content/content-service/src/main/java/cn/reghao/tnb/content/app/disk/controller/DiskAlbumController.java

@@ -1,5 +1,6 @@
 package cn.reghao.tnb.content.app.disk.controller;
 
+import cn.reghao.jutil.jdk.db.PageList;
 import cn.reghao.jutil.jdk.result.Result;
 import cn.reghao.jutil.web.WebResult;
 import cn.reghao.tnb.common.auth.AuthUser;
@@ -8,6 +9,7 @@ import cn.reghao.tnb.content.app.disk.model.dto.AlbumAdd;
 import cn.reghao.tnb.content.app.disk.model.dto.AlbumCreate;
 import cn.reghao.tnb.content.app.disk.model.po.DiskAlbum;
 import cn.reghao.tnb.content.app.disk.model.vo.DiskAlbumDetail;
+import cn.reghao.tnb.content.app.disk.model.vo.DiskAlbumImage;
 import cn.reghao.tnb.content.app.disk.service.DiskAlbumService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -26,6 +28,7 @@ import java.util.List;
 @RequestMapping("/api/content/disk/album")
 @AuthUser
 public class DiskAlbumController {
+    private final int pageSize = 120;
     private final DiskAlbumService diskAlbumService;
 
     public DiskAlbumController(DiskAlbumService diskAlbumService) {
@@ -70,4 +73,11 @@ public class DiskAlbumController {
 
         return WebResult.fail();
     }
+
+    @Operation(summary = "获取相册中不存在的图片文件列表", description = "N")
+    @GetMapping("/image")
+    public String getDiskImages(@RequestParam("pn") int pageNumber) {
+        PageList<DiskAlbumImage> pageList = diskAlbumService.getAlbumImages(pageNumber, pageSize);
+        return WebResult.success(pageList);
+    }
 }

+ 1 - 0
content/content-service/src/main/java/cn/reghao/tnb/content/app/disk/db/mapper/DiskAlbumMapper.java

@@ -21,4 +21,5 @@ public interface DiskAlbumMapper extends BaseMapper<DiskAlbum> {
     DiskAlbum findDiskAlbum(long albumId);
     List<DiskAlbum> findByCreateBy(long createBy);
     List<DiskAlbumFile> findDiskAlbumFiles(long albumId);
+    List<String> findBykAlbumIds(List<Long> list);
 }

+ 3 - 0
content/content-service/src/main/java/cn/reghao/tnb/content/app/disk/db/mapper/DiskFileMapper.java

@@ -23,4 +23,7 @@ public interface DiskFileMapper extends BaseMapper<DiskFile> {
     List<DiskFile> findDiskQueryByPage(@Param("page") Page page, @Param("diskQuery") DiskQuery diskQuery);
     List<DiskFile> findByFileIds(List<String> list);
     DiskFile findRoot();
+
+    List<String> countSha256sumGroupByDiskQuery(DiskQuery diskQuery);
+    List<DiskFile> findSha256sumGroupByPage(@Param("page") Page page, @Param("diskQuery") DiskQuery diskQuery);
 }

+ 22 - 0
content/content-service/src/main/java/cn/reghao/tnb/content/app/disk/model/vo/DiskAlbumImage.java

@@ -0,0 +1,22 @@
+package cn.reghao.tnb.content.app.disk.model.vo;
+
+import cn.reghao.tnb.content.app.disk.model.po.DiskFile;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author reghao
+ * @date 2025-09-03 16:11:18
+ */
+@Setter
+@Getter
+public class DiskAlbumImage {
+    private String fileId;
+    private String filename;
+    private String url;
+
+    public DiskAlbumImage(DiskFile diskFile) {
+        this.fileId = diskFile.getFileId();
+        this.filename = diskFile.getFilename();
+    }
+}

+ 40 - 1
content/content-service/src/main/java/cn/reghao/tnb/content/app/disk/service/DiskAlbumService.java

@@ -1,6 +1,7 @@
 package cn.reghao.tnb.content.app.disk.service;
 
 import cn.reghao.file.api.iface.OssService;
+import cn.reghao.jutil.jdk.db.Page;
 import cn.reghao.jutil.jdk.db.PageList;
 import cn.reghao.jutil.jdk.result.Result;
 import cn.reghao.jutil.tool.id.SnowFlake;
@@ -16,6 +17,7 @@ import cn.reghao.tnb.content.app.disk.model.dto.AlbumCreate;
 import cn.reghao.tnb.content.app.disk.model.po.DiskAlbum;
 import cn.reghao.tnb.content.app.disk.model.po.DiskAlbumFile;
 import cn.reghao.tnb.content.app.disk.model.po.DiskFile;
+import cn.reghao.tnb.content.app.disk.model.query.DiskQuery;
 import cn.reghao.tnb.content.app.disk.model.vo.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
@@ -153,8 +155,9 @@ public class DiskAlbumService {
         List<DiskAlbumFile> diskAlbumFileList = diskAlbumMapper.findDiskAlbumFiles(albumId);
         List<String> fileIds = diskAlbumFileList.stream().map(DiskAlbumFile::getFileId).collect(Collectors.toList());
         if (fileIds.isEmpty()) {
-            return null;
+            return new DiskAlbumDetail(diskAlbum, Collections.emptyList());
         }
+
         Map<String, Integer> map = new HashMap<>();
         for (DiskAlbumFile diskAlbumFile : diskAlbumFileList) {
             map.put(diskAlbumFile.getFileId(), diskAlbumFile.getPos());
@@ -170,4 +173,40 @@ public class DiskAlbumService {
                 .collect(Collectors.toList());
         return new DiskAlbumDetail(diskAlbum, diskFileDetailList);
     }
+
+    public PageList<DiskAlbumImage> getAlbumImages(int pageNumber, int pageSize) {
+        long loginUser = UserContext.getUserId();
+        List<Long> albumIds = diskAlbumMapper.findByCreateBy(loginUser).stream()
+                .map(DiskAlbum::getAlbumId)
+                .collect(Collectors.toList());
+        Set<String> imageFileIdSet = new HashSet<>();
+        if (!albumIds.isEmpty()) {
+            imageFileIdSet.addAll(diskAlbumMapper.findBykAlbumIds(albumIds));
+        }
+
+        DiskQuery.Builder builder  = new DiskQuery.Builder()
+                .pageNumber(pageNumber)
+                .pageSize(pageSize)
+                .fileType(ObjectType.Image.getCode())
+                .owner(loginUser);
+        DiskQuery diskQuery = builder.build();
+        Page page = new Page(pageNumber, pageSize);
+        int total = diskFileMapper.countSha256sumGroupByDiskQuery(diskQuery).size();
+
+        List<DiskFile> diskFileList = diskFileMapper.findSha256sumGroupByPage(page, diskQuery).stream()
+                .filter(diskFile -> !imageFileIdSet.contains(diskFile.getFileId()))
+                .collect(Collectors.toList());
+
+        List<DiskAlbumImage> list = diskFileList.stream().map(DiskAlbumImage::new).collect(Collectors.toList());
+        for (DiskAlbumImage diskAlbumImage : list) {
+            String fileId = diskAlbumImage.getFileId();
+            try {
+                String signedUrl = ossService.getSignedUrl(channelCode, fileId);
+                diskAlbumImage.setUrl(signedUrl);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return PageList.pageList(diskQuery.getPageNumber(), diskQuery.getPageSize(), total, list);
+    }
 }

+ 8 - 0
content/content-service/src/main/resources/mapper/disk/DiskAlbumMapper.xml

@@ -44,4 +44,12 @@
         where album_id=#{albumId}
         order by pos asc
     </select>
+    <select id="findBykAlbumIds" resultType="java.lang.String">
+        select file_id
+        from my_disk_album_file
+        where album_id in
+        <foreach collection="list" item="id" index="index" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+    </select>
 </mapper>

+ 53 - 0
content/content-service/src/main/resources/mapper/disk/DiskFileMapper.xml

@@ -99,4 +99,57 @@
         from my_disk_file
         where file_id='0'
     </select>
+
+    <select id="countSha256sumGroupByDiskQuery" resultType="java.lang.String">
+        select sha256sum
+        from my_disk_file
+        <where>
+            deleted=0
+            <if test="fileType != null">
+                and file_type=#{fileType}
+            </if>
+            <if test="owner != null">
+                and owner=#{owner}
+            </if>
+            <if test="pid != null">
+                and pid=#{pid}
+            </if>
+            <if test="fileId != null">
+                and file_id=#{fileId}
+            </if>
+            <if test="path != null">
+                and path=#{path}
+            </if>
+            <if test="sha256sum != null">
+                and sha256sum=#{sha256sum}
+            </if>
+        </where>
+        group by sha256sum
+    </select>
+    <select id="findSha256sumGroupByPage" resultType="cn.reghao.tnb.content.app.disk.model.po.DiskFile">
+        select *
+        from my_disk_file
+        <where>
+            deleted=0
+            <if test="diskQuery.fileType != null">
+                and file_type=#{diskQuery.fileType}
+            </if>
+            <if test="diskQuery.owner != null">
+                and owner=#{diskQuery.owner}
+            </if>
+            <if test="diskQuery.pid != null">
+                and pid=#{diskQuery.pid}
+            </if>
+            <if test="diskQuery.fileId != null">
+                and file_id=#{diskQuery.fileId}
+            </if>
+            <if test="diskQuery.path != null">
+                and path=#{diskQuery.path}
+            </if>
+            <if test="diskQuery.sha256sum != null">
+                and sha256sum=#{diskQuery.sha256sum}
+            </if>
+        </where>
+        group by sha256sum
+    </select>
 </mapper>