feat(复习): 节点级 focusPath + findNode,回退 session 维度

- 移除 MindMapNode.sessionNum、filterBySession、getTaskSessions
- 新增 MindMapTreeTool.extractSubtree() 按路径提取子树作为对比基准
- 新增 findClosestNode/getPath/similarityScore 支持节点匹配
- 新增 POST /review/standard-mind-map/{taskNum}/find-node
- recallCompare 使用 focusPath 替代 sessionNum
- ReviewRecallRecordEntity.focusPath 替代 sessionNum
- Flyway V20260706_1: review_recall_records 加 focus_path 列
This commit is contained in:
2026-07-05 18:12:32 +08:00
parent 3c3f682b2b
commit b18f8b4d1c
13 changed files with 197 additions and 129 deletions
@@ -6,6 +6,7 @@ import com.guo.learningprogresstracker.exception.NotFindEntitiesException;
import com.guo.learningprogresstracker.exception.OperationFailedException;
import java.util.List;
import java.util.Map;
/**
* 标准思维导图服务。
@@ -37,10 +38,16 @@ public interface StandardMindMapService {
* 用户提交回忆大纲,与标准导图对比并返回结果。
*
* @param recallOutline 用户回忆的缩进大纲文本
* @param sessionNum 可选会话编码,指定仅对比该会话相关的标准导图节点
* @return 对比记录实体(compareResult 字段包含对比树 JSON
* @param focusPath 可选:标准导图中的节点路径(/ 分隔),指定仅对比该子树
*/
ReviewStandardMindMapEntity recallCompare(String taskNum, String recallOutline, String sessionNum) throws NotFindEntitiesException, OperationFailedException;
ReviewStandardMindMapEntity recallCompare(String taskNum, String recallOutline, String focusPath) throws NotFindEntitiesException, OperationFailedException;
/**
* 根据内容文本在标准导图中查找最匹配的节点,返回节点路径。
*
* @return { "path": "节点A / 节点B", "nodeTitle": "节点B", "score": 0.85 }
*/
Map<String, Object> findNode(String taskNum, String content) throws NotFindEntitiesException, OperationFailedException;
/**
* 获取该任务的所有回忆对比记录。