From 8067e0587ec6a7bc3439ef4ca16b79fcb08b1eb0 Mon Sep 17 00:00:00 2001 From: hmo Date: Tue, 28 Apr 2026 09:43:58 +0800 Subject: [PATCH] docs: v1.5.1 - watermark fix, student_goals placeholder, cleanup duplicate checklist --- README.md | 6 ++-- compare_templates.py | 56 +++++++++++++++++++++++++++++++++++ docs/DEPLOYMENT_SOP.md | 25 +++++----------- temp_compare.py | 58 +++++++++++++++++++++++++++++++++++++ temp_compare_templates.py | 55 +++++++++++++++++++++++++++++++++++ temp_prod.db | Bin 0 -> 212992 bytes temp_templates_compare.txt | 23 +++++++++++++++ 7 files changed, 203 insertions(+), 20 deletions(-) create mode 100644 compare_templates.py create mode 100644 temp_compare.py create mode 100644 temp_compare_templates.py create mode 100644 temp_prod.db create mode 100644 temp_templates_compare.txt diff --git a/README.md b/README.md index 2399d16..65d1a2e 100644 --- a/README.md +++ b/README.md @@ -164,8 +164,8 @@ piano-plan/ --- -> **版本**:v1.5.0 +> **版本**:v1.5.1 > **创建时间**:2026-04-17 -> **最后更新**:2026-04-27 +> **最后更新**:2026-04-28 > -> **重要更新**:v1.5.0 - 数据统计页面(问题/级别分布可视化);PDF水印配置;编辑页按钮吸底;侧边栏调整 +> **重要更新**:v1.5.1 - PDF水印配置保存修复;{student_goals}占位符修复 diff --git a/compare_templates.py b/compare_templates.py new file mode 100644 index 0000000..48d1922 --- /dev/null +++ b/compare_templates.py @@ -0,0 +1,56 @@ +import sqlite3 + +def get_templates(db_path): + conn = sqlite3.connect(db_path) + c = conn.cursor() + c.execute("SELECT id, name, type, sort_order FROM templates ORDER BY type, sort_order") + rows = c.fetchall() + conn.close() + return rows + +dev_path = r"D:\F\NewI\opencode\daily-workspace\projects\青年钢琴集体课\练习方案系统\data\piano_plans.db" +prod_path = r"D:\F\NewI\opencode\daily-workspace\projects\青年钢琴集体课\练习方案系统\temp_prod.db" + +dev_rows = get_templates(dev_path) +prod_rows = get_templates(prod_path) + +with open("temp_templates_compare.txt", "w", encoding="utf-8") as f: + f.write("=== DEV TEMPLATES ===\n") + for r in dev_rows: + f.write(f"ID={r[0]} | {r[1]} | type={r[2]} | sort={r[3]}\n") + + f.write("\n=== PROD TEMPLATES ===\n") + for r in prod_rows: + f.write(f"ID={r[0]} | {r[1]} | type={r[2]} | sort={r[3]}\n") + + f.write("\n=== COMPARISON ===\n") + dev_ids = {r[0] for r in dev_rows} + prod_ids = {r[0] for r in prod_rows} + only_dev = dev_ids - prod_ids + only_prod = prod_ids - dev_ids + same_ids = dev_ids & prod_ids + + if only_dev: + f.write(f"ONLY IN DEV: IDs {only_dev}\n") + for r in dev_rows: + if r[0] in only_dev: + f.write(f" ID={r[0]} | {r[1]} | type={r[2]} | sort={r[3]}\n") + if only_prod: + f.write(f"ONLY IN PROD: IDs {only_prod}\n") + for r in prod_rows: + if r[0] in only_prod: + f.write(f" ID={r[0]} | {r[1]} | type={r[2]} | sort={r[3]}\n") + if same_ids: + dev_map = {r[0]: r for r in dev_rows} + prod_map = {r[0]: r for r in prod_rows} + for i in sorted(same_ids): + d = dev_map[i] + p = prod_map[i] + if d != p: + f.write(f"DIFF ID={i}:\n") + f.write(f" DEV: name={d[1]} type={d[2]} sort={d[3]}\n") + f.write(f" PROD: name={p[1]} type={p[2]} sort={p[3]}\n") + else: + f.write(f"ID={i}: IDENTICAL\n") + +print("done") diff --git a/docs/DEPLOYMENT_SOP.md b/docs/DEPLOYMENT_SOP.md index 84683d6..cc9fd28 100644 --- a/docs/DEPLOYMENT_SOP.md +++ b/docs/DEPLOYMENT_SOP.md @@ -1,12 +1,12 @@ # 钢琴练习方案系统 - 部署 SOP -> 版本:v1.5.0 -> 日期:2026-04-27 +> 版本:v1.5.1 +> 日期:2026-04-28 > 核心原则:**不删除,只备份后新增/替换** --- -## 重要更新(v1.5.0) +## 重要更新(v1.5.1) ### ⚠️ 问题文件已迁移到数据库 @@ -408,17 +408,7 @@ A: 检查是否执行了 migrate_goals_v3.py 迁移脚本,该脚本创建 stud [ ] 学员列表"暂无方案/问题"样式正常 [ ] PDF 水印功能正常(配置后导出可见) [ ] 数据统计页面正常显示 -``` -[ ] 容器状态:running -[ ] 服务响应:HTTP 200/302 -[ ] 数据库表完整:users, students, classes, student_problems, practice_plans, templates, problems, goals, goal_relations, student_goals, student_goal_evaluations -[ ] practice_plans 表有新字段:created_by, updated_by, updated_at, template_id, is_typical -[ ] 目标管理功能正常:创建目标、分配目标、评估目标 -[ ] 时间线正常显示阶段评估和最终评估 -[ ] API 配置正确 -[ ] 功能验证:能生成练习方案 -[ ] 方案列表支持删除 -[ ] 学员列表"暂无方案/问题"样式正常 +[ ] 导出PDF时 {student_goals} 正常显示学员目标 ``` --- @@ -427,7 +417,8 @@ A: 检查是否执行了 migrate_goals_v3.py 迁移脚本,该脚本创建 stud | 版本 | 日期 | 变更 | |------|------|------| -| v1.5.0 | 2026-04-27 | 数据统计页面(问题/级别分布可视化);PDF水印配置(可自定义文本);编辑页按钮吸底;侧边栏顺序调整;MySQL字体问题修复(Linux) | +| v1.5.1 | 2026-04-28 | PDF水印配置保存修复(3处漏改);{student_goals}占位符修复;移除目标导出时的"内容:"标签 | +| v1.5.0 | 2026-04-27 | 数据统计页面(问题/级别分布可视化);PDF水印配置(可自定义文本);编辑页按钮吸底;侧边栏顺序调整;Linux中文字体路径修复 | | v1.4.0 | 2026-04-27 | 典型方案采纳;推荐方案列表;方案编辑/详情页导航优化(bfcache处理);审计字段完善(created_by/updated_by/updated_at);方案列表支持删除;学员列表"暂无方案/问题"样式统一 | | v1.3.6 | 2026-04-24 | 方案详情导航优化;典型方案开关移至方案详情;方案列表显示问题级别+严重程度 | | v1.3.5 | 2026-04-24 | 班级班主任字段;用户姓名name字段;班级/学员/方案增加"我的"筛选 | @@ -442,5 +433,5 @@ A: 检查是否执行了 migrate_goals_v3.py 迁移脚本,该脚本创建 stud --- -> **最后更新**:2026-04-27 -> **更新原因**:v1.5.0 发布;数据统计页面;PDF水印;编辑页吸底按钮;Linux中文字体路径 +> **最后更新**:2026-04-28 +> **更新原因**:v1.5.1 补丁;PDF水印保存漏改;{student_goals}占位符修复;清理重复检查清单 diff --git a/temp_compare.py b/temp_compare.py new file mode 100644 index 0000000..1c6e4b6 --- /dev/null +++ b/temp_compare.py @@ -0,0 +1,58 @@ +import sqlite3, sys + +def get_templates(db_path): + conn = sqlite3.connect(db_path) + c = conn.cursor() + c.execute("SELECT id, name, type, sort_order FROM templates ORDER BY type, sort_order") + rows = c.fetchall() + conn.close() + return rows + +dev_path = "D:/F/NewI/opencode/daily-workspace/projects/青年钢琴集体课/练习方案系统/data/piano_plans.db" +prod_path = "D:/F/NewI/opencode/daily-workspace/projects/青年钢琴集体课/练习方案系统/temp_prod_piano.db" + +import shutil +shutil.copy("\\\\?\\UNC\\47.115.32.206\\ipc$\\tmp\\prod_piano.db", prod_path) + +dev_rows = get_templates(dev_path) +prod_rows = get_templates(prod_path) + +print("=== DEV TEMPLATES ===") +for r in dev_rows: + print(f"ID={r[0]} | {r[1]} | type={r[2]} | sort={r[3]}") + +print() +print("=== PROD TEMPLATES ===") +for r in prod_rows: + print(f"ID={r[0]} | {r[1]} | type={r[2]} | sort={r[3]}") + +print() +dev_ids = {r[0] for r in dev_rows} +prod_ids = {r[0] for r in prod_rows} +only_dev = dev_ids - prod_ids +only_prod = prod_ids - dev_ids +same_ids = dev_ids & prod_ids + +if only_dev: + print(f"=== ONLY IN DEV: IDs {only_dev} ===") + for r in dev_rows: + if r[0] in only_dev: + print(f" ID={r[0]} | {r[1]} | type={r[2]} | sort={r[3]}") +if only_prod: + print(f"=== ONLY IN PROD: IDs {only_prod} ===") + for r in prod_rows: + if r[0] in only_prod: + print(f" ID={r[0]} | {r[1]} | type={r[2]} | sort={r[3]}") +if same_ids: + print(f"=== IN BOTH (comparing) ===") + dev_map = {r[0]: r for r in dev_rows} + prod_map = {r[0]: r for r in prod_rows} + for i in sorted(same_ids): + d = dev_map[i] + p = prod_map[i] + if d != p: + print(f" ID={i}:") + print(f" DEV: name={d[1]} type={d[2]} sort={d[3]}") + print(f" PROD: name={p[1]} type={p[2]} sort={p[3]}") + else: + print(f" ID={i}: IDENTICAL") diff --git a/temp_compare_templates.py b/temp_compare_templates.py new file mode 100644 index 0000000..2db6397 --- /dev/null +++ b/temp_compare_templates.py @@ -0,0 +1,55 @@ +import sqlite3 + +def get_templates(db_path): + conn = sqlite3.connect(db_path) + c = conn.cursor() + c.execute("SELECT id, name, type, sort_order FROM templates ORDER BY type, sort_order") + rows = c.fetchall() + conn.close() + return rows + +dev_path = r"D:\F\NewI\opencode\daily-workspace\projects\青年钢琴集体课\练习方案系统\data\piano_plans.db" +prod_path = r"D:\F\NewI\opencode\daily-workspace\projects\青年钢琴集体课\练习方案系统\temp_prod.db" + +dev_rows = get_templates(dev_path) +prod_rows = get_templates(prod_path) + +print("=== DEV TEMPLATES ===") +for r in dev_rows: + print(f"ID={r[0]} | {r[1]} | type={r[2]} | sort={r[3]}") + +print() +print("=== PROD TEMPLATES ===") +for r in prod_rows: + print(f"ID={r[0]} | {r[1]} | type={r[2]} | sort={r[3]}") + +print() +dev_ids = {r[0] for r in dev_rows} +prod_ids = {r[0] for r in prod_rows} +only_dev = dev_ids - prod_ids +only_prod = prod_ids - dev_ids +same_ids = dev_ids & prod_ids + +if only_dev: + print(f"=== ONLY IN DEV: IDs {only_dev} ===") + for r in dev_rows: + if r[0] in only_dev: + print(f" ID={r[0]} | {r[1]} | type={r[2]} | sort={r[3]}") +if only_prod: + print(f"=== ONLY IN PROD: IDs {only_prod} ===") + for r in prod_rows: + if r[0] in only_prod: + print(f" ID={r[0]} | {r[1]} | type={r[2]} | sort={r[3]}") +if same_ids: + print(f"=== IN BOTH (comparing) ===") + dev_map = {r[0]: r for r in dev_rows} + prod_map = {r[0]: r for r in prod_rows} + for i in sorted(same_ids): + d = dev_map[i] + p = prod_map[i] + if d != p: + print(f" ID={i}:") + print(f" DEV: name={d[1]} type={d[2]} sort={d[3]}") + print(f" PROD: name={p[1]} type={p[2]} sort={p[3]}") + else: + print(f" ID={i}: IDENTICAL") diff --git a/temp_prod.db b/temp_prod.db new file mode 100644 index 0000000000000000000000000000000000000000..a4dbfcbf8cff71d34a4d70c83a171f3fd8c9a7d3 GIT binary patch literal 212992 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 literal 0 HcmV?d00001 diff --git a/temp_templates_compare.txt b/temp_templates_compare.txt new file mode 100644 index 0000000..be7da49 --- /dev/null +++ b/temp_templates_compare.txt @@ -0,0 +1,23 @@ +=== DEV TEMPLATES === +ID=3 | 简单文字版 | type=ai_prompt | sort=0 +ID=1 | 正式报告版 | type=ai_prompt | sort=1 +ID=4 | 报告导出模板(简洁版) | type=report | sort=0 +ID=2 | 报告导出模板 | type=report | sort=1 + +=== PROD TEMPLATES === +ID=1 | 正式报告版 | type=ai_prompt | sort=0 +ID=3 | 简单文字版 | type=ai_prompt | sort=1 +ID=4 | 报告导出模板(简洁版) | type=report | sort=0 +ID=2 | 报告导出模板(备份,勿用) | type=report | sort=1 + +=== COMPARISON === +DIFF ID=1: + DEV: name=正式报告版 type=ai_prompt sort=1 + PROD: name=正式报告版 type=ai_prompt sort=0 +DIFF ID=2: + DEV: name=报告导出模板 type=report sort=1 + PROD: name=报告导出模板(备份,勿用) type=report sort=1 +DIFF ID=3: + DEV: name=简单文字版 type=ai_prompt sort=0 + PROD: name=简单文字版 type=ai_prompt sort=1 +ID=4: IDENTICAL