Files
gym-manage/gym-manage-api/docs/V10-booking-test-data.md
T
2026-06-02 17:18:21 +08:00

13 KiB

V10 团课预约业务场景测试数据

概述

本文档描述了 V10 版本新增的团课预约功能测试数据,覆盖了7种典型的预约业务场景,用于验证系统在不同会员卡状态下的正确处理逻辑。

当前日期: 2026-06-02


一、测试场景总览

场景 会员 会员卡状态 预约课程 预期结果
1 用户A 无会员卡 次数卡团课 提示无可用会员卡
2 用户B 时长卡已过期 次数卡团课 提示会员卡已过期
3 会员C 时长卡有效 次数卡团课 预约成功
4 会员D 次数卡次数=0 次数卡团课 提示剩余次数不足
5 会员E 次数卡次数=5 次数卡团课 预约成功
6 会员F 储值卡余额=30元 储值卡团课(需50元) 提示余额不足
7 会员G 储值卡余额=200元 储值卡团课(需50元) 预约成功

二、测试会员数据

2.1 会员列表

会员编号 昵称 手机号 性别 创建时间
MEM_TEST_A 用户A_无卡新用户 13800001001 2026-06-02 10:00:00
MEM_TEST_B 用户B_过期时长卡 13800001002 2026-05-01 10:00:00
MEM_TEST_C 会员C_有效时长卡 13800001003 2026-05-01 10:00:00
MEM_TEST_D 会员D_次数用尽 13800001004 2026-05-01 10:00:00
MEM_TEST_E 会员E_次数充足 13800001005 2026-05-01 10:00:00
MEM_TEST_F 会员F_储值卡余额不足 13800001006 2026-05-01 10:00:00
MEM_TEST_G 会员G_储值卡余额充足 13800001007 2026-05-01 10:00:00

2.2 会员场景说明

场景1: 用户A - 无会员卡新用户

  • 会员编号: MEM_TEST_A
  • 状态: 2026-06-02 刚注册,尚未购买任何会员卡
  • 测试目标: 验证无会员卡用户申请团课预约时的错误提示

场景2: 用户B - 时长卡已过期

  • 会员编号: MEM_TEST_B
  • 状态: 持有30天时长卡,于 2026-05-31 23:59:59 到期
  • 测试目标: 验证会员卡过期后的预约行为

场景3: 会员C - 时长卡有效

  • 会员编号: MEM_TEST_C
  • 状态: 持有30天时长卡,到期时间 2026-07-02
  • 测试目标: 验证有效期内的时长卡可以正常预约次数卡团课

场景4: 会员D - 次数卡耗尽

  • 会员编号: MEM_TEST_D
  • 状态: 持有10次卡,剩余次数 = 0
  • 测试目标: 验证次数耗尽后无法预约团课

场景5: 会员E - 次数卡充足

  • 会员编号: MEM_TEST_E
  • 状态: 持有10次卡,剩余次数 = 5
  • 测试目标: 验证次数充足时正常预约

场景6: 会员F - 储值卡余额不足

  • 会员编号: MEM_TEST_F
  • 状态: 持有储值卡,余额 = 30.00 元
  • 测试目标: 验证预约储值卡团课(需50元)时提示余额不足

场景7: 会员G - 储值卡余额充足

  • 会员编号: MEM_TEST_G
  • 状态: 持有储值卡,余额 = 200.00 元
  • 测试目标: 验证余额充足时正常预约储值卡团课

三、团课课程数据

3.1 团课列表

课程名称 教练ID 课程类型 开始时间 结束时间 最大人数 当前人数 状态 点卡额度 储值额度
燃脂搏击_次数卡课程 102 2 2026-06-10 19:30:00 2026-06-10 20:30:00 20 0 正常 1 0.00
高端普拉提_储值卡课程 103 1 2026-06-11 19:00:00 2026-06-11 20:00:00 15 0 正常 0 50.00

3.2 课程说明

燃脂搏击_次数卡课程

  • 收费类型: 次数卡
  • 消耗点数: 1次
  • 适用会员: 时长卡、次数卡用户
  • 课程描述: 高强度间歇训练,配合音乐快速燃脂

高端普拉提_储值卡课程

  • 收费类型: 储值卡
  • 消耗金额: 50.00 元
  • 适用会员: 储值卡用户
  • 课程描述: 精准训练核心肌群

四、会员卡类型数据

卡名称 卡类型 价格 有效天数 总次数 面额 状态
30天时长卡 TIME_CARD 299.00 30 - - 上架
10次卡 COUNT_CARD 499.00 - 10 - 上架
储值卡500 STORED_VALUE_CARD 500.00 - - 500.00 上架

五、会员卡记录数据

5.1 记录列表

会员编号 卡名称 状态 剩余次数 剩余金额 过期时间 购买时间
MEM_TEST_B 30天时长卡 EXPIRED 0 0.00 2026-05-31 2026-05-01
MEM_TEST_C 30天时长卡 ACTIVE 0 0.00 2026-07-02 2026-06-02
MEM_TEST_D 10次卡 ACTIVE 0 0.00 2026-12-31 2026-05-01
MEM_TEST_E 10次卡 ACTIVE 5 0.00 2026-12-31 2026-05-01
MEM_TEST_F 储值卡500 ACTIVE 0 30.00 2027-06-02 2026-05-01
MEM_TEST_G 储值卡500 ACTIVE 0 200.00 2027-06-02 2026-05-01

5.2 详细说明

用户B - 时长卡已过期

会员ID: MEM_TEST_B
卡名称: 30天时长卡
状态: EXPIRED (已过期)
有效期: 2026-05-01 至 2026-05-31
剩余次数: 0
剩余金额: 0.00

会员C - 时长卡有效

会员ID: MEM_TEST_C
卡名称: 30天时长卡
状态: ACTIVE (有效)
有效期: 2026-06-02 至 2026-07-02
剩余次数: 0
剩余金额: 0.00

会员D - 次数卡耗尽

会员ID: MEM_TEST_D
卡名称: 10次卡
状态: ACTIVE (有效)
有效期: 2026-05-01 至 2026-12-31
剩余次数: 0 (已用尽)
剩余金额: 0.00

会员E - 次数卡充足

会员ID: MEM_TEST_E
卡名称: 10次卡
状态: ACTIVE (有效)
有效期: 2026-05-01 至 2026-12-31
剩余次数: 5
剩余金额: 0.00

会员F - 储值卡余额不足

会员ID: MEM_TEST_F
卡名称: 储值卡500
状态: ACTIVE (有效)
有效期: 2026-05-01 至 2027-06-02
剩余次数: 0
剩余金额: 30.00 (不足50.00)

会员G - 储值卡余额充足

会员ID: MEM_TEST_G
卡名称: 储值卡500
状态: ACTIVE (有效)
有效期: 2026-05-01 至 2027-06-02
剩余次数: 0
剩余金额: 200.00 (充足)

六、SQL数据插入顺序

-- 1. 先插入会员用户 (A-G)
INSERT INTO member_user (member_no, nickname, phone, gender, is_deleted, created_at, updated_at) VALUES
    ('MEM_TEST_A', '用户A_无卡新用户', '13800001001', 1, false, '2026-06-02 10:00:00', '2026-06-02 10:00:00'),
    ('MEM_TEST_B', '用户B_过期时长卡', '13800001002', 1, false, '2026-05-01 10:00:00', '2026-05-01 10:00:00'),
    ('MEM_TEST_C', '会员C_有效时长卡', '13800001003', 2, false, '2026-05-01 10:00:00', '2026-05-01 10:00:00'),
    ('MEM_TEST_D', '会员D_次数用尽', '13800001004', 1, false, '2026-05-01 10:00:00', '2026-05-01 10:00:00'),
    ('MEM_TEST_E', '会员E_次数充足', '13800001005', 2, false, '2026-05-01 10:00:00', '2026-05-01 10:00:00'),
    ('MEM_TEST_F', '会员F_储值卡余额不足', '13800001006', 1, false, '2026-05-01 10:00:00', '2026-05-01 10:00:00'),
    ('MEM_TEST_G', '会员G_储值卡余额充足', '13800001007', 2, false, '2026-05-01 10:00:00', '2026-05-01 10:00:00');

-- 2. 插入团课课程
INSERT INTO group_course (course_name, coach_id, course_type, start_time, end_time, max_members, current_members, status, location, description, point_card_amount, stored_value_amount, create_by, created_at, updated_at) VALUES
    ('燃脂搏击_次数卡课程', 102, 2, '2026-06-10 19:30:00', '2026-06-10 20:30:00', 20, 0, '0', '综合训练区', '高强度间歇训练,配合音乐快速燃脂,消耗1次', 1, 0.00, 'admin', '2026-06-01 10:00:00', '2026-06-01 10:00:00');

INSERT INTO group_course (course_name, coach_id, course_type, start_time, end_time, max_members, current_members, status, location, description, point_card_amount, stored_value_amount, create_by, created_at, updated_at) VALUES
    ('高端普拉提_储值卡课程', 103, 1, '2026-06-11 19:00:00', '2026-06-11 20:00:00', 15, 0, '0', '普拉提教室', '精准训练核心肌群,消耗储值50元', 0, 50.00, 'admin', '2026-06-01 10:00:00', '2026-06-01 10:00:00');

-- 3. 插入会员卡类型
INSERT INTO member_card (member_card_name, member_card_type, member_card_price, member_card_validity_days, member_card_total_times, member_card_amount, member_card_status, extra_config, created_at, updated_at) VALUES
    ('30天时长卡', 'TIME_CARD', 299.00, 30, NULL, NULL, 1, '{}', '2026-01-01 00:00:00', '2026-01-01 00:00:00'),
    ('10次卡', 'COUNT_CARD', 499.00, NULL, 10, NULL, 1, '{}', '2026-01-01 00:00:00', '2026-01-01 00:00:00'),
    ('储值卡500', 'STORED_VALUE_CARD', 500.00, NULL, NULL, 500.00, 1, '{}', '2026-01-01 00:00:00', '2026-01-01 00:00:00');

-- 4. 插入会员卡记录
INSERT INTO member_card_record (member_id, member_card_id, status, remaining_times, remaining_amount, expire_time, purchase_time, version, card_composition, created_at, updated_at) VALUES
    ((SELECT id FROM member_user WHERE member_no = 'MEM_TEST_B'), (SELECT member_card_id FROM member_card WHERE member_card_name = '30天时长卡'), 'EXPIRED', 0, 0.00, '2026-05-31 23:59:59', '2026-05-01 10:00:00', 0, '{}', '2026-05-01 10:00:00', '2026-06-02 10:00:00');

INSERT INTO member_card_record (member_id, member_card_id, status, remaining_times, remaining_amount, expire_time, purchase_time, version, card_composition, created_at, updated_at) VALUES
    ((SELECT id FROM member_user WHERE member_no = 'MEM_TEST_C'), (SELECT member_card_id FROM member_card WHERE member_card_name = '30天时长卡'), 'ACTIVE', 0, 0.00, '2026-07-02 23:59:59', '2026-06-02 10:00:00', 0, '{}', '2026-06-02 10:00:00', '2026-06-02 10:00:00');

INSERT INTO member_card_record (member_id, member_card_id, status, remaining_times, remaining_amount, expire_time, purchase_time, version, card_composition, created_at, updated_at) VALUES
    ((SELECT id FROM member_user WHERE member_no = 'MEM_TEST_D'), (SELECT member_card_id FROM member_card WHERE member_card_name = '10次卡'), 'ACTIVE', 0, 0.00, '2026-12-31 23:59:59', '2026-05-01 10:00:00', 0, '{}', '2026-05-01 10:00:00', '2026-06-02 10:00:00');

INSERT INTO member_card_record (member_id, member_card_id, status, remaining_times, remaining_amount, expire_time, purchase_time, version, card_composition, created_at, updated_at) VALUES
    ((SELECT id FROM member_user WHERE member_no = 'MEM_TEST_E'), (SELECT member_card_id FROM member_card WHERE member_card_name = '10次卡'), 'ACTIVE', 5, 0.00, '2026-12-31 23:59:59', '2026-05-01 10:00:00', 0, '{}', '2026-05-01 10:00:00', '2026-06-02 10:00:00');

INSERT INTO member_card_record (member_id, member_card_id, status, remaining_times, remaining_amount, expire_time, purchase_time, version, card_composition, created_at, updated_at) VALUES
    ((SELECT id FROM member_user WHERE member_no = 'MEM_TEST_F'), (SELECT member_card_id FROM member_card WHERE member_card_name = '储值卡500'), 'ACTIVE', 0, 30.00, '2027-06-02 23:59:59', '2026-05-01 10:00:00', 0, '{}', '2026-05-01 10:00:00', '2026-06-02 10:00:00');

INSERT INTO member_card_record (member_id, member_card_id, status, remaining_times, remaining_amount, expire_time, purchase_time, version, card_composition, created_at, updated_at) VALUES
    ((SELECT id FROM member_user WHERE member_no = 'MEM_TEST_G'), (SELECT member_card_id FROM member_card WHERE member_card_name = '储值卡500'), 'ACTIVE', 0, 200.00, '2027-06-02 23:59:59', '2026-05-01 10:00:00', 0, '{}', '2026-05-01 10:00:00', '2026-06-02 10:00:00');

七、预期测试结果

7.1 成功场景

场景 会员 操作 预期结果
3 会员C 预约次数卡团课 预约成功,消耗时长卡1次
5 会员E 预约次数卡团课 预约成功,次数减1 (5→4)
7 会员G 预约储值卡团课 预约成功,余额减50 (200→150)

7.2 失败场景

场景 会员 操作 预期错误码 预期提示信息
1 用户A 预约次数卡团课 NO_CARD 无可用会员卡
2 用户B 预约次数卡团课 CARD_EXPIRED 会员卡已过期
4 会员D 预约次数卡团课 INSUFFICIENT_TIMES 剩余次数不足
6 会员F 预约储值卡团课 INSUFFICIENT_BALANCE 余额不足,当前余额30.00元,需50.00元

八、数据清理

测试完成后,可通过以下 SQL 清理测试数据:

-- 删除测试会员(会级联删除相关会员卡记录)
DELETE FROM member_user WHERE member_no LIKE 'MEM_TEST_%';

-- 删除测试团课
DELETE FROM group_course WHERE course_name LIKE '%_次数卡课程' OR course_name LIKE '%_储值卡课程';

-- 删除测试会员卡类型
DELETE FROM member_card WHERE member_card_name IN ('30天时长卡', '10次卡', '储值卡500');