feat(ai): 添加AI模型管理和分段上传功能
- 创建AI模型版本管理表tz_ai_model并添加相关索引 - 添加AiModelController、AiModelService等完整的模型管理接口 - 实现模型创建、更新、删除、分页查询等功能 - 添加模型状态更新功能支持启用禁用等状态变更 - 在S3FileClient中实现分段上传uploadMultipart方法 - 扩展FileApi接口增加createFileMultipart分段上传接口 - 修改Nacos配置将命名空间从dev改为具体ID值 - 在SecurityConfiguration中开放AI模型管理接口权限
This commit is contained in:
@@ -7,12 +7,16 @@ spring:
|
|||||||
username: nacos # Nacos 账号
|
username: nacos # Nacos 账号
|
||||||
password: nacos # Nacos 密码
|
password: nacos # Nacos 密码
|
||||||
discovery: # 【配置中心】配置项
|
discovery: # 【配置中心】配置项
|
||||||
namespace: dev # 命名空间。这里使用 dev 开发环境
|
namespace: 63caf548-313d-44bb-929c-531bf2f3b1a2 # 命名空间
|
||||||
group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
|
group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
|
||||||
|
metadata:
|
||||||
|
version: 1.0.0 # 服务实例的版本号,可用于灰度发布
|
||||||
config: # 【注册中心】配置项
|
config: # 【注册中心】配置项
|
||||||
namespace: dev # 命名空间。这里使用 dev 开发环境
|
namespace: 63caf548-313d-44bb-929c-531bf2f3b1a2 # 命名空间
|
||||||
group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
|
group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# 日志文件配置
|
# 日志文件配置
|
||||||
logging:
|
logging:
|
||||||
level:
|
level:
|
||||||
|
|||||||
@@ -69,14 +69,4 @@ public class AiModelController {
|
|||||||
return success(BeanUtils.toBean(pageResult, AiModelRespVO.class));
|
return success(BeanUtils.toBean(pageResult, AiModelRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@PutMapping("/update-status")
|
|
||||||
@Operation(summary = "更新状态")
|
|
||||||
@Parameter(name = "id", description = "编号", required = true)
|
|
||||||
@Parameter(name = "status", description = "状态(0-禁用 1-启用 2-测试中 3-已废弃)", required = true)
|
|
||||||
@PermitAll
|
|
||||||
public CommonResult<Boolean> updateStatus(@RequestParam("id") Long id, @RequestParam("status") Integer status) {
|
|
||||||
modelService.updateStatus(id, status);
|
|
||||||
return success(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ public class AiModelSaveReqVO {
|
|||||||
@Schema(description = "主键", example = "1")
|
@Schema(description = "主键", example = "1")
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
@Schema(description = "模型名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "宠物声音翻译模型")
|
@Schema(description = "模型名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "模型")
|
||||||
@NotBlank(message = "模型名称不能为空")
|
@NotBlank(message = "模型名称不能为空")
|
||||||
private String modelName;
|
private String modelName;
|
||||||
|
|
||||||
@@ -22,14 +22,14 @@ public class AiModelSaveReqVO {
|
|||||||
@NotBlank(message = "版本号不能为空")
|
@NotBlank(message = "版本号不能为空")
|
||||||
private String version;
|
private String version;
|
||||||
|
|
||||||
@Schema(description = "负载百分比(0.0-1.0)", example = "0.75")
|
@Schema(description = "负载", example = "0.75")
|
||||||
private BigDecimal loadPercentage;
|
private BigDecimal loadPercentage;
|
||||||
|
|
||||||
@Schema(description = "状态(0-禁用 1-启用 2-测试中 3-已废弃)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
@Schema(description = "状态(0-禁用 1-启用)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||||
@NotNull(message = "状态不能为空")
|
@NotNull(message = "状态不能为空")
|
||||||
private Integer status;
|
private Integer status;
|
||||||
|
|
||||||
@Schema(description = "版本描述", example = "优化了翻译准确率")
|
@Schema(description = "版本描述", example = "描述")
|
||||||
private String description;
|
private String description;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,4 +54,6 @@ public class AiModelDO extends BaseDO {
|
|||||||
*/
|
*/
|
||||||
private String description;
|
private String description;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,8 +32,6 @@ public class SecurityConfiguration {
|
|||||||
.requestMatchers(adminSeverContextPath + "/**").permitAll();
|
.requestMatchers(adminSeverContextPath + "/**").permitAll();
|
||||||
// 文件读取
|
// 文件读取
|
||||||
registry.requestMatchers(buildAdminApi("/infra/file/*/get/**")).permitAll();
|
registry.requestMatchers(buildAdminApi("/infra/file/*/get/**")).permitAll();
|
||||||
// AI模型管理接口
|
|
||||||
registry.requestMatchers("/ai/model/**").permitAll();
|
|
||||||
// RPC 服务的安全配置
|
// RPC 服务的安全配置
|
||||||
registry.requestMatchers(ApiConstants.PREFIX + "/**").permitAll();
|
registry.requestMatchers(ApiConstants.PREFIX + "/**").permitAll();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,12 +51,4 @@ public interface AiModelService {
|
|||||||
*/
|
*/
|
||||||
PageResult<AiModelDO> getModelPage(AiModelPageReqVO pageReqVO);
|
PageResult<AiModelDO> getModelPage(AiModelPageReqVO pageReqVO);
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新状态
|
|
||||||
*
|
|
||||||
* @param id 编号
|
|
||||||
* @param status 状态
|
|
||||||
*/
|
|
||||||
void updateStatus(Long id, Integer status);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ public class AiModelServiceImpl implements AiModelService {
|
|||||||
return model.getId();
|
return model.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateModel(AiModelSaveReqVO updateReqVO) {
|
public void updateModel(AiModelSaveReqVO updateReqVO) {
|
||||||
AiModelDO updateObj = BeanUtils.toBean(updateReqVO, AiModelDO.class);
|
AiModelDO updateObj = BeanUtils.toBean(updateReqVO, AiModelDO.class);
|
||||||
@@ -50,12 +51,4 @@ public class AiModelServiceImpl implements AiModelService {
|
|||||||
return modelMapper.selectPage(pageReqVO);
|
return modelMapper.selectPage(pageReqVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateStatus(Long id, Integer status) {
|
|
||||||
AiModelDO updateObj = new AiModelDO();
|
|
||||||
updateObj.setId(id);
|
|
||||||
updateObj.setStatus(status);
|
|
||||||
modelMapper.updateById(updateObj);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ import com.tashow.cloud.common.pojo.PageResult;
|
|||||||
import com.tashow.cloud.common.util.collection.CollectionUtils;
|
import com.tashow.cloud.common.util.collection.CollectionUtils;
|
||||||
import com.tashow.cloud.common.util.object.BeanUtils;
|
import com.tashow.cloud.common.util.object.BeanUtils;
|
||||||
import com.tashow.cloud.common.util.validation.ValidationUtils;
|
import com.tashow.cloud.common.util.validation.ValidationUtils;
|
||||||
|
|
||||||
|
|
||||||
import com.tashow.cloud.infraapi.api.config.ConfigApi;
|
import com.tashow.cloud.infraapi.api.config.ConfigApi;
|
||||||
import com.tashow.cloud.infraapi.api.file.FileApi;
|
import com.tashow.cloud.infraapi.api.file.FileApi;
|
||||||
import com.tashow.cloud.permission.core.util.DataPermissionUtils;
|
import com.tashow.cloud.permission.core.util.DataPermissionUtils;
|
||||||
|
|||||||
Reference in New Issue
Block a user