# WeekBee **Repository Path**: reginx/week-bee ## Basic Information - **Project Name**: WeekBee - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-26 - **Last Updated**: 2026-05-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # WeekBee - 团队周报采集发送工具 一个基于 Go 语言的周报采集与发送程序,从 Redmine Activity Atom Feed 获取团队成员最近10天的动态,自动筛选本周工作内容,生成 Excel 周报表并通过 SMTP 发送邮件。 ## 功能特性 - **Atom Feed 解析**: 从多个 Redmine Activity Atom URL(不同 user_id)获取 XML 数据 - **活动类型识别**: 自动识别活动类型 - 创建问题 / 关闭问题 / 解决问题 - 代码提交 / 问题更新 - **时效性分析**: 对关闭的问题,判断是否按时完成或延迟解决 - **Git 提交地址提取**: 从代码提交活动中解析 Git 仓库地址和 commit hash - **Excel 报表生成**: 每人对应独立的 Sheet,包含: - 人员姓名 | 日期 | 活动类型 | 工作内容摘要 | Redmine链接 | Git提交地址 | 时效状态 - **时效状态颜色标识**: 按时(绿色) / 延迟(红色) - **SMTP 邮件发送**: HTML 正文 + 统计摘要 + Excel 附件 - **双模式运行**: 手动执行 / 定时任务 ## 快速开始 ### 编译 ```bash go build -o week-bee . ``` ### 使用示例 ```bash # 只生成 Excel(不发送邮件) ./week-bee --dry-run # 执行并发送邮件 ./week-bee --smtp-user xxx@qq.com --smtp-pass your_auth_code --to boss@example.com # 指定 Git 基础 URL(用于组装 commit 链接) ./week-bee --git-url http://git.example.com --dry-run # 完整参数示例 ./week-bee \ --mode run \ --output ./report.xlsx \ --smtp-user noreply@example.com \ --smtp-pass your_password \ --smtp-host smtp.example.com \ --smtp-port 465 \ --to recipient1@example.com,recipient2@example.com \ --git-url http://gitlab.example.com ``` ## 命令行参数 | 参数 | 说明 | |------|------| | `-m, --mode` | 运行模式: `run`(默认) 或 `schedule`(定时) | | `-s, --schedule` | 定时表达式 (如 `FRI 17:00`) | | `-o, --output` | Excel 输出路径 (默认: `周报_时间戳.xlsx`) | | `--smtp-user` | SMTP 发件邮箱 | | `--smtp-pass` | SMTP 授权码/密码 | | `--smtp-host` | SMTP 服务器地址 | | `--smtp-port` | SMTP 端口 (465/587) | | `--to` | 收件人列表(逗号分隔) | | `--git-url` | Git Web 基础 URL | | `--dry-run` | 只生成Excel不发送邮件 | | `-h, --help` | 显示帮助信息 | ## 项目结构 ``` week-bee/ ├── main.go # CLI入口,主流程编排 ├── config/config.go # 配置管理(SMTP、用户URL、Git等) ├── fetcher/fetcher.go # HTTP数据抓取,并发请求 ├── parser/ │ ├── atom.go # Atom XML 结构体定义与解析 │ ├── classifier.go # 活动类型识别(正则匹配关键词) │ ├── analyzer.go # 时效性分析 │ └── filter.go # 本周日期范围计算与过滤 ├── generator/excel.go # Excel文件生成(多人多Sheet) ├── mailer/ │ ├── smtp.go # SMTP邮件发送 │ └── utils.go # 邮件工具函数 └── go.mod # Go module 定义 ``` ## 配置说明 ### 用户配置 用户列表硬编码在 `config/config.go` 中,修改 `DefaultAppConfig()` 即可: ```go Users: []UserConfig{ { UserID: 5, Name: "张三", // 修改为中文名 URL: "http://your-redmine/activity.atom?key=...&user_id=5", }, // ...更多用户 }, ``` ### SMTP 配置 ```go SMTP: SMTPConfig{ Host: "smtp.qq.com", // 或企业邮箱 SMTP Port: 465, // SSL端口 User: "xxx@qq.com", Password: "授权码", }, ``` ### Git 配置 用于组装可访问的 Git 提交链接: ```go Git: GitConfig{ BaseURL: "http://git.example.com", URLFormat: "{base_url}/{repo}/-/commit/{hash}", // GitLab 格式 }, ``` 支持的 URL 格式模板变量: - `{base_url}` - Git 基础地址 - `{repo}` - 仓库名称 - `{hash}` - Commit hash ## Excel 输出示意 每个用户的 Sheet 包含以下列: | 人员姓名 | 日期 | 活动类型 | 工作内容摘要 | Redmine链接 | Git提交地址 | 时效状态 | |---------|------|---------|-------------|------------|-----------|---------| | 张三 | 2025-05-20 | 创建问题 | #1234 新功能开发 | [链接] | - | - | | 张三 | 2025-05-22 | 关闭问题 | #1234 已解决 | [链接] | - | ✅按时完成 | | 李四 | 2025-05-21 | 代码提交 | 提交了 project-a 的 revision abc123 | [链接] | [commit链接] | - | ## 邮件示例 邮件正文为 HTML 格式,包含: - 报告周期和生成时间 - 总活动数统计(按时/延迟数量) - 各成员详细统计表(活动总数、创建/关闭问题数、提交数、按时率) - Excel 文件附件 ## 依赖 - Go 1.24+ - [excelize/v2](https://github.com/xuri/excelize) - Excel 文件操作 - Go 标准库: encoding/xml, net/http, net/smtp ## License MIT