153 lines
7.1 KiB
Markdown
153 lines
7.1 KiB
Markdown
# TOOLS.md - 本地环境笔记
|
||
|
||
技能定义工具怎么用;本文件记录**你专属的环境配置**(邮箱、脚本、路径等)。
|
||
|
||
## 周报邮件配置(IMAP 存草稿)
|
||
|
||
- **协议**:IMAP over SSL
|
||
- **服务器**:`imap.mxhichina.com:993`
|
||
- **账号**:`yangxuan@witsoft.cn`
|
||
- **密码**:存于 `/home/yangxuan/.openclaw/.env`(键 `WITSOFT_IMAP_PASSWORD`)
|
||
- **草稿箱文件夹**:`"&g0l6Pw-"`(IMAP 编码名)
|
||
- **用途**:周报脚本只把邮件**存入草稿箱**,不真正发送;用户需到钉钉邮箱草稿箱确认后手动发送
|
||
|
||
## 周报脚本
|
||
|
||
- **路径**:`/home/yangxuan/.openclaw/workspace-resume/send_weekly_report.py`
|
||
- **功能**(`send_to_drafts(..., archive=True)` 默认归档):
|
||
- 存入钉邮草稿箱(用于发送)
|
||
- **自动归档 Markdown** 到 `weekly-reports/YYYY/YYYY-Www-周报.md`(长期保存,`archive_report()` 完成)
|
||
- **同步到 MySQL resume 库**(`sync_to_mysql()`,月度/年度总结数据源;`--no-mysql` 跳过)
|
||
- **脚本本身不写 SQLite**;如需 SQLite 入库,用 `sync_reports_db.py` 或 `import_md_to_db.py` 手动同步
|
||
- **函数**:`send_to_drafts(plain_body, html_body, date_range, project="G5", archive=True)`
|
||
- **读取 .env**:脚本自动从 `.env` 读取账号密码,接口函数入参无需传密码
|
||
- **收件人**:刘强 liuqiang@witsoft.cn(主送)
|
||
- **抄送**:chenm@witsoft.cn, zengli@witsoft.cn, yuanq@witsoft.cn
|
||
- **命令行用法**:
|
||
```bash
|
||
python3 send_weekly_report.py \
|
||
--project G5 \
|
||
--plain "项目名称:..." \
|
||
--html "<p>...</p>" \
|
||
--date-range "2026-08-25 ~ 2026-08-29"
|
||
```
|
||
|
||
## 周报汇总工具
|
||
|
||
- **路径**:`/home/yangxuan/.openclaw/workspace-resume/weekly-reports/summarize_reports.py`
|
||
- **用途**:从归档的周报中提取指定时间范围的工作内容,用于月度/年度考核
|
||
- **用法**:
|
||
```bash
|
||
cd weekly-reports
|
||
|
||
# 按月汇总
|
||
python3 summarize_reports.py --month 2026-07
|
||
|
||
# 按年汇总
|
||
python3 summarize_reports.py --year 2026
|
||
|
||
# 自定义范围
|
||
python3 summarize_reports.py --range 2026-07-01 2026-09-30
|
||
```
|
||
- **输出**:生成 `summary_YYYYMMDD_HHMMSS.md` 汇总报告
|
||
|
||
## 周报数据库(混合方案)
|
||
|
||
- **数据库**:`weekly-reports/weekly_reports.db`(SQLite)
|
||
- **同步脚本**:`weekly-reports/sync_reports_db.py`
|
||
- **用途**:存储周报元数据,支持快速查询和统计
|
||
- **用法**:
|
||
```bash
|
||
cd weekly-reports
|
||
|
||
# 同步所有周报
|
||
python3 sync_reports_db.py --all
|
||
|
||
# 查看统计信息
|
||
python3 sync_reports_db.py --stats
|
||
|
||
# SQL 查询
|
||
sqlite3 weekly_reports.db "SELECT * FROM weekly_reports WHERE year = 2026;"
|
||
```
|
||
- **表结构**:
|
||
- `weekly_reports` - 周报元数据(年份、周数、项目、主要任务等)
|
||
- `weekly_report_daily` - 每日工作明细
|
||
- `weekly_report_problems` - 问题记录
|
||
- **备份**:数据库文件随工作空间一起备份,或导出为 SQL
|
||
|
||
## 周报归档目录
|
||
|
||
- **位置**:`/home/yangxuan/.openclaw/workspace-resume/weekly-reports/`
|
||
- **结构**:
|
||
- `2025-XX/` - 2025 年历史周报(旧格式 .txt)
|
||
- `2026/` - 2026 年起周报(新格式 .md,按周归档)
|
||
- `README.md` - 归档说明
|
||
- `使用指南.md` - 详细教程
|
||
- `快速参考.md` - 快速参考卡片
|
||
- `混合方案指南.md` - 混合方案说明
|
||
- **命名格式**:`YYYY-Www-周报.md`(如 `2026-W31-周报.md`)
|
||
|
||
## MySQL 周报数据中枢(2026-08-27 建立)
|
||
|
||
方案 A:**SQLite 做本地归档,MySQL resume 库做统一数据中枢**(供月度/年度总结、OKR 分析)。
|
||
|
||
- **MySQL 连接**:`127.0.0.1:3306`,用户 `root`,库 `resume`,密码存 `.env` 键 `MYSQL_PWD`
|
||
- **三张周报表**(在 `resume` 库):
|
||
- `weekly_reports` — 主表(year、week_number、project、start_date/end_date、main_task、has_problems)
|
||
- `weekly_report_daily` — 每日明细(report_id、day_of_week、work_date、work_items)
|
||
- `weekly_report_problems` — 问题记录(report_id、problem_description、status)
|
||
- **写入入口**:
|
||
- `send_to_drafts()` 默认同步(`sync_to_mysql`),`--no-mysql` 跳过
|
||
- 迁移补写:`weekly-reports/migrate_to_mysql.py`(SQLite → MySQL 全量,`--dry-run` 预览)
|
||
- **月度/年度总结查询示例**:
|
||
```sql
|
||
-- 月度
|
||
SELECT * FROM resume.weekly_reports WHERE start_date BETWEEN '2026-07-01' AND '2026-07-31';
|
||
-- 年度
|
||
SELECT week_number, main_task FROM resume.weekly_reports WHERE year=2026 ORDER BY week_number;
|
||
```
|
||
- **注意**:周报表在业务库 resume 中,勿与简历业务表(resumes、company_* 等)混用;二者用途不同
|
||
|
||
## 周报邮件 eml 解析归档工具(2026-08-27 添加)
|
||
|
||
用于从下载的钉邮周报 eml 文件批量补全归档缺失周报。
|
||
|
||
- **eml 所在目录**:`/home/yangxuan/.openclaw/media/inbound/`(附件上传后自动落盘)
|
||
- **解析脚本**:`weekly-reports/parse_eml_to_md.py` —— 读取 inbound 下所有 .eml,解码 base64 正文,生成标准格式 `2026/2026-Www-周报.md`
|
||
- **入库脚本**:`weekly-reports/import_md_to_db.py` —— 读生成的 Markdown 重建 SQLite 数据(主表+每日明细+问题),自动覆盖旧占位记录
|
||
- **用法**:
|
||
```bash
|
||
cd weekly-reports
|
||
python3 parse_eml_to_md.py # eml → Markdown
|
||
python3 import_md_to_db.py # Markdown → SQLite
|
||
```
|
||
- **解析逻辑要点**:
|
||
- 邮件为 multipart,取 text/plain 部分 base64 解码
|
||
- 日期行支持 `周一(2026-06-08)`/`周一(06-08)`/带 📅 emoji 前缀
|
||
- 列表项 `*` 与文字可能被拆两行,已处理
|
||
- 问题区仅在「存在问题」标题后提取,`无/暂无` 不算问题;`下周计划` 等小标题退出问题区
|
||
- 项目名据内容自动判 G5/G6
|
||
- **注意**:脚本会**全量重建 2026 年数据库**,覆盖旧占位记录,别在有未归档数据时误跑
|
||
|
||
## OKR 绩效归档工具(2026-08-27 添加)
|
||
|
||
用于将研究院-维云智造 OKR 绩效 Excel(杨轩)解析归档到 MySQL resume 库。
|
||
|
||
- **脚本**:`okr/parse_okr_to_mysql.py`
|
||
- **Excel 位置**:`/home/yangxuan/.openclaw/media/inbound/*OKR*.xlsx`(或命令行 `--file` 指定路径)
|
||
- **用法**:
|
||
```bash
|
||
cd okr
|
||
python3 parse_okr_to_mysql.py --month 202601 # 归档指定月
|
||
python3 parse_okr_to_mysql.py --file <xlsx> --dry-run # 指定文件+预览不写入
|
||
```
|
||
- **表**(MySQL resume 库):`okr_monthly_records`(主)+ `okr_objectives`(目标明细)
|
||
- **支持新旧两种模板**(自动识别):
|
||
- 旧模板(202601 等):多 sheet,每个 sheet 一个考核月;表头行4,目标行5起 6 项,月度评价在 J12/B12
|
||
- 新模板(8月起):单 sheet `OKR考核`;表头行5-6,目标行8起(跳过行7示例)5 项,B序号/C任务/D关键结果/E完成/G评分/I权重/J得分;人员信息在 B3;跨月周期取考核期末(如 7月27日-8月27日→202608);月度评价字段上级可能未填(NULL)
|
||
- **Excel 结构(旧模板)**:一个文件多 sheet(202511/202512/202601/...),每个 sheet 一个考核月## 技能
|
||
|
||
## 技能
|
||
|
||
- **周报技能**:`skills/weekly-report-g5/SKILL.md`
|