目标:基于飞书开放平台开发一个企业自建应用,一键读取指定多维表格中的报名数据,按规则自动完成排班并回填到表格。
- 维修部
- 研发部
- 行政部
- 流媒部
- 设计部
- 部长团:会长、副会长、会长助理、各部门部长
- 干事:每个干事可从 5 个部门中选择任意个数的部门加入(即允许多部门身份)
- 技术员
- 大修是持续一天的活动,通常时间为 8:00 – 18:00。
- 每次活动开始前,通过飞书问卷收集报名信息:
- 干事需提交:姓名、性别、部门、报名时间段(可多选)等
- 技术员需提交:姓名、报名时间段(可多选)等
- 需分别为 干事 和 技术员 完成排班。
| 序号 | 时间段 |
|---|---|
| 1 | 8:00 – 10:00 |
| 2 | 10:00 – 12:00 |
| 3 | 12:00 – 14:00 |
| 4 | 14:00 – 16:00 |
| 5 | 16:00 – 18:00 |
| — | 暂定(无需安排) |
- 每个干事可报名 1 ~ 5 个时间段,但最终只能被安排到其中一个时间段值班。
| 点位 | 所需人数 | 备注 |
|---|---|---|
| 1 号位 | 1 人 | 优先挑选"部门"字段含 维修部 的干事 |
| 4 号位 | 1 人 | 优先挑选"部门"字段含 维修部 的干事 |
| 5 号位 | 1 人 | |
| 6 号位 | 1 人 | |
| 机动位 | 最多 2 人 | |
| 学习位 | 不限制人数 |
- 点位优先级:优先排满 1/4/5/6 号位 → 其次机动位(≤2 人) → 最后学习位(无上限)
- 部门优先级:1 号位、4 号位优先安排"部门"字段包含 维修部 的干事
- 首末时段规则(首段默认 8:00-10:00,末段默认 16:00-18:00,可根据实际调整):
- 优先安排性别为男的干事
- 尽量保证每个首/末时段安排 ≥ 6 名干事
| 序号 | 时间段 |
|---|---|
| 1 | 9:00 – 11:00 |
| 2 | 11:00 – 13:00 |
| 3 | 13:00 – 15:00 |
| 4 | 15:00 – 17:00 |
- 每个技术员可报名 1 ~ 5 个时间段(注:实际最多 4 个),最终只能被安排到其中一个时间段值班。
- 技术员不涉及点位分配。
- 飞书开放平台 企业自建应用。
- 用户一键触发后,应用读取指定飞书多维表格中的数据表,根据用户选择执行对应排班逻辑,并将结果回填到表格中。
用户打开应用
├─ 选择要处理的飞书多维表格 / 数据表(当前用户需具备管理者权限)
├─ 选择排班类型:
│ ├─ [为干事排班] → 回填「安排时间段」「安排位置」两个字段
│ └─ [为技术员排班] → 回填「安排时间段」一个字段
└─ 应用自动执行排班并写回结果
凭证通过 .env 环境变量注入(见 .env.example 示例),不在代码与文档中明文出现:
- App ID:见
.env中的FEISHU_APP_ID - App Secret:见
.env中的FEISHU_APP_SECRET
⚠️ 安全提醒:App Secret 是敏感凭证,请仅通过环境变量 / 配置文件(且加入 .gitignore)读取,不要硬编码或提交到公开仓库。若 Secret 疑似泄露,请在飞书开发者后台立即重置。
- 飞书多维表格:读取、复制、创建、修改
- 姓名、性别、部门、报名时间段(多选)
- 安排时间段(由脚本回填)
- 安排位置(由脚本回填)
- 姓名、报名时间段(多选)
- 安排时间段(由脚本回填)
以下事项建议在脚本开发时与使用者进一步对齐:
- 字段名精确命名:上述字段名是否与实际多维表格中的字段名完全一致?(飞书 SDK 按字段名读写) 答:需要进一步确认
- 首/末时段的实际判定:是固定 8:00-10:00 和 16:00-18:00,还是从当次活动实际启用的时段中取首尾? 答:从当次活动实际启用的时段中取首尾?
- 冲突处理:当某时段报名人数不足以排满 1/4/5/6 号位时的降级策略。
- 维修部偏好的强度:是"无维修部干事则空缺"还是"无维修部干事则用其他部门顶替"?(当前倾向后者)
- 末时段 ≥6 人是硬性要求还是尽力而为:当总报名人数不足时的处理。 答:尽力而为
- 重复排班防护:若"安排时间段/安排位置"字段已有值,是覆盖还是跳过? 答:跳过
- 触发方式:飞书侧的触发入口(机器人指令 / 网页应用 / 自定义工作流 / 卡片按钮等)。 答:
- 输出与日志:是否需要将排班摘要(各时段人数、缺口、特殊情况)输出到某处便于复核。