| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- package com.smartreview.service.impl;
- import com.smartreview.po.Block;
- import com.smartreview.po.Conversation;
- import com.smartreview.repository.*;
- import com.smartreview.service.DocumentCleanupService;
- import lombok.RequiredArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import java.util.List;
- /**
- * 文档清理服务实现
- */
- @Slf4j
- @Service
- @RequiredArgsConstructor
- public class DocumentCleanupServiceImpl implements DocumentCleanupService {
- private final BlockRepository blockRepository;
- private final ChapterRepository chapterRepository;
- private final KnowledgePointRepository knowledgePointRepository;
- private final QuestionRepository questionRepository;
- private final UserAnswerRepository userAnswerRepository;
- private final QuestionGenerationTaskRepository questionGenerationTaskRepository;
- private final ConversationRepository conversationRepository;
- private final ReviewChatMessageRepository reviewChatMessageRepository;
- @Override
- @Transactional
- public void cleanOldDocumentData(String documentId) {
- log.info("开始清理文档旧数据: {}", documentId);
- // 删除所有Block下的知识点
- List<Block> oldBlocks = blockRepository.findByDocumentIdOrderBySortOrder(documentId);
- for (Block oldBlock : oldBlocks) {
- knowledgePointRepository.deleteByBlockId(oldBlock.getId());
- }
- // 删除所有Block
- blockRepository.deleteByDocumentId(documentId);
- // 删除所有章节
- chapterRepository.deleteByDocumentId(documentId);
- log.info("文档旧数据清理完成: {}", documentId);
- }
- @Override
- @Transactional
- public void cleanAllDocumentData(String documentId) {
- log.info("开始完全清理文档所有关联数据: {}", documentId);
- // 获取所有Block
- List<Block> blocks = blockRepository.findByDocumentIdOrderBySortOrder(documentId);
- List<Long> blockIds = blocks.stream().map(Block::getId).toList();
- if (!blockIds.isEmpty()) {
- // 1. 删除用户答案
- for (Long blockId : blockIds) {
- userAnswerRepository.deleteByBlockId(blockId);
- }
- log.debug("已删除文档相关的用户答案: documentId={}", documentId);
- // 2. 删除题目
- for (Long blockId : blockIds) {
- questionRepository.deleteByBlockId(blockId);
- }
- log.debug("已删除文档相关的题目: documentId={}", documentId);
- // 3. 删除题目生成任务
- for (Long blockId : blockIds) {
- questionGenerationTaskRepository.deleteByBlockId(blockId);
- }
- log.debug("已删除文档相关的题目生成任务: documentId={}", documentId);
- // 4. 删除知识点
- for (Long blockId : blockIds) {
- knowledgePointRepository.deleteByBlockId(blockId);
- }
- log.debug("已删除文档相关的知识点: documentId={}", documentId);
- }
- // 5. 删除对话和聊天记录
- List<Conversation> conversations = conversationRepository.findByDocumentId(documentId);
- for (Conversation conversation : conversations) {
- reviewChatMessageRepository.deleteByConversationId(conversation.getId());
- }
- conversationRepository.deleteByDocumentId(documentId);
- log.debug("已删除文档相关的对话和聊天记录: documentId={}", documentId);
- // 6. 删除所有Block
- blockRepository.deleteByDocumentId(documentId);
- log.debug("已删除文档的所有Block: documentId={}", documentId);
- // 7. 删除所有章节
- chapterRepository.deleteByDocumentId(documentId);
- log.debug("已删除文档的所有章节: documentId={}", documentId);
- log.info("文档所有关联数据清理完成: {}", documentId);
- }
- }
|