From 2bd20404baa4fcf933c271c6204e1ced72701ef0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=82=A0=E5=B1=B1?= <17738440858@163.com> Date: Sat, 28 Feb 2026 10:19:04 +0800 Subject: [PATCH] =?UTF-8?q?refactor(ai):=20=E9=87=8D=E6=9E=84AI=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E6=96=87=E4=BB=B6=E5=A4=84=E7=90=86=E5=92=8C=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改AbstractFileClient移除域名拼接逻辑 - 将getModel接口改为getEnabledModels批量获取已启用模型 - 更新AiSampleMapper查询语句改用LEFT JOIN并添加筛选条件 - 移除application-local.yaml中的file-server配置项 - 添加ImgJsonSerializer组件处理图片URL序列化 - 优化AiSampleServiceImpl文件上传逻辑 - 调整分页参数验证注解格式 --- .../tashow/cloud/common/pojo/PageParam.java | 2 +- .../serializer/ImgJsonSerializer.java | 46 +++++++------------ .../admin/aisample/vo/AiSampleFileRespVO.java | 4 ++ .../admin/aisample/vo/AiSamplePageReqVO.java | 4 +- .../admin/aisample/vo/AiSampleRespVO.java | 4 +- .../admin/model/AiModelController.java | 11 +++-- .../ai/dal/mysql/aisample/AiSampleMapper.java | 6 ++- .../service/aisample/AiSampleServiceImpl.java | 10 ++-- .../ai/service/model/AiModelService.java | 9 ++-- .../ai/service/model/AiModelServiceImpl.java | 10 +++- .../src/main/resources/application-local.yaml | 3 -- .../file/core/client/AbstractFileClient.java | 2 +- .../src/main/resources/application-local.yaml | 1 - 13 files changed, 55 insertions(+), 57 deletions(-) rename tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/{util => }/serializer/ImgJsonSerializer.java (51%) diff --git a/tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/pojo/PageParam.java b/tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/pojo/PageParam.java index 99ffe39..09ceaf7 100644 --- a/tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/pojo/PageParam.java +++ b/tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/pojo/PageParam.java @@ -26,7 +26,7 @@ public class PageParam implements Serializable { /** * 页码,从 1 开始", example = "1 */ - @NotNull(message = "页码不能为空") + @NotNull(message = "页码不能为空" ) @Min(value = 1, message = "页码最小值为 1") private Integer pageNo = 1; diff --git a/tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/util/serializer/ImgJsonSerializer.java b/tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/serializer/ImgJsonSerializer.java similarity index 51% rename from tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/util/serializer/ImgJsonSerializer.java rename to tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/serializer/ImgJsonSerializer.java index 9af3bca..85e1d1f 100644 --- a/tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/util/serializer/ImgJsonSerializer.java +++ b/tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/serializer/ImgJsonSerializer.java @@ -1,64 +1,50 @@ -/* - * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. - * - * https://www.mall4j.com/ - * - * 未经允许,不可做商业用途! - * - * 版权所有,侵权必究! - */ - -package com.tashow.cloud.common.util.serializer; +package com.tashow.cloud.common.serializer; import cn.hutool.core.util.StrUtil; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; -import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.io.IOException; -import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; /** - * @author lanhai + * 图片URL序列化器 + * 自动为相对路径的图片添加文件服务器前缀 */ @Component public class ImgJsonSerializer extends JsonSerializer { - /* @Autowired - private Qiniu qiniu; - @Autowired - private ImgUploadUtil imgUploadUtil;*/ + @Value("${file-server}") + private String fileServer; @Override public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException { - /*if (StrUtil.isBlank(value)) { + if (StrUtil.isBlank(value)) { gen.writeString(StrUtil.EMPTY); return; } String[] imgs = value.split(StrUtil.COMMA); StringBuilder sb = new StringBuilder(); String resourceUrl = ""; - String rule="^((http[s]{0,1})://)"; - Pattern pattern= Pattern.compile(rule); - if (Objects.equals(imgUploadUtil.getUploadType(), 2)) { - resourceUrl = qiniu.getResourcesUrl(); - } else if (Objects.equals(imgUploadUtil.getUploadType(), 1)) { - resourceUrl = imgUploadUtil.getResourceUrl(); - } + String rule = "^((http[s]{0,1})://)"; + Pattern pattern = Pattern.compile(rule); + + resourceUrl = fileServer; + for (String img : imgs) { Matcher matcher = pattern.matcher(img); //若图片以http或https开头,直接返回 - if (matcher.find()){ + if (matcher.find()) { sb.append(img).append(StrUtil.COMMA); - }else { + } else { sb.append(resourceUrl).append(img).append(StrUtil.COMMA); } } - sb.deleteCharAt(sb.length()-1); - gen.writeString(sb.toString());*/ + sb.deleteCharAt(sb.length() - 1); + gen.writeString(sb.toString()); } } diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleFileRespVO.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleFileRespVO.java index 4158115..0dc105f 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleFileRespVO.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleFileRespVO.java @@ -1,6 +1,9 @@ package com.tashow.cloud.ai.controller.admin.aisample.vo; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; + +import com.tashow.cloud.common.serializer.ImgJsonSerializer; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -10,6 +13,7 @@ import lombok.Data; public class AiSampleFileRespVO { @Schema(description = "文件地址") + @JsonSerialize(using = ImgJsonSerializer.class) private String fileUrl; @Schema(description = "文件名称") diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSamplePageReqVO.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSamplePageReqVO.java index 15295e2..c3581d1 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSamplePageReqVO.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSamplePageReqVO.java @@ -12,10 +12,10 @@ import lombok.ToString; @ToString(callSuper = true) public class AiSamplePageReqVO extends PageParam { - @Schema(description = "标签ids", example = "25839") + @Schema(description = "标签ids") private String tagIds; - @Schema(description = "样本名称", example = "张三") + @Schema(description = "样本名称") private String sampleName; @Schema(description = "样本格式", example = "1") diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleRespVO.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleRespVO.java index 54bf4aa..cca4bce 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleRespVO.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleRespVO.java @@ -1,8 +1,9 @@ package com.tashow.cloud.ai.controller.admin.aisample.vo; - import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.tashow.cloud.ai.dal.dataobject.aisample.AiSampleTagDO; +import com.tashow.cloud.common.serializer.ImgJsonSerializer; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -21,6 +22,7 @@ public class AiSampleRespVO { private List tags; @Schema(description = "样本文件地址") + @JsonSerialize(using = ImgJsonSerializer.class) private String sampleFilePath; @Schema(description = "样本名称", example = "张三") diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/AiModelController.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/AiModelController.java index cdf8370..95a48ad 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/AiModelController.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/AiModelController.java @@ -17,6 +17,8 @@ import jakarta.validation.Valid; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.List; + import static com.tashow.cloud.common.pojo.CommonResult.success; @Tag(name = "管理后台 - AI模型管理") @@ -53,12 +55,11 @@ public class AiModelController { } @GetMapping("/get") - @Operation(summary = "获得模型") - @Parameter(name = "id", description = "编号", required = true, example = "1") + @Operation(summary = "获取所有已启用的模型") @PermitAll - public CommonResult getModel(@RequestParam("id") Long id) { - AiModelDO model = modelService.getModel(id); - return success(BeanUtils.toBean(model, AiModelRespVO.class)); + public CommonResult> getEnabledModels() { + List models = modelService.getEnabledModels(); + return success(BeanUtils.toBean(models, AiModelRespVO.class)); } @GetMapping("/page") diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/mysql/aisample/AiSampleMapper.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/mysql/aisample/AiSampleMapper.java index fd29024..f4db01d 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/mysql/aisample/AiSampleMapper.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/mysql/aisample/AiSampleMapper.java @@ -28,14 +28,18 @@ public interface AiSampleMapper extends BaseMapperX { ",sample_mine_type sampleMineType ,sample_size sampleSize, remark,creator,updater,create_time createTime" + ",update_time updateTime,deleted,tenant_id tenantId " + "FROM tz_ai_sample t " + - "INNER JOIN tz_ai_sample_tag_relate r ON t.id = r.sample_id " + + "LEFt JOIN tz_ai_sample_tag_relate r ON t.id = r.sample_id " + "" + + "AND t.deleted =0"+ " " + " AND FIND_IN_SET(r.sample_tag_id,${pageReqVO.tagIds}) " + " " + " " + " AND t.sample_name LIKE CONCAT('%',#{pageReqVO.sampleName},'%')" + " " + + " " + + " AND t.sample_mine_type LIKE CONCAT('%',#{pageReqVO.sampleMineType},'%')" + + " " + "" + "GROUP BY t.id ORDER BY t.id DESC" + "") diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/service/aisample/AiSampleServiceImpl.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/service/aisample/AiSampleServiceImpl.java index d6a03cb..736ecc3 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/service/aisample/AiSampleServiceImpl.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/service/aisample/AiSampleServiceImpl.java @@ -44,8 +44,7 @@ public class AiSampleServiceImpl implements AiSampleService { private AiSampleTagRelateMapper aiSampleTagRelateMapper; @Resource private FileApi fileApi; - @Value("${file-server}") - private String fileServer; + @Override @SneakyThrows @@ -55,15 +54,15 @@ public class AiSampleServiceImpl implements AiSampleService { /* 调用文件上传服务*/ for (MultipartFile file : uploadReqVO.getFiles()) { //返回上传结果 - String file1 = fileServer + fileApi.createFile(file.getBytes()); + String filePath=fileApi.createFile(file.getOriginalFilename(), "", file.getBytes()); //保存样本信息 AiSampleDO aiSampleDO = new AiSampleDO(); - aiSampleDO.setSampleFilePath(file1); + aiSampleDO.setSampleFilePath(filePath); aiSampleDO.setSampleName(file.getOriginalFilename()); aiSampleDO.setSampleMineType(file.getContentType()); aiSampleDO.setSampleSize(file.getSize()); aiSampleMapper.insert(aiSampleDO); - urls.add(new AiSampleFileRespVO().setFileUrl(file1).setFileName(file.getOriginalFilename())); + urls.add(new AiSampleFileRespVO().setFileUrl(filePath).setFileName(file.getOriginalFilename())); } // 返回 return urls; @@ -172,7 +171,6 @@ public class AiSampleServiceImpl implements AiSampleService { Object[] tagsId = list.stream().map(AiSampleTagRelateDO::getSampleTagId).toArray(); List list1 = aiSampleTagDOS.stream().filter(a -> ArrayUtil.containsAny(tagsId, a.getId())).toList(); aiSampleDO.setTags(list1); - aiSampleDO.setSampleFilePath(aiSampleDO.getSampleFilePath()); } return new PageResult<>(aiSampleDOPageResult.getRecords(), aiSampleDOPageResult.getTotal()); } diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/service/model/AiModelService.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/service/model/AiModelService.java index e756592..9c54da2 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/service/model/AiModelService.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/service/model/AiModelService.java @@ -6,6 +6,8 @@ import com.tashow.cloud.ai.dal.dataobject.model.AiModelDO; import com.tashow.cloud.common.pojo.PageResult; import jakarta.validation.Valid; +import java.util.List; + /** * AI模型管理 Service 接口 * @@ -36,12 +38,11 @@ public interface AiModelService { void deleteModel(Long id); /** - * 获得模型 + * 获取所有已启用的模型 * - * @param id 编号 - * @return 模型 + * @return 已启用的模型列表 */ - AiModelDO getModel(Long id); + List getEnabledModels(); /** * 获得模型分页 diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/service/model/AiModelServiceImpl.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/service/model/AiModelServiceImpl.java index 2300d04..8389488 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/service/model/AiModelServiceImpl.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/service/model/AiModelServiceImpl.java @@ -1,5 +1,6 @@ package com.tashow.cloud.ai.service.model; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.tashow.cloud.ai.controller.admin.model.vo.AiModelPageReqVO; import com.tashow.cloud.ai.controller.admin.model.vo.AiModelSaveReqVO; import com.tashow.cloud.ai.dal.dataobject.model.AiModelDO; @@ -10,6 +11,8 @@ import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import java.util.List; + /** * AI模型管理 Service 实现类 * @@ -42,8 +45,11 @@ public class AiModelServiceImpl implements AiModelService { } @Override - public AiModelDO getModel(Long id) { - return modelMapper.selectById(id); + public List getEnabledModels() { + return modelMapper.selectList( + new LambdaQueryWrapper() + .eq(AiModelDO::getStatus, 1) + ); } @Override diff --git a/tashow-module/tashow-module-ai/src/main/resources/application-local.yaml b/tashow-module/tashow-module-ai/src/main/resources/application-local.yaml index 6e9edcc..6ba7c33 100644 --- a/tashow-module/tashow-module-ai/src/main/resources/application-local.yaml +++ b/tashow-module/tashow-module-ai/src/main/resources/application-local.yaml @@ -17,8 +17,5 @@ spring: --- #################### 外部服务配置 #################### -# 文件服务URL前缀 -file-server: http://localhost:48090/admin-api/file/file/get/ - # AI翻译服务URL translate-server: http://43.139.42.137:8000/analyze/audio diff --git a/tashow-module/tashow-module-file/src/main/java/com/tashow/cloud/file/framework/file/core/client/AbstractFileClient.java b/tashow-module/tashow-module-file/src/main/java/com/tashow/cloud/file/framework/file/core/client/AbstractFileClient.java index 3446b4b..f4ec29c 100644 --- a/tashow-module/tashow-module-file/src/main/java/com/tashow/cloud/file/framework/file/core/client/AbstractFileClient.java +++ b/tashow-module/tashow-module-file/src/main/java/com/tashow/cloud/file/framework/file/core/client/AbstractFileClient.java @@ -63,7 +63,7 @@ public abstract class AbstractFileClient implem * @return URL 访问地址 */ protected String formatFileUrl(String domain, String path) { - return StrUtil.format("{}/admin-api/file/{}/get/{}", domain, getId(), path); + return StrUtil.format("/admin-api/file/{}/get/{}", getId(), path); } } diff --git a/tashow-module/tashow-module-file/src/main/resources/application-local.yaml b/tashow-module/tashow-module-file/src/main/resources/application-local.yaml index 7f75503..b3cb4bd 100644 --- a/tashow-module/tashow-module-file/src/main/resources/application-local.yaml +++ b/tashow-module/tashow-module-file/src/main/resources/application-local.yaml @@ -14,4 +14,3 @@ spring: config: # 【注册中心】配置项 namespace: 63caf548-313d-44bb-929c-531bf2f3b1a2 # 命名空间 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP -