From c51c8b4af0cf0affa397f3b97bb898b22fb0f266 Mon Sep 17 00:00:00 2001 From: ljwwd2 <1205484020@qq.com> Date: Fri, 16 May 2025 01:42:19 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BE=9B=E5=BA=94=E5=99=A8=E7=AE=A1?= =?UTF-8?q?=E7=90=86-=E5=A2=9E=E5=88=A0=E6=94=B9=E6=9F=A5api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/annotation/CreateGroup.java | 13 +++++ .../common/annotation/UpdateGroup.java | 13 +++++ .../common/exception/RenExceptionHandler.java | 17 ++++++ .../controller/ModelProviderController.java | 57 +++++++++++++++++++ .../modules/model/dto/ModelProviderDTO.java | 13 ++++- .../model/service/ModelProviderService.java | 10 ++-- .../impl/ModelProviderServiceImpl.java | 55 ++++++++++++++++-- 7 files changed, 167 insertions(+), 11 deletions(-) create mode 100644 main/manager-api/src/main/java/xiaozhi/common/annotation/CreateGroup.java create mode 100644 main/manager-api/src/main/java/xiaozhi/common/annotation/UpdateGroup.java create mode 100644 main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelProviderController.java diff --git a/main/manager-api/src/main/java/xiaozhi/common/annotation/CreateGroup.java b/main/manager-api/src/main/java/xiaozhi/common/annotation/CreateGroup.java new file mode 100644 index 00000000..7864ec3f --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/annotation/CreateGroup.java @@ -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 { + // 可以定义一些元数据或者参数 +} + diff --git a/main/manager-api/src/main/java/xiaozhi/common/annotation/UpdateGroup.java b/main/manager-api/src/main/java/xiaozhi/common/annotation/UpdateGroup.java new file mode 100644 index 00000000..ce168f99 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/annotation/UpdateGroup.java @@ -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 { + // 可以定义一些元数据或者参数 +} + diff --git a/main/manager-api/src/main/java/xiaozhi/common/exception/RenExceptionHandler.java b/main/manager-api/src/main/java/xiaozhi/common/exception/RenExceptionHandler.java index 0d0aa118..df9023ae 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/exception/RenExceptionHandler.java +++ b/main/manager-api/src/main/java/xiaozhi/common/exception/RenExceptionHandler.java @@ -1,7 +1,10 @@ package xiaozhi.common.exception; import org.apache.shiro.authz.UnauthorizedException; +import org.springframework.context.support.DefaultMessageSourceResolvable; 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.RestControllerAdvice; import org.springframework.web.servlet.resource.NoResourceFoundException; @@ -10,6 +13,8 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import xiaozhi.common.utils.Result; +import java.util.List; +import java.util.Objects; /** * 异常处理器 * Copyright (c) 人人开源 All rights reserved. @@ -60,4 +65,16 @@ public class RenExceptionHandler { return new Result().error(404, "资源不存在"); } + @ExceptionHandler(MethodArgumentNotValidException.class) + public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) { + StringBuilder sb = new StringBuilder(); + List allErrors = ex.getBindingResult().getAllErrors(); + String errorMsg = allErrors.stream() + .filter(Objects::nonNull) + .map(DefaultMessageSourceResolvable::getDefaultMessage) + .findFirst() + .orElse(""); + return new Result().error(400, errorMsg); + } + } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelProviderController.java b/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelProviderController.java new file mode 100644 index 00000000..5c6c3904 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelProviderController.java @@ -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> getListPage(@RequestBody ModelProviderDTO modelProviderDTO, + @RequestParam(required = true, defaultValue = "0") String page, + @RequestParam(required = true, defaultValue = "10") String limit) { + return new Result>() + .ok(modelProviderService.getListPage(modelProviderDTO, page, limit)); + } + + @PostMapping + @Operation(summary = "获取模型配置列表") + @RequiresPermissions("sys:role:superAdmin") + public Result add(@RequestBody @Validated ModelProviderDTO modelProviderDTO) { + ModelProviderDTO resp = modelProviderService.add(modelProviderDTO); + return new Result().ok(resp); + } + + @PutMapping + @Operation(summary = "获取模型配置列表") + @RequiresPermissions("sys:role:superAdmin") + public Result edit(@RequestBody @Validated(UpdateGroup.class) ModelProviderDTO modelProviderDTO) { + ModelProviderDTO resp = modelProviderService.edit(modelProviderDTO); + return new Result().ok(resp); + } + + @DeleteMapping("/{id}") + @Operation(summary = "获取模型配置列表") + @RequiresPermissions("sys:role:superAdmin") + public Result delete(@PathVariable String id) { + modelProviderService.delete(id); + return new Result<>(); + } + +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelProviderDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelProviderDTO.java index 605ed13a..fdb33960 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelProviderDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelProviderDTO.java @@ -8,29 +8,38 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; import lombok.Data; +import xiaozhi.common.annotation.UpdateGroup; @Data @Schema(description = "模型供应器/商") public class ModelProviderDTO implements Serializable { // - // @Schema(description = "主键") - // private Long id; + @Schema(description = "主键") + @NotBlank(message = "id不能为空", groups = UpdateGroup.class) + private String id; @Schema(description = "模型类型(Memory/ASR/VAD/LLM/TTS)") + @NotBlank(message = "modelType不能为空") private String modelType; @Schema(description = "供应器类型") + @NotBlank(message = "providerCode不能为空") private String providerCode; @Schema(description = "供应器名称") + @NotBlank(message = "name不能为空") private String name; @Schema(description = "供应器字段列表(JSON格式)") @TableField(typeHandler = JacksonTypeHandler.class) + @NotBlank(message = "fields(JSON格式)不能为空") private String fields; @Schema(description = "排序") + @NotNull(message = "sort不能为空") private Integer sort; @Schema(description = "更新者") diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelProviderService.java b/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelProviderService.java index 2ace101e..fbb009fd 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelProviderService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelProviderService.java @@ -2,8 +2,8 @@ package xiaozhi.modules.model.service; import java.util.List; +import xiaozhi.common.page.PageData; import xiaozhi.modules.model.dto.ModelProviderDTO; -import xiaozhi.modules.model.entity.ModelProviderEntity; public interface ModelProviderService { @@ -11,11 +11,13 @@ public interface ModelProviderService { List 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 getListPage(ModelProviderDTO modelProviderDTO, String page, String limit); List getList(String modelType, String provideCode); } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelProviderServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelProviderServiceImpl.java index fb06e4d5..4222b108 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelProviderServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelProviderServiceImpl.java @@ -1,19 +1,28 @@ package xiaozhi.modules.model.service.impl; +import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.user.UserDetail; import xiaozhi.common.utils.ConvertUtils; import xiaozhi.modules.model.dao.ModelProviderDao; import xiaozhi.modules.model.dto.ModelProviderDTO; import xiaozhi.modules.model.entity.ModelProviderEntity; import xiaozhi.modules.model.service.ModelProviderService; +import xiaozhi.modules.security.user.SecurityUser; @Service @AllArgsConstructor @@ -32,18 +41,54 @@ public class ModelProviderServiceImpl extends BaseServiceImpl getListPage(ModelProviderDTO modelProviderEntity, String page, String limit) { + + Map params = new HashMap(); + params.put(Constant.PAGE, page); + params.put(Constant.LIMIT, limit); + + IPage pageParam = getPage(params, "model_type", true); + + QueryWrapper wrapper = new QueryWrapper(); + + 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 - public ModelProviderDTO edit(ModelProviderEntity modelProviderEntity) { - return null; + public ModelProviderDTO add(ModelProviderDTO modelProviderEntity) { + 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 - 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 From cbabf01902dc8e30030dbad00212ac02c6262f84 Mon Sep 17 00:00:00 2001 From: ljwwd2 <1205484020@qq.com> Date: Fri, 16 May 2025 03:04:52 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BE=9B=E5=BA=94=E5=99=A8=E7=AE=A1?= =?UTF-8?q?=E7=90=86-=E5=A2=9E=E5=88=A0=E6=94=B9=E6=9F=A5api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/controller/ModelProviderController.java | 12 ++++++------ .../model/service/impl/ModelProviderServiceImpl.java | 4 +++- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelProviderController.java b/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelProviderController.java index 5c6c3904..b296c240 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelProviderController.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelProviderController.java @@ -15,15 +15,15 @@ import xiaozhi.modules.model.service.ModelProviderService; @AllArgsConstructor @RestController @RequestMapping("/models/provider") -@Tag(name = "模型配置") +@Tag(name = "模型供应器") public class ModelProviderController { private final ModelProviderService modelProviderService; @GetMapping - @Operation(summary = "获取模型配置列表") + @Operation(summary = "获取模型供应器列表") @RequiresPermissions("sys:role:superAdmin") - public Result> getListPage(@RequestBody ModelProviderDTO modelProviderDTO, + public Result> getListPage(ModelProviderDTO modelProviderDTO, @RequestParam(required = true, defaultValue = "0") String page, @RequestParam(required = true, defaultValue = "10") String limit) { return new Result>() @@ -31,7 +31,7 @@ public class ModelProviderController { } @PostMapping - @Operation(summary = "获取模型配置列表") + @Operation(summary = "获取模型供应器列表") @RequiresPermissions("sys:role:superAdmin") public Result add(@RequestBody @Validated ModelProviderDTO modelProviderDTO) { ModelProviderDTO resp = modelProviderService.add(modelProviderDTO); @@ -39,7 +39,7 @@ public class ModelProviderController { } @PutMapping - @Operation(summary = "获取模型配置列表") + @Operation(summary = "获取模型供应器列表") @RequiresPermissions("sys:role:superAdmin") public Result edit(@RequestBody @Validated(UpdateGroup.class) ModelProviderDTO modelProviderDTO) { ModelProviderDTO resp = modelProviderService.edit(modelProviderDTO); @@ -47,7 +47,7 @@ public class ModelProviderController { } @DeleteMapping("/{id}") - @Operation(summary = "获取模型配置列表") + @Operation(summary = "获取模型供应器列表") @RequiresPermissions("sys:role:superAdmin") public Result delete(@PathVariable String id) { modelProviderService.delete(id); diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelProviderServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelProviderServiceImpl.java index 4222b108..90f69f32 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelProviderServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelProviderServiceImpl.java @@ -88,7 +88,9 @@ public class ModelProviderServiceImpl extends BaseServiceImpl Date: Sat, 17 May 2025 01:18:03 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BE=9B=E5=BA=94=E5=99=A8=E7=AE=A1?= =?UTF-8?q?=E7=90=86-=E5=A2=9E=E5=88=A0=E6=94=B9=E6=9F=A5api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/service/impl/BaseServiceImpl.java | 55 +++++++++++++++ .../controller/ModelProviderController.java | 31 ++++++--- .../model/entity/ModelProviderEntity.java | 2 +- .../model/service/ModelProviderService.java | 2 + .../impl/ModelProviderServiceImpl.java | 68 ++++++++++++------- 5 files changed, 123 insertions(+), 35 deletions(-) diff --git a/main/manager-api/src/main/java/xiaozhi/common/service/impl/BaseServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/common/service/impl/BaseServiceImpl.java index 9d2ba5d5..49a003cb 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/service/impl/BaseServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/common/service/impl/BaseServiceImpl.java @@ -1,6 +1,7 @@ package xiaozhi.common.service.impl; import java.io.Serializable; +import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; @@ -18,6 +19,7 @@ import com.baomidou.mybatisplus.core.enums.SqlMethod; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.OrderItem; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.ReflectionKit; import com.baomidou.mybatisplus.core.toolkit.StringUtils; @@ -92,6 +94,59 @@ public abstract class BaseServiceImpl, T> implements Bas return page; } + /** + * 获取分页对象 + * @see xiaozhi.common.constant.Constant + * params.put(Constant.PAGE, "1"); + * params.put(Constant.LIMIT, "10"); + * params.put(Constant.ORDER_FIELD, List.of("model_type", "sort")); + * params.put(Constant.ORDER, "asc"); + * + * @param params 分页查询参数 + */ + protected IPage getPage(Map params) { + // 分页参数 + long curPage = 1; + long limit = 10; + + if (params.get(Constant.PAGE) != null) { + curPage = Long.parseLong((String) params.get(Constant.PAGE)); + } + + if (params.get(Constant.LIMIT) != null) { + limit = Long.parseLong((String) params.get(Constant.LIMIT)); + } + + // 分页对象 + Page page = new Page<>(curPage, limit); + + // 分页参数 + params.put(Constant.PAGE, page); + + // 排序字段 + Object orderField = params.get(Constant.ORDER_FIELD); + + List orderFields = new ArrayList<>(); + + if (orderField instanceof String) { + orderFields.add((String) orderField); + } else if (orderField instanceof List) { + orderFields.addAll( (List) orderField); + } + String order = (String) params.get(Constant.ORDER); + + // 有排序字段则排序,默认降序 + if (CollectionUtils.isNotEmpty(orderFields)) { + if (StringUtils.isNotBlank(order) && Constant.ASC.equalsIgnoreCase(order)) { + return page.addOrder(OrderItem.ascs(orderFields.toArray(new String[orderFields.size()]))); + } else { + return page.addOrder(OrderItem.descs(orderFields.toArray(new String[orderFields.size()]))); + } + } + + return page; + } + protected PageData getPageData(List list, long total, Class target) { List targetList = ConvertUtils.sourceToTarget(list, target); diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelProviderController.java b/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelProviderController.java index b296c240..64e14cb3 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelProviderController.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelProviderController.java @@ -1,11 +1,21 @@ package xiaozhi.modules.model.controller; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.AllArgsConstructor; +import java.util.List; + import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.AllArgsConstructor; import xiaozhi.common.annotation.UpdateGroup; import xiaozhi.common.page.PageData; import xiaozhi.common.utils.Result; @@ -31,7 +41,7 @@ public class ModelProviderController { } @PostMapping - @Operation(summary = "获取模型供应器列表") + @Operation(summary = "新增模型供应器") @RequiresPermissions("sys:role:superAdmin") public Result add(@RequestBody @Validated ModelProviderDTO modelProviderDTO) { ModelProviderDTO resp = modelProviderService.add(modelProviderDTO); @@ -39,18 +49,19 @@ public class ModelProviderController { } @PutMapping - @Operation(summary = "获取模型供应器列表") + @Operation(summary = "修改模型供应器") @RequiresPermissions("sys:role:superAdmin") public Result edit(@RequestBody @Validated(UpdateGroup.class) ModelProviderDTO modelProviderDTO) { ModelProviderDTO resp = modelProviderService.edit(modelProviderDTO); return new Result().ok(resp); } - @DeleteMapping("/{id}") - @Operation(summary = "获取模型供应器列表") + @PostMapping("/delete") + @Operation(summary = "删除模型供应器") @RequiresPermissions("sys:role:superAdmin") - public Result delete(@PathVariable String id) { - modelProviderService.delete(id); + @Parameter(name = "ids", description = "ID数组", required = true) + public Result delete(@RequestBody List ids) { + modelProviderService.delete(ids); return new Result<>(); } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/entity/ModelProviderEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/model/entity/ModelProviderEntity.java index 62e84f67..0509e09c 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/entity/ModelProviderEntity.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/entity/ModelProviderEntity.java @@ -30,7 +30,7 @@ public class ModelProviderEntity { private String name; @Schema(description = "供应器字段列表(JSON格式)") - @TableField(typeHandler = JacksonTypeHandler.class) +// @TableField(typeHandler = JacksonTypeHandler.class) private String fields; @Schema(description = "排序") diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelProviderService.java b/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelProviderService.java index fbb009fd..d41766f6 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelProviderService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelProviderService.java @@ -17,6 +17,8 @@ public interface ModelProviderService { void delete(String id); + void delete(List id); + PageData getListPage(ModelProviderDTO modelProviderDTO, String page, String limit); List getList(String modelType, String provideCode); diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelProviderServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelProviderServiceImpl.java index 90f69f32..3ea21367 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelProviderServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelProviderServiceImpl.java @@ -5,12 +5,13 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import cn.hutool.json.JSONArray; import lombok.AllArgsConstructor; import xiaozhi.common.constant.Constant; import xiaozhi.common.exception.RenException; @@ -41,49 +42,61 @@ public class ModelProviderServiceImpl extends BaseServiceImpl getListPage(ModelProviderDTO modelProviderEntity, String page, String limit) { + public PageData getListPage(ModelProviderDTO modelProviderDTO, String page, String limit) { Map params = new HashMap(); params.put(Constant.PAGE, page); params.put(Constant.LIMIT, limit); + params.put(Constant.ORDER_FIELD, List.of("model_type", "sort")); + params.put(Constant.ORDER, "asc"); - IPage pageParam = getPage(params, "model_type", true); + IPage pageParam = getPage(params); QueryWrapper wrapper = new QueryWrapper(); - if (StringUtils.isNotBlank(modelProviderEntity.getModelType())) { - wrapper.eq("model_type", modelProviderEntity.getModelType()); + if (StringUtils.isNotBlank(modelProviderDTO.getModelType())) { + wrapper.eq("model_type", modelProviderDTO.getModelType()); } - if (StringUtils.isNotBlank(modelProviderEntity.getName())) { - wrapper.like("name", "%" + modelProviderEntity.getName() + "%"); + if (StringUtils.isNotBlank(modelProviderDTO.getName())) { + wrapper.like("name", "%" + modelProviderDTO.getName() + "%"); } return getPageData(modelProviderDao.selectPage(pageParam, wrapper), ModelProviderDTO.class); } - @Override - public ModelProviderDTO add(ModelProviderDTO modelProviderEntity) { - 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); + public static void main(String[] args) { + String jsonString = "\"[]\""; + JSONArray jsonArray = new JSONArray(jsonString); + System.out.println("字符串转 JSONArray: " + jsonArray.toString()); } @Override - public ModelProviderDTO edit(ModelProviderDTO modelProviderEntity) { + public ModelProviderDTO add(ModelProviderDTO modelProviderDTO) { UserDetail user = SecurityUser.getUser(); - modelProviderEntity.setUpdater(user.getId()); - modelProviderEntity.setUpdateDate(new Date()); - if (modelProviderDao.updateById(ConvertUtils.sourceToTarget(modelProviderEntity, ModelProviderEntity.class)) == 0) { + modelProviderDTO.setCreator(user.getId()); + modelProviderDTO.setUpdater(user.getId()); + modelProviderDTO.setCreateDate(new Date()); + modelProviderDTO.setUpdateDate(new Date()); + // 去除Fields左右的双引号 + + modelProviderDTO.setFields(modelProviderDTO.getFields()); + ModelProviderEntity entity = ConvertUtils.sourceToTarget(modelProviderDTO, ModelProviderEntity.class); + if (modelProviderDao.insert(entity) == 0) { + throw new RenException("新增数据失败"); + } + + return ConvertUtils.sourceToTarget(modelProviderDTO, ModelProviderDTO.class); + } + + @Override + public ModelProviderDTO edit(ModelProviderDTO modelProviderDTO) { + UserDetail user = SecurityUser.getUser(); + modelProviderDTO.setUpdater(user.getId()); + modelProviderDTO.setUpdateDate(new Date()); + if (modelProviderDao.updateById(ConvertUtils.sourceToTarget(modelProviderDTO, ModelProviderEntity.class)) == 0) { throw new RenException("修改数据失败"); } - return ConvertUtils.sourceToTarget(modelProviderEntity, ModelProviderDTO.class); + return ConvertUtils.sourceToTarget(modelProviderDTO, ModelProviderDTO.class); } @Override @@ -93,6 +106,13 @@ public class ModelProviderServiceImpl extends BaseServiceImpl ids) { + if (modelProviderDao.deleteBatchIds(ids) == 0) { + throw new RenException("删除数据失败"); + } + } + @Override public List getList(String modelType, String providerCode) { QueryWrapper queryWrapper = new QueryWrapper<>(); From 38a97d6b5a125276f674ca27d5004e382ccc7fb3 Mon Sep 17 00:00:00 2001 From: ljwwd2 <1205484020@qq.com> Date: Sat, 17 May 2025 01:18:19 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BE=9B=E5=BA=94=E5=99=A8=E7=AE=A1?= =?UTF-8?q?=E7=90=86-=E5=89=8D=E7=AB=AF=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main/manager-web/src/apis/module/model.js | 142 +++++++- .../src/components/ProviderDialog.vue | 12 +- .../src/views/ProviderManagement.vue | 326 +++++++----------- 3 files changed, 266 insertions(+), 214 deletions(-) diff --git a/main/manager-web/src/apis/module/model.js b/main/manager-web/src/apis/module/model.js index ec0ea32f..e64072a8 100644 --- a/main/manager-web/src/apis/module/model.js +++ b/main/manager-web/src/apis/module/model.js @@ -166,20 +166,20 @@ export default { configJson: formData.configJson }; RequestService.sendRequest() - .url(`${getServiceUrl()}/models/${modelType}/${provideCode}/${id}`) - .method('PUT') - .data(payload) - .success((res) => { - RequestService.clearRequestTime(); - callback(res); - }) - .fail((err) => { - console.error('更新模型失败:', err); - this.$message.error(err.msg || '更新模型失败'); - RequestService.reAjaxFun(() => { - this.updateModel(params, callback); - }); - }).send(); + .url(`${getServiceUrl()}/models/${modelType}/${provideCode}/${id}`) + .method('PUT') + .data(payload) + .success((res) => { + RequestService.clearRequestTime(); + callback(res); + }) + .fail((err) => { + console.error('更新模型失败:', err); + this.$message.error(err.msg || '更新模型失败'); + RequestService.reAjaxFun(() => { + this.updateModel(params, callback); + }); + }).send(); }, // 设置默认模型 setDefaultModel(id, callback) { @@ -197,5 +197,117 @@ export default { this.setDefaultModel(id, callback) }) }).send() - } + }, + + /** + * 获取模型配置列表(支持查询参数) + * @param {Object} params - 查询参数对象,例如 { name: 'test', modelType: 1 } + * @param {Function} callback - 回调函数 + */ + getModelProvidersPage(params, callback) { + // 构建查询参数 + const queryParams = new URLSearchParams(); + if (params.name) queryParams.append('name', params.name); + if (params.modelType !== undefined) queryParams.append('modelType', params.modelType); + if (params.page !== undefined) queryParams.append('page', params.page); + if (params.limit !== undefined) queryParams.append('limit', params.limit); + + RequestService.sendRequest() + .url(`${getServiceUrl()}/models/provider?${queryParams.toString()}`) + .method('GET') + // 如果需要额外设置 header,可以在这里添加 + // .headers({ 'X-Custom-Header': 'xxx' }) + .success((res) => { + RequestService.clearRequestTime(); + callback(res); + }) + .fail((err) => { + console.error('获取供应器列表失败:', err); + this.$message.error('获取供应器列表失败'); + RequestService.reAjaxFun(() => { + this.getModelProviders(params, callback); + }); + }).send(); + }, + + /** + * 新增模型供应器配置 + * @param {Object} params - 请求参数对象,例如 { modelType: '1', providerCode: '1', name: '1', fields: '1', sort: 1 } + * @param {Function} callback - 成功回调函数 + */ + addModelProvider(params, callback) { + const postData = { + modelType: params.modelType || '', + providerCode: params.providerCode || '', + name: params.name || '', + fields: JSON.stringify(params.fields || []), + sort: params.sort || 0 + }; + + RequestService.sendRequest() + .url(`${getServiceUrl()}/models/provider`) + .method('POST') + .data(postData) + .success((res) => { + console.log('新增模型供应器成功:', res); + RequestService.clearRequestTime(); + // this.$message.success('新增模型供应器成功'); + callback(res); + }) + .fail((err) => { + console.error('新增模型供应器失败:', err); + // this.$message.error(err.msg || '新增模型供应器失败'); + // RequestService.reAjaxFun(() => { + // this.addModelProvider(params, callback); + // }); + }).send(); + }, + + /** + * 更新模型供应器配置 + * @param {Object} params - 请求参数对象,例如 { id: '111', modelType: '1', providerCode: '1', name: '1', fields: '1', sort: 1 } + * @param {Function} callback - 成功回调函数 + */ + updateModelProvider(params, callback) { + const putData = { + id: params.id || '', + modelType: params.modelType || '', + providerCode: params.providerCode || '', + name: params.name || '', + fields: JSON.stringify(params.fields || []), + sort: params.sort || 0 + }; + + RequestService.sendRequest() + .url(`${getServiceUrl()}/models/provider`) + .method('PUT') + .data(putData) + .success((res) => { + RequestService.clearRequestTime(); + callback(res); + }) + .fail((err) => { + console.error('更新模型供应器失败:', err); + RequestService.reAjaxFun(() => { + this.updateModelProvider(params, callback); + }); + }).send(); + }, + // 删除 + deleteModelProviderByIds(ids, callback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/models/provider/delete`) + .method('POST') + .data(ids) + .success((res) => { + RequestService.clearRequestTime() + callback(res); + }) + .fail((err) => { + console.error('删除参数失败:', err) + RequestService.reAjaxFun(() => { + this.deleteParam(ids, callback) + }) + }).send() + }, } diff --git a/main/manager-web/src/components/ProviderDialog.vue b/main/manager-web/src/components/ProviderDialog.vue index 844282ee..72437450 100644 --- a/main/manager-web/src/components/ProviderDialog.vue +++ b/main/manager-web/src/components/ProviderDialog.vue @@ -10,15 +10,15 @@
- - + + - - + +
@@ -135,8 +135,8 @@ export default { return { saving: false, rules: { - model_type: [{required: true, message: '请选择类别', trigger: 'change'}], - provider_code: [{required: true, message: '请输入供应器编码', trigger: 'blur'}], + modelType: [{required: true, message: '请选择类别', trigger: 'change'}], + providerCode: [{required: true, message: '请输入供应器编码', trigger: 'blur'}], name: [{required: true, message: '请输入供应器名称', trigger: 'blur'}] }, isAllFieldsSelected: false, diff --git a/main/manager-web/src/views/ProviderManagement.vue b/main/manager-web/src/views/ProviderManagement.vue index f047f482..a476c5e2 100644 --- a/main/manager-web/src/views/ProviderManagement.vue +++ b/main/manager-web/src/views/ProviderManagement.vue @@ -1,13 +1,14 @@