|
|
пре 1 недеља | |
|---|---|---|
| .. | ||
| backups | пре 1 недеља | |
| 2026年秋季更新结果.md | пре 1 недеља | |
| MiaoguoLiteracy依赖检查_2026年秋季.md | пре 1 недеља | |
| MiaoguoLiteracy缺失清单_2026年秋季.md | пре 1 недеља | |
| MiaoguoLiteracy补录结果_2026年秋季.md | пре 1 недеља | |
| README.md | пре 1 недеља | |
| apply_report_2026_fall.json | пре 1 недеља | |
| audit_miaoguo_literacy_2026_fall.mjs | пре 1 недеља | |
| audit_report_2026_fall.json | пре 1 недеља | |
| dry_run_report_2026_fall.json | пре 1 недеља | |
| miaoguo_literacy_apply_report_2026_fall.json | пре 1 недеља | |
| miaoguo_literacy_audit_2026_fall.json | пре 1 недеља | |
| miaoguo_literacy_dependency_audit_current_2026_fall.json | пре 1 недеља | |
| miaoguo_literacy_dry_run_2026_fall.json | пре 1 недеља | |
| miaoguo_literacy_post_apply_audit_2026_fall.json | пре 1 недеља | |
| source_chinese_2026_fall.json | пре 1 недеља | |
| source_english_2026_fall.json | пре 1 недеља | |
| source_miaoguo_literacy_2026_fall.json | пре 1 недеља | |
| update_knowledge_base_2026_fall.mjs | пре 1 недеља | |
| update_miaoguo_literacy_2026_fall.mjs | пре 1 недеља | |
本目录用于每年 2 月、9 月教材改版后的秒过知识库维护。目标是:只需放入新版教材图片、整理两份源数据、依次运行 dry-run、apply、audit,即可完成更新并留下可追溯记录。
HanziUnit 禁止 DELETE,只能 UPDATE 旧行或 INSERT 新行。旧 ID 可能已被历史试题或用户数据引用。Words 允许按目标 BookID 删除后重建,但必须先备份,并且所有写入都必须在事务中完成。MiaoguoBook.UnitNum、MiaoguoBook.WordNum。HanziUnit.Example,并计入 WordNum。语文园地,不添加“一、二”等编号;先后次序由唯一且连续的 OrderID 区分。src/config/dev.js,脚本和报告不得复制、打印或另存数据库密码。程序使用 MiaoguoBook.BookIDOld 查找旧系统数据表的书籍 ID。字段名是 BookIDOld,不是口头描述中常写的 BookOldID。
| 类别 | MiaoguoBook.ID | 数据表 | 关联字段 | 主要字段 |
|---|---|---|---|---|
| 语文写字表 | 1~12 | HanziUnit | HanziBookID=BookIDOld | UnitType、Name、Example、OrderID |
| 语文词语表 | 33~42 | HanziUnit | HanziBookID=BookIDOld | UnitType、Name、Example、OrderID |
| 语文识字表 | 43~52 | HanziUnit | HanziBookID=BookIDOld | UnitType、Name、Example、OrderID |
| 英语单词表 | 285~292、301~305 | Words | BookID=BookIDOld | Word、LessonID、LessonName、Soundmark、Translate、Sort |
| 英语常用表达法 | 293~300 | Words | BookID=BookIDOld | Word、LessonID、LessonName、Translate、Sort |
本次确认的 HanziUnit.UnitType:识字表为 1,词语表为 2,写字表为 5。
units 元素,name 按书中栏目名写,example 保存这一栏的完整数据。Example 是连续汉字,不加逗号;使用 Unicode 字符数统计 WordNum。Example 使用英文逗号分隔,按非空词条数统计 WordNum。wordNum。语文园地 保持同名,依靠数组位置最终生成 OrderID=1..N。LessonID 使用 1~N,LessonName 使用 Unit 1~Unit N。/.../ 统一保存为 [...];教材未给音标时保存 NULL,不能臆造。also Earth 等教材注释保留在 Translate。ˈ,中文标点保留教材语义。Sort 在每个单元内从 1 连续递增。接口本身按 LessonID,Sort,ID 排序,因此不依赖自增 ID 碰巧保持顺序。WordRemark、Level、EnglishExplanation、ExampleSentence 没有教材来源时保存 NULL。以下命令均在仓库根目录执行:
cd /Users/chengjie/Documents/git/miaoguo_system_server
source_chinese_*.json、source_english_*.json,替换为本批次数据,同时改脚本中的文件名和目标书籍映射。node .vscode/秒过知识库更新/update_knowledge_base_2026_fall.mjs --dry-run
MiaoguoBook.ID/BookIDOld、当前行数→目标行数、UnitNum/WordNum、语文新增数和 deletes=0、英语各单元条数。node .vscode/秒过知识库更新/update_knowledge_base_2026_fall.mjs --apply
程序会在获取数据库行锁后、第一条写入前,把目标 MiaoguoBook、HanziUnit、Words 的完整旧数据写入 backups/。之后才执行更新;任一写入或提交前逐字段核验失败,整个事务回滚。
node .vscode/秒过知识库更新/update_knowledge_base_2026_fall.mjs --audit
语文园地、英语每单元首末词。对于每本语文书,程序按以下优先级映射新版单元:
INSERT;所有复用的旧行保留原 ID 和原 IsLocked。新增行默认 IsLocked=1。所有目标行都重新写入连续的 OrderID=1..N。
Example/entries 重新计算出的数量等于声明的 wordNum。MiaoguoBook.BookIDOld 与源文件一致。HanziWord.Name 找到;缺字时阻止写库。OrderID 从 1 连续到 N 且无重复,逐行 UnitType/Name/Example 与源文件完全一致。Word/LessonID/LessonName/Soundmark/Translate/Sort 与源文件完全一致,未提供字段仍为 NULL。MiaoguoBook.UnitNum/WordNum 与最终数据一致。HanziUnit.ID 在更新后仍然存在。--apply 都会生成唯一时间戳备份,绝不能覆盖上一次备份。ID 做 UPDATE;本次新增行如何处理必须根据线上引用情况单独确认,不能盲删。BookID 重建为备份内容,同时恢复对应 MiaoguoBook.UnitNum/WordNum。词语表中的每个最终词语还依赖 MiaoguoLiteracy。维护时不能只更新 HanziUnit.Example,还必须检查线上接口实际会取到的 JSONString 是否具有可用的 CHN:
node .vscode/秒过知识库更新/audit_miaoguo_literacy_2026_fall.mjs
检查范围应覆盖新版词语表的全部最终词语,并标记相对旧版新出现的词语。检查逻辑与 GetMiaoguoLiteracyWords 保持一致:排除 SearchType=shici/eng,按 Word,SearchType DESC 选取每个词的首条记录。以下情况都视为缺失并在写入前列清单:
JSONString 为空或不是合法 JSON;JSONString 中没有 CHN;CHN.PinYin[0].pinyin/explain 不完整,现有接口无法使用。缺失词语需要在 MiaoguoLiteracy 新增一条 SearchType=zici 的记录。可以选择语义和结构相近的已有词语作为模板,但必须按新词真实内容修改 Word、拼音、释义、组词、近反义词等字段,不能只替换顶层 Word。新增前先生成清单和拟写内容供人工复核;确认后再备份、事务插入并重新运行本检查,直到缺失数为 0。
本次补录程序的标准命令如下;后续批次复制脚本和源文件并修改年份:
# 只生成完整 JSONString 和写入计划
node .vscode/秒过知识库更新/update_miaoguo_literacy_2026_fall.mjs --dry-run
# 备份后事务插入,并在提交前后检查全部新版词语
node .vscode/秒过知识库更新/update_miaoguo_literacy_2026_fall.mjs --apply
# 独立复查新增行和全部新版词语
node .vscode/秒过知识库更新/update_miaoguo_literacy_2026_fall.mjs --audit
补录程序从 HanziWord 复用每个汉字已有的楷体图和笔顺动画。每条新增记录至少要有 ENG、CHN.HanZi、非空的 CHN.PinYin[0].pinyin/explain、与字数一致的 KaitiArr/BiShunArr2、Synonym/Antonym、TianKong/PinyinTone。
MiaoguoBook.WordNum 不足以证明数据正确,必须从实际 Example/entries 重新计数。OrderID=0,不能继续依赖自增 ID 排序;本次起统一写连续 OrderID。语文园地 同名是正确数据,不要为“唯一”而擅自编号。MiaoguoLiteracy 同一个词可能同时有 zici 和 list 等记录;低优先级 list 没有 CHN 不一定影响词语题,必须按线上查询排序判断真正选中的记录。source_chinese_2026_fall.json:2026 秋季语文 8 套结构化源数据。source_english_2026_fall.json:2026 秋季英语单词表和常用表达法源数据。update_knowledge_base_2026_fall.mjs:校验、计划、备份、事务更新、审计程序。dry_run_report_2026_fall.json:写库前更新计划和 ID 映射。apply_report_2026_fall.json:实际事务、备份位置及提交前后审计。audit_report_2026_fall.json:提交后的独立审计结果。audit_miaoguo_literacy_2026_fall.mjs:词语依赖的只读检查程序。MiaoguoLiteracy缺失清单_2026年秋季.md、miaoguo_literacy_audit_2026_fall.json:本批次补录前缺少可用 CHN 的历史快照。MiaoguoLiteracy依赖检查_2026年秋季.md、miaoguo_literacy_dependency_audit_current_2026_fall.json:运行只读检查时更新的当前状态报告。source_miaoguo_literacy_2026_fall.json:缺失词语的拼音、释义、英文释义和近反义词源数据。update_miaoguo_literacy_2026_fall.mjs:构建完整 CHN、备份、事务补录和全词表复查程序。miaoguo_literacy_dry_run_2026_fall.json:20 条补录数据的写入前预览。miaoguo_literacy_apply_report_2026_fall.json:补录 ID、完整 JSONString、事务前后审计和备份位置。miaoguo_literacy_post_apply_audit_2026_fall.json:补录后的独立审计报告。MiaoguoLiteracy补录结果_2026年秋季.md:20 条补录词语的人工复核表。2026年秋季更新结果.md:便于人工复核的最终清单。backups/:每次执行前的数据库完整备份。