Skip to content

Latest commit

 

History

History
151 lines (105 loc) · 5.7 KB

File metadata and controls

151 lines (105 loc) · 5.7 KB

飞扬俱乐部大修活动自动化排班脚本 —— 需求说明

目标:基于飞书开放平台开发一个企业自建应用,一键读取指定多维表格中的报名数据,按规则自动完成排班并回填到表格。


一、俱乐部组织结构

1. 部门(共 5 个)

  • 维修部
  • 研发部
  • 行政部
  • 流媒部
  • 设计部

2. 身份(共 3 种)

  • 部长团:会长、副会长、会长助理、各部门部长
  • 干事:每个干事可从 5 个部门中选择任意个数的部门加入(即允许多部门身份)
  • 技术员

二、大修活动简介

  • 大修是持续一天的活动,通常时间为 8:00 – 18:00
  • 每次活动开始前,通过飞书问卷收集报名信息:
    • 干事需提交:姓名、性别、部门、报名时间段(可多选)等
    • 技术员需提交:姓名、报名时间段(可多选)等
  • 需分别为 干事技术员 完成排班。

三、排班规则

1. 干事排班规则

1.1 可选报名时间段(共 5 个 + 1 个暂定)

序号 时间段
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.2 每个时间段的点位设置(共 6 种)

点位 所需人数 备注
1 号位 1 人 优先挑选"部门"字段含 维修部 的干事
4 号位 1 人 优先挑选"部门"字段含 维修部 的干事
5 号位 1 人
6 号位 1 人
机动位 最多 2 人
学习位 不限制人数

1.3 排班优先级规则

  1. 点位优先级:优先排满 1/4/5/6 号位 → 其次机动位(≤2 人) → 最后学习位(无上限)
  2. 部门优先级:1 号位、4 号位优先安排"部门"字段包含 维修部 的干事
  3. 首末时段规则(首段默认 8:00-10:00,末段默认 16:00-18:00,可根据实际调整):
    • 优先安排性别为男的干事
    • 尽量保证每个首/末时段安排 ≥ 6 名干事

2. 技术员排班规则

2.1 可选报名时间段(共 4 个)

序号 时间段
1 9:00 – 11:00
2 11:00 – 13:00
3 13:00 – 15:00
4 15:00 – 17:00
  • 每个技术员可报名 1 ~ 5 个时间段(注:实际最多 4 个),最终只能被安排到其中一个时间段值班。
  • 技术员不涉及点位分配

四、功能需求

1. 形态

  • 飞书开放平台 企业自建应用
  • 用户一键触发后,应用读取指定飞书多维表格中的数据表,根据用户选择执行对应排班逻辑,并将结果回填到表格中。

2. 交互流程

用户打开应用
  ├─ 选择要处理的飞书多维表格 / 数据表(当前用户需具备管理者权限)
  ├─ 选择排班类型:
  │   ├─ [为干事排班]   → 回填「安排时间段」「安排位置」两个字段
  │   └─ [为技术员排班] → 回填「安排时间段」一个字段
  └─ 应用自动执行排班并写回结果

3. 飞书应用凭证

凭证通过 .env 环境变量注入(见 .env.example 示例),不在代码与文档中明文出现:

  • App ID:见 .env 中的 FEISHU_APP_ID
  • App Secret:见 .env 中的 FEISHU_APP_SECRET

⚠️ 安全提醒:App Secret 是敏感凭证,请通过环境变量 / 配置文件(且加入 .gitignore)读取,不要硬编码或提交到公开仓库。若 Secret 疑似泄露,请在飞书开发者后台立即重置。

4. 已开通权限

  • 飞书多维表格:读取、复制、创建、修改

5. 表格字段约定

干事表(需预留字段)

  • 姓名、性别、部门、报名时间段(多选)
  • 安排时间段(由脚本回填)
  • 安排位置(由脚本回填)

技术员表(需预留字段)

  • 姓名、报名时间段(多选)
  • 安排时间段(由脚本回填)

五、待确认 / 开发期需补充的细节

以下事项建议在脚本开发时与使用者进一步对齐:

  1. 字段名精确命名:上述字段名是否与实际多维表格中的字段名完全一致?(飞书 SDK 按字段名读写) 答:需要进一步确认
  2. 首/末时段的实际判定:是固定 8:00-10:00 和 16:00-18:00,还是从当次活动实际启用的时段中取首尾? 答:从当次活动实际启用的时段中取首尾?
  3. 冲突处理:当某时段报名人数不足以排满 1/4/5/6 号位时的降级策略。
  4. 维修部偏好的强度:是"无维修部干事则空缺"还是"无维修部干事则用其他部门顶替"?(当前倾向后者)
  5. 末时段 ≥6 人是硬性要求还是尽力而为:当总报名人数不足时的处理。 答:尽力而为
  6. 重复排班防护:若"安排时间段/安排位置"字段已有值,是覆盖还是跳过? 答:跳过
  7. 触发方式:飞书侧的触发入口(机器人指令 / 网页应用 / 自定义工作流 / 卡片按钮等)。 答:
  8. 输出与日志:是否需要将排班摘要(各时段人数、缺口、特殊情况)输出到某处便于复核。