# 📊 周报混合归档方案使用指南 ## 🎯 方案概述 **混合方案 = Markdown 文件(完整内容)+ SQLite 数据库(元数据索引)** ``` 每周周报生成 │ ├─→ Markdown 文件归档(weekly-reports/YYYY/) │ └─→ 人类可读、易编辑、Git 友好、长期保存 │ └─→ SQLite 数据库(weekly_reports.db) └─→ 快速查询、统计分析、月度/年度考核 ``` --- ## 📁 文件结构 ``` weekly-reports/ ├── README.md # 归档说明 ├── 使用指南.md # 详细教程 ├── 快速参考.md # 快速查阅 ├── 混合方案指南.md # 本文件 ├── sync_reports_db.py # 数据库同步脚本 ├── summarize_reports.py # Markdown 汇总工具 ├── weekly_reports.db # SQLite 数据库(自动生成) ├── 2026/ │ ├── 2026-W29.md # Markdown 周报 │ ├── 2026-W31-周报.md │ └── ... └── ... ``` --- ## 🚀 快速开始 ### 1. 生成周报(每周五) **方式一:通过对话(推荐)** ``` 你:生成本周周报 我:自动完成 Markdown 归档 + 数据库同步 ``` **方式二:手动运行脚本** ```bash cd /home/yangxuan/.openclaw/workspace-resume python3 send_weekly_report.py \ --project G5 \ --plain "项目名称:...\n主要任务:...\n..." \ --html "

...

" \ --date-range "2026-08-25 ~ 2026-08-29" ``` ### 2. 同步到数据库 ```bash cd weekly-reports # 同步所有周报 python3 sync_reports_db.py --all # 同步单个文件 python3 sync_reports_db.py --file 2026/2026-W35-周报.md # 同步指定周 python3 sync_reports_db.py --week 2026-W35 ``` ### 3. 查看统计信息 ```bash python3 sync_reports_db.py --stats ``` 输出示例: ``` 📊 周报统计信息 ============================================================ 📁 周报总数:52 周 📋 按项目统计: G5: 45 周,问题 8 周,平均字数 2800 G6: 7 周,问题 1 周,平均字数 3200 📅 最近 5 周: ✅ 2026-W34 (2026-08-18~2026-08-22) G5 - 库存预警模块优化 ⚠️ 2026-W33 (2026-08-11~2026-08-15) G5 - 生产领料功能测试 ... ⚠️ 存在问题周报:9 周 ============================================================ ``` --- ## 📋 数据库查询示例 ### 直接查询 SQLite ```bash cd weekly-reports # 进入 SQLite 命令行 sqlite3 weekly_reports.db ``` ### 常用 SQL 查询 ```sql -- 1. 查询某年所有周报 SELECT * FROM weekly_reports WHERE year = 2026 ORDER BY week_number; -- 2. 查询某月所有周报 SELECT * FROM weekly_reports WHERE start_date >= '2026-08-01' AND start_date <= '2026-08-31' ORDER BY start_date; -- 3. 统计某项目全年工作量 SELECT project, COUNT(*) as weeks_count, SUM(word_count) as total_words, AVG(word_count) as avg_words FROM weekly_reports WHERE year = 2026 GROUP BY project; -- 4. 查询存在问题的周报 SELECT year, week_number, start_date, end_date, main_task FROM weekly_reports WHERE has_problems = 1 ORDER BY start_date DESC; -- 5. 查询某周每日工作明细 SELECT d.work_date, d.day_of_week, d.work_items FROM weekly_report_daily d JOIN weekly_reports r ON d.report_id = r.id WHERE r.year = 2026 AND r.week_number = 35 ORDER BY d.work_date; -- 6. 月度统计(用于考核) SELECT strftime('%Y-%m', start_date) as month, project, COUNT(*) as weeks_count, SUM(has_problems) as problem_weeks, AVG(word_count) as avg_words FROM weekly_reports WHERE start_date >= '2026-08-01' AND start_date <= '2026-08-31' GROUP BY strftime('%Y-%m', start_date), project; -- 7. 查询问题记录 SELECT p.problem_description, r.start_date, r.project FROM weekly_report_problems p JOIN weekly_reports r ON p.report_id = r.id ORDER BY r.start_date DESC LIMIT 10; ``` ### 命令行一键查询 ```bash # 查询 8 月份所有周报 sqlite3 weekly_reports.db \ "SELECT year, week_number, start_date, project, main_task \ FROM weekly_reports \ WHERE start_date >= '2026-08-01' AND start_date <= '2026-08-31';" # 统计全年工作量 sqlite3 weekly_reports.db \ "SELECT project, COUNT(*), SUM(word_count) \ FROM weekly_reports \ WHERE year = 2026 \ GROUP BY project;" ``` --- ## 🔍 两种查询方式对比 | 场景 | 推荐方式 | 原因 | |------|---------|------| | **查看完整周报** | Markdown 文件 | 人类可读,格式完整 | | **快速统计** | SQLite 查询 | SQL 强大,秒出结果 | | **生成考核报告** | 两者结合 | Markdown 提取内容 + SQL 统计数据 | | **搜索关键词** | grep/Markdown | 简单直接 | | **跨年度分析** | SQLite 查询 | 聚合分析方便 | | **编辑修改** | Markdown 文件 | 直接编辑文本 | --- ## 📊 月度/年度考核流程 ### 月度考核(以 8 月为例) **步骤 1:SQL 统计概览** ```bash cd weekly-reports sqlite3 weekly_reports.db <= '2026-08-01' AND start_date <= '2026-08-31' GROUP BY project; EOF ``` **步骤 2:Markdown 汇总详细内容** ```bash python3 summarize_reports.py --month 2026-08 # 生成 summary_20260831_174000.md ``` **步骤 3:整理考核报告** - 使用 SQL 统计数据(工作量、周数等) - 使用 Markdown 汇总的工作内容详情 - 组合成完整的月度考核报告 ### 年度考核 ```bash # SQL 统计全年概览 sqlite3 weekly_reports.db < weekly_reports_backup.sql # 只导出元数据表 sqlite3 weekly_reports.db \ ".dump weekly_reports" > weekly_reports_meta.sql ``` ### 恢复数据库 ```bash # 从备份恢复 sqlite3 weekly_reports.db < weekly_reports_backup.sql # 或重新同步所有 Markdown 文件 python3 sync_reports_db.py --all ``` --- ## 📈 高级用法 ### 1. 自动同步(集成到周报脚本) 修改 `send_weekly_report.py`,在归档后自动调用同步脚本: ```python # 在 archive_report() 函数末尾添加 import subprocess subprocess.run(['python3', 'weekly-reports/sync_reports_db.py', '--file', str(filepath)], cwd='/home/yangxuan/.openclaw/workspace-resume') ``` ### 2. 生成可视化报表 使用 Python + matplotlib 生成工作量趋势图: ```python import sqlite3 import matplotlib.pyplot as plt conn = sqlite3.connect('weekly_reports.db') cursor = conn.cursor() cursor.execute(''' SELECT start_date, word_count FROM weekly_reports WHERE year = 2026 ORDER BY start_date ''') dates, counts = zip(*cursor.fetchall()) plt.figure(figsize=(12, 6)) plt.plot(dates, counts, marker='o') plt.title('2026 年周报字数趋势') plt.xlabel('日期') plt.ylabel('字数') plt.xticks(rotation=45) plt.tight_layout() plt.savefig('workload_trend.png') ``` ### 3. 导出为 Excel ```python import sqlite3 import pandas as pd conn = sqlite3.connect('weekly_reports.db') # 导出周报元数据 df = pd.read_sql_query(''' SELECT year, week_number, start_date, end_date, project, main_task, has_problems, word_count FROM weekly_reports WHERE year = 2026 ORDER BY week_number ''', conn) df.to_excel('2026 年周报汇总.xlsx', index=False) ``` --- ## ❓ 常见问题 ### Q: 为什么用 SQLite 而不是 MySQL? A: - ✅ SQLite 无需服务器,开箱即用 - ✅ 文件小(< 100KB),易于备份 - ✅ 足够支持个人周报查询需求 - ✅ 未来可轻松迁移到 MySQL(表结构相同) ### Q: 数据库和 Markdown 内容不一致怎么办? A: 重新同步即可: ```bash python3 sync_reports_db.py --all ``` ### Q: 可以删除数据库吗? A: 可以。数据库只是索引,删除后可从 Markdown 文件重新生成: ```bash rm weekly_reports.db python3 sync_reports_db.py --all ``` ### Q: 如何迁移到 MySQL? A: 当 MariaDB 服务恢复后: 1. 创建表结构:`mysql -u root -p resume < db/weekly_reports_schema.sql` 2. 使用 MySQL 版本的同步脚本:`sync_reports_to_db.py` --- ## 📞 需要帮助? 直接告诉我: - "生成本周周报" - "查看 8 月份统计" - "汇总第三季度工作" - "生成年终考核报告" 我会帮你处理! --- *最后更新:2026-08-27* *数据库位置:`weekly-reports/weekly_reports.db`*