From e9373b59c8a2881dabdb0c37ae62a63a8775ab59 Mon Sep 17 00:00:00 2001 From: LJH-rgsze <3241304429@qq.com> Date: Mon, 5 Jan 2026 14:50:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agent/controller/AgentController.java | 32 ++++++++----- .../xiaozhi/modules/agent/dto/AgentDTO.java | 3 -- .../modules/agent/dto/AgentSearchDTO.java | 17 +++++++ .../modules/agent/service/AgentService.java | 7 ++- .../agent/service/impl/AgentServiceImpl.java | 48 +++++++------------ main/manager-web/src/apis/module/agent.js | 2 +- 6 files changed, 57 insertions(+), 52 deletions(-) create mode 100644 main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentSearchDTO.java 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 4eb53a65..7197d159 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 @@ -39,6 +39,7 @@ import xiaozhi.modules.agent.dto.AgentChatSessionDTO; import xiaozhi.modules.agent.dto.AgentCreateDTO; import xiaozhi.modules.agent.dto.AgentDTO; import xiaozhi.modules.agent.dto.AgentMemoryDTO; +import xiaozhi.modules.agent.dto.AgentSearchDTO; import xiaozhi.modules.agent.dto.AgentUpdateDTO; import xiaozhi.modules.agent.entity.AgentEntity; import xiaozhi.modules.agent.entity.AgentTemplateEntity; @@ -73,10 +74,24 @@ public class AgentController { @GetMapping("/list") @Operation(summary = "获取用户智能体列表") @RequiresPermissions("sys:role:normal") - public Result> getUserAgents() { + public Result> getUserAgents( + @RequestParam(value = "keyword", required = false) String keyword, + @RequestParam(value = "searchType", defaultValue = "name") String searchType) { UserDetail user = SecurityUser.getUser(); - List agents = agentService.getUserAgents(user.getId()); - return new Result>().ok(agents); + + // 如果有搜索关键词,则使用搜索功能 + if (StringUtils.isNotBlank(keyword)) { + AgentSearchDTO searchDTO = new AgentSearchDTO(); + searchDTO.setKeyword(keyword); + searchDTO.setSearchType(searchType); + searchDTO.setUserId(user.getId()); + List agents = agentService.searchAgent(searchDTO); + return new Result>().ok(agents); + } else { + // 否则返回所有智能体 + List agents = agentService.getUserAgents(user.getId()); + return new Result>().ok(agents); + } } @GetMapping("/all") @@ -271,15 +286,6 @@ public class AgentController { .body(audioData); } - @GetMapping("/search") - @Operation(summary = "搜索智能体") - @RequiresPermissions("sys:role:normal") - public Result> searchAgent( - @RequestParam("keyword") String keyword, - @RequestParam(value = "searchType", defaultValue = "name") String searchType) { - UserDetail user = SecurityUser.getUser(); - List agents = agentService.searchAgent(keyword, searchType, user.getId()); - return new Result>().ok(agents); - } + } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentDTO.java index e5d6b029..edad88db 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentDTO.java @@ -46,7 +46,4 @@ public class AgentDTO { @Schema(description = "设备数量", example = "10") private Integer deviceCount; - - @Schema(description = "关联设备的MAC地址列表", example = "[\"00:11:22:33:44:55\", \"66:77:88:99:AA:BB\"]") - private List macAddresses; } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentSearchDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentSearchDTO.java new file mode 100644 index 00000000..9715a276 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentSearchDTO.java @@ -0,0 +1,17 @@ +package xiaozhi.modules.agent.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(description = "智能体搜索查询DTO") +public class AgentSearchDTO { + @Schema(description = "搜索关键词") + private String keyword; + + @Schema(description = "搜索类型: mac - 按MAC地址搜索, name - 按名称搜索") + private String searchType; + + @Schema(description = "用户ID") + private Long userId; +} 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 6db9caaa..63806a0a 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 @@ -7,6 +7,7 @@ import xiaozhi.common.page.PageData; import xiaozhi.common.service.BaseService; import xiaozhi.modules.agent.dto.AgentCreateDTO; import xiaozhi.modules.agent.dto.AgentDTO; +import xiaozhi.modules.agent.dto.AgentSearchDTO; import xiaozhi.modules.agent.dto.AgentUpdateDTO; import xiaozhi.modules.agent.entity.AgentEntity; import xiaozhi.modules.agent.vo.AgentInfoVO; @@ -102,10 +103,8 @@ public interface AgentService extends BaseService { /** * 搜索智能体 * - * @param keyword 搜索关键词 - * @param searchType 搜索类型:name(按名称搜索)或mac(按MAC地址搜索) - * @param userId 用户ID + * @param searchDTO 搜索条件DTO * @return 智能体列表 */ - List searchAgent(String keyword, String searchType, Long userId); + List searchAgent(AgentSearchDTO searchDTO); } 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 f14f8216..b487150c 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 @@ -31,6 +31,7 @@ import xiaozhi.common.utils.JsonUtils; import xiaozhi.modules.agent.dao.AgentDao; import xiaozhi.modules.agent.dto.AgentCreateDTO; import xiaozhi.modules.agent.dto.AgentDTO; +import xiaozhi.modules.agent.dto.AgentSearchDTO; import xiaozhi.modules.agent.dto.AgentUpdateDTO; import xiaozhi.modules.agent.entity.AgentContextProviderEntity; import xiaozhi.modules.agent.entity.AgentEntity; @@ -89,13 +90,13 @@ public class AgentServiceImpl extends BaseServiceImpl imp agent.setChatHistoryConf(Constant.ChatHistoryConfEnum.RECORD_TEXT_AUDIO.getCode()); } } - + // 查询上下文源配置 AgentContextProviderEntity contextProviderEntity = agentContextProviderService.getByAgentId(id); if (contextProviderEntity != null) { agent.setContextProviders(contextProviderEntity.getContextProviders()); } - + // 无需额外查询插件列表,已通过SQL查询出来 return agent; } @@ -158,15 +159,7 @@ public class AgentServiceImpl extends BaseServiceImpl imp // 获取设备数量 dto.setDeviceCount(getDeviceCountByAgentId(agent.getId())); - - // 获取关联设备的MAC地址列表 - List devices = deviceService.getUserDevices(agent.getUserId(), agent.getId()); - List macAddresses = devices.stream() - .map(DeviceEntity::getMacAddress) - .filter(StringUtils::isNotBlank) - .collect(Collectors.toList()); - dto.setMacAddresses(macAddresses); - + return dto; }).collect(Collectors.toList()); } @@ -480,42 +473,43 @@ public class AgentServiceImpl extends BaseServiceImpl imp } @Override - public List searchAgent(String keyword, String searchType, Long userId) { - if (StringUtils.isBlank(keyword)) { + public List searchAgent(AgentSearchDTO searchDTO) { + if (StringUtils.isBlank(searchDTO.getKeyword())) { return new ArrayList<>(); } QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("user_id", userId); + queryWrapper.eq("user_id", searchDTO.getUserId()); - if ("mac".equals(searchType)) { + if ("mac".equals(searchDTO.getSearchType())) { // 按MAC地址搜索:先搜索设备,再获取对应的智能体 - List devices = deviceService.searchDevicesByMacAddress(keyword, userId); - + List devices = deviceService.searchDevicesByMacAddress(searchDTO.getKeyword(), + searchDTO.getUserId()); + if (devices.isEmpty()) { return new ArrayList<>(); } - + // 获取设备对应的智能体ID列表 List agentIds = devices.stream() .map(DeviceEntity::getAgentId) .distinct() .collect(Collectors.toList()); - + if (agentIds.isEmpty()) { return new ArrayList<>(); } - + // 查询智能体 queryWrapper.in("id", agentIds); } else { // 按名称搜索 - queryWrapper.like("agent_name", keyword); + queryWrapper.like("agent_name", searchDTO.getKeyword()); } // 执行查询 List agentEntities = baseDao.selectList(queryWrapper); - + // 转换为DTO并设置所有必要字段 return agentEntities.stream().map(agent -> { AgentDTO dto = new AgentDTO(); @@ -543,15 +537,7 @@ public class AgentServiceImpl extends BaseServiceImpl imp // 获取设备数量 dto.setDeviceCount(getDeviceCountByAgentId(agent.getId())); - - // 获取关联设备的MAC地址列表 - List devices = deviceService.getUserDevices(agent.getUserId(), agent.getId()); - List macAddresses = devices.stream() - .map(DeviceEntity::getMacAddress) - .filter(StringUtils::isNotBlank) - .collect(Collectors.toList()); - dto.setMacAddresses(macAddresses); - + return dto; }).collect(Collectors.toList()); } diff --git a/main/manager-web/src/apis/module/agent.js b/main/manager-web/src/apis/module/agent.js index e10d9c77..0d5d5076 100644 --- a/main/manager-web/src/apis/module/agent.js +++ b/main/manager-web/src/apis/module/agent.js @@ -386,7 +386,7 @@ export default { // 搜索智能体 searchAgent(keyword, searchType, callback) { RequestService.sendRequest() - .url(`${getServiceUrl()}/agent/search`) + .url(`${getServiceUrl()}/agent/list`) .method('GET') .data({ keyword: keyword,