From 9155ce1804432f9ee79c78e74d88ce09af9d03e4 Mon Sep 17 00:00:00 2001 From: tangwei Date: Wed, 22 Jul 2026 10:57:02 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=B1=BC=E7=B1=BB=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SdFishDictoryBController.java | 165 +++++++++++++++--- .../qgc_base/domain/SdFishDictoryB.java | 2 +- 2 files changed, 145 insertions(+), 22 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdFishDictoryBController.java b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdFishDictoryBController.java index 119fd3dd..69c6f0be 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdFishDictoryBController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdFishDictoryBController.java @@ -1,5 +1,6 @@ package com.yfd.platform.qgc_base.controller; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -7,22 +8,29 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.yfd.platform.annotation.Log; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.qgc_base.domain.SdFishDictoryB; import com.yfd.platform.qgc_base.domain.SdEngInfoBHOperateRequest; +import com.yfd.platform.qgc_base.domain.SdFishDictoryB; import com.yfd.platform.qgc_base.service.ISdFishDictoryBService; -import com.yfd.platform.utils.DataSourceRequestUtil; +import com.yfd.platform.qgc_data.service.AttachmentUploadService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; /** *

* 鱼类字典表 前端控制器 *

*/ +@Slf4j @RestController @RequestMapping("/env/fishDictory") @Tag(name = "鱼类字典管理") @@ -34,6 +42,9 @@ public class SdFishDictoryBController { @Resource private ObjectMapper objectMapper; + @Resource + private AttachmentUploadService attachmentUploadService; + @PostMapping("/queryPageList") @Operation(summary = "分页查询鱼类字典列表(支持动态过滤和排序)") public ResponseResult queryPageList(@RequestBody DataSourceRequest request) { @@ -44,11 +55,7 @@ public class SdFishDictoryBController { @PostMapping("/list") @Operation(summary = "查询鱼类字典列表(支持动态过滤和排序,不分页)") public ResponseResult list(@RequestBody DataSourceRequest request) { - List list = DataSourceRequestUtil.executeList( - request, - SdFishDictoryB.class, - sdFishDictoryBService - ); + List list = sdFishDictoryBService.list(); return ResponseResult.successData(list); } @@ -71,31 +78,84 @@ public class SdFishDictoryBController { @Log(module = "鱼类字典管理", value = "新增鱼类字典") @PostMapping("/add") @Operation(summary = "新增鱼类字典") - public ResponseResult add(@RequestBody SdEngInfoBHOperateRequest request) { - SdFishDictoryB entity = request == null || request.getEngInfo() == null ? null - : objectMapper.convertValue(request.getEngInfo(), SdFishDictoryB.class); - boolean result = sdFishDictoryBService.add(entity, request == null ? null : request.getSource()); - return result ? ResponseResult.success("新增成功") : ResponseResult.error("新增失败"); + public ResponseResult add(@RequestParam("data") String dataStr, + @RequestParam(value = "files", required = false) List files) { + try { + SdEngInfoBHOperateRequest request = objectMapper.readValue(dataStr, SdEngInfoBHOperateRequest.class); + SdFishDictoryB entity = request == null || request.getEngInfo() == null ? null + : objectMapper.convertValue(request.getEngInfo(), SdFishDictoryB.class); + if (entity == null) { + return ResponseResult.error("数据不能为空"); + } + entity.setId(IdUtil.simpleUUID()); + entity.setCode(entity.getId()); + + // 上传文件并设置附件ID到实体 + applyUploadedFiles(entity, files); + + boolean result = sdFishDictoryBService.add(entity, request.getSource()); + return result ? ResponseResult.success("新增成功") : ResponseResult.error("新增失败"); + } catch (Exception e) { + log.error("新增鱼类字典失败", e); + return ResponseResult.error("新增失败: " + e.getMessage()); + } } @Log(module = "鱼类字典管理", value = "修改鱼类字典") @PostMapping("/update") @Operation(summary = "修改鱼类字典") - public ResponseResult update(@RequestBody SdEngInfoBHOperateRequest request) { - SdFishDictoryB entity = request == null || request.getEngInfo() == null ? null - : objectMapper.convertValue(request.getEngInfo(), SdFishDictoryB.class); - boolean result = sdFishDictoryBService.update(entity, request == null ? null : request.getSource()); - return result ? ResponseResult.success("修改成功") : ResponseResult.error("修改失败"); + public ResponseResult update(@RequestParam("data") String dataStr, + @RequestParam(value = "files", required = false) List files) { + try { + SdEngInfoBHOperateRequest request = objectMapper.readValue(dataStr, SdEngInfoBHOperateRequest.class); + SdFishDictoryB entity = request == null || request.getEngInfo() == null ? null + : objectMapper.convertValue(request.getEngInfo(), SdFishDictoryB.class); + if (entity == null || entity.getId() == null) { + return ResponseResult.error("数据或ID不能为空"); + } + + // 获取修改前的实体,用于后续清理旧文件 + SdFishDictoryB before = sdFishDictoryBService.getById(entity.getId()); + List oldAttachmentIds = before != null ? collectAttachmentIds(before) : Collections.emptyList(); + + // 上传新文件并设置附件ID + applyUploadedFiles(entity, files); + + boolean result = sdFishDictoryBService.update(entity, request.getSource()); + if (result) { + // 清理被替换的旧文件 + deleteReplacedFiles(oldAttachmentIds, collectAttachmentIds(entity)); + } + return result ? ResponseResult.success("修改成功") : ResponseResult.error("修改失败"); + } catch (Exception e) { + log.error("修改鱼类字典失败", e); + return ResponseResult.error("修改失败: " + e.getMessage()); + } } @Log(module = "鱼类字典管理", value = "删除鱼类字典") @PostMapping("/delete") @Operation(summary = "删除鱼类字典") public ResponseResult delete(@RequestBody SdEngInfoBHOperateRequest request) { - boolean result = sdFishDictoryBService.delete( - request == null ? null : request.getIds(), - request == null ? null : request.getSource() - ); + List ids = request == null ? null : request.getIds(); + if (ids == null || ids.isEmpty()) { + return ResponseResult.error("ID不能为空"); + } + + // 删除前先收集所有需要清理的附件ID + List allAttachmentIds = new ArrayList<>(); + for (String id : ids) { + SdFishDictoryB entity = sdFishDictoryBService.getById(id); + if (entity != null) { + allAttachmentIds.addAll(collectAttachmentIds(entity)); + } + } + + boolean result = sdFishDictoryBService.delete(ids, request.getSource()); + if (result) { + // 删除关联的附件 + deleteAttachments(allAttachmentIds); + } return result ? ResponseResult.success("删除成功") : ResponseResult.error("删除失败"); } @@ -106,4 +166,67 @@ public class SdFishDictoryBController { @RequestParam(required = false, defaultValue = "10") Integer limit) { return ResponseResult.successData(sdFishDictoryBService.findSimilarFish(name, limit)); } + + // ==================== 文件处理辅助方法 ==================== + + /** + * 上传文件并追加附件ID到inffile字段(与已有ID以逗号拼接) + */ + private void applyUploadedFiles(SdFishDictoryB entity, List files) { + if (files == null || files.isEmpty()) { + return; + } + List attachmentIds = attachmentUploadService.uploadMultipartFiles(files); + if (attachmentIds.isEmpty()) { + return; + } + // 新上传的文件ID + String newIds = attachmentIds.stream() + .filter(StrUtil::isNotBlank) + .collect(Collectors.joining(",")); + if (StrUtil.isBlank(newIds)) { + return; + } + // 追加到已有的inffile后面 + String existing = StrUtil.isNotBlank(entity.getInffile()) ? entity.getInffile() : ""; + String merged = StrUtil.isBlank(existing) ? newIds : existing + "," + newIds; + entity.setInffile(merged); + } + + /** + * 收集实体中inffile字段的附件ID + */ + private List collectAttachmentIds(SdFishDictoryB entity) { + List ids = new ArrayList<>(); + if (StrUtil.isNotBlank(entity.getInffile())) { + Arrays.stream(entity.getInffile().split(",")) + .map(String::trim) + .filter(StrUtil::isNotBlank) + .forEach(ids::add); + } + return ids; + } + + /** + * 删除被替换的旧文件(old中有但new中没有的) + */ + private void deleteReplacedFiles(List oldIds, List newIds) { + for (String oldId : oldIds) { + if (StrUtil.isBlank(oldId)) continue; + if (!newIds.contains(oldId)) { + attachmentUploadService.deleteFile(oldId); + } + } + } + + /** + * 批量删除附件 + */ + private void deleteAttachments(List attachmentIds) { + for (String id : attachmentIds) { + if (StrUtil.isNotBlank(id)) { + attachmentUploadService.deleteFile(id); + } + } + } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdFishDictoryB.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdFishDictoryB.java index 9ea09725..589c8251 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdFishDictoryB.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdFishDictoryB.java @@ -22,7 +22,7 @@ public class SdFishDictoryB implements Serializable { /** * 主键 */ - @TableId(type = IdType.INPUT) + @TableId(type = IdType.ASSIGN_UUID) private String id; /**