package com.pharmacopoeia.nihaisha.service; import com.pharmacopoeia.nihaisha.entity.NihEvidenceRecord; import com.pharmacopoeia.nihaisha.entity.NihParagraph; import com.pharmacopoeia.nihaisha.repository.NihEvidenceRecordRepository; import com.pharmacopoeia.nihaisha.repository.NihParagraphRepository; import org.springframework.stereotype.Service; import java.util.*; @Service public class NihEvidenceService { private final NihEvidenceRecordRepository evidenceRecordRepository; private final NihParagraphRepository paragraphRepository; public NihEvidenceService(NihEvidenceRecordRepository evidenceRecordRepository, NihParagraphRepository paragraphRepository) { this.evidenceRecordRepository = evidenceRecordRepository; this.paragraphRepository = paragraphRepository; } /** * 获取证据详情 */ public Optional getEvidence(String evidenceId) { return evidenceRecordRepository.findById(evidenceId); } /** * 获取证据上下文(前驱 + 当前 + 后继) */ public Map getEvidenceContext(String evidenceId) { Map context = new HashMap<>(); evidenceRecordRepository.findById(evidenceId).ifPresent(current -> { context.put("current", enrichWithParagraph(current)); if (current.getPreviousEvidenceId() != null && !current.getPreviousEvidenceId().isEmpty()) { evidenceRecordRepository.findById(current.getPreviousEvidenceId()) .ifPresent(prev -> context.put("previous", enrichWithParagraph(prev))); } if (current.getNextEvidenceId() != null && !current.getNextEvidenceId().isEmpty()) { evidenceRecordRepository.findById(current.getNextEvidenceId()) .ifPresent(next -> context.put("next", enrichWithParagraph(next))); } }); return context; } private Map enrichWithParagraph(NihEvidenceRecord record) { Map enriched = new HashMap<>(); enriched.put("evidenceId", record.getEvidenceId()); enriched.put("documentId", record.getDocumentId()); enriched.put("locator", record.getLocator()); enriched.put("originalText", record.getOriginalText()); enriched.put("previousEvidenceId", record.getPreviousEvidenceId()); enriched.put("nextEvidenceId", record.getNextEvidenceId()); if (record.getParagraphId() != null) { paragraphRepository.findById(record.getParagraphId()).ifPresent(p -> { enriched.put("title", p.getTitle()); enriched.put("sourcePath", p.getSourcePath()); enriched.put("pageStart", p.getPageStart()); enriched.put("pageEnd", p.getPageEnd()); }); } return enriched; } }