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
@@ -35,8 +35,6 @@ public class MindMapNode {
private String notes;
private String sourceType;
private Integer sourceId;
/** 可选:节点来源会话编码(REPORT/FRAGMENT 节点使用) */
private String sessionNum;
private List<MindMapNode> children;
public MindMapNode(String title) {
@@ -53,7 +51,6 @@ public class MindMapNode {
map.put("notes", notes != null ? notes : "");
if (sourceType != null) map.put("sourceType", sourceType);
if (sourceId != null) map.put("sourceId", sourceId);
if (sessionNum != null) map.put("sessionNum", sessionNum);
List<Object> childMaps = new ArrayList<>();
if (children != null) {
for (MindMapNode c : children) {
@@ -73,7 +70,6 @@ public class MindMapNode {
if (map.containsKey("sourceId") && map.get("sourceId") != null) {
node.setSourceId(((Number) map.get("sourceId")).intValue());
}
node.setSessionNum((String) map.get("sessionNum"));
Object raw = map.getOrDefault("children", map.get("nodes"));
List<MindMapNode> children = new ArrayList<>();
if (raw instanceof List<?> list) {