# 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数据插入顺序 ```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 清理测试数据: ```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'); ```