飞书每日工作汇报系统
这是一个轻量的日报提交和浏览工具。员工通过飞书机器人提醒进入填写页提交日报,管理者在浏览页查看所有记录和未提交名单。
本地启动
本项目只使用 Python 标准库,不需要安装第三方依赖。
python -m daily_report.web
默认地址:
配置
复制 .env.example 为 .env,或直接设置环境变量:
PORT:服务端口,默认8787BASE_URL:飞书消息里使用的外部访问地址DATABASE_PATH:SQLite 数据库路径EMPLOYEE_SEED_PATH:员工名单 JSON 路径WORKDAY_CALENDAR_PATH:国家法定工作日历 JSON 路径FEISHU_WEBHOOK_URL:飞书自定义机器人 WebhookFEISHU_WEBHOOK_SECRET:预留字段,后续用于签名校验FEISHU_APP_ID:飞书企业自建应用的 App ID,用于自动识别填写人FEISHU_APP_SECRET:飞书企业自建应用的 App SecretSESSION_SECRET:本系统登录 Cookie 签名密钥,可以填一串自己生成的随机字符
员工名单
第一版通过 data/employees.json 维护员工名单。每个员工需要:
feishu_user_idnamedepartmentmanageractive
修改员工名单后,重启服务会自动同步到 SQLite。
飞书机器人
在飞书群添加自定义机器人后,将 Webhook 地址配置到 FEISHU_WEBHOOK_URL。
手动发送提醒:
curl -X POST http://localhost:8787/api/robot/send-reminder
手动发送汇总:
curl -X POST http://localhost:8787/api/robot/send-summary -H "content-type: application/json" -d "{\"date\":\"2026-05-07\"}"
飞书自动识别填写人
要让员工打开填写页时自动识别身份,需要使用飞书企业自建应用。
在 .env 中填写:
FEISHU_APP_ID=你的 App ID
FEISHU_APP_SECRET=你的 App Secret
SESSION_SECRET=任意一串较长随机字符
然后在飞书开放平台应用后台配置网页应用重定向地址:
http://你的可访问地址:8787/auth/feishu/callback
这个地址里的域名和端口要与 BASE_URL 一致。配置后重启本系统,员工打开 /submit 会先跳转到飞书授权,授权完成后自动回到填写页,并自动带出当前填写人。
如果暂时不填 FEISHU_APP_ID 和 FEISHU_APP_SECRET,系统会退回手动填写员工 ID 的模式。
Windows 任务计划
本项目提供 Windows 任务计划脚本。任务每天触发,但发送前会读取 data/workday-calendar.json,只在国家法定工作日发送:
- 工作日 18:00:日报填写提醒
- 工作日 18:50:只提醒仍未提交的人
- 工作日 19:00:日报提交汇总
这意味着:
- 周一到周五如果是法定假期,不发送。
- 周六、周日如果是调休补班,会发送。
任务计划会直接运行 Python 模块发送飞书消息,不要求 Web 服务正在运行。但 BASE_URL 必须是员工能打开的地址。
安装任务:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\scripts\install-windows-tasks.ps1
也可以直接双击:
install-tasks.bat
如果你的 Python 不在默认路径,可以指定:
.\scripts\install-windows-tasks.ps1 -PythonPath "C:\Path\To\python.exe"
手动测试提醒:
python -m daily_report.scheduled reminder
手动测试汇总:
python -m daily_report.scheduled summary
卸载任务:
.\scripts\uninstall-windows-tasks.ps1
也可以直接双击:
uninstall-tasks.bat
验证
python -m unittest discover -s tests
python -m py_compile daily_report/config.py daily_report/db.py daily_report/report_service.py daily_report/robot_service.py daily_report/scheduled.py daily_report/web.py daily_report/workday.py
Description
Languages
Python
82.4%
CSS
6.6%
JavaScript
3.9%
Batchfile
2.9%
PowerShell
2.4%
Other
1.8%