mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-27 01:23:55 +08:00
供应器管理-增删改查api
This commit is contained in:
@@ -0,0 +1,13 @@
|
|||||||
|
package xiaozhi.common.annotation;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface CreateGroup {
|
||||||
|
// 可以定义一些元数据或者参数
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package xiaozhi.common.annotation;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface UpdateGroup {
|
||||||
|
// 可以定义一些元数据或者参数
|
||||||
|
}
|
||||||
|
|
||||||
@@ -1,7 +1,10 @@
|
|||||||
package xiaozhi.common.exception;
|
package xiaozhi.common.exception;
|
||||||
|
|
||||||
import org.apache.shiro.authz.UnauthorizedException;
|
import org.apache.shiro.authz.UnauthorizedException;
|
||||||
|
import org.springframework.context.support.DefaultMessageSourceResolvable;
|
||||||
import org.springframework.dao.DuplicateKeyException;
|
import org.springframework.dao.DuplicateKeyException;
|
||||||
|
import org.springframework.validation.ObjectError;
|
||||||
|
import org.springframework.web.bind.MethodArgumentNotValidException;
|
||||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||||
import org.springframework.web.servlet.resource.NoResourceFoundException;
|
import org.springframework.web.servlet.resource.NoResourceFoundException;
|
||||||
@@ -10,6 +13,8 @@ import lombok.AllArgsConstructor;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import xiaozhi.common.utils.Result;
|
import xiaozhi.common.utils.Result;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
/**
|
/**
|
||||||
* 异常处理器
|
* 异常处理器
|
||||||
* Copyright (c) 人人开源 All rights reserved.
|
* Copyright (c) 人人开源 All rights reserved.
|
||||||
@@ -60,4 +65,16 @@ public class RenExceptionHandler {
|
|||||||
return new Result<Void>().error(404, "资源不存在");
|
return new Result<Void>().error(404, "资源不存在");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ExceptionHandler(MethodArgumentNotValidException.class)
|
||||||
|
public Result<Void> handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
List<ObjectError> allErrors = ex.getBindingResult().getAllErrors();
|
||||||
|
String errorMsg = allErrors.stream()
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.map(DefaultMessageSourceResolvable::getDefaultMessage)
|
||||||
|
.findFirst()
|
||||||
|
.orElse("");
|
||||||
|
return new Result<Void>().error(400, errorMsg);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
+57
@@ -0,0 +1,57 @@
|
|||||||
|
package xiaozhi.modules.model.controller;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import xiaozhi.common.annotation.UpdateGroup;
|
||||||
|
import xiaozhi.common.page.PageData;
|
||||||
|
import xiaozhi.common.utils.Result;
|
||||||
|
import xiaozhi.modules.model.dto.ModelProviderDTO;
|
||||||
|
import xiaozhi.modules.model.service.ModelProviderService;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/models/provider")
|
||||||
|
@Tag(name = "模型配置")
|
||||||
|
public class ModelProviderController {
|
||||||
|
|
||||||
|
private final ModelProviderService modelProviderService;
|
||||||
|
|
||||||
|
@GetMapping
|
||||||
|
@Operation(summary = "获取模型配置列表")
|
||||||
|
@RequiresPermissions("sys:role:superAdmin")
|
||||||
|
public Result<PageData<ModelProviderDTO>> getListPage(@RequestBody ModelProviderDTO modelProviderDTO,
|
||||||
|
@RequestParam(required = true, defaultValue = "0") String page,
|
||||||
|
@RequestParam(required = true, defaultValue = "10") String limit) {
|
||||||
|
return new Result<PageData<ModelProviderDTO>>()
|
||||||
|
.ok(modelProviderService.getListPage(modelProviderDTO, page, limit));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping
|
||||||
|
@Operation(summary = "获取模型配置列表")
|
||||||
|
@RequiresPermissions("sys:role:superAdmin")
|
||||||
|
public Result<ModelProviderDTO> add(@RequestBody @Validated ModelProviderDTO modelProviderDTO) {
|
||||||
|
ModelProviderDTO resp = modelProviderService.add(modelProviderDTO);
|
||||||
|
return new Result<ModelProviderDTO>().ok(resp);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping
|
||||||
|
@Operation(summary = "获取模型配置列表")
|
||||||
|
@RequiresPermissions("sys:role:superAdmin")
|
||||||
|
public Result<ModelProviderDTO> edit(@RequestBody @Validated(UpdateGroup.class) ModelProviderDTO modelProviderDTO) {
|
||||||
|
ModelProviderDTO resp = modelProviderService.edit(modelProviderDTO);
|
||||||
|
return new Result<ModelProviderDTO>().ok(resp);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/{id}")
|
||||||
|
@Operation(summary = "获取模型配置列表")
|
||||||
|
@RequiresPermissions("sys:role:superAdmin")
|
||||||
|
public Result<Void> delete(@PathVariable String id) {
|
||||||
|
modelProviderService.delete(id);
|
||||||
|
return new Result<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -8,29 +8,38 @@ import com.baomidou.mybatisplus.annotation.TableField;
|
|||||||
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
|
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import xiaozhi.common.annotation.UpdateGroup;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Schema(description = "模型供应器/商")
|
@Schema(description = "模型供应器/商")
|
||||||
public class ModelProviderDTO implements Serializable {
|
public class ModelProviderDTO implements Serializable {
|
||||||
//
|
//
|
||||||
// @Schema(description = "主键")
|
@Schema(description = "主键")
|
||||||
// private Long id;
|
@NotBlank(message = "id不能为空", groups = UpdateGroup.class)
|
||||||
|
private String id;
|
||||||
|
|
||||||
@Schema(description = "模型类型(Memory/ASR/VAD/LLM/TTS)")
|
@Schema(description = "模型类型(Memory/ASR/VAD/LLM/TTS)")
|
||||||
|
@NotBlank(message = "modelType不能为空")
|
||||||
private String modelType;
|
private String modelType;
|
||||||
|
|
||||||
@Schema(description = "供应器类型")
|
@Schema(description = "供应器类型")
|
||||||
|
@NotBlank(message = "providerCode不能为空")
|
||||||
private String providerCode;
|
private String providerCode;
|
||||||
|
|
||||||
@Schema(description = "供应器名称")
|
@Schema(description = "供应器名称")
|
||||||
|
@NotBlank(message = "name不能为空")
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
@Schema(description = "供应器字段列表(JSON格式)")
|
@Schema(description = "供应器字段列表(JSON格式)")
|
||||||
@TableField(typeHandler = JacksonTypeHandler.class)
|
@TableField(typeHandler = JacksonTypeHandler.class)
|
||||||
|
@NotBlank(message = "fields(JSON格式)不能为空")
|
||||||
private String fields;
|
private String fields;
|
||||||
|
|
||||||
@Schema(description = "排序")
|
@Schema(description = "排序")
|
||||||
|
@NotNull(message = "sort不能为空")
|
||||||
private Integer sort;
|
private Integer sort;
|
||||||
|
|
||||||
@Schema(description = "更新者")
|
@Schema(description = "更新者")
|
||||||
|
|||||||
+6
-4
@@ -2,8 +2,8 @@ package xiaozhi.modules.model.service;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import xiaozhi.common.page.PageData;
|
||||||
import xiaozhi.modules.model.dto.ModelProviderDTO;
|
import xiaozhi.modules.model.dto.ModelProviderDTO;
|
||||||
import xiaozhi.modules.model.entity.ModelProviderEntity;
|
|
||||||
|
|
||||||
public interface ModelProviderService {
|
public interface ModelProviderService {
|
||||||
|
|
||||||
@@ -11,11 +11,13 @@ public interface ModelProviderService {
|
|||||||
|
|
||||||
List<ModelProviderDTO> getListByModelType(String modelType);
|
List<ModelProviderDTO> getListByModelType(String modelType);
|
||||||
|
|
||||||
ModelProviderDTO add(ModelProviderEntity modelProviderEntity);
|
ModelProviderDTO add(ModelProviderDTO modelProviderDTO);
|
||||||
|
|
||||||
ModelProviderDTO edit(ModelProviderEntity modelProviderEntity);
|
ModelProviderDTO edit(ModelProviderDTO modelProviderDTO);
|
||||||
|
|
||||||
void delete();
|
void delete(String id);
|
||||||
|
|
||||||
|
PageData<ModelProviderDTO> getListPage(ModelProviderDTO modelProviderDTO, String page, String limit);
|
||||||
|
|
||||||
List<ModelProviderDTO> getList(String modelType, String provideCode);
|
List<ModelProviderDTO> getList(String modelType, String provideCode);
|
||||||
}
|
}
|
||||||
|
|||||||
+50
-5
@@ -1,19 +1,28 @@
|
|||||||
package xiaozhi.modules.model.service.impl;
|
package xiaozhi.modules.model.service.impl;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
import xiaozhi.common.constant.Constant;
|
||||||
|
import xiaozhi.common.exception.RenException;
|
||||||
|
import xiaozhi.common.page.PageData;
|
||||||
import xiaozhi.common.service.impl.BaseServiceImpl;
|
import xiaozhi.common.service.impl.BaseServiceImpl;
|
||||||
|
import xiaozhi.common.user.UserDetail;
|
||||||
import xiaozhi.common.utils.ConvertUtils;
|
import xiaozhi.common.utils.ConvertUtils;
|
||||||
import xiaozhi.modules.model.dao.ModelProviderDao;
|
import xiaozhi.modules.model.dao.ModelProviderDao;
|
||||||
import xiaozhi.modules.model.dto.ModelProviderDTO;
|
import xiaozhi.modules.model.dto.ModelProviderDTO;
|
||||||
import xiaozhi.modules.model.entity.ModelProviderEntity;
|
import xiaozhi.modules.model.entity.ModelProviderEntity;
|
||||||
import xiaozhi.modules.model.service.ModelProviderService;
|
import xiaozhi.modules.model.service.ModelProviderService;
|
||||||
|
import xiaozhi.modules.security.user.SecurityUser;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@@ -32,18 +41,54 @@ public class ModelProviderServiceImpl extends BaseServiceImpl<ModelProviderDao,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ModelProviderDTO add(ModelProviderEntity modelProviderEntity) {
|
public PageData<ModelProviderDTO> getListPage(ModelProviderDTO modelProviderEntity, String page, String limit) {
|
||||||
return null;
|
|
||||||
|
Map<String, Object> params = new HashMap<String, Object>();
|
||||||
|
params.put(Constant.PAGE, page);
|
||||||
|
params.put(Constant.LIMIT, limit);
|
||||||
|
|
||||||
|
IPage<ModelProviderEntity> pageParam = getPage(params, "model_type", true);
|
||||||
|
|
||||||
|
QueryWrapper<ModelProviderEntity> wrapper = new QueryWrapper<ModelProviderEntity>();
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(modelProviderEntity.getModelType())) {
|
||||||
|
wrapper.eq("model_type", modelProviderEntity.getModelType());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(modelProviderEntity.getName())) {
|
||||||
|
wrapper.like("name", "%" + modelProviderEntity.getName() + "%");
|
||||||
|
}
|
||||||
|
return getPageData(modelProviderDao.selectPage(pageParam, wrapper), ModelProviderDTO.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ModelProviderDTO edit(ModelProviderEntity modelProviderEntity) {
|
public ModelProviderDTO add(ModelProviderDTO modelProviderEntity) {
|
||||||
return null;
|
UserDetail user = SecurityUser.getUser();
|
||||||
|
modelProviderEntity.setCreator(user.getId());
|
||||||
|
modelProviderEntity.setUpdater(user.getId());
|
||||||
|
modelProviderEntity.setCreateDate(new Date());
|
||||||
|
modelProviderEntity.setUpdateDate(new Date());
|
||||||
|
if (modelProviderDao.insert(ConvertUtils.sourceToTarget(modelProviderEntity, ModelProviderEntity.class)) == 0) {
|
||||||
|
throw new RenException("新增数据失败");
|
||||||
|
}
|
||||||
|
|
||||||
|
return ConvertUtils.sourceToTarget(modelProviderEntity, ModelProviderDTO.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void delete() {
|
public ModelProviderDTO edit(ModelProviderDTO modelProviderEntity) {
|
||||||
|
UserDetail user = SecurityUser.getUser();
|
||||||
|
modelProviderEntity.setUpdater(user.getId());
|
||||||
|
modelProviderEntity.setUpdateDate(new Date());
|
||||||
|
if (modelProviderDao.updateById(ConvertUtils.sourceToTarget(modelProviderEntity, ModelProviderEntity.class)) == 0) {
|
||||||
|
throw new RenException("修改数据失败");
|
||||||
|
}
|
||||||
|
return ConvertUtils.sourceToTarget(modelProviderEntity, ModelProviderDTO.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void delete(String id) {
|
||||||
|
modelProviderDao.deleteById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user