预约时间自由选择 - 需求改动文档
文档版本:v1.0
更新日期:2024年
文档类型:甲方确认版
一、需求概述
1.1 当前问题
- 用户只能选择固定时段(凌晨/上午/下午/晚上),每个时段固定6小时
- 无法灵活选择具体的开始和结束时间
- 跨时段预约时,房间列表显示不够直观
1.2 改动目标
- 时段显示优化:预约15:00-20:00时,房间列表应显示"下午"和"晚上"都被预定
- 自由时间选择:允许用户自由选择具体的开始时间和结束时间
二、当前系统时段定义
| 时段名称 |
时间范围 |
图标颜色 |
| 凌晨 |
00:00 - 06:00 |
- |
| 上午 |
06:00 - 12:00 |
- |
| 下午 |
12:00 - 18:00 |
- |
| 晚上 |
18:00 - 24:00 |
- |
时段状态说明:
- 🟢 可预约 - 该时段空闲,可以预约
- 🟠 已预约 - 该时段已被其他人预约
- ⚫ 不可用 - 该时段不开放
- 🔵 使用中 - 该时段正在使用
三、完整业务闭环
3.1 发起者完整闭环(创建预约→结束)
┌─────────────────────────────────────────────────────────────────────────┐
│ 发起者完整业务闭环 │
└─────────────────────────────────────────────────────────────────────────┘
┌──────────┐
│ 发起者 │
└────┬─────┘
│
▼
┌─────────────────┐
│ 1. 选择日期 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 2. 选择房间 │ ←─── 查看房间时段状态
└────────┬────────┘ 🟢可预约 🟠已预约
│
▼
┌─────────────────┐
│ 3. 选择时段 │ ←─── 【改动点】改为自由选择时间
└────────┬────────┘
│
▼
┌─────────────────┐
│ 4. 填写预约信息 │ ←─── 标题、人数、要求等
└────────┬────────┘
│
▼
┌─────────────────┐ ┌─────────────────┐
│ 5. 支付押金 │────▶│ 创建成功 │
│ (如需要) │ │ 状态:待开始 │
└─────────────────┘ └────────┬────────┘
│
┌───────────────────────┤
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ 等待参与者加入 │ │ 分享给好友 │
└────────┬────────┘ └─────────────────┘
│
│ 【人满/时间到】
▼
┌─────────────────┐
│ 状态:已锁定 │ ←─── 不可再加入/退出
└────────┬────────┘
│
│ 【开始前10分钟~开始后】
▼
┌─────────────────┐
│ 6. 签到确认 ⭐ │ ←─── 确认参与者到场情况
└────────┬────────┘
│
├─────────────────────────────┐
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ 参与者已到场 │ │ 参与者未到场 │
│ 信誉分 +0.2 │ │ 信誉分 -0.5 │
│ 退还押金 │ │ 鸽子数 +1 │
└────────┬────────┘ │ 押金不退 │
│ └─────────────────┘
│
▼
┌─────────────────┐
│ 状态:进行中 │ ←─── 预约正式开始
└────────┬────────┘
│
│ 【时间结束】
▼
┌─────────────────┐
│ 7. 互相评价 │ ←─── 牌品、牌技评分
└────────┬────────┘
│
▼
┌─────────────────┐
│ 状态:已结束 │ ←─── 预约完成
└─────────────────┘
3.2 参与者完整闭环(加入预约→结束)
┌─────────────────────────────────────────────────────────────────────────┐
│ 参与者完整业务闭环 │
└─────────────────────────────────────────────────────────────────────────┘
┌──────────┐
│ 参与者 │
└────┬─────┘
│
├───────────────────┬───────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 首页浏览 │ │ 好友分享 │ │ 扫码进入 │
│ 麻将局列表 │ │ 点击链接 │ │ │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
│ │ │
└───────────────────┴───────────────────┘
│
▼
┌─────────────────┐
│ 1. 查看预约详情 │
└────────┬────────┘
│
▼
┌─────────────────┐ ┌─────────────────┐
│ 2. 点击加入 │────▶│ 检查是否在 │
└─────────────────┘ │ 黑名单中 │
└────────┬────────┘
│
┌───────────────────────┴───────────────────┐
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ 在黑名单中 │ │ 不在黑名单 │
│ 无法加入 ❌ │ └────────┬────────┘
└─────────────────┘ │
▼
┌─────────────────┐
│ 3. 支付押金 │
│ (如需要) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 加入成功 ✓ │
│ 等待预约开始 │
└────────┬────────┘
│
┌──────────────────────────────────────────────────┤
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ 主动退出预约 │ │ 等待锁定 │
│ (锁定前可退) │ └────────┬────────┘
└────────┬────────┘ │
│ │
▼ │ 【人满/时间到】
┌─────────────────┐ ▼
│ 退还押金 │ ┌─────────────────┐
│ 退出成功 │ │ 状态:已锁定 │
└─────────────────┘ └────────┬────────┘
│
│ 【发起者签到】
▼
┌─────────────────┐
│ 4. 被签到确认 │
└────────┬────────┘
│
┌──────────────────────────────────────────────────┤
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ 已到场 ✓ │ │ 未到场 ✗ │
│ 信誉分 +0.2 │ │ 信誉分 -0.5 │
│ 押金退还 │ │ 鸽子数 +1 │
└────────┬────────┘ │ 押金不退 │
│ │ 强制退出 │
│ └─────────────────┘
▼
┌─────────────────┐
│ 状态:进行中 │
└────────┬────────┘
│
│ 【时间结束】
▼
┌─────────────────┐
│ 5. 互相评价 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 状态:已结束 │
└─────────────────┘
四、签到功能详解
4.1 签到流程图
flowchart TD
A[预约状态:已锁定] --> B{时间判断}
B -->|开始前10分钟内| C[显示签到按钮]
B -->|预约已开始且未结束| C
B -->|时间未到| D[签到按钮隐藏]
C --> E[发起者点击签到]
E --> F[弹出签到确认窗口]
F --> G[显示参与者列表]
G --> H{逐个确认到场}
H -->|已到场| I[标记为到场 ✓]
H -->|未到场| J[标记为缺席 ✗]
I --> K[提交签到]
J --> K
K --> L{系统处理}
L --> M[到场者:信誉+0.2,退押金]
L --> N[缺席者:信誉-0.5,扣押金,踢出]
M --> O[预约状态→进行中]
N --> O
4.2 签到界面原型
┌─────────────────────────────────────────────────────────────────┐
│ 到场确认 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 请确认以下参与者是否已到场: │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 👤 张三 │ │
│ │ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ ✓ 已到场 │ │ ✗ 未到场 │ │ │
│ │ └──────────────┘ └──────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 👤 李四 │ │
│ │ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ ✓ 已到场 │ │ ✗ 未到场 │ │ │
│ │ └──────────────┘ └──────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 👤 王五 │ │
│ │ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ ✓ 已到场 │ │ ✗ 未到场 │ │ │
│ │ └──────────────┘ └──────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ⚠️ 提示:标记为"未到场"的参与者将被扣除信誉分 │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 确认签到 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
4.3 签到规则说明
| 项目 |
说明 |
| 签到人 |
仅发起者可以签到 |
| 签到时间 |
预约开始前10分钟 ~ 预约结束时间 |
| 签到次数 |
每个预约只能签到一次 |
| 到场奖励 |
信誉分 +0.2(上限5分) |
| 缺席惩罚 |
信誉分 -0.5,鸽子数 +1 |
| 押金处理 |
到场者退还,缺席者不退 |
五、时间选择改动对比
5.1 改动前(固定时段选择)
┌─────────────────────────────────────────────────────────────────┐
│ 选择预约时段 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ○ 凌晨 (00:00 - 06:00) │
│ │
│ ○ 上午 (06:00 - 12:00) │
│ │
│ ● 下午 (12:00 - 18:00) ← 只能选择一个完整时段 │
│ │
│ ○ 晚上 (18:00 - 24:00) │
│ │
│ ⚠️ 限制:只能选择固定6小时时段,无法自定义时间 │
│ │
└─────────────────────────────────────────────────────────────────┘
5.2 改动后(自由时间选择)
┌─────────────────────────────────────────────────────────────────┐
│ 选择预约时间 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 开始时间 │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ 15 : 00 ▼ │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ 结束时间 │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ 20 : 00 ▼ │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ 📊 预计时长:5 小时 │ │
│ │ 📅 跨越时段:下午、晚上 │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ 💡 提示:结束时间必须晚于开始时间 │
│ │
└─────────────────────────────────────────────────────────────────┘
5.3 房间列表显示对比
场景:某房间已被预约 15:00 - 20:00
【改动前】房间时段显示:
┌─────────────────────────────────────────────────────────────────┐
│ 304包厢 │
│ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │ 凌晨 │ │ 上午 │ │ 下午 │ │ 晚上 │ │
│ │ 🟢 │ │ 🟢 │ │ 🟠 │ │ 🟢 │ │
│ └────────┘ └────────┘ └────────┘ └────────┘ │
│ │
│ ❌ 问题:晚上时段显示为可预约,但实际18:00-20:00已被占用 │
└─────────────────────────────────────────────────────────────────┘
【改动后】房间时段显示:
┌─────────────────────────────────────────────────────────────────┐
│ 304包厢 │
│ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │ 凌晨 │ │ 上午 │ │ 下午 │ │ 晚上 │ │
│ │ 🟢 │ │ 🟢 │ │ 🟠 │ │ 🟠 │ │
│ └────────┘ └────────┘ └────────┘ └────────┘ │
│ │
│ ✓ 正确:下午和晚上都显示为已预约状态 │
└─────────────────────────────────────────────────────────────────┘
六、预约状态流转图
stateDiagram-v2
[*] --> 待开始: 创建预约
待开始 --> 已锁定: 人满或时间临近
待开始 --> 已取消: 发起者取消
已锁定 --> 进行中: 发起者签到
已锁定 --> 已取消: 发起者取消(需扣分)
进行中 --> 已结束: 时间结束
已取消 --> [*]
已结束 --> [*]
note right of 待开始
可加入/退出
可分享
end note
note right of 已锁定
不可加入/退出
等待签到
end note
note right of 进行中
正在进行
可评价
end note
状态说明表
| 状态 |
状态码 |
可执行操作 |
说明 |
| 待开始 |
0 |
加入、退出、取消、分享 |
预约创建后的初始状态 |
| 已锁定 |
1 |
签到、取消 |
人满或临近开始时间 |
| 进行中 |
2 |
评价 |
签到后预约正式开始 |
| 已结束 |
3 |
查看记录 |
预约时间结束 |
| 已取消 |
4 |
无 |
预约被取消 |
七、信誉分规则
7.1 信誉分变化场景
| 场景 |
分数变化 |
说明 |
| 按时赴约 |
+0.2 |
签到时标记为"已到场" |
| 放鸽子 |
-0.5 |
签到时标记为"未到场" |
| 取消预约(锁定前) |
无变化 |
正常取消 |
| 取消预约(锁定后) |
-0.3 |
临时取消扣分 |
7.2 信誉分等级
| 等级 |
分数范围 |
说明 |
| 优秀 |
4.5 - 5.0 |
信誉极好 |
| 良好 |
4.0 - 4.4 |
信誉较好 |
| 一般 |
3.0 - 3.9 |
信誉一般 |
| 较差 |
2.0 - 2.9 |
需要注意 |
| 很差 |
< 2.0 |
可能被限制 |
八、改动工作内容总结
8.1 前端改动
| 序号 |
页面/组件 |
改动内容 |
| 1 |
创建预约页面 |
将时段单选改为时间选择器 |
| 2 |
创建预约页面 |
增加时长计算和跨时段提示 |
| 3 |
房间列表页面 |
验证跨时段显示(可能无需改动) |
8.2 后端改动
| 序号 |
模块 |
改动内容 |
| 1 |
预约接口 |
支持接收自定义开始/结束时间 |
| 2 |
冲突检测 |
验证跨时段冲突检测逻辑 |
8.3 测试验证
| 序号 |
测试场景 |
预期结果 |
| 1 |
选择15:00-20:00 |
成功,显示跨越"下午、晚上" |
| 2 |
选择20:00-15:00 |
失败,提示时间无效 |
| 3 |
房间已有15:00-20:00预约 |
下午🟠、晚上🟠 |
| 4 |
预约10:00-14:00 |
显示跨越"上午、下午" |
九、待确认问题
请甲方确认以下问题:
问题1:时间选择精度
问题2:跨天预约
问题3:最短/最长预约时长
问题4:时间冲突提示
十、附录
A. 名词解释
| 名词 |
解释 |
| 发起者 |
创建预约的用户 |
| 参与者 |
加入预约的其他用户 |
| 签到 |
发起者确认参与者到场情况的操作 |
| 锁定 |
预约人满或临近开始,不可再加入/退出 |
| 鸽子数 |
用户放鸽子(未到场)的累计次数 |
B. 时段重叠判断示例
| 预约时间 |
凌晨(0-6) |
上午(6-12) |
下午(12-18) |
晚上(18-24) |
| 02:00-05:00 |
🟠 |
🟢 |
🟢 |
🟢 |
| 05:00-08:00 |
🟠 |
🟠 |
🟢 |
🟢 |
| 10:00-14:00 |
🟢 |
🟠 |
🟠 |
🟢 |
| 15:00-20:00 |
🟢 |
🟢 |
🟠 |
🟠 |
| 22:00-02:00 |
🟠 |
🟢 |
🟢 |
🟠 |