Coreshop/预约时间自由选择_改动文档_甲方版.md
2025-12-26 16:08:55 +08:00

30 KiB
Raw Blame History

预约时间自由选择 - 需求改动文档

文档版本v1.0 更新日期2024年 文档类型:甲方确认版


一、需求概述

1.1 当前问题

  • 用户只能选择固定时段(凌晨/上午/下午/晚上每个时段固定6小时
  • 无法灵活选择具体的开始和结束时间
  • 跨时段预约时,房间列表显示不够直观

1.2 改动目标

  1. 时段显示优化预约15:00-20:00时房间列表应显示"下午"和"晚上"都被预定
  2. 自由时间选择:允许用户自由选择具体的开始时间和结束时间

二、当前系统时段定义

时段名称 时间范围 图标颜色
凌晨 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时间选择精度

  • 选项A以30分钟为最小单位如15:00、15:30、16:00
  • 选项B以1小时为最小单位如15:00、16:00、17:00
  • 选项C以15分钟为最小单位

问题2跨天预约

  • 是否支持跨天预约如23:00 - 次日02:00
  • 如支持,如何处理跨天的时段显示?

问题3最短/最长预约时长

  • 最短预约时长限制____小时
  • 最长预约时长限制____小时

问题4时间冲突提示

  • 选项A选择时间时实时检测冲突
  • 选项B提交时统一检测冲突

十、附录

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 🟠 🟢 🟢 🟠