# 飞书每日工作汇报系统 这是一个轻量的日报提交和浏览工具。员工通过飞书机器人提醒进入填写页提交日报,管理者在浏览页查看所有记录和未提交名单。 ## 本地启动 本项目只使用 Python 标准库,不需要安装第三方依赖。 ```bash python -m daily_report.web ``` 默认地址: - 提交页:http://localhost:8787/submit - 管理页:http://localhost:8787/manager ## 配置 复制 `.env.example` 为 `.env`,或直接设置环境变量: - `PORT`:服务端口,默认 `8787` - `BASE_URL`:飞书消息里使用的外部访问地址 - `DATABASE_PATH`:SQLite 数据库路径 - `EMPLOYEE_SEED_PATH`:员工名单 JSON 路径 - `WORKDAY_CALENDAR_PATH`:国家法定工作日历 JSON 路径 - `FEISHU_WEBHOOK_URL`:飞书自定义机器人 Webhook - `FEISHU_WEBHOOK_SECRET`:预留字段,后续用于签名校验 - `FEISHU_APP_ID`:飞书企业自建应用的 App ID,用于自动识别填写人 - `FEISHU_APP_SECRET`:飞书企业自建应用的 App Secret - `SESSION_SECRET`:本系统登录 Cookie 签名密钥,可以填一串自己生成的随机字符 ## 员工名单 第一版通过 `data/employees.json` 维护员工名单。每个员工需要: - `feishu_user_id` - `name` - `department` - `manager` - `active` 修改员工名单后,重启服务会自动同步到 SQLite。 ## 飞书机器人 在飞书群添加自定义机器人后,将 Webhook 地址配置到 `FEISHU_WEBHOOK_URL`。 手动发送提醒: ```bash curl -X POST http://localhost:8787/api/robot/send-reminder ``` 手动发送汇总: ```bash curl -X POST http://localhost:8787/api/robot/send-summary -H "content-type: application/json" -d "{\"date\":\"2026-05-07\"}" ``` ## 飞书自动识别填写人 要让员工打开填写页时自动识别身份,需要使用飞书企业自建应用。 在 `.env` 中填写: ```dotenv FEISHU_APP_ID=你的 App ID FEISHU_APP_SECRET=你的 App Secret SESSION_SECRET=任意一串较长随机字符 ``` 然后在飞书开放平台应用后台配置网页应用重定向地址: ```text 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` 必须是员工能打开的地址。 安装任务: ```powershell Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass .\scripts\install-windows-tasks.ps1 ``` 也可以直接双击: ```text install-tasks.bat ``` 如果你的 Python 不在默认路径,可以指定: ```powershell .\scripts\install-windows-tasks.ps1 -PythonPath "C:\Path\To\python.exe" ``` 手动测试提醒: ```powershell python -m daily_report.scheduled reminder ``` 手动测试汇总: ```powershell python -m daily_report.scheduled summary ``` 卸载任务: ```powershell .\scripts\uninstall-windows-tasks.ps1 ``` 也可以直接双击: ```text uninstall-tasks.bat ``` ## 验证 ```bash 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 ```