From 082b90b32cb18edb2f8aa48f49176f3880dd1db3 Mon Sep 17 00:00:00 2001 From: luoweijian <1329394916@qq.com> Date: Wed, 8 Jul 2026 16:09:50 +0800 Subject: [PATCH] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SaveAiExtractDraftDomainServiceImpl.java | 9 +++- ...aveDataExtractResultDomainServiceImpl.java | 47 +++++++++---------- 2 files changed, 31 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/project/interaction/domain/service/impl/SaveAiExtractDraftDomainServiceImpl.java b/src/main/java/com/project/interaction/domain/service/impl/SaveAiExtractDraftDomainServiceImpl.java index 6589942..311da3b 100644 --- a/src/main/java/com/project/interaction/domain/service/impl/SaveAiExtractDraftDomainServiceImpl.java +++ b/src/main/java/com/project/interaction/domain/service/impl/SaveAiExtractDraftDomainServiceImpl.java @@ -4,6 +4,7 @@ import com.project.information.domain.entity.InformationEntity; import com.project.information.domain.entity.KnowledgePointDraftEntity; import com.project.information.domain.enums.AuditStatusEnum; import com.project.information.domain.enums.DraftStatusEnum; +import com.project.information.domain.enums.InformationParseStatusEnum; import com.project.information.domain.service.InformationBaseService; import com.project.information.domain.service.KnowledgePointDraftBaseService; import com.project.interaction.domain.dto.AiExtractCallbackDTO; @@ -57,7 +58,13 @@ public class SaveAiExtractDraftDomainServiceImpl implements SaveAiExtractDraftDo } knowledgePointDraftBaseService.saveBatch(draftEntities); - // 2. 更新虚拟资料 draftStatus = PENDING(1) + // 2. 更新虚拟资料解析状态 = 成功 + informationBaseService.lambdaUpdate() + .eq(InformationEntity::getId, informationId) + .set(InformationEntity::getParseStatus, InformationParseStatusEnum.Success.getValue()) + .update(); + + // 3. 更新虚拟资料 draftStatus = PENDING(1) informationBaseService.lambdaUpdate() .eq(InformationEntity::getId, informationId) .set(InformationEntity::getDraftStatus, DraftStatusEnum.PENDING.getValue()) diff --git a/src/main/java/com/project/interaction/domain/service/impl/SaveDataExtractResultDomainServiceImpl.java b/src/main/java/com/project/interaction/domain/service/impl/SaveDataExtractResultDomainServiceImpl.java index f40feb2..6397533 100644 --- a/src/main/java/com/project/interaction/domain/service/impl/SaveDataExtractResultDomainServiceImpl.java +++ b/src/main/java/com/project/interaction/domain/service/impl/SaveDataExtractResultDomainServiceImpl.java @@ -83,17 +83,14 @@ public class SaveDataExtractResultDomainServiceImpl implements SaveDataExtractRe boolean allSuccess = allFiles.stream() .allMatch(f -> FileParseStatusEnum.Success.getValue().equals(f.getParseStatus())); - // 更新虚拟资料的解析状态(无论成功或失败都更新) - InformationEntity information = informationBaseService.getById(informationId); - if (information != null) { - information.setParseStatus(allSuccess - ? InformationParseStatusEnum.Success.getValue() - : InformationParseStatusEnum.Fail.getValue()); - informationBaseService.updateById(information); - log.info(">>> [数据服务回调] 虚拟资料 {} 解析状态已更新为: {}", informationId, information.getParseStatus()); - } - if (!allSuccess) { + // 更新虚拟资料的解析状态为失败 + InformationEntity information = informationBaseService.getById(informationId); + if (information != null) { + information.setParseStatus(InformationParseStatusEnum.Fail.getValue()); + informationBaseService.updateById(information); + log.info(">>> [数据服务回调] 虚拟资料 {} 解析状态已更新为: 失败", informationId); + } log.warn(">>> [数据服务回调] 虚拟资料 {} 下存在解析失败的子文件,跳过算法调用", informationId); return; } @@ -125,24 +122,26 @@ public class SaveDataExtractResultDomainServiceImpl implements SaveDataExtractRe // 解析 parsed_text JSON: {"segments": [[{"content": "...", "supplement": "", "chapter": "...", "content_type": "..."}]]} // segments 是双层数组:外层=每个子文件,内层=该文件的段落列表 try { - Map>>> parsed = objectMapper.readValue( - f.getParsedText(), new TypeReference<>() { + // 1. 将 TypeReference 改为单层 List: List> + Map>> parsed = objectMapper.readValue( + f.getParsedText(), new TypeReference>>>() { }); - List>> fileGroups = parsed.get("segments"); - if (fileGroups == null || fileGroups.isEmpty()) { + + List> segments = parsed.get("segments"); + if (segments == null || segments.isEmpty()) { continue; } String fileName = f.getFileName(); - for (List> group : fileGroups) { - for (Map seg : group) { - AiExtractRequestDTO.Segment segment = new AiExtractRequestDTO.Segment(); - segment.setContent(seg.get("content")); - segment.setSupplement(seg.get("supplement")); - segment.setChapter(seg.get("chapter")); - segment.setParseName(fileName); - segment.setContentType(seg.get("content_type")); - allSegments.add(segment); - } + + // 2. 去掉双层循环,直接遍历单层 List + for (Map seg : segments) { + AiExtractRequestDTO.Segment segment = new AiExtractRequestDTO.Segment(); + segment.setContent(seg.get("content")); + segment.setSupplement(seg.get("supplement")); + segment.setChapter(seg.get("chapter")); + segment.setParseName(fileName); + segment.setContentType(seg.get("content_type")); + allSegments.add(segment); } } catch (Exception e) { log.error(">>> [数据服务] 解析 parsedText 失败, fileId={}, error={}", f.getId(), e.getMessage());