diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentTagRelationEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentTagRelationEntity.java index e142b727..cc345d71 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentTagRelationEntity.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentTagRelationEntity.java @@ -24,6 +24,9 @@ public class AgentTagRelationEntity { @Schema(description = "标签ID") private String tagId; + @Schema(description = "排序") + private Integer sort; + @Schema(description = "创建者") private Long creator; diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentTagServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentTagServiceImpl.java index f0bf0a2e..2bcee73a 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentTagServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentTagServiceImpl.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; @@ -104,13 +105,15 @@ public class AgentTagServiceImpl extends BaseServiceImpl existTagNames = existTags.stream() - .map(AgentTagEntity::getTagName) - .collect(Collectors.toList()); + Map existTagMap = existTags.stream() + .collect(Collectors.toMap(AgentTagEntity::getTagName, t -> t, (a, b) -> a)); List tagsToInsert = new ArrayList<>(); for (String tagName : newTagNames) { - if (!existTagNames.contains(tagName)) { + AgentTagEntity existTag = existTagMap.get(tagName); + if (existTag != null) { + allTagIds.add(existTag.getId()); + } else { AgentTagEntity tag = new AgentTagEntity(); tag.setId(UUID.randomUUID().toString().replace("-", "")); tag.setTagName(tagName); @@ -129,12 +132,6 @@ public class AgentTagServiceImpl extends BaseServiceImpl tagIdEntities = baseDao.selectBatchIds(tagIds); for (AgentTagEntity tag : tagIdEntities) { @@ -152,11 +149,13 @@ public class AgentTagServiceImpl extends BaseServiceImpl relations = new ArrayList<>(); Date now = new Date(); + int sort = 0; for (String tagId : allTagIds) { AgentTagRelationEntity relation = new AgentTagRelationEntity(); relation.setId(UUID.randomUUID().toString().replace("-", "")); relation.setAgentId(agentId); relation.setTagId(tagId); + relation.setSort(sort++); relation.setCreatedAt(now); relation.setUpdatedAt(now); relations.add(relation); diff --git a/main/manager-api/src/main/resources/db/changelog/202603091051.sql b/main/manager-api/src/main/resources/db/changelog/202603091051.sql new file mode 100644 index 00000000..2b00ad80 --- /dev/null +++ b/main/manager-api/src/main/resources/db/changelog/202603091051.sql @@ -0,0 +1,11 @@ +-- 给智能体标签关联表添加排序字段 +SET @col_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'ai_agent_tag_relation' AND COLUMN_NAME = 'sort'); +SET @sql = IF(@col_exists = 0, 'ALTER TABLE `ai_agent_tag_relation` ADD COLUMN `sort` INT UNSIGNED DEFAULT 0 COMMENT ''排序''', 'SELECT ''Column sort already exists'' AS msg'); +PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; + +-- 修复现有数据(仅当 sort 字段为默认值 0 时执行,避免覆盖用户已设置的顺序) +SET @col_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'ai_agent_tag_relation' AND COLUMN_NAME = 'sort'); +SET @sql = IF(@col_exists > 0 AND (SELECT COUNT(*) FROM ai_agent_tag_relation WHERE sort = 0) > 0, + 'UPDATE ai_agent_tag_relation r INNER JOIN (SELECT id, ROW_NUMBER() OVER (PARTITION BY agent_id ORDER BY created_at) AS row_num FROM ai_agent_tag_relation) t ON r.id = t.id SET r.sort = t.row_num', + 'SELECT ''No need to update or column does not exist'' AS msg'); +PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; diff --git a/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml b/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml index b8eeeeed..cac36fc8 100755 --- a/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml @@ -550,3 +550,11 @@ databaseChangeLog: - sqlFile: encoding: utf8 path: classpath:db/changelog/202602281000.sql + - changeSet: + id: 202603091051 + author: rainv123 + changes: + - sqlFile: + encoding: utf8 + path: classpath:db/changelog/202603091051.sql + diff --git a/main/manager-api/src/main/resources/mapper/agent/AgentTagDao.xml b/main/manager-api/src/main/resources/mapper/agent/AgentTagDao.xml index b3d8c6c8..02f0fa0d 100644 --- a/main/manager-api/src/main/resources/mapper/agent/AgentTagDao.xml +++ b/main/manager-api/src/main/resources/mapper/agent/AgentTagDao.xml @@ -7,7 +7,7 @@ FROM ai_agent_tag t INNER JOIN ai_agent_tag_relation r ON t.id = r.tag_id WHERE r.agent_id = #{agentId} AND t.deleted = 0 - ORDER BY t.sort ASC + ORDER BY r.sort ASC, r.created_at ASC