diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AiAgentChatHistoryDao.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AiAgentChatHistoryDao.java index b75312d2..7c9bf1eb 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AiAgentChatHistoryDao.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AiAgentChatHistoryDao.java @@ -1,6 +1,9 @@ package xiaozhi.modules.agent.dao; +import java.util.List; + import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -15,12 +18,6 @@ import xiaozhi.modules.agent.entity.AgentChatHistoryEntity; */ @Mapper public interface AiAgentChatHistoryDao extends BaseMapper { - /** - * 根据智能体ID删除音频 - * - * @param agentId 智能体ID - */ - void deleteAudioByAgentId(String agentId); /** * 根据智能体ID删除聊天历史记录 @@ -35,4 +32,19 @@ public interface AiAgentChatHistoryDao extends BaseMapper getAudioIdsByAgentId(String agentId); + + /** + * 批量删除音频 + * + * @param audioIds 音频ID列表 + */ + void deleteAudioByIds(@Param("audioIds") List audioIds); } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentChatHistoryServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentChatHistoryServiceImpl.java index 76da2fc8..63b820c9 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentChatHistoryServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentChatHistoryServiceImpl.java @@ -84,7 +84,16 @@ public class AgentChatHistoryServiceImpl extends ServiceImpl audioIds = baseMapper.getAudioIdsByAgentId(agentId); + if (audioIds != null && !audioIds.isEmpty()) { + int batchSize = 1000; // 每批删除1000条 + for (int i = 0; i < audioIds.size(); i += batchSize) { + int end = Math.min(i + batchSize, audioIds.size()); + List batch = audioIds.subList(i, end); + baseMapper.deleteAudioByIds(batch); + } + } } if (deleteAudio && !deleteText) { baseMapper.deleteAudioIdByAgentId(agentId); @@ -107,7 +116,7 @@ public class AgentChatHistoryServiceImpl extends ServiceImpl pageParam = new Page<>(0, 50); diff --git a/main/manager-api/src/main/resources/db/changelog/202512192245.sql b/main/manager-api/src/main/resources/db/changelog/202512192245.sql new file mode 100644 index 00000000..7162fd1c --- /dev/null +++ b/main/manager-api/src/main/resources/db/changelog/202512192245.sql @@ -0,0 +1,2 @@ +-- 为智能体聊天历史记录添加音频ID索引 +ALTER TABLE ai_agent_chat_history ADD INDEX idx_ai_agent_chat_history_audio_id (audio_id); 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 67d912a1..22d0d431 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 @@ -452,3 +452,10 @@ databaseChangeLog: - sqlFile: encoding: utf8 path: classpath:db/changelog/202512161529.sql + - changeSet: + id: 202512192245 + author: hrz + changes: + - sqlFile: + encoding: utf8 + path: classpath:db/changelog/202512192245.sql \ No newline at end of file diff --git a/main/manager-api/src/main/resources/mapper/agent/AiAgentChatHistoryDao.xml b/main/manager-api/src/main/resources/mapper/agent/AiAgentChatHistoryDao.xml index 3e80f7fd..84e22fd1 100644 --- a/main/manager-api/src/main/resources/mapper/agent/AiAgentChatHistoryDao.xml +++ b/main/manager-api/src/main/resources/mapper/agent/AiAgentChatHistoryDao.xml @@ -22,13 +22,18 @@ created_at, updated_at - - DELETE FROM ai_agent_chat_audio - WHERE id IN ( - SELECT audio_id - FROM ai_agent_chat_history - WHERE agent_id = #{agentId} - ) + + + + DELETE FROM ai_agent_chat_audio + WHERE id IN + + #{id} +