From b63fcc80a1cdab71bab3975f83b802ed82e028a6 Mon Sep 17 00:00:00 2001
From: hrz <1710360675@qq.com>
Date: Sat, 29 Mar 2025 17:06:53 +0800
Subject: [PATCH] =?UTF-8?q?update:=E6=95=B4=E5=90=88=E7=8E=B0=E6=9C=89?=
=?UTF-8?q?=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
main/manager-api/README.md | 7 -
main/manager-api/pom.xml | 1 -
.../common/controller/BaseController.java | 46 --
.../xiaozhi/common/convert/DateConverter.java | 12 +-
.../agent/controller/AgentController.java | 393 ++++++------------
.../controller/AgentTemplateController.java | 122 +-----
.../xiaozhi/modules/agent/dao/AgentDao.java | 10 +
.../AgentTemplateDao.java} | 8 +-
.../xiaozhi/modules/agent/domain/Agent.java | 116 ------
.../modules/agent/dto/AgentCreateDTO.java | 51 +++
.../modules/agent/dto/AgentUpdateDTO.java | 61 +++
.../modules/agent/entity/AgentEntity.java | 69 +++
.../AgentTemplateEntity.java} | 5 +-
.../modules/agent/mapper/AgentMapper.java | 20 -
.../modules/agent/service/AgentService.java | 38 +-
.../agent/service/AgentTemplateService.java | 13 +-
.../agent/service/impl/AgentServiceImpl.java | 67 ++-
.../impl/AgentTemplateServiceImpl.java | 26 +-
.../modules/agent/vo/AgentConfigVO.java | 17 -
.../modules/agent/vo/AgentTemplateVO.java | 9 +-
.../xiaozhi/modules/agent/vo/AgentVO.java | 19 -
.../device/constant/DeviceConstant.java | 7 -
.../device/controller/DeviceController.java | 185 +++------
.../xiaozhi/modules/device/dao/DeviceDao.java | 9 +
.../xiaozhi/modules/device/domain/Device.java | 91 ----
.../modules/device/dto/DeviceHeaderDTO.java | 19 +
.../modules/device/dto/DeviceUnBindDTO.java | 19 +
.../modules/device/entity/DeviceEntity.java | 54 +++
.../modules/device/mapper/DeviceMapper.java | 20 -
.../modules/device/service/DeviceService.java | 32 +-
.../service/impl/DeviceServiceImpl.java | 79 +++-
.../device/utils/CodeGeneratorUtil.java | 68 ---
.../modules/device/vo/DeviceCodeVO.java | 8 -
.../controller/Conflict_ModelController.java | 106 -----
.../model/controller/ModelController.java | 192 ++++-----
.../model/controller/TtsController.java | 124 ------
.../modules/model/domain/ModelConfig.java | 91 ----
.../modules/model/domain/ModelProvider.java | 71 ----
.../modules/model/domain/TtsVoice.java | 81 ----
.../model/mapper/ModelConfigMapper.java | 20 -
.../model/mapper/ModelProviderMapper.java | 20 -
.../modules/model/mapper/TtsVoiceMapper.java | 20 -
.../service/Conflict_ModelConfigService.java | 22 -
.../Conflict_ModelProviderService.java | 23 -
.../model/service/ModelConfigService.java | 25 +-
.../model/service/ModelProviderService.java | 26 +-
.../model/service/TtsVoiceService.java | 13 -
.../impl/Conflict_ModelConfigServiceImpl.java | 124 ------
.../Conflict_ModelProviderServiceImpl.java | 59 ---
.../service/impl/ModelConfigServiceImpl.java | 130 +++++-
.../impl/ModelProviderServiceImpl.java | 65 ++-
.../service/impl/TtsVoiceServiceImpl.java | 22 -
.../modules/ota/controller/OtaController.java | 145 -------
.../java/xiaozhi/modules/ota/domain/Ota.java | 66 ---
.../xiaozhi/modules/ota/mapper/OtaMapper.java | 20 -
.../modules/ota/service/OtaService.java | 13 -
.../ota/service/impl/OtaServiceImpl.java | 22 -
.../modules/security/config/ShiroConfig.java | 1 -
.../security/controller/LoginController.java | 19 +-
.../modules/security/oauth2/Oauth2Filter.java | 5 -
.../src/main/resources/application-dev.yml | 10 +-
.../resources/db/changelog/202503241020.sql | 16 -
.../resources/mapper/agent/AgentMapper.xml | 35 --
.../mapper/agent/AgentTemplateMapper.xml | 31 +-
.../resources/mapper/device/DeviceMapper.xml | 29 --
.../mapper/model/ModelConfigMapper.xml | 29 --
.../mapper/model/ModelProviderMapper.xml | 24 --
.../resources/mapper/model/TtsVoiceMapper.xml | 27 --
.../main/resources/mapper/ota/OtaMapper.xml | 23 -
69 files changed, 979 insertions(+), 2471 deletions(-)
delete mode 100644 main/manager-api/src/main/java/xiaozhi/common/controller/BaseController.java
create mode 100644 main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AgentDao.java
rename main/manager-api/src/main/java/xiaozhi/modules/agent/{mapper/AgentTemplateMapper.java => dao/AgentTemplateDao.java} (54%)
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/agent/domain/Agent.java
create mode 100644 main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentCreateDTO.java
create mode 100644 main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentUpdateDTO.java
create mode 100644 main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentEntity.java
rename main/manager-api/src/main/java/xiaozhi/modules/agent/{domain/AgentTemplate.java => entity/AgentTemplateEntity.java} (92%)
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/agent/mapper/AgentMapper.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/agent/vo/AgentConfigVO.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/agent/vo/AgentVO.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/device/constant/DeviceConstant.java
create mode 100644 main/manager-api/src/main/java/xiaozhi/modules/device/dao/DeviceDao.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/device/domain/Device.java
create mode 100644 main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceHeaderDTO.java
create mode 100644 main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceUnBindDTO.java
create mode 100644 main/manager-api/src/main/java/xiaozhi/modules/device/entity/DeviceEntity.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/device/mapper/DeviceMapper.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/device/utils/CodeGeneratorUtil.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/device/vo/DeviceCodeVO.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/model/controller/Conflict_ModelController.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/model/controller/TtsController.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/model/domain/ModelConfig.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/model/domain/ModelProvider.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/model/domain/TtsVoice.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/model/mapper/ModelConfigMapper.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/model/mapper/ModelProviderMapper.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/model/mapper/TtsVoiceMapper.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/model/service/Conflict_ModelConfigService.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/model/service/Conflict_ModelProviderService.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/model/service/TtsVoiceService.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/Conflict_ModelConfigServiceImpl.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/Conflict_ModelProviderServiceImpl.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/TtsVoiceServiceImpl.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/ota/controller/OtaController.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/ota/domain/Ota.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/ota/mapper/OtaMapper.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/ota/service/OtaService.java
delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/ota/service/impl/OtaServiceImpl.java
delete mode 100644 main/manager-api/src/main/resources/mapper/agent/AgentMapper.xml
delete mode 100644 main/manager-api/src/main/resources/mapper/device/DeviceMapper.xml
delete mode 100644 main/manager-api/src/main/resources/mapper/model/ModelConfigMapper.xml
delete mode 100644 main/manager-api/src/main/resources/mapper/model/ModelProviderMapper.xml
delete mode 100644 main/manager-api/src/main/resources/mapper/model/TtsVoiceMapper.xml
delete mode 100644 main/manager-api/src/main/resources/mapper/ota/OtaMapper.xml
diff --git a/main/manager-api/README.md b/main/manager-api/README.md
index 69aa5375..5eb87ae8 100644
--- a/main/manager-api/README.md
+++ b/main/manager-api/README.md
@@ -67,13 +67,6 @@ spring:
database: 0
```
-在`src/main/resources/application.yml`中配置Redis启用状态
-
-```
-renren:
- redis:
- open: true
-```
# 测试启动
diff --git a/main/manager-api/pom.xml b/main/manager-api/pom.xml
index 0857ec3c..441c09e6 100644
--- a/main/manager-api/pom.xml
+++ b/main/manager-api/pom.xml
@@ -27,7 +27,6 @@
2.0.2
1.6.2
33.0.0-jre
- 3.3.2
4.20.0
diff --git a/main/manager-api/src/main/java/xiaozhi/common/controller/BaseController.java b/main/manager-api/src/main/java/xiaozhi/common/controller/BaseController.java
deleted file mode 100644
index 8cda64c0..00000000
--- a/main/manager-api/src/main/java/xiaozhi/common/controller/BaseController.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package xiaozhi.common.controller;
-
-import jakarta.servlet.http.HttpServletRequest;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import java.util.Enumeration;
-import java.util.HashMap;
-
-public class BaseController {
-
- @Autowired
- protected HttpServletRequest request;
-
- /**
- * 获取请求头
- *
- * @return
- */
- protected HashMap getRequestHeaders() {
- HashMap requestHeaders = new HashMap();
- Enumeration headerNames = request.getHeaderNames();
- while (headerNames.hasMoreElements()) {
- String headerName = headerNames.nextElement();
- String headerValue = request.getHeader(headerName);
- requestHeaders.put(headerName, headerValue);
- }
- return requestHeaders;
- }
-
- /**
- * 获取请求参数
- *
- * @return
- */
- protected HashMap getRequestParams() {
- HashMap requestParams = new HashMap();
- Enumeration paramNames = request.getParameterNames();
- while (paramNames.hasMoreElements()) {
- String paramName = paramNames.nextElement();
- String paramValue = request.getParameter(paramName);
- requestParams.put(paramName, paramValue);
- }
- return requestParams;
- }
-
-}
diff --git a/main/manager-api/src/main/java/xiaozhi/common/convert/DateConverter.java b/main/manager-api/src/main/java/xiaozhi/common/convert/DateConverter.java
index a8439180..20c61be8 100644
--- a/main/manager-api/src/main/java/xiaozhi/common/convert/DateConverter.java
+++ b/main/manager-api/src/main/java/xiaozhi/common/convert/DateConverter.java
@@ -1,17 +1,17 @@
package xiaozhi.common.convert;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.core.convert.converter.Converter;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.core.convert.converter.Converter;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+
/**
* 日期转换
* Copyright (c) 人人开源 All rights reserved.
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/controller/AgentController.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/controller/AgentController.java
index f1d496ec..bb0bb52d 100644
--- a/main/manager-api/src/main/java/xiaozhi/modules/agent/controller/AgentController.java
+++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/controller/AgentController.java
@@ -1,287 +1,158 @@
package xiaozhi.modules.agent.controller;
-import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.beanutils.BeanUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.shiro.authz.annotation.RequiresPermissions;
-import org.springframework.web.bind.annotation.*;
-import xiaozhi.common.controller.BaseController;
-import xiaozhi.common.redis.RedisUtils;
-import xiaozhi.common.user.UserDetail;
-import xiaozhi.common.utils.Result;
-import xiaozhi.modules.agent.domain.Agent;
-import xiaozhi.modules.agent.domain.AgentTemplate;
-import xiaozhi.modules.agent.service.AgentService;
-import xiaozhi.modules.agent.service.AgentTemplateService;
-import xiaozhi.modules.agent.vo.AgentVO;
-import xiaozhi.modules.device.domain.Device;
-import xiaozhi.modules.device.service.DeviceService;
-import xiaozhi.modules.model.domain.ModelConfig;
-import xiaozhi.modules.model.domain.TtsVoice;
-import xiaozhi.modules.model.service.ModelConfigService;
-import xiaozhi.modules.model.service.TtsVoiceService;
-import xiaozhi.modules.security.user.SecurityUser;
-
-import java.util.ArrayList;
import java.util.Date;
import java.util.List;
-import java.util.UUID;
+import java.util.Map;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+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.Parameters;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.AllArgsConstructor;
+import xiaozhi.common.constant.Constant;
+import xiaozhi.common.page.PageData;
+import xiaozhi.common.user.UserDetail;
+import xiaozhi.common.utils.ConvertUtils;
+import xiaozhi.common.utils.Result;
+import xiaozhi.modules.agent.dto.AgentCreateDTO;
+import xiaozhi.modules.agent.dto.AgentUpdateDTO;
+import xiaozhi.modules.agent.entity.AgentEntity;
+import xiaozhi.modules.agent.service.AgentService;
+import xiaozhi.modules.security.user.SecurityUser;
-@Slf4j
@Tag(name = "智能体管理")
@AllArgsConstructor
@RestController
-@RequestMapping("/user/agent")
-public class AgentController extends BaseController {
+@RequestMapping("/agent")
+public class AgentController {
private final AgentService agentService;
- private final AgentTemplateService agentTemplateService;
- private final ModelConfigService modelConfigService;
- private final TtsVoiceService ttsVoiceService;
- private final DeviceService deviceService;
- private final RedisUtils redisUtils;
+
+ @GetMapping("/list")
+ @Operation(summary = "获取用户智能体列表")
+ @RequiresPermissions("sys:role:normal")
+ public Result> getUserAgents() {
+ UserDetail user = SecurityUser.getUser();
+ List agents = agentService.getUserAgents(user.getId());
+ return new Result>().ok(agents);
+ }
+
+ @GetMapping("/all")
+ @Operation(summary = "智能体列表(管理员)")
+ @RequiresPermissions("sys:role:superAdmin")
+ @Parameters({
+ @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true),
+ @Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true),
+ })
+ public Result> adminAgentList(
+ @Parameter(hidden = true) @RequestParam Map params) {
+ PageData page = agentService.adminAgentList(params);
+ return new Result>().ok(page);
+ }
+
+ @GetMapping("/{id}")
+ @Operation(summary = "获取智能体详情")
+ @RequiresPermissions("sys:role:normal")
+ public Result getAgentById(@PathVariable("id") String id) {
+ AgentEntity agent = agentService.getAgentById(id);
+ return new Result().ok(agent);
+ }
@PostMapping
- @Operation(summary = "添加智能体")
+ @Operation(summary = "创建智能体")
@RequiresPermissions("sys:role:normal")
- public Result addAgent(@RequestBody Agent agent) {
+ public Result save(@RequestBody @Valid AgentCreateDTO dto) {
+ AgentEntity entity = ConvertUtils.sourceToTarget(dto, AgentEntity.class);
+
+ // 设置用户ID和创建者信息
UserDetail user = SecurityUser.getUser();
- if (StringUtils.isBlank(agent.getAgentName())) {
- log.error("智能体名称不能为空");
- }
- Agent oldAgent = agentService.getOne(new QueryWrapper().eq("agent_name", agent.getAgentName()));
- if (ObjectUtils.isNull(oldAgent)) {
- AgentTemplate agentTemplate = agentTemplateService.getOne(new QueryWrapper().eq("is_default", 1));
- if (ObjectUtils.isNull(agentTemplate)) {
+ entity.setUserId(user.getId());
+ entity.setCreator(user.getId());
+ entity.setCreatedAt(new Date());
- } else {
- try {
- oldAgent = new Agent();
- BeanUtils.copyProperties(oldAgent, agentTemplate);
- oldAgent.setId(UUID.randomUUID().toString().replace("-", ""));
- oldAgent.setAgentName(agent.getAgentName());
- oldAgent.setUserId(user.getId());
- oldAgent.setCreator(user.getId());
- oldAgent.setCreatedAt(new Date());
- agentService.save(oldAgent);
- } catch (Exception e) {
- log.error("对象赋值异常", e);
- }
- }
- } else {
+ // ID、智能体编码和排序会在Service层自动生成
+ agentService.insert(entity);
- }
- return new Result().ok(agent);
+ return new Result<>();
}
- @PutMapping("{agentId}")
+ @PutMapping
@Operation(summary = "更新智能体")
@RequiresPermissions("sys:role:normal")
- public Result updateAgent(@PathVariable String agentId, @RequestBody Agent agent) {
+ public Result update(@RequestBody @Valid AgentUpdateDTO dto) {
+ // 先查询现有实体
+ AgentEntity existingEntity = agentService.getAgentById(dto.getId());
+ if (existingEntity == null) {
+ return new Result().error("智能体不存在");
+ }
+
+ // 只更新提供的非空字段
+ if (dto.getAgentName() != null) {
+ existingEntity.setAgentName(dto.getAgentName());
+ }
+ if (dto.getAgentCode() != null) {
+ existingEntity.setAgentCode(dto.getAgentCode());
+ }
+ if (dto.getAsrModelId() != null) {
+ existingEntity.setAsrModelId(dto.getAsrModelId());
+ }
+ if (dto.getVadModelId() != null) {
+ existingEntity.setVadModelId(dto.getVadModelId());
+ }
+ if (dto.getLlmModelId() != null) {
+ existingEntity.setLlmModelId(dto.getLlmModelId());
+ }
+ if (dto.getTtsModelId() != null) {
+ existingEntity.setTtsModelId(dto.getTtsModelId());
+ }
+ if (dto.getTtsVoiceId() != null) {
+ existingEntity.setTtsVoiceId(dto.getTtsVoiceId());
+ }
+ if (dto.getMemModelId() != null) {
+ existingEntity.setMemModelId(dto.getMemModelId());
+ }
+ if (dto.getIntentModelId() != null) {
+ existingEntity.setIntentModelId(dto.getIntentModelId());
+ }
+ if (dto.getSystemPrompt() != null) {
+ existingEntity.setSystemPrompt(dto.getSystemPrompt());
+ }
+ if (dto.getLangCode() != null) {
+ existingEntity.setLangCode(dto.getLangCode());
+ }
+ if (dto.getLanguage() != null) {
+ existingEntity.setLanguage(dto.getLanguage());
+ }
+ if (dto.getSort() != null) {
+ existingEntity.setSort(dto.getSort());
+ }
+
+ // 设置更新者信息
UserDetail user = SecurityUser.getUser();
- if (StringUtils.isBlank(agentId)) {
- log.error("智能体ID不能为空");
- return new Result().error("更新失败,智能体ID不能为空");
- }
- Agent oldAgent = agentService.getById(agentId);
- if (ObjectUtils.isNull(oldAgent)) {
- log.error("智能体不存在");
- return new Result().error("更新失败,智能体不存在");
- } else {
- UpdateWrapper updateWrapper = new UpdateWrapper<>();
- updateWrapper.eq("id", agentId);
- updateWrapper.set("agent_code", agent.getAgentCode());
- updateWrapper.set("asr_model_id", agent.getAsrModelId());
- updateWrapper.set("intent_model_id", agent.getIntentModelId());
- updateWrapper.set("llm_model_id", agent.getLlmModelId());
- updateWrapper.set("memory_model_id", agent.getMemoryModelId());
- updateWrapper.set("system_prompt", agent.getSystemPrompt());
- updateWrapper.set("tts_voice_id", agent.getTtsVoiceId());
- updateWrapper.set("tts_model_id", agent.getTtsModelId());
- updateWrapper.set("vad_model_id", agent.getVadModelId());
- updateWrapper.set("updater", user.getId());
- updateWrapper.set("updated_at", new Date());
- boolean bool = agentService.update(updateWrapper);
- if (!bool)
- return new Result().error("更新失败");
- }
- return new Result().ok(agent);
+ existingEntity.setUpdater(user.getId());
+ existingEntity.setUpdatedAt(new Date());
+
+ agentService.updateById(existingEntity);
+
+ return new Result<>();
}
- @DeleteMapping("/{agentId}")
+ @DeleteMapping("/{id}")
@Operation(summary = "删除智能体")
@RequiresPermissions("sys:role:normal")
- public Result delAgent(@PathVariable String agentId) {
- UserDetail user = SecurityUser.getUser();
- if (StringUtils.isBlank(agentId)) {
- log.error("智能体ID不能为空");
- }
- boolean bool = agentService.removeById(agentId);
- if (!bool) {
- return new Result().error("删除失败");
- }
- return new Result().ok(null);
- }
-
- @GetMapping("/{agentId}")
- @Operation(summary = "获取智能体信息")
- @RequiresPermissions("sys:role:normal")
- public Result getAgent(@PathVariable String agentId) {
- if (StringUtils.isBlank(agentId)) {
- log.error("智能体ID不能为空");
- }
- Agent agent = agentService.getById(agentId);
- return new Result().ok(agent);
- }
-
- @GetMapping
- @Operation(summary = "智能体列表")
- @RequiresPermissions("sys:role:normal")
- public Result> agentList() {
- UserDetail user = SecurityUser.getUser();
- List agents = agentService.list(new QueryWrapper().eq("user_id", user.getId()));
- List list = new ArrayList<>();
- this.convertAgentVOList(list, agents);
- return new Result>().ok(list);
- }
-
- @GetMapping("/loadAgentConfig/{deviceId}")
- @Operation(summary = "下载智能体配置")
- public Result loadAgentConfig(@PathVariable String deviceId) {
- Device device = deviceService.getOne(new QueryWrapper().eq("mac_address", deviceId.toUpperCase()));
- if (ObjectUtils.isNull(device)) {
- return new Result().error("设备不存在");
- }
- Agent agent = agentService.getOne(new QueryWrapper().eq("id", device.getAgentId()));
- if (ObjectUtils.isNull(agent)) {
- return new Result().error("智能体不存在");
- }
-
- JSONObject jsonObject = new JSONObject();
- jsonObject.set("prompt", agent.getSystemPrompt().replace("{{assistant_name}}", agent.getAgentCode()));
- jsonObject.set("owner", String.valueOf(agent.getUserId()));
- ModelConfig asrModel = modelConfigService.getById(agent.getAsrModelId());
- jsonObject.set("ASR", JSONUtil.parseObj(asrModel.getConfigJson()));
- ModelConfig llmModel = modelConfigService.getById(agent.getLlmModelId());
- jsonObject.set("LLM", JSONUtil.parseObj(llmModel.getConfigJson()));
- ModelConfig ttsModel = modelConfigService.getById(agent.getTtsModelId());
- JSONObject ttsJson = JSONUtil.parseObj(ttsModel.getConfigJson());
- TtsVoice ttsVoice = ttsVoiceService.getById(agent.getTtsVoiceId());
- ttsJson.getJSONObject(ttsModel.getModelCode()).set("voice", ttsVoice.getTtsVoice());
- jsonObject.set("TTS", ttsJson);
- ModelConfig vadModel = modelConfigService.getById(agent.getVadModelId());
- jsonObject.set("VAD", JSONUtil.parseObj(vadModel.getConfigJson()));
- ModelConfig intentModel = modelConfigService.getById(agent.getIntentModelId());
- jsonObject.set("Intent", JSONUtil.parseObj(intentModel.getConfigJson()));
- ModelConfig memoryModel = modelConfigService.getById(agent.getMemoryModelId());
- jsonObject.set("Memory", JSONUtil.parseObj(memoryModel.getConfigJson()));
- JSONObject module = new JSONObject();
- module.set("ASR", asrModel.getModelCode());
- module.set("LLM", llmModel.getModelCode());
- module.set("TTS", ttsModel.getModelCode());
- module.set("Intent", intentModel.getModelCode());
- module.set("Memory", memoryModel.getModelCode());
- module.set("VAD", vadModel.getModelCode());
- jsonObject.set("selected_module", module);
-
- return new Result().ok(jsonObject);
-
-// String json = "{\n" +
-// " \"ASR\": {\n" +
-// " \"FunASR\": {\n" +
-// " \"model_dir\": \"models/SenseVoiceSmall\",\n" +
-// " \"output_dir\": \"tmp/\",\n" +
-// " \"type\": \"fun_local\"\n" +
-// " }\n" +
-// " },\n" +
-// " \"LLM\": {\n" +
-// " \"ChatGLMLLM\": {\n" +
-// " \"api_key\": \"0415dad4014847babc3e3f03024c50a3.qH7FgTy5Yawc85fl\",\n" +
-// " \"model_name\": \"glm-4-flash\",\n" +
-// " \"type\": \"openai\",\n" +
-// " \"url\": \"https://open.bigmodel.cn/api/paas/v4/\"\n" +
-// " }\n" +
-// " },\n" +
-// " \"TTS\": {\n" +
-// " \"DoubaoTTS\": {\n" +
-// " \"access_token\": \"hrnx22F9WutWBm7YJzE62r_Z1myUmHEL\",\n" +
-// " \"api_url\": \"https://openspeech.bytedance.com/api/v1/tts\",\n" +
-// " \"appid\": \"6295576095\",\n" +
-// " \"authorization\": \"Bearer;\",\n" +
-// " \"cluster\": \"volcano_tts\",\n" +
-// " \"output_dir\": \"tmp/\",\n" +
-// " \"type\": \"doubao\",\n" +
-// " \"voice\": \"BV034_streaming\"\n" +
-// " }\n" +
-// " },\n" +
-// " \"VAD\": {\n" +
-// " \"SileroVAD\": {\n" +
-// " \"min_silence_duration_ms\": 700,\n" +
-// " \"model_dir\": \"models/snakers4_silero-vad\",\n" +
-// " \"threshold\": 0.5\n" +
-// " }\n" +
-// " },\n" +
-// " \"auth_code\": \"642365\",\n" +
-// " \"prompt\": \"你是一个叫小优的女孩,来自优享生活公司的AI智能体,声音好听,习惯简短表达,爱用网络梗。\\n请注意,要像一个人一样说话,请不要回复表情符号、代码、和xml标签。\\n现在我正在和你进行语音聊天,我们开始吧。\\n如果用户希望结束对话,请在最后说“拜拜”或“再见”。\\n\",\n" +
-// " \"selected_module\": {\n" +
-// " \"ASR\": \"FunASR\",\n" +
-// " \"Intent\": \"function_call\",\n" +
-// " \"LLM\": \"ChatGLMLLM\",\n" +
-// " \"Memory\": \"mem0ai\",\n" +
-// " \"TTS\": \"DoubaoTTS\",\n" +
-// " \"VAD\": \"SileroVAD\"\n" +
-// " },\n" +
-// " \"owner\":\"18600806164\"\n" +
-// "}";
-//
-// return new Result().ok(new JSONObject(json));
- }
-
- /**
- * 将Agent对象列表转换为AgentVO对象列表
- * 此方法遍历Agent对象列表,将每个Agent对象转换为AgentVO对象,并添加到AgentVO列表中
- *
- * @param agentVOList 转换后的AgentVO对象列表
- * @param agentList 原始的Agent对象列表
- */
- private void convertAgentVOList(List agentVOList, List agentList) {
- // 遍历Agent对象列表
- for (Agent agent : agentList) {
- // 创建一个新的AgentVO对象
- AgentVO agentVO = new AgentVO();
- // 将当前Agent对象的属性值转换并设置到AgentVO对象中
- this.convertAgentVO(agentVO, agent);
- // 将转换后的AgentVO对象添加到AgentVO列表中
- agentVOList.add(agentVO);
- }
- }
-
- private void convertAgentVO(AgentVO agentVO, Agent agent) {
- try {
- BeanUtils.copyProperties(agentVO, agent);
- agentVO.setTtsModelName("未知");
- TtsVoice ttsVoice = ttsVoiceService.getOne(new QueryWrapper().eq("id", agent.getTtsVoiceId()));
- if (ObjectUtils.isNotNull(ttsVoice)) {
- agentVO.setTtsModelName(ttsVoice.getName());
- }
- agentVO.setLlmModelName("未知");
- ModelConfig modelConfig = modelConfigService.getOne(new QueryWrapper().eq("id", agent.getLlmModelId()));
- if (ObjectUtils.isNotNull(modelConfig)) {
- agentVO.setLlmModelName(modelConfig.getModelName());
- }
- agentVO.setLastConnectedAt("今天");
- agentVO.setDeviceCount(0L);
- long deviceCount = deviceService.count(new QueryWrapper().eq("agent_id", agent.getId()));
- agentVO.setDeviceCount(deviceCount);
- } catch (Exception e) {
- log.error("[convertAgentVO]对象转换报错", e);
- }
+ public Result delete(@PathVariable String id) {
+ agentService.deleteById(id);
+ return new Result<>();
}
}
\ No newline at end of file
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/controller/AgentTemplateController.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/controller/AgentTemplateController.java
index 08405cac..cd88a4c8 100644
--- a/main/manager-api/src/main/java/xiaozhi/modules/agent/controller/AgentTemplateController.java
+++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/controller/AgentTemplateController.java
@@ -1,131 +1,37 @@
package xiaozhi.modules.agent.controller;
+import java.util.List;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.beanutils.BeanUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.shiro.authz.annotation.RequiresPermissions;
-import org.springframework.web.bind.annotation.*;
-import xiaozhi.common.controller.BaseController;
-import xiaozhi.common.user.UserDetail;
import xiaozhi.common.utils.Result;
-import xiaozhi.modules.agent.domain.AgentTemplate;
+import xiaozhi.modules.agent.entity.AgentTemplateEntity;
import xiaozhi.modules.agent.service.AgentTemplateService;
-import xiaozhi.modules.agent.vo.AgentTemplateVO;
-import xiaozhi.modules.model.domain.ModelConfig;
-import xiaozhi.modules.model.domain.TtsVoice;
-import xiaozhi.modules.model.service.ModelConfigService;
-import xiaozhi.modules.model.service.TtsVoiceService;
-import xiaozhi.modules.security.user.SecurityUser;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.UUID;
@Slf4j
@Tag(name = "智能体模板管理")
@AllArgsConstructor
@RestController
@RequestMapping("/user/agent/template")
-public class AgentTemplateController extends BaseController {
+public class AgentTemplateController {
private final AgentTemplateService agentTemplateService;
- private final ModelConfigService modelConfigService;
- private final TtsVoiceService ttsVoiceService;
-
- @PostMapping
- @Operation(summary = "添加智能体模板")
- @RequiresPermissions("sys:role:superAdmin")
- public Result addTemplate(@RequestBody AgentTemplate agentTemplate) {
- UserDetail user = SecurityUser.getUser();
- if (StringUtils.isBlank(agentTemplate.getAgentName())) {
- log.error("智能体模板名称不能为空");
- }
- try {
- agentTemplate = new AgentTemplate();
- agentTemplate.setId(UUID.randomUUID().toString().replace("-", ""));
- agentTemplate.setAgentName(agentTemplate.getAgentName());
- agentTemplate.setCreator(user.getId());
- agentTemplate.setCreatedAt(new Date());
- agentTemplateService.save(agentTemplate);
- } catch (Exception e) {
- log.error("对象赋值异常", e);
- }
- return new Result().ok(agentTemplate);
- }
-
- @DeleteMapping("/{templateId}")
- @Operation(summary = "删除智能体模板")
- @RequiresPermissions("sys:role:superAdmin")
- public Result delTemplate(@PathVariable String templateId) {
- UserDetail user = SecurityUser.getUser();
- if (StringUtils.isBlank(templateId)) {
- log.error("智能体模板ID不能为空");
- }
- boolean bool = agentTemplateService.removeById(templateId);
- if (!bool) {
- return new Result().error("删除失败");
- }
- return new Result().ok(null);
- }
@GetMapping
@Operation(summary = "智能体模板模板列表")
@RequiresPermissions("sys:role:normal")
- public Result> templateList() {
- List list = agentTemplateService.list(new QueryWrapper().orderByAsc("sort"));
- return new Result>().ok(list);
+ public Result> templateList() {
+ List list = agentTemplateService
+ .list(new QueryWrapper().orderByAsc("sort"));
+ return new Result>().ok(list);
}
- @GetMapping("/vo")
- @Operation(summary = "智能体模板模板列表")
- @RequiresPermissions("sys:role:normal")
- public Result> templateVOList() {
- UserDetail user = SecurityUser.getUser();
- List templates = agentTemplateService.list();
- List list = new ArrayList<>();
- this.convertAgentTemplateVOList(list, templates);
- return new Result>().ok(list);
- }
-
- /**
- * 将Agent对象列表转换为AgentTemplateVO对象列表
- * 此方法遍历Agent对象列表,将每个Agent对象转换为AgentTemplateVO对象,并添加到AgentTemplateVO列表中
- *
- * @param agentVOList 转换后的AgentTemplateVO对象列表
- * @param agentList 原始的Agent对象列表
- */
- private void convertAgentTemplateVOList(List agentVOList, List agentList) {
- // 遍历Agent对象列表
- for (AgentTemplate agentTemplate : agentList) {
- // 创建一个新的AgentTemplateVO对象
- AgentTemplateVO agentTemplateVO = new AgentTemplateVO();
- // 将当前Agent对象的属性值转换并设置到AgentTemplateVO对象中
- this.convertAgentTemplateVO(agentTemplateVO, agentTemplate);
- // 将转换后的AgentTemplateVO对象添加到AgentTemplateVO列表中
- agentVOList.add(agentTemplateVO);
- }
- }
-
- private void convertAgentTemplateVO(AgentTemplateVO agentTemplateVO, AgentTemplate agentTemplate) {
- try {
- BeanUtils.copyProperties(agentTemplateVO, agentTemplate);
- agentTemplateVO.setTtsModelName("未知");
- TtsVoice ttsVoice = ttsVoiceService.getOne(new QueryWrapper().eq("id", agentTemplate.getTtsVoiceId()));
- if (ObjectUtils.isNotNull(ttsVoice)) {
- agentTemplateVO.setTtsModelName(ttsVoice.getName());
- }
- agentTemplateVO.setLlmModelName("未知");
- ModelConfig modelConfig = modelConfigService.getOne(new QueryWrapper().eq("id", agentTemplate.getLlmModelId()));
- if (ObjectUtils.isNotNull(modelConfig)) {
- agentTemplateVO.setLlmModelName(modelConfig.getModelName());
- }
- } catch (Exception e) {
- log.error("[convertAgentTemplateVO]对象转换报错", e);
- }
- }
}
\ No newline at end of file
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AgentDao.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AgentDao.java
new file mode 100644
index 00000000..169346bf
--- /dev/null
+++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AgentDao.java
@@ -0,0 +1,10 @@
+package xiaozhi.modules.agent.dao;
+
+import org.apache.ibatis.annotations.Mapper;
+import xiaozhi.common.dao.BaseDao;
+import xiaozhi.modules.agent.entity.AgentEntity;
+
+@Mapper
+public interface AgentDao extends BaseDao {
+
+}
\ No newline at end of file
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/mapper/AgentTemplateMapper.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AgentTemplateDao.java
similarity index 54%
rename from main/manager-api/src/main/java/xiaozhi/modules/agent/mapper/AgentTemplateMapper.java
rename to main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AgentTemplateDao.java
index c3222cc4..33871a63 100644
--- a/main/manager-api/src/main/java/xiaozhi/modules/agent/mapper/AgentTemplateMapper.java
+++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AgentTemplateDao.java
@@ -1,17 +1,17 @@
-package xiaozhi.modules.agent.mapper;
+package xiaozhi.modules.agent.dao;
import org.apache.ibatis.annotations.Mapper;
-import xiaozhi.modules.agent.domain.AgentTemplate;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import xiaozhi.modules.agent.entity.AgentTemplateEntity;
+
/**
* @author chenerlei
* @description 针对表【ai_agent_template(智能体配置模板表)】的数据库操作Mapper
* @createDate 2025-03-22 11:48:18
-* @Entity xiaozhi.modules.agent.domain.AgentTemplate
*/
@Mapper
-public interface AgentTemplateMapper extends BaseMapper {
+public interface AgentTemplateDao extends BaseMapper {
}
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/domain/Agent.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/domain/Agent.java
deleted file mode 100644
index 8ae48dec..00000000
--- a/main/manager-api/src/main/java/xiaozhi/modules/agent/domain/Agent.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package xiaozhi.modules.agent.domain;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import java.io.Serializable;
-import java.util.Date;
-import lombok.Data;
-
-/**
- * 智能体配置表
- * @TableName ai_agent
- */
-@TableName(value ="ai_agent")
-@Data
-public class Agent implements Serializable {
- /**
- * 智能体唯一标识
- */
- @TableId
- private String id;
-
- /**
- * 所属用户 ID
- */
- private Long userId;
-
- /**
- * 智能体编码
- */
- private String agentCode;
-
- /**
- * 智能体名称
- */
- private String agentName;
-
- /**
- * 语音识别模型标识
- */
- private String asrModelId;
-
- /**
- * 语音活动检测标识
- */
- private String vadModelId;
-
- /**
- * 大语言模型标识
- */
- private String llmModelId;
-
- /**
- * 语音合成模型标识
- */
- private String ttsModelId;
-
- /**
- * 音色标识
- */
- private String ttsVoiceId;
-
- /**
- * 记忆模型标识
- */
- private String memoryModelId;
-
- /**
- * 意图模型标识
- */
- private String intentModelId;
-
- /**
- * 角色设定参数
- */
- private String systemPrompt;
-
- /**
- * 语言编码
- */
- private String langCode;
-
- /**
- * 交互语种
- */
- private String language;
-
- /**
- * 排序权重
- */
- private Integer sort;
-
- /**
- * 创建者 ID
- */
- private Long creator;
-
- /**
- * 创建时间
- */
- private Date createdAt;
-
- /**
- * 更新者 ID
- */
- private Long updater;
-
- /**
- * 更新时间
- */
- private Date updatedAt;
-
- @TableField(exist = false)
- private static final long serialVersionUID = 1L;
-}
\ No newline at end of file
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentCreateDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentCreateDTO.java
new file mode 100644
index 00000000..302a55fb
--- /dev/null
+++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentCreateDTO.java
@@ -0,0 +1,51 @@
+package xiaozhi.modules.agent.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 智能体创建DTO
+ * 专用于新增智能体,不包含id、agentCode和sort字段,这些字段由系统自动生成/设置默认值
+ */
+@Data
+@Schema(description = "智能体创建对象")
+public class AgentCreateDTO implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "智能体名称", example = "客服助手")
+ @NotBlank(message = "智能体名称不能为空")
+ private String agentName;
+
+ @Schema(description = "语音识别模型标识", example = "asr_model_01")
+ private String asrModelId;
+
+ @Schema(description = "语音活动检测标识", example = "vad_model_01")
+ private String vadModelId;
+
+ @Schema(description = "大语言模型标识", example = "llm_model_01")
+ private String llmModelId;
+
+ @Schema(description = "语音合成模型标识", example = "tts_model_01")
+ private String ttsModelId;
+
+ @Schema(description = "音色标识", example = "voice_01")
+ private String ttsVoiceId;
+
+ @Schema(description = "记忆模型标识", example = "mem_model_01")
+ private String memModelId;
+
+ @Schema(description = "意图模型标识", example = "intent_model_01")
+ private String intentModelId;
+
+ @Schema(description = "角色设定参数", example = "你是一个专业的客服助手,负责回答用户问题")
+ private String systemPrompt;
+
+ @Schema(description = "语言编码", example = "zh_CN")
+ private String langCode;
+
+ @Schema(description = "交互语种", example = "中文")
+ private String language;
+}
\ No newline at end of file
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentUpdateDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentUpdateDTO.java
new file mode 100644
index 00000000..6445bdda
--- /dev/null
+++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentUpdateDTO.java
@@ -0,0 +1,61 @@
+package xiaozhi.modules.agent.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 智能体更新DTO
+ * 专用于更新智能体,id字段是必需的,用于标识要更新的智能体
+ * 其他字段均为非必填,只更新提供的字段
+ */
+@Data
+@Schema(description = "智能体更新对象")
+public class AgentUpdateDTO implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "智能体唯一标识", example = "a1b2c3d4e5f6", required = true)
+ @NotBlank(message = "智能体ID不能为空")
+ private String id;
+
+ @Schema(description = "智能体编码", example = "AGT_1234567890", required = false)
+ private String agentCode;
+
+ @Schema(description = "智能体名称", example = "客服助手", required = false)
+ private String agentName;
+
+ @Schema(description = "语音识别模型标识", example = "asr_model_02", required = false)
+ private String asrModelId;
+
+ @Schema(description = "语音活动检测标识", example = "vad_model_02", required = false)
+ private String vadModelId;
+
+ @Schema(description = "大语言模型标识", example = "llm_model_02", required = false)
+ private String llmModelId;
+
+ @Schema(description = "语音合成模型标识", example = "tts_model_02", required = false)
+ private String ttsModelId;
+
+ @Schema(description = "音色标识", example = "voice_02", required = false)
+ private String ttsVoiceId;
+
+ @Schema(description = "记忆模型标识", example = "mem_model_02", required = false)
+ private String memModelId;
+
+ @Schema(description = "意图模型标识", example = "intent_model_02", required = false)
+ private String intentModelId;
+
+ @Schema(description = "角色设定参数", example = "你是一个专业的客服助手,负责回答用户问题并提供帮助", required = false)
+ private String systemPrompt;
+
+ @Schema(description = "语言编码", example = "zh_CN", required = false)
+ private String langCode;
+
+ @Schema(description = "交互语种", example = "中文", required = false)
+ private String language;
+
+ @Schema(description = "排序", example = "1", required = false)
+ private Integer sort;
+}
\ No newline at end of file
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentEntity.java
new file mode 100644
index 00000000..6800aefb
--- /dev/null
+++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentEntity.java
@@ -0,0 +1,69 @@
+package xiaozhi.modules.agent.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@TableName("ai_agent")
+@Schema(description = "智能体信息")
+public class AgentEntity {
+ @Schema(description = "智能体唯一标识")
+ private String id;
+
+ @Schema(description = "所属用户ID")
+ private Long userId;
+
+ @Schema(description = "智能体编码")
+ private String agentCode;
+
+ @Schema(description = "智能体名称")
+ private String agentName;
+
+ @Schema(description = "语音识别模型标识")
+ private String asrModelId;
+
+ @Schema(description = "语音活动检测标识")
+ private String vadModelId;
+
+ @Schema(description = "大语言模型标识")
+ private String llmModelId;
+
+ @Schema(description = "语音合成模型标识")
+ private String ttsModelId;
+
+ @Schema(description = "音色标识")
+ private String ttsVoiceId;
+
+ @Schema(description = "记忆模型标识")
+ private String memModelId;
+
+ @Schema(description = "意图模型标识")
+ private String intentModelId;
+
+ @Schema(description = "角色设定参数")
+ private String systemPrompt;
+
+ @Schema(description = "语言编码")
+ private String langCode;
+
+ @Schema(description = "交互语种")
+ private String language;
+
+ @Schema(description = "排序")
+ private Integer sort;
+
+ @Schema(description = "创建者")
+ private Long creator;
+
+ @Schema(description = "创建时间")
+ private Date createdAt;
+
+ @Schema(description = "更新者")
+ private Long updater;
+
+ @Schema(description = "更新时间")
+ private Date updatedAt;
+}
\ No newline at end of file
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/domain/AgentTemplate.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentTemplateEntity.java
similarity index 92%
rename from main/manager-api/src/main/java/xiaozhi/modules/agent/domain/AgentTemplate.java
rename to main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentTemplateEntity.java
index 594fc219..ca021242 100644
--- a/main/manager-api/src/main/java/xiaozhi/modules/agent/domain/AgentTemplate.java
+++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentTemplateEntity.java
@@ -1,6 +1,5 @@
-package xiaozhi.modules.agent.domain;
+package xiaozhi.modules.agent.entity;
-import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@@ -14,7 +13,7 @@ import lombok.Data;
*/
@TableName(value ="ai_agent_template")
@Data
-public class AgentTemplate implements Serializable {
+public class AgentTemplateEntity implements Serializable {
/**
* 智能体唯一标识
*/
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/mapper/AgentMapper.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/mapper/AgentMapper.java
deleted file mode 100644
index 7c849280..00000000
--- a/main/manager-api/src/main/java/xiaozhi/modules/agent/mapper/AgentMapper.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package xiaozhi.modules.agent.mapper;
-
-import org.apache.ibatis.annotations.Mapper;
-import xiaozhi.modules.agent.domain.Agent;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-/**
-* @author chenerlei
-* @description 针对表【ai_agent(智能体配置表)】的数据库操作Mapper
-* @createDate 2025-03-22 11:48:18
-* @Entity xiaozhi.modules.agent.domain.Agent
-*/
-@Mapper
-public interface AgentMapper extends BaseMapper {
-
-}
-
-
-
-
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentService.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentService.java
index b7a7705b..76439ede 100644
--- a/main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentService.java
+++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentService.java
@@ -1,13 +1,25 @@
-package xiaozhi.modules.agent.service;
-
-import xiaozhi.modules.agent.domain.Agent;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-/**
-* @author chenerlei
-* @description 针对表【ai_agent(智能体配置表)】的数据库操作Service
-* @createDate 2025-03-22 11:48:18
-*/
-public interface AgentService extends IService {
-
-}
+package xiaozhi.modules.agent.service;
+
+import xiaozhi.common.page.PageData;
+import xiaozhi.common.service.BaseService;
+import xiaozhi.modules.agent.entity.AgentEntity;
+
+import java.util.List;
+import java.util.Map;
+
+public interface AgentService extends BaseService {
+ /**
+ * 根据用户ID获取智能体列表
+ */
+ List getUserAgents(Long userId);
+
+ /**
+ * 管理员获取所有智能体列表(分页)
+ */
+ PageData adminAgentList(Map params);
+
+ /**
+ * 获取智能体详情
+ */
+ AgentEntity getAgentById(String id);
+}
\ No newline at end of file
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentTemplateService.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentTemplateService.java
index 18849526..01bb50d5 100644
--- a/main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentTemplateService.java
+++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentTemplateService.java
@@ -1,13 +1,14 @@
package xiaozhi.modules.agent.service;
-import xiaozhi.modules.agent.domain.AgentTemplate;
+import xiaozhi.modules.agent.entity.AgentTemplateEntity;
+
import com.baomidou.mybatisplus.extension.service.IService;
/**
-* @author chenerlei
-* @description 针对表【ai_agent_template(智能体配置模板表)】的数据库操作Service
-* @createDate 2025-03-22 11:48:18
-*/
-public interface AgentTemplateService extends IService {
+ * @author chenerlei
+ * @description 针对表【ai_agent_template(智能体配置模板表)】的数据库操作Service
+ * @createDate 2025-03-22 11:48:18
+ */
+public interface AgentTemplateService extends IService {
}
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentServiceImpl.java
index dfa3400d..8e73c003 100644
--- a/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentServiceImpl.java
+++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentServiceImpl.java
@@ -1,22 +1,65 @@
package xiaozhi.modules.agent.service.impl;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import xiaozhi.modules.agent.domain.Agent;
-import xiaozhi.modules.agent.service.AgentService;
-import xiaozhi.modules.agent.mapper.AgentMapper;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
import org.springframework.stereotype.Service;
-/**
-* @author chenerlei
-* @description 针对表【ai_agent(智能体配置表)】的数据库操作Service实现
-* @createDate 2025-03-22 11:48:18
-*/
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import xiaozhi.common.page.PageData;
+import xiaozhi.common.service.impl.BaseServiceImpl;
+import xiaozhi.modules.agent.dao.AgentDao;
+import xiaozhi.modules.agent.entity.AgentEntity;
+import xiaozhi.modules.agent.service.AgentService;
+
@Service
-public class AgentServiceImpl extends ServiceImpl
- implements AgentService{
+public class AgentServiceImpl extends BaseServiceImpl implements AgentService {
+ private final AgentDao agentDao;
-}
+ public AgentServiceImpl(AgentDao agentDao) {
+ this.agentDao = agentDao;
+ }
+ @Override
+ public List getUserAgents(Long userId) {
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.eq("user_id", userId);
+ return agentDao.selectList(wrapper);
+ }
+ @Override
+ public PageData adminAgentList(Map params) {
+ IPage page = agentDao.selectPage(
+ getPage(params, "sort", true),
+ new QueryWrapper<>());
+ return new PageData<>(page.getRecords(), page.getTotal());
+ }
+ @Override
+ public AgentEntity getAgentById(String id) {
+ return agentDao.selectById(id);
+ }
+ @Override
+ public boolean insert(AgentEntity entity) {
+ // 如果ID为空,自动生成一个UUID作为ID
+ if (entity.getId() == null || entity.getId().trim().isEmpty()) {
+ entity.setId(UUID.randomUUID().toString().replace("-", ""));
+ }
+
+ // 如果智能体编码为空,自动生成一个带前缀的编码
+ if (entity.getAgentCode() == null || entity.getAgentCode().trim().isEmpty()) {
+ entity.setAgentCode("AGT_" + System.currentTimeMillis());
+ }
+
+ // 如果排序字段为空,设置默认值0
+ if (entity.getSort() == null) {
+ entity.setSort(0);
+ }
+
+ return super.insert(entity);
+ }
+}
\ No newline at end of file
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentTemplateServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentTemplateServiceImpl.java
index 112b65c0..02dafdec 100644
--- a/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentTemplateServiceImpl.java
+++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentTemplateServiceImpl.java
@@ -1,22 +1,20 @@
package xiaozhi.modules.agent.service.impl;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import xiaozhi.modules.agent.domain.AgentTemplate;
-import xiaozhi.modules.agent.service.AgentTemplateService;
-import xiaozhi.modules.agent.mapper.AgentTemplateMapper;
import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import xiaozhi.modules.agent.dao.AgentTemplateDao;
+import xiaozhi.modules.agent.entity.AgentTemplateEntity;
+import xiaozhi.modules.agent.service.AgentTemplateService;
+
/**
-* @author chenerlei
-* @description 针对表【ai_agent_template(智能体配置模板表)】的数据库操作Service实现
-* @createDate 2025-03-22 11:48:18
-*/
+ * @author chenerlei
+ * @description 针对表【ai_agent_template(智能体配置模板表)】的数据库操作Service实现
+ * @createDate 2025-03-22 11:48:18
+ */
@Service
-public class AgentTemplateServiceImpl extends ServiceImpl
- implements AgentTemplateService{
+public class AgentTemplateServiceImpl extends ServiceImpl
+ implements AgentTemplateService {
}
-
-
-
-
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/vo/AgentConfigVO.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/vo/AgentConfigVO.java
deleted file mode 100644
index ba1ececc..00000000
--- a/main/manager-api/src/main/java/xiaozhi/modules/agent/vo/AgentConfigVO.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package xiaozhi.modules.agent.vo;
-
-import cn.hutool.json.JSONObject;
-import lombok.Data;
-
-@Data
-public class AgentConfigVO {
- private JSONObject selected_module;
- private String prompt;
- private JSONObject LLM;
- private JSONObject TTS;
- private JSONObject ASR;
- private JSONObject VAD;
- private JSONObject Memory;
- private JSONObject Intent;
- private String owner;
-}
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/vo/AgentTemplateVO.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/vo/AgentTemplateVO.java
index 9cd7d79d..20c0e144 100644
--- a/main/manager-api/src/main/java/xiaozhi/modules/agent/vo/AgentTemplateVO.java
+++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/vo/AgentTemplateVO.java
@@ -1,14 +1,13 @@
package xiaozhi.modules.agent.vo;
import lombok.Data;
-import xiaozhi.modules.agent.domain.Agent;
-import xiaozhi.modules.agent.domain.AgentTemplate;
+import xiaozhi.modules.agent.entity.AgentTemplateEntity;
@Data
-public class AgentTemplateVO extends AgentTemplate {
- //角色音色
+public class AgentTemplateVO extends AgentTemplateEntity {
+ // 角色音色
private String ttsModelName;
- //角色模型
+ // 角色模型
private String llmModelName;
}
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/vo/AgentVO.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/vo/AgentVO.java
deleted file mode 100644
index 3ffddbd7..00000000
--- a/main/manager-api/src/main/java/xiaozhi/modules/agent/vo/AgentVO.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package xiaozhi.modules.agent.vo;
-
-import lombok.Data;
-import xiaozhi.modules.agent.domain.Agent;
-
-@Data
-public class AgentVO extends Agent {
- //角色音色
- private String ttsModelName;
-
- //角色明星
- private String llmModelName;
-
- //最近对话
- private String lastConnectedAt;
-
- //设备数量
- private Long deviceCount;
-}
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/constant/DeviceConstant.java b/main/manager-api/src/main/java/xiaozhi/modules/device/constant/DeviceConstant.java
deleted file mode 100644
index 5d6fb39e..00000000
--- a/main/manager-api/src/main/java/xiaozhi/modules/device/constant/DeviceConstant.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package xiaozhi.modules.device.constant;
-
-public class DeviceConstant {
-
- public static final String REDIS_KEY_PREFIX_DEVICE_ACTIVATION_CODE = "device:activation:code";
- public static final String REDIS_KEY_PREFIX_DEVICE_ACTIVATION_MAC = "device:activation:mac";
-}
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/controller/DeviceController.java b/main/manager-api/src/main/java/xiaozhi/modules/device/controller/DeviceController.java
index cfb51de3..d458e9f9 100644
--- a/main/manager-api/src/main/java/xiaozhi/modules/device/controller/DeviceController.java
+++ b/main/manager-api/src/main/java/xiaozhi/modules/device/controller/DeviceController.java
@@ -1,173 +1,82 @@
package xiaozhi.modules.device.controller;
-import cn.hutool.json.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.web.bind.annotation.*;
-import xiaozhi.common.controller.BaseController;
+import xiaozhi.common.constant.Constant;
+import xiaozhi.common.exception.ErrorCode;
+import xiaozhi.common.page.PageData;
+import xiaozhi.common.redis.RedisKeys;
import xiaozhi.common.redis.RedisUtils;
import xiaozhi.common.user.UserDetail;
+import xiaozhi.common.utils.JsonUtils;
import xiaozhi.common.utils.Result;
-import xiaozhi.modules.agent.domain.Agent;
-import xiaozhi.modules.agent.service.AgentService;
-import xiaozhi.modules.device.constant.DeviceConstant;
-import xiaozhi.modules.device.domain.Device;
+import xiaozhi.modules.device.dto.DeviceHeaderDTO;
+import xiaozhi.modules.device.dto.DeviceUnBindDTO;
+import xiaozhi.modules.device.entity.DeviceEntity;
import xiaozhi.modules.device.service.DeviceService;
-import xiaozhi.modules.device.vo.DeviceCodeVO;
import xiaozhi.modules.security.user.SecurityUser;
-import java.util.Date;
+import java.util.List;
+import java.util.Map;
-@Slf4j
@Tag(name = "设备管理")
@AllArgsConstructor
@RestController
-@RequestMapping("/user/agent/device")
-public class DeviceController extends BaseController {
- private final AgentService agentService;
+@RequestMapping("/device")
+public class DeviceController {
private final DeviceService deviceService;
private final RedisUtils redisUtils;
- @GetMapping("/bind/{agentId}")
- @Operation(summary = "已绑定设备列表")
- @RequiresPermissions("sys:role:normal")
- public Result> bindDeviceList(@PathVariable String agentId, @RequestParam Integer pageNo, @RequestParam Integer pageSize) {
- if (StringUtils.isBlank(agentId)) {
- log.error("智能体ID不能为空");
- return new Result().error("智能体ID不能为空");
- }
- UserDetail user = SecurityUser.getUser();
- Agent agent = agentService.getById(agentId);
- if (ObjectUtils.isNull(agent)) {
- log.error("智能体不存在");
- return new Result().error("智能体不存在");
- }
- Page page = new Page(pageNo, pageSize);
- page = deviceService.page(page, new QueryWrapper().eq("user_id", user.getId()).eq("agent_id", agentId));
- return new Result>().ok(page);
- }
-
-
- @PostMapping("/bind/{agentId}")
+ @PostMapping("/bind/{deviceCode}")
@Operation(summary = "绑定设备")
@RequiresPermissions("sys:role:normal")
- public Result bindDevice(@PathVariable String agentId, @RequestBody DeviceCodeVO deviceCodeVO) {
- if (ObjectUtils.isNull(deviceCodeVO) || StringUtils.isBlank(deviceCodeVO.getDeviceCode())) {
- log.error("授权码不能为空");
- return new Result().error("授权码不能为空");
- }
- if (StringUtils.isBlank(agentId)) {
- log.error("智能体ID不能为空");
- return new Result().error("智能体ID不能为空");
- }
-
+ public Result bindDevice(@PathVariable String deviceCode) {
UserDetail user = SecurityUser.getUser();
- // 从 Redis 中获取设备信息
- Object redisValue = redisUtils.hGet(DeviceConstant.REDIS_KEY_PREFIX_DEVICE_ACTIVATION_CODE, deviceCodeVO.getDeviceCode());
- if (ObjectUtils.isNull(redisValue)) {
- log.error("授权码不存在:{}", deviceCodeVO.getDeviceCode());
- return new Result().error("授权码不存在");
+ String deviceHeaders = (String) redisUtils.get(RedisKeys.getDeviceCaptchaKey(deviceCode));
+ if (StringUtils.isBlank(deviceHeaders)) {
+ return new Result().error(ErrorCode.DEVICE_CAPTCHA_ERROR);
}
- JSONObject jsonObject = (JSONObject) redisValue;
- try {
- redisUtils.hDel(DeviceConstant.REDIS_KEY_PREFIX_DEVICE_ACTIVATION_CODE, deviceCodeVO.getDeviceCode());
- redisUtils.hDel(DeviceConstant.REDIS_KEY_PREFIX_DEVICE_ACTIVATION_MAC, jsonObject.getStr("mac_address").toUpperCase());
- } catch (Exception e) {
- log.warn("授权缓存删除失败", e);
- }
- JSONObject board = jsonObject.getJSONObject("board");
- JSONObject application = jsonObject.getJSONObject("application");
- if (ObjectUtils.isNull(board) || ObjectUtils.isNull(application)) {
- log.error("设备码绑定信息无效,{}:{}", jsonObject.getStr("mac_address").toUpperCase(), deviceCodeVO.getDeviceCode());
- return new Result().error("设备码绑定信息无效");
- }
-
- Agent agent = agentService.getById(agentId);
- if (ObjectUtils.isNull(agent)) {
- log.error("智能体不存在");
- return new Result().error("智能体不存在");
- }
- Device device = new Device();
- device.setId(jsonObject.getStr("uuid").replace("-", ""));
- device.setUserId(user.getId());
- device.setMacAddress(jsonObject.getStr("mac_address").toUpperCase());
- device.setBoard(board.getStr("type"));
- device.setAppVersion(application.getStr("version"));
- device.setAgentId(agentId);
- device.setCreator(user.getId());
- device.setCreateDate(new Date());
- device.setAutoUpdate(1);
- boolean bool = deviceService.save(device);
- if (!bool) {
- return new Result().error("绑定失败");
- }
- return new Result().ok(device);
+ DeviceHeaderDTO deviceHeader = JsonUtils.parseObject(deviceHeaders.getBytes(), DeviceHeaderDTO.class);
+ DeviceEntity device = deviceService.bindDevice(user.getId(), deviceHeader);
+ return new Result().ok(device);
}
- @PutMapping("/unbind/{deviceId}")
+ @GetMapping("/bind")
+ @Operation(summary = "获取已绑定设备")
+ @RequiresPermissions("sys:role:normal")
+ public Result> getUserDevices() {
+ UserDetail user = SecurityUser.getUser();
+ List devices = deviceService.getUserDevices(user.getId());
+ return new Result>().ok(devices);
+ }
+
+ @PostMapping("/unbind")
@Operation(summary = "解绑设备")
@RequiresPermissions("sys:role:normal")
- public Result bindDevice(@PathVariable String deviceId) {
- if (StringUtils.isBlank(deviceId)) {
- log.error("设备ID不能为空");
- return new Result().error("设备ID不能为空");
- }
- boolean bool = deviceService.removeById(deviceId);
- if (!bool) {
- return new Result().error("解绑失败");
- }
- return new Result().ok(null);
+ public Result unbindDevice(@RequestBody DeviceUnBindDTO unDeviveBind) {
+ UserDetail user = SecurityUser.getUser();
+ deviceService.unbindDevice(user.getId(), unDeviveBind.getDeviceId());
+ return new Result();
}
- @PostMapping("/autoUpdate/{deviceId}")
- @Operation(summary = "切换设备OTA升级状态")
- @RequiresPermissions("sys:role:normal")
- public Result toggleAutoUpdate(@PathVariable String deviceId, @RequestBody Device device) {
- if (StringUtils.isBlank(deviceId)) {
- log.error("设备ID不能为空");
- return new Result().error("设备ID不能为空");
- }
- UserDetail user = SecurityUser.getUser();
- boolean bool = deviceService.update(
- new UpdateWrapper().eq("id", deviceId)
- .set("auto_update", device.getAutoUpdate())
- .set("updater", user.getId())
- .set("update_date", new Date())
- );
- if (!bool) {
- return new Result().error("切换设备OTA升级状态失败");
- }
- return new Result().ok(null);
- }
-
- @PostMapping("/alias/{deviceId}")
- @Operation(summary = "设置设备别名")
- @RequiresPermissions("sys:role:normal")
- public Result setAlias(@PathVariable String deviceId, @RequestBody Device device) {
- if (StringUtils.isBlank(deviceId)) {
- log.error("设备ID不能为空");
- return new Result().error("设备ID不能为空");
- }
- UserDetail user = SecurityUser.getUser();
- boolean bool = deviceService.update(
- new UpdateWrapper().eq("id", deviceId)
- .set("alias", device.getAlias())
- .set("updater", user.getId())
- .set("update_date", new Date())
- );
- if (!bool) {
- return new Result().error("设置设备别名失败");
- }
- return new Result().ok(null);
+ @GetMapping("/all")
+ @Operation(summary = "设备列表(管理员)")
+ @RequiresPermissions("sys:role:superAdmin")
+ @Parameters({
+ @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true),
+ @Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true),
+ })
+ public Result> adminDeviceList(
+ @Parameter(hidden = true) @RequestParam Map params) {
+ PageData page = deviceService.adminDeviceList(params);
+ return new Result>().ok(page);
}
}
\ No newline at end of file
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/dao/DeviceDao.java b/main/manager-api/src/main/java/xiaozhi/modules/device/dao/DeviceDao.java
new file mode 100644
index 00000000..9e4a8cd4
--- /dev/null
+++ b/main/manager-api/src/main/java/xiaozhi/modules/device/dao/DeviceDao.java
@@ -0,0 +1,9 @@
+package xiaozhi.modules.device.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import xiaozhi.modules.device.entity.DeviceEntity;
+
+@Mapper
+public interface DeviceDao extends BaseMapper {
+}
\ No newline at end of file
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/domain/Device.java b/main/manager-api/src/main/java/xiaozhi/modules/device/domain/Device.java
deleted file mode 100644
index ae662dde..00000000
--- a/main/manager-api/src/main/java/xiaozhi/modules/device/domain/Device.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package xiaozhi.modules.device.domain;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import java.io.Serializable;
-import java.util.Date;
-import lombok.Data;
-
-/**
- * 设备信息表
- * @TableName ai_device
- */
-@TableName(value ="ai_device")
-@Data
-public class Device implements Serializable {
- /**
- * 设备唯一标识
- */
- @TableId
- private String id;
-
- /**
- * 关联用户 ID
- */
- private Long userId;
-
- /**
- * MAC 地址
- */
- private String macAddress;
-
- /**
- * 最后连接时间
- */
- private Date lastConnectedAt;
-
- /**
- * 自动更新开关(0 关闭/1 开启)
- */
- private Integer autoUpdate;
-
- /**
- * 设备硬件型号
- */
- private String board;
-
- /**
- * 设备别名
- */
- private String alias;
-
- /**
- * 智能体 ID
- */
- private String agentId;
-
- /**
- * 固件版本号
- */
- private String appVersion;
-
- /**
- * 排序
- */
- private Integer sort;
-
- /**
- * 创建者
- */
- private Long creator;
-
- /**
- * 创建时间
- */
- private Date createDate;
-
- /**
- * 更新者
- */
- private Long updater;
-
- /**
- * 更新时间
- */
- private Date updateDate;
-
- @TableField(exist = false)
- private static final long serialVersionUID = 1L;
-}
\ No newline at end of file
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceHeaderDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceHeaderDTO.java
new file mode 100644
index 00000000..83327fef
--- /dev/null
+++ b/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceHeaderDTO.java
@@ -0,0 +1,19 @@
+package xiaozhi.modules.device.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+@Schema(description = "设备连接头信息")
+public class DeviceHeaderDTO {
+
+ @Schema(description = "设备ID")
+ private String deviceId;
+
+ @Schema(description = "协议版本号")
+ private Long protocolVersion;
+
+ @Schema(description = "认证信息")
+ private String authorization;
+
+}
\ No newline at end of file
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceUnBindDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceUnBindDTO.java
new file mode 100644
index 00000000..830a51ae
--- /dev/null
+++ b/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceUnBindDTO.java
@@ -0,0 +1,19 @@
+package xiaozhi.modules.device.dto;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 设备解绑表单
+ */
+@Data
+@Schema(description = "设备解绑表单")
+public class DeviceUnBindDTO implements Serializable {
+
+ @Schema(description = "设备ID")
+ @NotBlank(message = "设备ID不能为空")
+ private Long deviceId;
+
+}
\ No newline at end of file
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/entity/DeviceEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/device/entity/DeviceEntity.java
new file mode 100644
index 00000000..ccbe4683
--- /dev/null
+++ b/main/manager-api/src/main/java/xiaozhi/modules/device/entity/DeviceEntity.java
@@ -0,0 +1,54 @@
+package xiaozhi.modules.device.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@TableName("ai_device")
+@Schema(description = "设备信息")
+public class DeviceEntity {
+ @Schema(description = "设备ID")
+ private Long id;
+
+ @Schema(description = "关联用户ID")
+ private Long userId;
+
+ @Schema(description = "MAC地址")
+ private String macAddress;
+
+ @Schema(description = "最后连接时间")
+ private Date lastConnectedAt;
+
+ @Schema(description = "自动更新开关(0关闭/1开启)")
+ private Integer autoUpdate;
+
+ @Schema(description = "设备硬件型号")
+ private String board;
+
+ @Schema(description = "设备别名")
+ private String alias;
+
+ @Schema(description = "智能体ID")
+ private String agentId;
+
+ @Schema(description = "固件版本号")
+ private String appVersion;
+
+ @Schema(description = "排序")
+ private Integer sort;
+
+ @Schema(description = "创建者")
+ private Long creator;
+
+ @Schema(description = "创建时间")
+ private Date createDate;
+
+ @Schema(description = "更新者")
+ private Long updater;
+
+ @Schema(description = "更新时间")
+ private Date updateDate;
+}
\ No newline at end of file
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/mapper/DeviceMapper.java b/main/manager-api/src/main/java/xiaozhi/modules/device/mapper/DeviceMapper.java
deleted file mode 100644
index b43847a5..00000000
--- a/main/manager-api/src/main/java/xiaozhi/modules/device/mapper/DeviceMapper.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package xiaozhi.modules.device.mapper;
-
-import org.apache.ibatis.annotations.Mapper;
-import xiaozhi.modules.device.domain.Device;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-/**
-* @author chenerlei
-* @description 针对表【ai_device(设备信息表)】的数据库操作Mapper
-* @createDate 2025-03-22 13:26:35
-* @Entity xiaozhi.modules.device.domain.Device
-*/
-@Mapper
-public interface DeviceMapper extends BaseMapper {
-
-}
-
-
-
-
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/service/DeviceService.java b/main/manager-api/src/main/java/xiaozhi/modules/device/service/DeviceService.java
index ec3efe56..8ba966d2 100644
--- a/main/manager-api/src/main/java/xiaozhi/modules/device/service/DeviceService.java
+++ b/main/manager-api/src/main/java/xiaozhi/modules/device/service/DeviceService.java
@@ -1,13 +1,19 @@
-package xiaozhi.modules.device.service;
-
-import xiaozhi.modules.device.domain.Device;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-/**
-* @author chenerlei
-* @description 针对表【ai_device(设备信息表)】的数据库操作Service
-* @createDate 2025-03-22 13:26:35
-*/
-public interface DeviceService extends IService {
-
-}
+package xiaozhi.modules.device.service;
+
+import xiaozhi.common.page.PageData;
+import xiaozhi.common.service.BaseService;
+import xiaozhi.modules.device.dto.DeviceHeaderDTO;
+import xiaozhi.modules.device.entity.DeviceEntity;
+
+import java.util.List;
+import java.util.Map;
+
+public interface DeviceService extends BaseService {
+ DeviceEntity bindDevice(Long userId, DeviceHeaderDTO deviceHeader);
+
+ List getUserDevices(Long userId);
+
+ void unbindDevice(Long userId, Long deviceId);
+
+ PageData adminDeviceList(Map params);
+}
\ No newline at end of file
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java
index 4c317a64..279a9f2e 100644
--- a/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java
+++ b/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java
@@ -1,22 +1,57 @@
-package xiaozhi.modules.device.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import xiaozhi.modules.device.domain.Device;
-import xiaozhi.modules.device.service.DeviceService;
-import xiaozhi.modules.device.mapper.DeviceMapper;
-import org.springframework.stereotype.Service;
-
-/**
-* @author chenerlei
-* @description 针对表【ai_device(设备信息表)】的数据库操作Service实现
-* @createDate 2025-03-22 13:26:35
-*/
-@Service
-public class DeviceServiceImpl extends ServiceImpl
- implements DeviceService{
-
-}
-
-
-
-
+package xiaozhi.modules.device.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.stereotype.Service;
+import xiaozhi.common.page.PageData;
+import xiaozhi.common.service.impl.BaseServiceImpl;
+import xiaozhi.modules.device.dao.DeviceDao;
+import xiaozhi.modules.device.dto.DeviceHeaderDTO;
+import xiaozhi.modules.device.entity.DeviceEntity;
+import xiaozhi.modules.device.service.DeviceService;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class DeviceServiceImpl extends BaseServiceImpl implements DeviceService {
+ private final DeviceDao deviceDao;
+
+ // 添加构造函数来初始化 deviceMapper
+ public DeviceServiceImpl(DeviceDao deviceDao) {
+ this.deviceDao = deviceDao;
+ }
+
+ @Override
+ public DeviceEntity bindDevice(Long userId, DeviceHeaderDTO deviceHeader) {
+ DeviceEntity device = new DeviceEntity();
+ device.setUserId(userId);
+ device.setMacAddress(deviceHeader.getDeviceId());
+ device.setCreateDate(new Date());
+ deviceDao.insert(device);
+ return device;
+ }
+
+ @Override
+ public List getUserDevices(Long userId) {
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.eq("user_id", userId);
+ return deviceDao.selectList(wrapper);
+ }
+
+ @Override
+ public void unbindDevice(Long userId, Long deviceId) {
+ deviceDao.deleteById(deviceId);
+ }
+
+ @Override
+ public PageData adminDeviceList(Map params) {
+ IPage page = deviceDao.selectPage(
+ getPage(params, "sort", true),
+ new QueryWrapper<>()
+ );
+ return new PageData<>(page.getRecords(), page.getTotal());
+ }
+
+}
\ No newline at end of file
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/utils/CodeGeneratorUtil.java b/main/manager-api/src/main/java/xiaozhi/modules/device/utils/CodeGeneratorUtil.java
deleted file mode 100644
index 3a9ca2e6..00000000
--- a/main/manager-api/src/main/java/xiaozhi/modules/device/utils/CodeGeneratorUtil.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package xiaozhi.modules.device.utils;
-
-import java.util.Random;
-
-public class CodeGeneratorUtil {
-
- private static long lastTime = 0;
- private static int counter = 0;
-
- /**
- * 生成6位数字码,首位不为0,短期内不会重复。
- * @return 6位数字码
- */
- public static synchronized String generateCode() {
- long currentTime = System.currentTimeMillis();
-
- // 如果当前时间与上次相同,增加计数器以避免重复
- if (currentTime == lastTime) {
- counter++;
- } else {
- counter = 0; // 时间变化时重置计数器
- }
- lastTime = currentTime;
-
- // 使用当前时间和计数器生成随机种子
- long seed = currentTime + counter;
- Random random = new Random(seed);
-
- // 确保首位不为0
- int firstDigit = random.nextInt(9) + 1;
- int remainingDigits = random.nextInt(100000); // 剩余5位
-
- // 拼接生成的6位数字码
- return String.format("%d%05d", firstDigit, remainingDigits);
- }
-
- /**
- * 生成指定位数的数字码,首位不为0,短期内不会重复。
- * @param digits 生成的数字码位数
- * @return 指定位数的数字码
- */
- public static synchronized String generateCode(int digits) {
- if (digits < 2) {
- throw new IllegalArgumentException("数字码位数必须大于等于2");
- }
-
- long currentTime = System.currentTimeMillis();
-
- // 如果当前时间与上次相同,增加计数器以避免重复
- if (currentTime == lastTime) {
- counter++;
- } else {
- counter = 0; // 时间变化时重置计数器
- }
- lastTime = currentTime;
-
- // 使用当前时间和计数器生成随机种子
- long seed = currentTime + counter;
- Random random = new Random(seed);
-
- // 确保首位不为0
- int firstDigit = random.nextInt(9) + 1;
- int remainingDigits = random.nextInt((int) Math.pow(10, digits - 1)); // 剩余位数
-
- // 拼接生成的动态位数数字码
- return String.format("%d%0" + (digits - 1) + "d", firstDigit, remainingDigits);
- }
-}
\ No newline at end of file
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/vo/DeviceCodeVO.java b/main/manager-api/src/main/java/xiaozhi/modules/device/vo/DeviceCodeVO.java
deleted file mode 100644
index a27568cc..00000000
--- a/main/manager-api/src/main/java/xiaozhi/modules/device/vo/DeviceCodeVO.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package xiaozhi.modules.device.vo;
-
-import lombok.Data;
-
-@Data
-public class DeviceCodeVO {
- private String deviceCode;
-}
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/controller/Conflict_ModelController.java b/main/manager-api/src/main/java/xiaozhi/modules/model/controller/Conflict_ModelController.java
deleted file mode 100644
index 1524d8bc..00000000
--- a/main/manager-api/src/main/java/xiaozhi/modules/model/controller/Conflict_ModelController.java
+++ /dev/null
@@ -1,106 +0,0 @@
-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.web.bind.annotation.*;
-import xiaozhi.common.page.PageData;
-import xiaozhi.common.utils.Result;
-import xiaozhi.modules.model.dto.ModelConfigBodyDTO;
-import xiaozhi.modules.model.dto.ModelConfigDTO;
-import xiaozhi.modules.model.dto.ModelProviderDTO;
-import xiaozhi.modules.model.service.Conflict_ModelConfigService;
-import xiaozhi.modules.model.service.Conflict_ModelProviderService;
-
-import java.util.List;
-
-@AllArgsConstructor
-@RestController
-@RequestMapping("/models")
-@Tag(name = "模型配置")
-public class Conflict_ModelController {
-
- private final Conflict_ModelProviderService modelProviderService;
-
- private final Conflict_ModelConfigService modelConfigService;
-
- @GetMapping("/models/names")
- @Operation(summary = "获取所有模型名称")
- @RequiresPermissions("sys:role:superAdmin")
- public Result> getModelNames(@RequestParam String modelType,
- @RequestParam(required = false) String modelName) {
- List modelNameList = modelConfigService.getModelCodeList(modelType, modelName);
- return new Result>().ok(modelNameList);
- }
-
- @GetMapping("/{modelType}/provideTypes")
- @Operation(summary = "获取模型供应器列表")
- @RequiresPermissions("sys:role:superAdmin")
- public Result> getModelProviderList(@PathVariable String modelType) {
- List modelProviderDTOS = modelProviderService.getListByModelType(modelType);
- return new Result>().ok(modelProviderDTOS);
- }
-
- @GetMapping("/{modelType}/{provideCode}/fields")
- @Operation(summary = "获取模型供应器字段")
- @RequiresPermissions("sys:role:superAdmin")
- public Result> getModelProviderFields(@PathVariable String modelType, @PathVariable String provideCode) {
- List fieldList = modelProviderService.getFieldList(modelType, provideCode);
- return new Result>().ok(fieldList);
- }
-
-
- @GetMapping("/models/list")
- @Operation(summary = "获取模型配置列表")
- @RequiresPermissions("sys:role:superAdmin")
- public Result> getModelConfigList(@RequestParam String modelType,
- @RequestParam(required = false) String modelName,
- @RequestParam(required = false, defaultValue = "0") Integer page,
- @RequestParam(required = false, defaultValue = "10") Integer limit) {
- PageData pageList = modelConfigService.getPageList(modelType, modelName, page, limit);
- return new Result>().ok(pageList);
- }
-
-
- @PostMapping("/models/{modelType}/{provideCode}")
- @Operation(summary = "新增模型配置")
- @RequiresPermissions("sys:role:superAdmin")
- public Result addModelConfig(@PathVariable String modelType,
- @PathVariable String provideCode,
- @RequestBody ModelConfigBodyDTO modelConfigBodyDTO) {
- ModelConfigDTO modelConfigDTO = modelConfigService.add(modelType, provideCode, modelConfigBodyDTO);
- return new Result().ok(modelConfigDTO);
- }
-
-
- @PutMapping("/models/{modelType}/{provideCode}/{id}")
- @Operation(summary = "编辑模型配置")
- @RequiresPermissions("sys:role:superAdmin")
- public Result editModelConfig(@PathVariable String modelType,
- @PathVariable String provideCode,
- @PathVariable String id,
- @RequestBody ModelConfigBodyDTO modelConfigBodyDTO) {
- ModelConfigDTO modelConfigDTO = modelConfigService.edit(modelType, provideCode, id, modelConfigBodyDTO);
- return new Result().ok(modelConfigDTO);
- }
-
-
- @DeleteMapping("/models/{modelType}/{provideCode}/{id}")
- @Operation(summary = "删除模型配置")
- @RequiresPermissions("sys:role:superAdmin")
- public Result deleteModelConfig(@PathVariable String modelType, @PathVariable String provideCode, @PathVariable String id) {
- modelConfigService.delete(modelType, provideCode, id);
- return new Result<>();
- }
-
- @GetMapping("/models/{modelName}/voices")
- @Operation(summary = "获取模型音色")
- @RequiresPermissions("sys:role:normal")
- public Result> getVoiceList(@PathVariable String modelName,
- @RequestParam(required = false) String voiceName) {
-
- List voiceList = modelConfigService.getVoiceList(modelName, voiceName);
- return new Result>().ok(voiceList);
- }
-}
\ No newline at end of file
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelController.java b/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelController.java
index f38586dc..f743a795 100644
--- a/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelController.java
+++ b/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelController.java
@@ -1,124 +1,106 @@
package xiaozhi.modules.model.controller;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.annotation.Resource;
import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import xiaozhi.common.controller.BaseController;
-import xiaozhi.common.redis.RedisUtils;
+import org.springframework.web.bind.annotation.*;
+import xiaozhi.common.page.PageData;
import xiaozhi.common.utils.Result;
-import xiaozhi.modules.model.domain.ModelConfig;
-import xiaozhi.modules.model.domain.TtsVoice;
+import xiaozhi.modules.model.dto.ModelConfigBodyDTO;
+import xiaozhi.modules.model.dto.ModelConfigDTO;
+import xiaozhi.modules.model.dto.ModelProviderDTO;
import xiaozhi.modules.model.service.ModelConfigService;
-import xiaozhi.modules.model.service.TtsVoiceService;
+import xiaozhi.modules.model.service.ModelProviderService;
import java.util.List;
-@Slf4j
-@Tag(name = "模型数据管理")
@AllArgsConstructor
@RestController
-@RequestMapping("/model/")
-public class ModelController extends BaseController {
- private final TtsVoiceService ttsVoiceService;
+@RequestMapping("/models")
+@Tag(name = "模型配置")
+public class ModelController {
+
+ private final ModelProviderService modelProviderService;
+
private final ModelConfigService modelConfigService;
+ @GetMapping("/models/names")
+ @Operation(summary = "获取所有模型名称")
+ @RequiresPermissions("sys:role:superAdmin")
+ public Result> getModelNames(@RequestParam String modelType,
+ @RequestParam(required = false) String modelName) {
+ List modelNameList = modelConfigService.getModelCodeList(modelType, modelName);
+ return new Result>().ok(modelNameList);
+ }
- @GetMapping("/list")
- @Operation(summary = "模型配置列表")
- @RequiresPermissions("sys:role:normal")
- public Result> getModelList() {
- List list = modelConfigService.list(new QueryWrapper().eq("is_enabled", 1));
- return new Result>().ok(list);
+ @GetMapping("/{modelType}/provideTypes")
+ @Operation(summary = "获取模型供应器列表")
+ @RequiresPermissions("sys:role:superAdmin")
+ public Result> getModelProviderList(@PathVariable String modelType) {
+ List modelProviderDTOS = modelProviderService.getListByModelType(modelType);
+ return new Result>().ok(modelProviderDTOS);
+ }
+
+ @GetMapping("/{modelType}/{provideCode}/fields")
+ @Operation(summary = "获取模型供应器字段")
+ @RequiresPermissions("sys:role:superAdmin")
+ public Result> getModelProviderFields(@PathVariable String modelType, @PathVariable String provideCode) {
+ List fieldList = modelProviderService.getFieldList(modelType, provideCode);
+ return new Result>().ok(fieldList);
}
-// private final ModelProviderService modelProviderService;
-//
-// private final ModelConfigService modelConfigService;
-//
-// @GetMapping("/models/names")
-// @Operation(summary = "获取所有模型名称")
-// @RequiresPermissions("sys:role:superAdmin")
-// public Result> getModelNames(@RequestParam String modelType,
-// @RequestParam(required = false) String modelName) {
-// List modelNameList = modelConfigService.getModelCodeList(modelType, modelName);
-// return new Result>().ok(modelNameList);
-// }
-//
-// @GetMapping("/{modelType}/provideTypes")
-// @Operation(summary = "获取模型供应器列表")
-// @RequiresPermissions("sys:role:superAdmin")
-// public Result> getModelProviderList(@PathVariable String modelType) {
-// List modelProviderDTOS = modelProviderService.getListByModelType(modelType);
-// return new Result>().ok(modelProviderDTOS);
-// }
-//
-// @GetMapping("/{modelType}/{provideCode}/fields")
-// @Operation(summary = "获取模型供应器字段")
-// @RequiresPermissions("sys:role:superAdmin")
-// public Result> getModelProviderFields(@PathVariable String modelType, @PathVariable String provideCode) {
-// List fieldList = modelProviderService.getFieldList(modelType, provideCode);
-// return new Result>().ok(fieldList);
-// }
-//
-//
-// @GetMapping("/models/list")
-// @Operation(summary = "获取模型配置列表")
-// @RequiresPermissions("sys:role:superAdmin")
-// public Result> getModelConfigList(@RequestParam String modelType,
-// @RequestParam(required = false) String modelName,
-// @RequestParam(required = false, defaultValue = "0") Integer page,
-// @RequestParam(required = false,defaultValue = "10") Integer limit) {
-// PageData pageList = modelConfigService.getPageList(modelType, modelName, page, limit);
-// return new Result>().ok(pageList);
-// }
-//
-//
-// @PostMapping("/models/{modelType}/{provideCode}")
-// @Operation(summary = "新增模型配置")
-// @RequiresPermissions("sys:role:superAdmin")
-// public Result addModelConfig(@PathVariable String modelType,
-// @PathVariable String provideCode,
-// @RequestBody ModelConfigBodyDTO modelConfigBodyDTO) {
-// ModelConfigDTO modelConfigDTO = modelConfigService.add(modelType, provideCode, modelConfigBodyDTO);
-// return new Result().ok(modelConfigDTO);
-// }
-//
-//
-// @PutMapping("/models/{modelType}/{provideCode}/{id}")
-// @Operation(summary = "编辑模型配置")
-// @RequiresPermissions("sys:role:superAdmin")
-// public Result editModelConfig(@PathVariable String modelType,
-// @PathVariable String provideCode,
-// @PathVariable String id,
-// @RequestBody ModelConfigBodyDTO modelConfigBodyDTO) {
-// ModelConfigDTO modelConfigDTO = modelConfigService.edit(modelType, provideCode, id, modelConfigBodyDTO);
-// return new Result().ok(modelConfigDTO);
-// }
-//
-//
-// @DeleteMapping("/models/{modelType}/{provideCode}/{id}")
-// @Operation(summary = "删除模型配置")
-// @RequiresPermissions("sys:role:superAdmin")
-// public Result deleteModelConfig(@PathVariable String modelType, @PathVariable String provideCode, @PathVariable String id) {
-// modelConfigService.delete(modelType, provideCode, id);
-// return new Result<>();
-// }
-//
-// @GetMapping("/models/{modelName}/voices")
-// @Operation(summary = "获取模型音色")
-// @RequiresPermissions("sys:role:normal")
-// public Result> getVoiceList(@PathVariable String modelName,
-// @RequestParam(required = false) String voiceName) {
-//
-// List voiceList = modelConfigService.getVoiceList(modelName, voiceName);
-// return new Result>().ok(voiceList);
-// }
-}
\ No newline at end of file
+ @GetMapping("/models/list")
+ @Operation(summary = "获取模型配置列表")
+ @RequiresPermissions("sys:role:superAdmin")
+ public Result> getModelConfigList(@RequestParam String modelType,
+ @RequestParam(required = false) String modelName,
+ @RequestParam(required = false, defaultValue = "0") Integer page,
+ @RequestParam(required = false,defaultValue = "10") Integer limit) {
+ PageData pageList = modelConfigService.getPageList(modelType, modelName, page, limit);
+ return new Result>().ok(pageList);
+ }
+
+
+ @PostMapping("/models/{modelType}/{provideCode}")
+ @Operation(summary = "新增模型配置")
+ @RequiresPermissions("sys:role:superAdmin")
+ public Result addModelConfig(@PathVariable String modelType,
+ @PathVariable String provideCode,
+ @RequestBody ModelConfigBodyDTO modelConfigBodyDTO) {
+ ModelConfigDTO modelConfigDTO = modelConfigService.add(modelType, provideCode, modelConfigBodyDTO);
+ return new Result().ok(modelConfigDTO);
+ }
+
+
+ @PutMapping("/models/{modelType}/{provideCode}/{id}")
+ @Operation(summary = "编辑模型配置")
+ @RequiresPermissions("sys:role:superAdmin")
+ public Result editModelConfig(@PathVariable String modelType,
+ @PathVariable String provideCode,
+ @PathVariable String id,
+ @RequestBody ModelConfigBodyDTO modelConfigBodyDTO) {
+ ModelConfigDTO modelConfigDTO = modelConfigService.edit(modelType, provideCode, id, modelConfigBodyDTO);
+ return new Result().ok(modelConfigDTO);
+ }
+
+
+ @DeleteMapping("/models/{modelType}/{provideCode}/{id}")
+ @Operation(summary = "删除模型配置")
+ @RequiresPermissions("sys:role:superAdmin")
+ public Result deleteModelConfig(@PathVariable String modelType, @PathVariable String provideCode, @PathVariable String id) {
+ modelConfigService.delete(modelType, provideCode, id);
+ return new Result<>();
+ }
+
+ @GetMapping("/models/{modelName}/voices")
+ @Operation(summary = "获取模型音色")
+ @RequiresPermissions("sys:role:normal")
+ public Result> getVoiceList(@PathVariable String modelName,
+ @RequestParam(required = false) String voiceName) {
+
+ List voiceList = modelConfigService.getVoiceList(modelName, voiceName);
+ return new Result>().ok(voiceList);
+ }
+}
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/controller/TtsController.java b/main/manager-api/src/main/java/xiaozhi/modules/model/controller/TtsController.java
deleted file mode 100644
index 0e00ce0a..00000000
--- a/main/manager-api/src/main/java/xiaozhi/modules/model/controller/TtsController.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package xiaozhi.modules.model.controller;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.shiro.authz.annotation.RequiresPermissions;
-import org.springframework.web.bind.annotation.*;
-import xiaozhi.common.controller.BaseController;
-import xiaozhi.common.utils.Result;
-import xiaozhi.modules.model.domain.TtsVoice;
-import xiaozhi.modules.model.service.ModelConfigService;
-import xiaozhi.modules.model.service.TtsVoiceService;
-
-import java.util.List;
-
-@Slf4j
-@Tag(name = "模型数据管理")
-@AllArgsConstructor
-@RestController
-@RequestMapping("/tts")
-public class TtsController extends BaseController {
- private final TtsVoiceService ttsVoiceService;
- private final ModelConfigService modelConfigService;
-
- @GetMapping("/voice")
- @Operation(summary = "音色列表")
- @RequiresPermissions("sys:role:normal")
- public Result> getTtsList(@RequestParam(required = false) String ttsModelId) {
- QueryWrapper queryWrapper = new QueryWrapper<>();
- if (StringUtils.isNotBlank(ttsModelId)) {
- queryWrapper.eq("ttsModelId", ttsModelId);
- }
- queryWrapper.orderByAsc("sort");
- List list = ttsVoiceService.list(queryWrapper);
- return new Result>().ok(list);
- }
-
-
-// private final ModelProviderService modelProviderService;
-//
-// private final ModelConfigService modelConfigService;
-//
-// @GetMapping("/models/names")
-// @Operation(summary = "获取所有模型名称")
-// @RequiresPermissions("sys:role:superAdmin")
-// public Result> getModelNames(@RequestParam String modelType,
-// @RequestParam(required = false) String modelName) {
-// List modelNameList = modelConfigService.getModelCodeList(modelType, modelName);
-// return new Result>().ok(modelNameList);
-// }
-//
-// @GetMapping("/{modelType}/provideTypes")
-// @Operation(summary = "获取模型供应器列表")
-// @RequiresPermissions("sys:role:superAdmin")
-// public Result> getModelProviderList(@PathVariable String modelType) {
-// List modelProviderDTOS = modelProviderService.getListByModelType(modelType);
-// return new Result>().ok(modelProviderDTOS);
-// }
-//
-// @GetMapping("/{modelType}/{provideCode}/fields")
-// @Operation(summary = "获取模型供应器字段")
-// @RequiresPermissions("sys:role:superAdmin")
-// public Result> getModelProviderFields(@PathVariable String modelType, @PathVariable String provideCode) {
-// List fieldList = modelProviderService.getFieldList(modelType, provideCode);
-// return new Result>().ok(fieldList);
-// }
-//
-//
-// @GetMapping("/models/list")
-// @Operation(summary = "获取模型配置列表")
-// @RequiresPermissions("sys:role:superAdmin")
-// public Result> getModelConfigList(@RequestParam String modelType,
-// @RequestParam(required = false) String modelName,
-// @RequestParam(required = false, defaultValue = "0") Integer page,
-// @RequestParam(required = false,defaultValue = "10") Integer limit) {
-// PageData pageList = modelConfigService.getPageList(modelType, modelName, page, limit);
-// return new Result>().ok(pageList);
-// }
-//
-//
-// @PostMapping("/models/{modelType}/{provideCode}")
-// @Operation(summary = "新增模型配置")
-// @RequiresPermissions("sys:role:superAdmin")
-// public Result addModelConfig(@PathVariable String modelType,
-// @PathVariable String provideCode,
-// @RequestBody ModelConfigBodyDTO modelConfigBodyDTO) {
-// ModelConfigDTO modelConfigDTO = modelConfigService.add(modelType, provideCode, modelConfigBodyDTO);
-// return new Result().ok(modelConfigDTO);
-// }
-//
-//
-// @PutMapping("/models/{modelType}/{provideCode}/{id}")
-// @Operation(summary = "编辑模型配置")
-// @RequiresPermissions("sys:role:superAdmin")
-// public Result editModelConfig(@PathVariable String modelType,
-// @PathVariable String provideCode,
-// @PathVariable String id,
-// @RequestBody ModelConfigBodyDTO modelConfigBodyDTO) {
-// ModelConfigDTO modelConfigDTO = modelConfigService.edit(modelType, provideCode, id, modelConfigBodyDTO);
-// return new Result().ok(modelConfigDTO);
-// }
-//
-//
-// @DeleteMapping("/models/{modelType}/{provideCode}/{id}")
-// @Operation(summary = "删除模型配置")
-// @RequiresPermissions("sys:role:superAdmin")
-// public Result deleteModelConfig(@PathVariable String modelType, @PathVariable String provideCode, @PathVariable String id) {
-// modelConfigService.delete(modelType, provideCode, id);
-// return new Result<>();
-// }
-//
-// @GetMapping("/models/{modelName}/voices")
-// @Operation(summary = "获取模型音色")
-// @RequiresPermissions("sys:role:normal")
-// public Result> getVoiceList(@PathVariable String modelName,
-// @RequestParam(required = false) String voiceName) {
-//
-// List voiceList = modelConfigService.getVoiceList(modelName, voiceName);
-// return new Result>().ok(voiceList);
-// }
-}
\ No newline at end of file
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/domain/ModelConfig.java b/main/manager-api/src/main/java/xiaozhi/modules/model/domain/ModelConfig.java
deleted file mode 100644
index 938565f9..00000000
--- a/main/manager-api/src/main/java/xiaozhi/modules/model/domain/ModelConfig.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package xiaozhi.modules.model.domain;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import java.io.Serializable;
-import java.util.Date;
-import lombok.Data;
-
-/**
- * 模型配置表
- * @TableName ai_model_config
- */
-@TableName(value ="ai_model_config")
-@Data
-public class ModelConfig implements Serializable {
- /**
- * 主键
- */
- @TableId
- private String id;
-
- /**
- * 模型类型(Memory/ASR/VAD/LLM/TTS)
- */
- private String modelType;
-
- /**
- * 模型编码(如AliLLM、DoubaoTTS)
- */
- private String modelCode;
-
- /**
- * 模型名称
- */
- private String modelName;
-
- /**
- * 是否默认配置(0否 1是)
- */
- private Integer isDefault;
-
- /**
- * 是否启用
- */
- private Integer isEnabled;
-
- /**
- * 模型配置(JSON格式)
- */
- private String configJson;
-
- /**
- * 官方文档链接
- */
- private String docLink;
-
- /**
- * 备注
- */
- private String remark;
-
- /**
- * 排序
- */
- private Integer sort;
-
- /**
- * 创建者
- */
- private Long creator;
-
- /**
- * 创建时间
- */
- private Date createDate;
-
- /**
- * 更新者
- */
- private Long updater;
-
- /**
- * 更新时间
- */
- private Date updateDate;
-
- @TableField(exist = false)
- private static final long serialVersionUID = 1L;
-}
\ No newline at end of file
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/domain/ModelProvider.java b/main/manager-api/src/main/java/xiaozhi/modules/model/domain/ModelProvider.java
deleted file mode 100644
index af21ffac..00000000
--- a/main/manager-api/src/main/java/xiaozhi/modules/model/domain/ModelProvider.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package xiaozhi.modules.model.domain;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import java.io.Serializable;
-import java.util.Date;
-import lombok.Data;
-
-/**
- * 模型配置表
- * @TableName ai_model_provider
- */
-@TableName(value ="ai_model_provider")
-@Data
-public class ModelProvider implements Serializable {
- /**
- * 主键
- */
- @TableId
- private String id;
-
- /**
- * 模型类型(Memory/ASR/VAD/LLM/TTS)
- */
- private String modelType;
-
- /**
- * 供应器类型
- */
- private String providerCode;
-
- /**
- * 供应器名称
- */
- private String name;
-
- /**
- * 供应器字段列表(JSON格式)
- */
- private Object fields;
-
- /**
- * 排序
- */
- private Integer sort;
-
- /**
- * 创建者
- */
- private Long creator;
-
- /**
- * 创建时间
- */
- private Date createDate;
-
- /**
- * 更新者
- */
- private Long updater;
-
- /**
- * 更新时间
- */
- private Date updateDate;
-
- @TableField(exist = false)
- private static final long serialVersionUID = 1L;
-}
\ No newline at end of file
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/domain/TtsVoice.java b/main/manager-api/src/main/java/xiaozhi/modules/model/domain/TtsVoice.java
deleted file mode 100644
index 744bd6e8..00000000
--- a/main/manager-api/src/main/java/xiaozhi/modules/model/domain/TtsVoice.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package xiaozhi.modules.model.domain;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import java.io.Serializable;
-import java.util.Date;
-import lombok.Data;
-
-/**
- * TTS 音色表
- * @TableName ai_tts_voice
- */
-@TableName(value ="ai_tts_voice")
-@Data
-public class TtsVoice implements Serializable {
- /**
- * 主键
- */
- @TableId
- private String id;
-
- /**
- * 对应 TTS 模型主键
- */
- private String ttsModelId;
-
- /**
- * 音色名称
- */
- private String name;
-
- /**
- * 音色编码
- */
- private String ttsVoice;
-
- /**
- * 语言
- */
- private String languages;
-
- /**
- * 音色 Demo
- */
- private String voiceDemo;
-
- /**
- * 备注
- */
- private String remark;
-
- /**
- * 排序
- */
- private Integer sort;
-
- /**
- * 创建者
- */
- private Long creator;
-
- /**
- * 创建时间
- */
- private Date createDate;
-
- /**
- * 更新者
- */
- private Long updater;
-
- /**
- * 更新时间
- */
- private Date updateDate;
-
- @TableField(exist = false)
- private static final long serialVersionUID = 1L;
-}
\ No newline at end of file
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/mapper/ModelConfigMapper.java b/main/manager-api/src/main/java/xiaozhi/modules/model/mapper/ModelConfigMapper.java
deleted file mode 100644
index 0bbf4ca8..00000000
--- a/main/manager-api/src/main/java/xiaozhi/modules/model/mapper/ModelConfigMapper.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package xiaozhi.modules.model.mapper;
-
-import org.apache.ibatis.annotations.Mapper;
-import xiaozhi.modules.model.domain.ModelConfig;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-/**
-* @author chenerlei
-* @description 针对表【ai_model_config(模型配置表)】的数据库操作Mapper
-* @createDate 2025-03-22 15:31:57
-* @Entity xiaozhi.modules.model.domain.ModelConfig
-*/
-@Mapper
-public interface ModelConfigMapper extends BaseMapper {
-
-}
-
-
-
-
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/mapper/ModelProviderMapper.java b/main/manager-api/src/main/java/xiaozhi/modules/model/mapper/ModelProviderMapper.java
deleted file mode 100644
index f3fa01ce..00000000
--- a/main/manager-api/src/main/java/xiaozhi/modules/model/mapper/ModelProviderMapper.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package xiaozhi.modules.model.mapper;
-
-import org.apache.ibatis.annotations.Mapper;
-import xiaozhi.modules.model.domain.ModelProvider;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-/**
-* @author chenerlei
-* @description 针对表【ai_model_provider(模型配置表)】的数据库操作Mapper
-* @createDate 2025-03-24 18:24:13
-* @Entity xiaozhi.modules.model.domain.ModelProvider
-*/
-@Mapper
-public interface ModelProviderMapper extends BaseMapper {
-
-}
-
-
-
-
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/mapper/TtsVoiceMapper.java b/main/manager-api/src/main/java/xiaozhi/modules/model/mapper/TtsVoiceMapper.java
deleted file mode 100644
index c4ec5089..00000000
--- a/main/manager-api/src/main/java/xiaozhi/modules/model/mapper/TtsVoiceMapper.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package xiaozhi.modules.model.mapper;
-
-import org.apache.ibatis.annotations.Mapper;
-import xiaozhi.modules.model.domain.TtsVoice;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-/**
-* @author chenerlei
-* @description 针对表【ai_tts_voice(TTS 音色表)】的数据库操作Mapper
-* @createDate 2025-03-22 15:31:57
-* @Entity xiaozhi.modules.model.domain.TtsVoice
-*/
-@Mapper
-public interface TtsVoiceMapper extends BaseMapper {
-
-}
-
-
-
-
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/service/Conflict_ModelConfigService.java b/main/manager-api/src/main/java/xiaozhi/modules/model/service/Conflict_ModelConfigService.java
deleted file mode 100644
index 8ce94539..00000000
--- a/main/manager-api/src/main/java/xiaozhi/modules/model/service/Conflict_ModelConfigService.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package xiaozhi.modules.model.service;
-
-import xiaozhi.common.page.PageData;
-import xiaozhi.modules.model.dto.ModelConfigBodyDTO;
-import xiaozhi.modules.model.dto.ModelConfigDTO;
-
-import java.util.List;
-
-public interface Conflict_ModelConfigService {
-
- List getModelCodeList(String modelType, String modelName);
-
- PageData getPageList(String modelType, String modelName, Integer page, Integer limit);
-
- ModelConfigDTO add(String modelType, String provideCode, ModelConfigBodyDTO modelConfigBodyDTO);
-
- ModelConfigDTO edit(String modelType, String provideCode, String id, ModelConfigBodyDTO modelConfigBodyDTO);
-
- void delete(String modelType, String provideCode, String id);
-
- List getVoiceList(String modelName, String voiceName);
-}
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/service/Conflict_ModelProviderService.java b/main/manager-api/src/main/java/xiaozhi/modules/model/service/Conflict_ModelProviderService.java
deleted file mode 100644
index 47b70cbf..00000000
--- a/main/manager-api/src/main/java/xiaozhi/modules/model/service/Conflict_ModelProviderService.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package xiaozhi.modules.model.service;
-
-import xiaozhi.modules.model.dto.ModelProviderDTO;
-import xiaozhi.modules.model.entity.ModelProviderEntity;
-
-import java.util.List;
-
-public interface Conflict_ModelProviderService {
-
-// List getModelNames(String modelType, String modelName);
-
- List getListByModelType(String modelType);
-
- ModelProviderDTO add(ModelProviderEntity modelProviderEntity);
-
- ModelProviderDTO edit(ModelProviderEntity modelProviderEntity);
-
- void delete();
-
- List getList(String modelType, String provideCode);
-
- List getFieldList(String modelType, String provideCode);
-}
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelConfigService.java b/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelConfigService.java
index 25a7be88..1911be78 100644
--- a/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelConfigService.java
+++ b/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelConfigService.java
@@ -1,13 +1,22 @@
package xiaozhi.modules.model.service;
-import com.baomidou.mybatisplus.extension.service.IService;
-import xiaozhi.modules.model.domain.ModelConfig;
+import xiaozhi.common.page.PageData;
+import xiaozhi.modules.model.dto.ModelConfigBodyDTO;
+import xiaozhi.modules.model.dto.ModelConfigDTO;
-/**
- * @author chenerlei
- * @description 针对表【ai_model_config(模型配置表)】的数据库操作Service
- * @createDate 2025-03-22 15:31:57
- */
-public interface ModelConfigService extends IService {
+import java.util.List;
+public interface ModelConfigService {
+
+ List getModelCodeList(String modelType, String modelName);
+
+ PageData getPageList(String modelType, String modelName, Integer page, Integer limit);
+
+ ModelConfigDTO add(String modelType, String provideCode, ModelConfigBodyDTO modelConfigBodyDTO);
+
+ ModelConfigDTO edit(String modelType, String provideCode, String id, ModelConfigBodyDTO modelConfigBodyDTO);
+
+ void delete(String modelType, String provideCode, String id);
+
+ List getVoiceList(String modelName, String voiceName);
}
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 d5a76615..d0d221cf 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
@@ -1,13 +1,23 @@
package xiaozhi.modules.model.service;
-import com.baomidou.mybatisplus.extension.service.IService;
-import xiaozhi.modules.model.domain.ModelProvider;
+import xiaozhi.modules.model.dto.ModelProviderDTO;
+import xiaozhi.modules.model.entity.ModelProviderEntity;
-/**
- * @author chenerlei
- * @description 针对表【ai_model_provider(模型配置表)】的数据库操作Service
- * @createDate 2025-03-24 18:24:13
- */
-public interface ModelProviderService extends IService {
+import java.util.List;
+public interface ModelProviderService {
+
+// List getModelNames(String modelType, String modelName);
+
+ List getListByModelType(String modelType);
+
+ ModelProviderDTO add(ModelProviderEntity modelProviderEntity);
+
+ ModelProviderDTO edit(ModelProviderEntity modelProviderEntity);
+
+ void delete();
+
+ List getList(String modelType, String provideCode);
+
+ List getFieldList(String modelType, String provideCode);
}
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/service/TtsVoiceService.java b/main/manager-api/src/main/java/xiaozhi/modules/model/service/TtsVoiceService.java
deleted file mode 100644
index b5a6ecb3..00000000
--- a/main/manager-api/src/main/java/xiaozhi/modules/model/service/TtsVoiceService.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package xiaozhi.modules.model.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import xiaozhi.modules.model.domain.TtsVoice;
-
-/**
- * @author chenerlei
- * @description 针对表【ai_tts_voice(TTS 音色表)】的数据库操作Service
- * @createDate 2025-03-22 15:31:57
- */
-public interface TtsVoiceService extends IService {
-
-}
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/Conflict_ModelConfigServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/Conflict_ModelConfigServiceImpl.java
deleted file mode 100644
index 696df42a..00000000
--- a/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/Conflict_ModelConfigServiceImpl.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package xiaozhi.modules.model.service.impl;
-
-import cn.hutool.core.collection.CollectionUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import lombok.AllArgsConstructor;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Service;
-import xiaozhi.common.constant.Constant;
-import xiaozhi.common.exception.RenException;
-import xiaozhi.common.page.PageData;
-import xiaozhi.common.service.impl.BaseServiceImpl;
-import xiaozhi.common.utils.ConvertUtils;
-import xiaozhi.modules.model.dao.ModelConfigDao;
-import xiaozhi.modules.model.dto.ModelConfigBodyDTO;
-import xiaozhi.modules.model.dto.ModelConfigDTO;
-import xiaozhi.modules.model.dto.ModelProviderDTO;
-import xiaozhi.modules.model.entity.ModelConfigEntity;
-import xiaozhi.modules.model.service.Conflict_ModelConfigService;
-import xiaozhi.modules.model.service.Conflict_ModelProviderService;
-import xiaozhi.modules.timbre.service.TimbreService;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@Service
-@AllArgsConstructor
-public class Conflict_ModelConfigServiceImpl extends BaseServiceImpl implements Conflict_ModelConfigService {
-
- private final ModelConfigDao modelConfigDao;
- private final Conflict_ModelProviderService modelProviderService;
- private final TimbreService timbreService;
-
- private static final Logger logger = LoggerFactory.getLogger(ModelConfigServiceImpl.class);
-
- @Override
- public List getModelCodeList(String modelType, String modelName) {
- return modelConfigDao.getModelCodeList(modelType, modelName);
- }
-
- @Override
- public PageData getPageList(String modelType, String modelName, Integer page, Integer limit) {
- Map params = new HashMap();
- params.put(Constant.PAGE, page);
- params.put(Constant.LIMIT, limit);
- IPage modelConfigEntityIPage = modelConfigDao.selectPage(
- getPage(params, "sort", true),
- new QueryWrapper()
- .eq("model_type", modelType)
- .like(StringUtils.isNotBlank(modelName), "model_name", modelName)
- );
- return getPageData(modelConfigEntityIPage, ModelConfigDTO.class);
- }
-
- @Override
- public ModelConfigDTO add(String modelType, String provideCode, ModelConfigBodyDTO modelConfigBodyDTO) {
- // 先验证有没有供应器
- if (StringUtils.isBlank(modelType) || StringUtils.isBlank(provideCode)) {
- throw new RenException("modelType和provideCode不能为空");
- }
- List providerList = modelProviderService.getList(modelType, provideCode);
- if (CollectionUtil.isEmpty(providerList)) {
- throw new RenException("供应器不存在");
- }
-
- // 再保存供应器提供的模型
- ModelConfigEntity modelConfigEntity = ConvertUtils.sourceToTarget(modelConfigBodyDTO, ModelConfigEntity.class);
- modelConfigEntity.setModelType(modelType);
- modelConfigDao.insert(modelConfigEntity);
- return ConvertUtils.sourceToTarget(modelConfigEntity, ModelConfigDTO.class);
- }
-
- @Override
- public ModelConfigDTO edit(String modelType, String provideCode, String id, ModelConfigBodyDTO modelConfigBodyDTO) {
- // 先验证有没有供应器
- if (StringUtils.isBlank(modelType) || StringUtils.isBlank(provideCode)) {
- throw new RenException("modelType和provideCode不能为空");
- }
- List providerList = modelProviderService.getList(modelType, provideCode);
- if (CollectionUtil.isEmpty(providerList)) {
- throw new RenException("供应器不存在");
- }
-
- // 再更新供应器提供的模型
- ModelConfigEntity modelConfigEntity = ConvertUtils.sourceToTarget(modelConfigBodyDTO, ModelConfigEntity.class);
- modelConfigEntity.setId(id);
- modelConfigEntity.setModelType(modelType);
- modelConfigDao.updateById(modelConfigEntity);
- return ConvertUtils.sourceToTarget(modelConfigEntity, ModelConfigDTO.class);
- }
-
- @Override
- public void delete(String modelType, String provideCode, String id) {
- // 先验证有没有供应器
- if (StringUtils.isBlank(modelType) || StringUtils.isBlank(provideCode)) {
- throw new RenException("modelType和provideCode不能为空");
- }
- List providerList = modelProviderService.getList(modelType, provideCode);
- if (CollectionUtil.isEmpty(providerList)) {
- throw new RenException("供应器不存在");
- }
-
- modelConfigDao.deleteById(Long.getLong(id));
- }
-
- @Override
- public List getVoiceList(String modelName, String voiceName) {
- QueryWrapper queryWrapper = new QueryWrapper<>();
- queryWrapper.eq("model_name", StringUtils.isBlank(modelName) ? "" : modelName);
- queryWrapper.eq("model_type", "TTS");
- List