Bladeren bron

refactor(zksy-system):优化荣誉资质模块的文件处理逻辑

- 修改文件管理相关方法,提高查询效率
- 优化荣誉资质列表和详情页的文件加载方式
- 添加文件批量删除功能
- 调整 maven 编译插件配置
nahida 8 maanden geleden
bovenliggende
commit
0804232102

+ 0 - 2
zksy-admin/src/main/java/com/zksy/web/controller/base/QualificationCertificateController.java

@@ -28,7 +28,6 @@ public class QualificationCertificateController {
 
     @GetMapping("/findByPage")
     @ApiOperation(value = "荣誉资质查询分页")
-    @Anonymous
     public AjaxResult findByPage(@ApiParam(value = "页码", required = true)long pageNum,
                                  @ApiParam(value = "页数", required = true)long pageSize){
         return AjaxResult.success(service.pageQualificationCertificate(pageNum, pageSize));
@@ -46,7 +45,6 @@ public class QualificationCertificateController {
 
     @PostMapping("/save")
     @ApiOperation(value = "荣誉资质保存")
-    @Anonymous
     public AjaxResult save(@ModelAttribute QualificationCertificate entity) {
         return AjaxResult.success(service.saveQualificationCertificate( entity));
     }

+ 1 - 1
zksy-admin/src/main/resources/application.yml

@@ -119,7 +119,7 @@ local:
       path: D:/zksy/uploadPath/website/
     baseurl:
     mapping:
-      path: /profile/zksy/website/
+      path: /profile/zksy/website
     filetypes: .jpg,.gif,.png,.ico,.bmp,.jpeg,.mp4,.xls,.xlsx,.tif,.pcx,.tga,.exif,.fpx,.svg,.psd,.cdr,.pcd,.dib,.jfif,.jpe,.dxf,.ufo,.eps,.ai,.raw,.et,.WMF,.webp,.avi,.rmvb,.prn,.wps,.vsd,.dps,.avif,.apng,.doc,.docx,.txt,.pdf,.ppt,.exe,.pptx,.rft,.rar,.zip,.dat,.key,.msg,.cad,.btw,
 
 # Swagger配置

+ 12 - 0
zksy-system/pom.xml

@@ -7,6 +7,18 @@
         <groupId>com.zksy</groupId>
         <version>3.9.0</version>
     </parent>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>9</source>
+                    <target>9</target>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>zksy-system</artifactId>

+ 2 - 1
zksy-system/src/main/java/com/zksy/base/domain/QualificationCertificate.java

@@ -11,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile;
 import java.io.Serializable;
 import java.time.LocalDateTime;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 荣誉资质
@@ -56,7 +57,7 @@ public class QualificationCertificate implements Serializable {
     private LocalDateTime updateTime;
 
     @TableField(exist = false)
-    private List<String> fileList;
+    private List<Map<String,String>> fileList;
 
     @TableField(exist = false)
     @JsonIgnore

+ 5 - 1
zksy-system/src/main/java/com/zksy/base/service/FileManageService.java

@@ -48,7 +48,11 @@ public interface FileManageService extends IService<FileManage> {
      */
     AjaxResult deleteFile(String id);
 
-    List<String> listFileByFid(String id);
+    List<FileManage> listFileByFid(String id);
+    /**
+     * 根据多个 fid 批量查询文件列表
+     */
+    List<FileManage> listFilesByFids(List<String> fids);
 
     AjaxResult deleteFileByFids(List<String> fids);
 }

+ 14 - 8
zksy-system/src/main/java/com/zksy/base/service/impl/FileManageServiceImpl.java

@@ -18,10 +18,7 @@ import org.springframework.web.multipart.MultipartFile;
 import java.io.File;
 import java.io.IOException;
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-import java.util.UUID;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -218,13 +215,22 @@ public class FileManageServiceImpl extends ServiceImpl<FileManageMapper, FileMan
     }
 
     @Override
-    public List<String> listFileByFid(String id) {
+    public List<FileManage> listFileByFid(String id) {
         LambdaQueryWrapper<FileManage> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(FileManage::getFid,id);
-        List<FileManage> list = this.list(wrapper);
-        List<String> collect = list.stream().map(FileManage::getFileUrl).collect(Collectors.toList());
-        return collect;
+        return this.list(wrapper);
     }
+
+    @Override
+    public List<FileManage> listFilesByFids(List<String> fids) {
+        if (fids == null || fids.isEmpty()) {
+            return Collections.emptyList();
+        }
+        return lambdaQuery()
+                .in(FileManage::getFid, fids)
+                .list();
+    }
+
     /**
      * 批量删除文件优化版
      */

+ 69 - 22
zksy-system/src/main/java/com/zksy/base/service/impl/QualificationCertificateServiceImpl.java

@@ -3,27 +3,28 @@ package com.zksy.base.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zksy.base.domain.FileManage;
 import com.zksy.base.domain.QualificationCertificate;
 import com.zksy.base.mapper.QualificationCertificateMapper;
 import com.zksy.base.service.FileManageService;
 import com.zksy.base.service.QualificationCertificateService;
+import com.zksy.common.core.domain.AjaxResult;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
-import java.util.Arrays;
-import java.util.List;
-import java.util.UUID;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
-* @author Administrator
-* @description 针对表【qualification_certificate(荣誉资质)】的数据库操作Service实现
-* @createDate 2025-09-08 08:57:08
-*/
+ * @author Administrator
+ * @description 针对表【qualification_certificate(荣誉资质)】的数据库操作Service实现
+ * @createDate 2025-09-08 08:57:08
+ */
 @Service
 public class QualificationCertificateServiceImpl extends ServiceImpl<QualificationCertificateMapper, QualificationCertificate>
-    implements QualificationCertificateService{
+        implements QualificationCertificateService {
     @Autowired
     private FileManageService fileManageService;
 
@@ -32,12 +33,10 @@ public class QualificationCertificateServiceImpl extends ServiceImpl<Qualificati
         Page<QualificationCertificate> page = new Page<>(pageNum, pageSize);
         LambdaQueryWrapper<QualificationCertificate> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.orderByDesc(QualificationCertificate::getUpdateTime);
-        Page<QualificationCertificate> pageList = page(page,queryWrapper);
-        if(pageList.getRecords() != null){
-            pageList.getRecords().forEach(item -> {
-                item.setFileList(fileManageService.listFileByFid(item.getId()));
-            });
-        }
+
+        Page<QualificationCertificate> pageList = page(page, queryWrapper);
+
+        fillFileList(pageList.getRecords());
         return pageList;
     }
 
@@ -45,30 +44,65 @@ public class QualificationCertificateServiceImpl extends ServiceImpl<Qualificati
     public List<QualificationCertificate> listQualificationCertificate() {
         LambdaQueryWrapper<QualificationCertificate> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.orderByDesc(QualificationCertificate::getUpdateTime);
+
         List<QualificationCertificate> list = list(queryWrapper);
-        list.forEach(item -> {
-            item.setFileList(fileManageService.listFileByFid(item.getId()));
-        });
+        fillFileList(list);
         return list;
     }
 
     @Override
     public QualificationCertificate getQualificationCertificateById(String id) {
         QualificationCertificate qualificationCertificate = getById(id);
-        if(qualificationCertificate != null){
-            qualificationCertificate.setFileList(fileManageService.listFileByFid(qualificationCertificate.getId()));
-            return qualificationCertificate;
+        if (qualificationCertificate != null) {
+            fillFileList(Collections.singletonList(qualificationCertificate));
         }
         return qualificationCertificate;
     }
 
+    /**
+     * 给证书列表填充文件信息
+     *
+     * @param certificates 证书集合
+     */
+    private void fillFileList(List<QualificationCertificate> certificates) {
+        if (certificates == null || certificates.isEmpty()) {
+            return;
+        }
+
+        // 批量查文件,避免 N+1
+        List<String> ids = certificates.stream()
+                .map(QualificationCertificate::getId)
+                .collect(Collectors.toList());
+
+        List<FileManage> allFileRecords = fileManageService.listFilesByFids(ids);
+
+        // 按 fid 分组
+        Map<String, List<FileManage>> fileMap = allFileRecords.stream()
+                .collect(Collectors.groupingBy(FileManage::getFid));
+
+        // 给每个记录赋值
+        for (QualificationCertificate item : certificates) {
+            List<FileManage> files = fileMap.get(item.getId());
+            if (files != null && !files.isEmpty()) {
+                List<Map<String, String>> fileList;
+                fileList = files.stream()
+                        .map(file -> Map.of(
+                                "id", file.getId(),
+                                "url", file.getFileUrl()
+                        ))
+                        .collect(Collectors.toList());
+                item.setFileList(fileList);
+            }
+        }
+    }
+
     @Transactional(rollbackFor = Exception.class)
     @Override
     public QualificationCertificate saveQualificationCertificate(QualificationCertificate entity) {
         entity.setId(UUID.randomUUID().toString());
         entity.setCreateTime(LocalDateTime.now());
         save(entity);
-        if(entity.getMultipartFile() != null) {
+        if (entity.getMultipartFile() != null) {
             fileManageService.uploadListFile(Arrays.asList(entity.getMultipartFile()), entity.getId(), "荣誉资质");
         }
         return entity;
@@ -77,9 +111,22 @@ public class QualificationCertificateServiceImpl extends ServiceImpl<Qualificati
     @Transactional
     @Override
     public QualificationCertificate updateQualificationCertificate(QualificationCertificate entity) {
+        //查询文件列表
+        List<FileManage> list = fileManageService.listFileByFid(entity.getId());
+        List<String> ids = list.stream().map(FileManage::getId).collect(Collectors.toList());
+
+        if(ids.size() != entity.getFileList().size()){
+            List<String> mapIds = entity.getFileList().stream().map(map -> map.get("id")).collect(Collectors.toList());
+            //找到他们不等于的进行文件删除
+            List<String> removeIds = ids.stream().filter(id -> !mapIds.contains(id)).collect(Collectors.toList());
+            AjaxResult ajaxResult = fileManageService.deleteFileByFids(removeIds);
+            if(!ajaxResult.isSuccess()){
+                throw new RuntimeException("文件删除失败");
+            }
+        }
         entity.setUpdateTime(LocalDateTime.now());
         updateById(entity);
-        if(entity.getMultipartFile() != null) {
+        if (entity.getMultipartFile() != null) {
             fileManageService.uploadListFile(Arrays.asList(entity.getMultipartFile()), entity.getId(), "荣誉资质");
         }
         return entity;