【听见课堂 HarmonyOS NEXT 实战系列 49】把字幕、板书、任务合成一条证据时间线
【听见课堂 HarmonyOS NEXT 实战系列 49】把字幕、板书、任务合成一条证据时间线
字幕、OCR 板书和任务分别存放很合理,但复盘时用户需要按课堂顺序回看“当时说了什么、拍了什么、后来确认了什么”。听见课堂通过 ReviewTimelineItem 把三类数据映射成统一的只读时间线模型。

一、统一时间线不是把三张表合成一张表
RelationalStore 仍保留字幕、扫描和任务各自的字段与生命周期。Service 读取三类 canonical data 后,临时生成适合展示的 ReviewTimelineItem。
存储模型负责正确写入,投影模型负责统一阅读;两者不必强行使用同一张宽表。
二、ReviewTimelineItem 包含哪些字段
统一节点包含 id、timestamp、type、title、detail、source、confidenceLabel 和 evidenceCount。
这些字段足以支持列表摘要、类型筛选、节点详情和来源证据面板,同时不把原始实体的全部内部字段暴露给页面。
三、节点 ID 为什么要带类型前缀
字幕、扫描和任务的业务 ID 可能重复。Service 分别生成 transcript-、scan-、task- 前缀,形成跨类型唯一的 UI 节点键。
P07 与 P09 也能用同一规则定位任务节点,实现从任务卡直接跳转到证据时间线。
四、字幕如何映射
字幕节点保留原时间戳和原文,类型根据 isKeyPoint 映射为“重点”或“字幕”。详情标明说话者和课堂字幕原文,来源继续指向课堂字幕。
confidenceLabel 使用“已人工标记重点”或“原始字幕记录”,没有虚构语音识别置信度百分比。
五、板书如何映射
板书节点使用扫描标题和 OCR 文本,来源沿用 ScanNote.source,标签显示 Math.round(scan.confidence * 100) + '% OCR'。
这个数字只能描述 ScanNote 当前保存的 OCR 置信字段。它可能来自真实 OCR 结果或演示种子,必须结合数据来源判断,不能直接当作项目整体识别准确率。
六、任务如何映射
任务节点包含标题、截止文本和来源,标签根据 confirmed 显示“已人工确认”或“待人工确认”。当前时间线会加入全部任务,包括候选。
这使用户能回看建议如何产生,但也要求界面明确区分候选与正式任务。
七、时间戳从哪里来
字幕直接使用自身时间戳;扫描与任务通过 reviewSourceTime() 从来源文本识别少量已知时间,否则使用调用处提供的兜底时间。
当前已知集合是 14:03 / 14:12 / 14:20 / 14:28。这是一套项目演示映射,不是通用自然语言时间解析器。
八、排序为什么可以使用 localeCompare
节点时间采用固定宽度的 HH:mm 字符串,因此按字典序排序与当天时间先后一致。
items.sort((left, right): number => {
return left.timestamp.localeCompare(right.timestamp);
});
若未来支持跨日期、多时区或秒级时间,应改为结构化毫秒字段,不能继续只排显示字符串。

九、类型筛选留在页面短状态
P07 的 reviewFilter 支持全部、字幕、重点、板书和任务。页面只对已生成的 Snapshot 做轻量过滤,不回写数据源。
切换筛选时,如果当前选中节点不属于新类型,页面会清空选择;大屏则可自动选中新结果的第一项。
十、节点详情与证据面板如何联动
用户选择节点后,selectedReviewNodeId 同时驱动列表高亮、详情区和证据预览。手机端在列表下展开,大屏端使用多栏布局。
响应式变化不复制业务数据,所有区域都从同一个 Snapshot 中按 ID 查找节点。
十一、evidenceCount 当前为什么都是 1
三类映射都传入 1,表示每个时间线节点当前关联一份直接证据。这是模型为未来扩展留下的字段,不代表已经实现多证据关系聚合。
如果将来一个任务关联多段字幕和多张板书,应通过关系表或明确的关联集合计算,而不是手工改显示数字。
十二、从任务中心打开时间线
P09 会设置 reviewFilter='任务',选择 task- 前缀节点,再导航到复盘页。用户看到的不只是任务标题,还能继续核对截止文本、来源和确认状态。
这条路径把“做什么”重新连接到“为什么产生这项任务”。
十三、当前时间线仍是单课程快照
getReviewSnapshot() 读取的是当前 Repository 的当天课程数据,没有课程 ID 字段参与时间线筛选。对当前单课程演示足够,但不能声称已经支持跨课程时间线。
未来多课程需要节点携带 courseId,并让 Service 按课程或日期生成范围明确的快照。
十四、未来关系模型怎样扩展
可以新增 evidence_links:记录源实体类型、源 ID、目标实体类型、目标 ID、关系类型和创建来源。任务就能关联多段字幕、扫描也能关联对应讲解片段。
关系建立仍应由人工确认或可撤销规则完成,避免模型自动生成不可追溯的强关系。
十五、验收应该检查哪些证据
至少验证三类节点数量、前缀 ID 唯一性、时间顺序、类型筛选、选中详情、任务中心跳转、候选/确认标签、OCR 来源说明以及空时间线状态。
还要构造相同时间戳、未知来源时间和跨日期数据,确认当前限制被正确暴露。
十六、总结
统一证据时间线是一层可追溯投影,不是新的事实数据库。听见课堂保留三类实体的存储边界,在 Service 中生成共同节点,让手机和大屏按时间、类型和来源复盘;同时如实保留单课程、有限时间解析和一对一证据数的当前范围。
下一篇将进入历史页,拆解关键词、课程、日期和证据类型如何组合筛选与高亮。
更多推荐

所有评论(0)