移除流程中的支付相关和会员卡相关

This commit was merged in pull request #48.
This commit is contained in:
2026-07-14 18:49:15 +08:00
parent 593f6f13e7
commit cacc8997ec
22 changed files with 594 additions and 754 deletions
@@ -1,7 +1,7 @@
-- ============================================================
-- V13: 整合所有测试数据(基于 2026-06-29 17:13
-- V13: 整合所有测试数据(基于 2026-07-14
-- 说明: 系统初始数据由 V2 处理,本文件仅包含业务测试数据
-- 所有时间相关字段已更新为基于 2026-06-29
-- 所有时间相关字段已更新为基于 2026-07-14
-- ============================================================
-- ============================================================
@@ -84,38 +84,38 @@ INSERT INTO member_card (member_card_name, member_card_type, member_card_price,
-- E1: 数据统计测试会员(V14,显式 ID 1001-1012
INSERT INTO member_user (id, member_no, nickname, phone, created_at, updated_at, is_deleted) VALUES
(1001, 'M20260629001', '张三', '13800138001', '2026-06-29 08:00:00', '2026-06-29 08:00:00', false),
(1002, 'M20260629002', '李四', '13800138002', '2026-06-29 09:00:00', '2026-06-29 09:00:00', false),
(1003, 'M20260628003', '王五', '13800138003', '2026-06-28 10:00:00', '2026-06-28 10:00:00', false),
(1004, 'M20260627004', '赵六', '13800138004', '2026-06-27 11:00:00', '2026-06-27 11:00:00', false),
(1005, 'M20260629005', '钱七', '13800138005', '2026-06-29 08:00:00', '2026-06-29 08:00:00', false),
(1006, 'M20260629006', '孙八', '13800138006', '2026-06-29 09:00:00', '2026-06-29 09:00:00', false),
(1007, 'M20260629007', '周九', '13800138007', '2026-06-29 10:00:00', '2026-06-29 10:00:00', false),
(1008, 'M20260626008', '吴十', '13800138008', '2026-06-26 14:00:00', '2026-06-26 14:00:00', false),
(1009, 'M20260625009', '郑十一', '13800138009', '2026-06-25 15:00:00', '2026-06-25 15:00:00', false),
(1010, 'M20260624010', '王十二', '13800138010', '2026-06-24 16:00:00', '2026-06-24 16:00:00', false),
(1011, 'M20260623011', '陈十三', '13800138011', '2026-06-23 17:00:00', '2026-06-23 17:00:00', false),
(1012, 'M20260622012', '刘十四', '13800138012', '2026-06-22 18:00:00', '2026-06-22 18:00:00', false);
(1001, 'M20260714001', '张三', '13800138001', '2026-07-14 08:00:00', '2026-07-14 08:00:00', false),
(1002, 'M20260714002', '李四', '13800138002', '2026-07-14 09:00:00', '2026-07-14 09:00:00', false),
(1003, 'M20260713003', '王五', '13800138003', '2026-07-13 10:00:00', '2026-07-13 10:00:00', false),
(1004, 'M20260712004', '赵六', '13800138004', '2026-07-12 11:00:00', '2026-07-12 11:00:00', false),
(1005, 'M20260714005', '钱七', '13800138005', '2026-07-14 08:00:00', '2026-07-14 08:00:00', false),
(1006, 'M20260714006', '孙八', '13800138006', '2026-07-14 09:00:00', '2026-07-14 09:00:00', false),
(1007, 'M20260714007', '周九', '13800138007', '2026-07-14 10:00:00', '2026-07-14 10:00:00', false),
(1008, 'M20260711008', '吴十', '13800138008', '2026-07-11 14:00:00', '2026-07-11 14:00:00', false),
(1009, 'M20260710009', '郑十一', '13800138009', '2026-07-10 15:00:00', '2026-07-10 15:00:00', false),
(1010, 'M20260709010', '王十二', '13800138010', '2026-07-09 16:00:00', '2026-07-09 16:00:00', false),
(1011, 'M20260708011', '陈十三', '13800138011', '2026-07-08 17:00:00', '2026-07-08 17:00:00', false),
(1012, 'M20260707012', '刘十四', '13800138012', '2026-07-07 18:00:00', '2026-07-07 18:00:00', false);
-- E2: 预约场景测试会员(V10: 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-29 10:00:00', '2026-06-29 10:00:00'),
('MEM_TEST_B', '用户B_过期时长卡', '13800001002', 1, false, '2026-06-28 10:00:00', '2026-06-28 10:00:00'),
('MEM_TEST_C', '会员C_有效时长卡', '13800001003', 2, false, '2026-06-28 10:00:00', '2026-06-28 10:00:00'),
('MEM_TEST_D', '会员D_次数用尽', '13800001004', 1, false, '2026-06-28 10:00:00', '2026-06-28 10:00:00'),
('MEM_TEST_E', '会员E_次数充足', '13800001005', 2, false, '2026-06-28 10:00:00', '2026-06-28 10:00:00'),
('MEM_TEST_F', '会员F_储值卡余额不足', '13800001006', 1, false, '2026-06-28 10:00:00', '2026-06-28 10:00:00'),
('MEM_TEST_G', '会员G_储值卡余额充足', '13800001007', 2, false, '2026-06-28 10:00:00', '2026-06-28 10:00:00');
('MEM_TEST_A', '用户A_无卡新用户', '13800001001', 1, false, '2026-07-14 10:00:00', '2026-07-14 10:00:00'),
('MEM_TEST_B', '用户B_过期时长卡', '13800001002', 1, false, '2026-07-13 10:00:00', '2026-07-13 10:00:00'),
('MEM_TEST_C', '会员C_有效时长卡', '13800001003', 2, false, '2026-07-13 10:00:00', '2026-07-13 10:00:00'),
('MEM_TEST_D', '会员D_次数用尽', '13800001004', 1, false, '2026-07-13 10:00:00', '2026-07-13 10:00:00'),
('MEM_TEST_E', '会员E_次数充足', '13800001005', 2, false, '2026-07-13 10:00:00', '2026-07-13 10:00:00'),
('MEM_TEST_F', '会员F_储值卡余额不足', '13800001006', 1, false, '2026-07-13 10:00:00', '2026-07-13 10:00:00'),
('MEM_TEST_G', '会员G_储值卡余额充足', '13800001007', 2, false, '2026-07-13 10:00:00', '2026-07-13 10:00:00');
-- E3: 取消预约测试会员(V11: 张三/李四/王五)
INSERT INTO member_user (member_no, nickname, phone, gender, is_deleted, created_at, updated_at) VALUES
('MEM_TEST_ZHANG', '张三_时长卡用户', '13800002001', 1, false, '2026-06-28 10:00:00', '2026-06-28 10:00:00'),
('MEM_TEST_LI', '李四_次数卡用户', '13800002002', 1, false, '2026-06-28 10:00:00', '2026-06-28 10:00:00'),
('MEM_TEST_WANG', '王五_储值卡用户', '13800002003', 2, false, '2026-06-28 10:00:00', '2026-06-28 10:00:00');
('MEM_TEST_ZHANG', '张三_时长卡用户', '13800002001', 1, false, '2026-07-13 10:00:00', '2026-07-13 10:00:00'),
('MEM_TEST_LI', '李四_次数卡用户', '13800002002', 1, false, '2026-07-13 10:00:00', '2026-07-13 10:00:00'),
('MEM_TEST_WANG', '王五_储值卡用户', '13800002003', 2, false, '2026-07-13 10:00:00', '2026-07-13 10:00:00');
-- E4: 时间冲突测试会员(V12)
INSERT INTO member_user (member_no, nickname, phone, gender, is_deleted, created_at, updated_at) VALUES
('MEM_TIME_CONFLICT', '时间冲突测试会员', '13800009999', 1, false, '2026-06-28 10:00:00', '2026-06-28 10:00:00');
('MEM_TIME_CONFLICT', '时间冲突测试会员', '13800009999', 1, false, '2026-07-13 10:00:00', '2026-07-13 10:00:00');
-- ============================================================
-- Section F: 会员卡记录
@@ -123,67 +123,67 @@ INSERT INTO member_user (member_no, nickname, phone, gender, is_deleted, created
-- F1: V10 预约场景 - 6条会员卡记录
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-06-28 23:59:59', '2026-05-29 10:00:00', 0, '{}', '2026-05-29 10:00:00', '2026-06-29 10:00:00');
((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-07-13 23:59:59', '2026-06-13 10:00:00', 0, '{}', '2026-06-13 10:00:00', '2026-07-14 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-29 23:59:59', '2026-06-29 10:00:00', 0, '{}', '2026-06-29 10:00:00', '2026-06-29 10:00:00');
((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-08-13 23:59:59', '2026-07-14 10:00:00', 0, '{}', '2026-07-14 10:00:00', '2026-07-14 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-29 10:00:00', 0, '{}', '2026-05-29 10:00:00', '2026-06-29 10:00:00');
((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-06-13 10:00:00', 0, '{}', '2026-06-13 10:00:00', '2026-07-14 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-29 10:00:00', 0, '{}', '2026-05-29 10:00:00', '2026-06-29 10:00:00');
((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-06-13 10:00:00', 0, '{}', '2026-06-13 10:00:00', '2026-07-14 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-29 23:59:59', '2026-05-29 10:00:00', 0, '{}', '2026-05-29 10:00:00', '2026-06-29 10:00:00');
((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-07-14 23:59:59', '2026-06-13 10:00:00', 0, '{}', '2026-06-13 10:00:00', '2026-07-14 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-29 23:59:59', '2026-05-29 10:00:00', 0, '{}', '2026-05-29 10:00:00', '2026-06-29 10:00:00');
((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-07-14 23:59:59', '2026-06-13 10:00:00', 0, '{}', '2026-06-13 10:00:00', '2026-07-14 10:00:00');
-- F2: V11 取消预约场景 - 3条
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_ZHANG'), (SELECT member_card_id FROM member_card WHERE member_card_name = '30天时长卡'), 'ACTIVE', 0, 0.00, '2026-07-29 23:59:59', '2026-06-29 10:00:00', 0, '{}', '2026-06-29 10:00:00', '2026-06-29 10:00:00'),
((SELECT id FROM member_user WHERE member_no = 'MEM_TEST_LI'), (SELECT member_card_id FROM member_card WHERE member_card_name = '10次卡'), 'ACTIVE', 5, 0.00, '2026-12-31 23:59:59', '2026-05-29 10:00:00', 0, '{}', '2026-05-29 10:00:00', '2026-06-29 10:00:00'),
((SELECT id FROM member_user WHERE member_no = 'MEM_TEST_WANG'), (SELECT member_card_id FROM member_card WHERE member_card_name = '储值卡500'), 'ACTIVE', 0, 200.00, '2027-06-29 23:59:59', '2026-05-29 10:00:00', 0, '{}', '2026-05-29 10:00:00', '2026-06-29 10:00:00');
((SELECT id FROM member_user WHERE member_no = 'MEM_TEST_ZHANG'), (SELECT member_card_id FROM member_card WHERE member_card_name = '30天时长卡'), 'ACTIVE', 0, 0.00, '2026-08-13 23:59:59', '2026-07-14 10:00:00', 0, '{}', '2026-07-14 10:00:00', '2026-07-14 10:00:00'),
((SELECT id FROM member_user WHERE member_no = 'MEM_TEST_LI'), (SELECT member_card_id FROM member_card WHERE member_card_name = '10次卡'), 'ACTIVE', 5, 0.00, '2026-12-31 23:59:59', '2026-06-13 10:00:00', 0, '{}', '2026-06-13 10:00:00', '2026-07-14 10:00:00'),
((SELECT id FROM member_user WHERE member_no = 'MEM_TEST_WANG'), (SELECT member_card_id FROM member_card WHERE member_card_name = '储值卡500'), 'ACTIVE', 0, 200.00, '2027-07-14 23:59:59', '2026-06-13 10:00:00', 0, '{}', '2026-06-13 10:00:00', '2026-07-14 10:00:00');
-- F3: V12 时间冲突场景 - 1条
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_TIME_CONFLICT'), (SELECT member_card_id FROM member_card WHERE member_card_name = '10次卡'), 'ACTIVE', 10, 0.00, '2026-12-31 23:59:59', '2026-06-29 10:00:00', 0, '{}', '2026-06-29 10:00:00', '2026-06-29 10:00:00');
((SELECT id FROM member_user WHERE member_no = 'MEM_TIME_CONFLICT'), (SELECT member_card_id FROM member_card WHERE member_card_name = '10次卡'), 'ACTIVE', 10, 0.00, '2026-12-31 23:59:59', '2026-07-14 10:00:00', 0, '{}', '2026-07-14 10:00:00', '2026-07-14 10:00:00');
-- ============================================================
-- Section G: 团课课程(来源 V7 / V10 / V11 / V12 / V14,基于 2026-06-29
-- Section G: 团课课程(来源 V7 / V10 / V11 / V12 / V14,基于 2026-07-14
-- ============================================================
-- G1: V7 - 7种场景团课
INSERT INTO group_course (course_name, coach_id, course_type, start_time, end_time, max_members, current_members, status, location, cover_image, description, stored_value_amount, create_by, created_at, updated_at) VALUES
('极速燃脂单车', 104, 2, '2026-06-30 16:45:00', '2026-06-30 20:20:00', 25, 0, 0, '单车房', '/images/spinning.jpg', '跟随音乐节奏变换阻力和速度,体验爬坡与冲刺的快感。', 50.00, 'admin', '2026-06-29 10:00:00', '2026-06-29 10:00:00'),
('清晨流瑜伽', 101, 1, '2026-07-03 09:00:00', '2026-07-03 10:30:00', 15, 5, 0, 'A座3楼瑜伽教室', '/images/yoga_flow.jpg', '适合有一定基础的学员,通过流畅的体式连接呼吸。', 50.00, 'admin', '2026-06-29 10:00:00', '2026-06-29 10:00:00'),
('燃脂搏击', 102, 2, '2026-07-01 18:30:00', '2026-07-01 19:30:00', 20, 20, 0, '综合训练区', '/images/kickboxing.jpg', '高强度间歇训练,名额已满。', 50.00, 'coach_zhang', '2026-06-29 14:30:00', '2026-06-29 14:30:00'),
('哈他瑜伽', 101, 1, '2026-06-29 17:45:00', '2026-06-29 18:50:00', 12, 3, 0, '瑜伽教室B', '/images/hatha_yoga.jpg', '基础哈他瑜伽,距开始不足30分钟,已停止预约。', 50.00, 'coach_li', '2026-06-29 08:00:00', '2026-06-29 08:00:00'),
('周末冥想修复', 101, 1, '2026-07-11 15:00:00', '2026-07-11 16:00:00', 12, 3, 1, '冥想室', '/images/meditation.jpg', '通过呼吸和正念冥想,该课程已被取消。', 50.00, 'coach_wang', '2026-06-29 08:00:00', '2026-06-29 08:00:00'),
('蜜桃臀塑造', 103, 3, '2026-06-23 19:00:00', '2026-06-23 20:00:00', 10, 8, 2, '私教专区', '/images/glute.jpg', '针对性训练臀部肌肉群,课程已结束。', 50.00, 'coach_li', '2026-06-23 09:15:00', '2026-06-23 09:15:00'),
('午间冥想放松', 101, 1, '2026-06-25 12:00:00', '2026-06-25 13:00:00', 15, 6, 2, '冥想室', '/images/meditation_noon.jpg', '午间冥想课程,已结束。', 50.00, 'admin', '2026-06-25 09:00:00', '2026-06-25 09:00:00');
('极速燃脂单车', 104, 2, '2026-07-15 16:45:00', '2026-07-15 20:20:00', 25, 0, 0, '单车房', '/images/spinning.jpg', '跟随音乐节奏变换阻力和速度,体验爬坡与冲刺的快感。', 50.00, 'admin', '2026-07-14 10:00:00', '2026-07-14 10:00:00'),
('清晨流瑜伽', 101, 1, '2026-07-18 09:00:00', '2026-07-18 10:30:00', 15, 5, 0, 'A座3楼瑜伽教室', '/images/yoga_flow.jpg', '适合有一定基础的学员,通过流畅的体式连接呼吸。', 50.00, 'admin', '2026-07-14 10:00:00', '2026-07-14 10:00:00'),
('燃脂搏击', 102, 2, '2026-07-16 18:30:00', '2026-07-16 19:30:00', 20, 20, 0, '综合训练区', '/images/kickboxing.jpg', '高强度间歇训练,名额已满。', 50.00, 'coach_zhang', '2026-07-14 14:30:00', '2026-07-14 14:30:00'),
('哈他瑜伽', 101, 1, '2026-07-14 17:45:00', '2026-07-14 18:50:00', 12, 3, 0, '瑜伽教室B', '/images/hatha_yoga.jpg', '基础哈他瑜伽,距开始不足30分钟,已停止预约。', 50.00, 'coach_li', '2026-07-14 08:00:00', '2026-07-14 08:00:00'),
('周末冥想修复', 101, 1, '2026-07-26 15:00:00', '2026-07-26 16:00:00', 12, 3, 1, '冥想室', '/images/meditation.jpg', '通过呼吸和正念冥想,该课程已被取消。', 50.00, 'coach_wang', '2026-07-14 08:00:00', '2026-07-14 08:00:00'),
('蜜桃臀塑造', 103, 3, '2026-07-08 19:00:00', '2026-07-08 20:00:00', 10, 8, 2, '私教专区', '/images/glute.jpg', '针对性训练臀部肌肉群,课程已结束。', 50.00, 'coach_li', '2026-07-08 09:15:00', '2026-07-08 09:15:00'),
('午间冥想放松', 101, 1, '2026-07-10 12:00:00', '2026-07-10 13:00:00', 15, 6, 2, '冥想室', '/images/meditation_noon.jpg', '午间冥想课程,已结束。', 50.00, 'admin', '2026-07-10 09:00:00', '2026-07-10 09:00:00');
-- G2: V10 预约场景(已取消次数卡支付,仅保留储值卡)
INSERT INTO group_course (course_name, coach_id, course_type, start_time, end_time, max_members, current_members, status, location, description, stored_value_amount, create_by, created_at, updated_at) VALUES
('燃脂搏击_储值测试', 102, 2, '2026-07-01 19:30:00', '2026-07-01 20:30:00', 20, 0, 0, '综合训练区', '消耗储值50元', 50.00, 'admin', '2026-06-29 10:00:00', '2026-06-29 10:00:00'),
('高端普拉提_储值卡课程', 103, 1, '2026-07-02 19:00:00', '2026-07-02 20:00:00', 15, 0, 0, '普拉提教室', '消耗储值20元', 20.00, 'admin', '2026-06-29 10:00:00', '2026-06-29 10:00:00');
('燃脂搏击_储值测试', 102, 2, '2026-07-16 19:30:00', '2026-07-16 20:30:00', 20, 0, 0, '综合训练区', '消耗储值50元', 50.00, 'admin', '2026-07-14 10:00:00', '2026-07-14 10:00:00'),
('高端普拉提_储值卡课程', 103, 1, '2026-07-17 19:00:00', '2026-07-17 20:00:00', 15, 0, 0, '普拉提教室', '消耗储值20元', 20.00, 'admin', '2026-07-14 10:00:00', '2026-07-14 10:00:00');
-- G3: V11 取消预约场景
INSERT INTO group_course (course_name, coach_id, course_type, start_time, end_time, max_members, current_members, status, location, description, stored_value_amount, create_by, created_at, updated_at) VALUES
('晚间瑜伽_取消测试', 101, 1, '2026-07-02 19:00:00', '2026-07-02 20:00:00', 20, 0, 0, '瑜伽教室', '用于测试取消预约功能', 30.00, 'admin', '2026-06-29 10:00:00', '2026-06-29 10:00:00');
('晚间瑜伽_取消测试', 101, 1, '2026-07-17 19:00:00', '2026-07-17 20:00:00', 20, 0, 0, '瑜伽教室', '用于测试取消预约功能', 30.00, 'admin', '2026-07-14 10:00:00', '2026-07-14 10:00:00');
-- G4: V12 时间冲突场景
INSERT INTO group_course (course_name, coach_id, course_type, start_time, end_time, max_members, current_members, status, location, description, stored_value_amount, create_by, created_at, updated_at) VALUES
('时间冲突测试_A_13点-15点', 102, 2, '2026-07-01 13:00:00', '2026-07-01 15:00:00', 20, 0, 0, '综合训练区', '测试用团课A', 50.00, 'admin', '2026-06-29 10:00:00', '2026-06-29 10:00:00'),
('时间冲突测试_B_14点-16点', 103, 1, '2026-07-01 14:00:00', '2026-07-01 16:00:00', 15, 0, 0, '普拉提教室', '与团课A时间重叠', 50.00, 'admin', '2026-06-29 10:00:00', '2026-06-29 10:00:00'),
('时间冲突测试_C_10点-12点', 101, 1, '2026-07-01 10:00:00', '2026-07-01 12:00:00', 15, 0, 0, '瑜伽教室', '与A/B不冲突', 50.00, 'admin', '2026-06-29 10:00:00', '2026-06-29 10:00:00');
('时间冲突测试_A_13点-15点', 102, 2, '2026-07-16 13:00:00', '2026-07-16 15:00:00', 20, 0, 0, '综合训练区', '测试用团课A', 50.00, 'admin', '2026-07-14 10:00:00', '2026-07-14 10:00:00'),
('时间冲突测试_B_14点-16点', 103, 1, '2026-07-16 14:00:00', '2026-07-16 16:00:00', 15, 0, 0, '普拉提教室', '与团课A时间重叠', 50.00, 'admin', '2026-07-14 10:00:00', '2026-07-14 10:00:00'),
('时间冲突测试_C_10点-12点', 101, 1, '2026-07-16 10:00:00', '2026-07-16 12:00:00', 15, 0, 0, '瑜伽教室', '与A/B不冲突', 50.00, 'admin', '2026-07-14 10:00:00', '2026-07-14 10:00:00');
-- G5: V14 数据统计场景(今天 2026-06-29
-- G5: V14 数据统计场景(今天 2026-07-14
INSERT INTO group_course (id, course_name, coach_id, course_type, start_time, end_time, max_members, current_members, status, location, cover_image, description, stored_value_amount, created_at, updated_at) VALUES
(3001, '瑜伽入门', 1, 1, '2026-06-29 08:00:00', '2026-06-29 09:00:00', 20, 15, 0, '健身房A区', 'https://example.com/yoga.jpg', '适合初学者的瑜伽课程', 50.00, '2026-06-29 10:00:00', '2026-06-29 10:00:00'),
(3002, '动感单车', 2, 2, '2026-06-29 09:30:00', '2026-06-29 10:30:00', 25, 20, 0, '健身房B区', 'https://example.com/spinning.jpg', '高强度有氧运动', 50.00, '2026-06-29 11:00:00', '2026-06-29 11:00:00'),
(3003, '普拉提', 3, 1, '2026-06-29 14:00:00', '2026-06-29 15:00:00', 15, 10, 0, '健身房C区', 'https://example.com/pilates.jpg', '核心力量训练', 50.00, '2026-06-29 12:00:00', '2026-06-29 12:00:00');
(3001, '瑜伽入门', 1, 1, '2026-07-14 08:00:00', '2026-07-14 09:00:00', 20, 15, 0, '健身房A区', 'https://example.com/yoga.jpg', '适合初学者的瑜伽课程', 50.00, '2026-07-14 10:00:00', '2026-07-14 10:00:00'),
(3002, '动感单车', 2, 2, '2026-07-14 09:30:00', '2026-07-14 10:30:00', 25, 20, 0, '健身房B区', 'https://example.com/spinning.jpg', '高强度有氧运动', 50.00, '2026-07-14 11:00:00', '2026-07-14 11:00:00'),
(3003, '普拉提', 3, 1, '2026-07-14 14:00:00', '2026-07-14 15:00:00', 15, 10, 0, '健身房C区', 'https://example.com/pilates.jpg', '核心力量训练', 50.00, '2026-07-14 12:00:00', '2026-07-14 12:00:00');
-- ============================================================
-- Section H: 团课预约记录
@@ -191,116 +191,116 @@ INSERT INTO group_course (id, course_name, coach_id, course_type, start_time, en
-- H1: V11 取消预约测试
INSERT INTO group_course_booking (course_id, member_id, member_card_id, booking_time, status, course_name, course_start_time, course_end_time, location, created_at, updated_at) VALUES
((SELECT id FROM group_course WHERE course_name = '晚间瑜伽_取消测试'), (SELECT id FROM member_user WHERE member_no = 'MEM_TEST_ZHANG'), (SELECT id FROM member_card_record WHERE member_id = (SELECT id FROM member_user WHERE member_no = 'MEM_TEST_ZHANG')), '2026-06-29 11:00:00', '0', '晚间瑜伽_取消测试', '2026-07-02 19:00:00', '2026-07-02 20:00:00', '瑜伽教室', '2026-06-29 11:00:00', '2026-06-29 11:00:00'),
((SELECT id FROM group_course WHERE course_name = '晚间瑜伽_取消测试'), (SELECT id FROM member_user WHERE member_no = 'MEM_TEST_LI'), (SELECT id FROM member_card_record WHERE member_id = (SELECT id FROM member_user WHERE member_no = 'MEM_TEST_LI')), '2026-06-29 11:30:00', '0', '晚间瑜伽_取消测试', '2026-07-02 19:00:00', '2026-07-02 20:00:00', '瑜伽教室', '2026-06-29 11:30:00', '2026-06-29 11:30:00'),
((SELECT id FROM group_course WHERE course_name = '晚间瑜伽_取消测试'), (SELECT id FROM member_user WHERE member_no = 'MEM_TEST_WANG'), (SELECT id FROM member_card_record WHERE member_id = (SELECT id FROM member_user WHERE member_no = 'MEM_TEST_WANG')), '2026-06-29 12:00:00', '0', '晚间瑜伽_取消测试', '2026-07-02 19:00:00', '2026-07-02 20:00:00', '瑜伽教室', '2026-06-29 12:00:00', '2026-06-29 12:00:00');
((SELECT id FROM group_course WHERE course_name = '晚间瑜伽_取消测试'), (SELECT id FROM member_user WHERE member_no = 'MEM_TEST_ZHANG'), (SELECT id FROM member_card_record WHERE member_id = (SELECT id FROM member_user WHERE member_no = 'MEM_TEST_ZHANG')), '2026-07-14 11:00:00', '0', '晚间瑜伽_取消测试', '2026-07-17 19:00:00', '2026-07-17 20:00:00', '瑜伽教室', '2026-07-14 11:00:00', '2026-07-14 11:00:00'),
((SELECT id FROM group_course WHERE course_name = '晚间瑜伽_取消测试'), (SELECT id FROM member_user WHERE member_no = 'MEM_TEST_LI'), (SELECT id FROM member_card_record WHERE member_id = (SELECT id FROM member_user WHERE member_no = 'MEM_TEST_LI')), '2026-07-14 11:30:00', '0', '晚间瑜伽_取消测试', '2026-07-17 19:00:00', '2026-07-17 20:00:00', '瑜伽教室', '2026-07-14 11:30:00', '2026-07-14 11:30:00'),
((SELECT id FROM group_course WHERE course_name = '晚间瑜伽_取消测试'), (SELECT id FROM member_user WHERE member_no = 'MEM_TEST_WANG'), (SELECT id FROM member_card_record WHERE member_id = (SELECT id FROM member_user WHERE member_no = 'MEM_TEST_WANG')), '2026-07-14 12:00:00', '0', '晚间瑜伽_取消测试', '2026-07-17 19:00:00', '2026-07-17 20:00:00', '瑜伽教室', '2026-07-14 12:00:00', '2026-07-14 12:00:00');
UPDATE group_course SET current_members = current_members + 3 WHERE course_name = '晚间瑜伽_取消测试';
-- H2: V14 数据统计预约 - 今天(6月24日)
-- H2: V14 数据统计预约 - 今天(7月14日)
INSERT INTO group_course_booking (id, member_id, member_card_id, course_id, booking_time, status, created_at, updated_at) VALUES
(4001, 1001, 1, 3001, '2026-06-29 08:00:00', '2', '2026-06-23 20:00:00', '2026-06-29 08:30:00'),
(4002, 1002, 2, 3001, '2026-06-29 08:00:00', '2', '2026-06-23 21:00:00', '2026-06-29 08:30:00'),
(4003, 1003, 3, 3001, '2026-06-29 08:00:00', '3', '2026-06-23 22:00:00', '2026-06-29 09:00:00'),
(4004, 1004, 4, 3002, '2026-06-29 09:30:00', '2', '2026-06-23 19:00:00', '2026-06-29 09:30:00'),
(4005, 1005, 5, 3002, '2026-06-29 09:30:00', '1', '2026-06-23 20:30:00', '2026-06-29 09:00:00'),
(4006, 1006, 6, 3002, '2026-06-29 09:30:00', '2', '2026-06-23 21:30:00', '2026-06-29 09:30:00'),
(4007, 1007, 7, 3003, '2026-06-29 14:00:00', '2', '2026-06-23 22:30:00', '2026-06-29 14:00:00'),
(4008, 1008, 8, 3003, '2026-06-29 14:00:00', '3', '2026-06-29 08:00:00', '2026-06-29 14:00:00'),
(4009, 1009, 9, 3003, '2026-06-29 14:00:00', '2', '2026-06-29 09:00:00', '2026-06-29 14:00:00'),
(4010, 1010, 10, 3001, '2026-06-29 08:00:00', '2', '2026-06-29 07:00:00', '2026-06-29 08:00:00'),
(4011, 1011, 11, 3002, '2026-06-29 09:30:00', '1', '2026-06-29 08:30:00', '2026-06-29 09:00:00'),
(4012, 1012, 12, 3003, '2026-06-29 14:00:00', '2', '2026-06-29 10:00:00', '2026-06-29 14:00:00');
(4001, 1001, 1, 3001, '2026-07-14 08:00:00', '2', '2026-07-08 20:00:00', '2026-07-14 08:30:00'),
(4002, 1002, 2, 3001, '2026-07-14 08:00:00', '2', '2026-07-08 21:00:00', '2026-07-14 08:30:00'),
(4003, 1003, 3, 3001, '2026-07-14 08:00:00', '3', '2026-07-08 22:00:00', '2026-07-14 09:00:00'),
(4004, 1004, 4, 3002, '2026-07-14 09:30:00', '2', '2026-07-08 19:00:00', '2026-07-14 09:30:00'),
(4005, 1005, 5, 3002, '2026-07-14 09:30:00', '1', '2026-07-08 20:30:00', '2026-07-14 09:00:00'),
(4006, 1006, 6, 3002, '2026-07-14 09:30:00', '2', '2026-07-08 21:30:00', '2026-07-14 09:30:00'),
(4007, 1007, 7, 3003, '2026-07-14 14:00:00', '2', '2026-07-08 22:30:00', '2026-07-14 14:00:00'),
(4008, 1008, 8, 3003, '2026-07-14 14:00:00', '3', '2026-07-14 08:00:00', '2026-07-14 14:00:00'),
(4009, 1009, 9, 3003, '2026-07-14 14:00:00', '2', '2026-07-14 09:00:00', '2026-07-14 14:00:00'),
(4010, 1010, 10, 3001, '2026-07-14 08:00:00', '2', '2026-07-14 07:00:00', '2026-07-14 08:00:00'),
(4011, 1011, 11, 3002, '2026-07-14 09:30:00', '1', '2026-07-14 08:30:00', '2026-07-14 09:00:00'),
(4012, 1012, 12, 3003, '2026-07-14 14:00:00', '2', '2026-07-14 10:00:00', '2026-07-14 14:00:00');
-- H3: V14 数据统计预约 - 昨天(6月23日)
-- H3: V14 数据统计预约 - 昨天(7月13日)
INSERT INTO group_course_booking (id, member_id, member_card_id, course_id, booking_time, status, created_at, updated_at) VALUES
(4013, 1001, 1, 3001, '2026-06-23 08:00:00', '2', '2026-06-22 20:00:00', '2026-06-23 08:30:00'),
(4014, 1002, 2, 3001, '2026-06-23 08:00:00', '2', '2026-06-22 21:00:00', '2026-06-23 08:30:00'),
(4015, 1003, 3, 3002, '2026-06-23 09:30:00', '3', '2026-06-22 22:00:00', '2026-06-23 09:30:00'),
(4016, 1004, 4, 3002, '2026-06-23 09:30:00', '2', '2026-06-22 19:00:00', '2026-06-23 09:30:00'),
(4017, 1005, 5, 3003, '2026-06-23 14:00:00', '1', '2026-06-22 20:30:00', '2026-06-23 13:00:00'),
(4018, 1006, 6, 3003, '2026-06-23 14:00:00', '2', '2026-06-22 21:30:00', '2026-06-23 14:00:00');
(4013, 1001, 1, 3001, '2026-07-08 08:00:00', '2', '2026-07-07 20:00:00', '2026-07-08 08:30:00'),
(4014, 1002, 2, 3001, '2026-07-08 08:00:00', '2', '2026-07-07 21:00:00', '2026-07-08 08:30:00'),
(4015, 1003, 3, 3002, '2026-07-08 09:30:00', '3', '2026-07-07 22:00:00', '2026-07-08 09:30:00'),
(4016, 1004, 4, 3002, '2026-07-08 09:30:00', '2', '2026-07-07 19:00:00', '2026-07-08 09:30:00'),
(4017, 1005, 5, 3003, '2026-07-08 14:00:00', '1', '2026-07-07 20:30:00', '2026-07-08 13:00:00'),
(4018, 1006, 6, 3003, '2026-07-08 14:00:00', '2', '2026-07-07 21:30:00', '2026-07-08 14:00:00');
-- H4: V14 数据统计预约 - 前天(6月22日)
-- H4: V14 数据统计预约 - 前天(7月12日)
INSERT INTO group_course_booking (id, member_id, member_card_id, course_id, booking_time, status, created_at, updated_at) VALUES
(4019, 1001, 1, 3002, '2026-06-22 09:30:00', '2', '2026-06-21 20:00:00', '2026-06-22 09:30:00'),
(4020, 1002, 2, 3002, '2026-06-22 09:30:00', '2', '2026-06-21 21:00:00', '2026-06-22 09:30:00'),
(4021, 1003, 3, 3003, '2026-06-22 14:00:00', '2', '2026-06-21 22:00:00', '2026-06-22 14:00:00'),
(4022, 1004, 4, 3003, '2026-06-22 14:00:00', '3', '2026-06-21 19:00:00', '2026-06-22 14:00:00');
(4019, 1001, 1, 3002, '2026-07-07 09:30:00', '2', '2026-07-06 20:00:00', '2026-07-07 09:30:00'),
(4020, 1002, 2, 3002, '2026-07-07 09:30:00', '2', '2026-07-06 21:00:00', '2026-07-07 09:30:00'),
(4021, 1003, 3, 3003, '2026-07-07 14:00:00', '2', '2026-07-06 22:00:00', '2026-07-07 14:00:00'),
(4022, 1004, 4, 3003, '2026-07-07 14:00:00', '3', '2026-07-06 19:00:00', '2026-07-07 14:00:00');
-- ============================================================
-- Section I: 签到记录(来源 V14,基于 2026-06-29
-- Section I: 签到记录(来源 V14,基于 2026-07-14
-- ============================================================
INSERT INTO sign_in_record (id, member_id, sign_in_time, sign_in_type, sign_in_status, source, is_delete) VALUES
(2001, 1001, '2026-06-29 08:00:00', 'QR_CODE', 'SUCCESS', 'MINI_PROGRAM', false),
(2002, 1002, '2026-06-29 08:15:00', 'MANUAL', 'SUCCESS', 'PC_BACKEND', false),
(2003, 1003, '2026-06-29 08:30:00', 'FACE', 'SUCCESS', 'MINI_PROGRAM', false),
(2004, 1004, '2026-06-29 09:00:00', 'QR_CODE', 'SUCCESS', 'MINI_PROGRAM', false),
(2005, 1005, '2026-06-29 09:15:00', 'MANUAL', 'SUCCESS', 'PC_BACKEND', false),
(2006, 1006, '2026-06-29 09:30:00', 'QR_CODE', 'SUCCESS', 'MINI_PROGRAM', false),
(2007, 1007, '2026-06-29 10:00:00', 'FACE', 'SUCCESS', 'MINI_PROGRAM', false),
(2008, 1008, '2026-06-29 10:15:00', 'QR_CODE', 'SUCCESS', 'MINI_PROGRAM', false),
(2009, 1009, '2026-06-29 10:30:00', 'MANUAL', 'SUCCESS', 'PC_BACKEND', false),
(2010, 1010, '2026-06-29 11:00:00', 'QR_CODE', 'SUCCESS', 'MINI_PROGRAM', false),
(2011, 1011, '2026-06-29 11:15:00', 'FACE', 'FAIL', 'MINI_PROGRAM', false),
(2012, 1012, '2026-06-29 11:30:00', 'MANUAL', 'SUCCESS', 'PC_BACKEND', false);
(2001, 1001, '2026-07-14 08:00:00', 'QR_CODE', 'SUCCESS', 'MINI_PROGRAM', false),
(2002, 1002, '2026-07-14 08:15:00', 'MANUAL', 'SUCCESS', 'PC_BACKEND', false),
(2003, 1003, '2026-07-14 08:30:00', 'FACE', 'SUCCESS', 'MINI_PROGRAM', false),
(2004, 1004, '2026-07-14 09:00:00', 'QR_CODE', 'SUCCESS', 'MINI_PROGRAM', false),
(2005, 1005, '2026-07-14 09:15:00', 'MANUAL', 'SUCCESS', 'PC_BACKEND', false),
(2006, 1006, '2026-07-14 09:30:00', 'QR_CODE', 'SUCCESS', 'MINI_PROGRAM', false),
(2007, 1007, '2026-07-14 10:00:00', 'FACE', 'SUCCESS', 'MINI_PROGRAM', false),
(2008, 1008, '2026-07-14 10:15:00', 'QR_CODE', 'SUCCESS', 'MINI_PROGRAM', false),
(2009, 1009, '2026-07-14 10:30:00', 'MANUAL', 'SUCCESS', 'PC_BACKEND', false),
(2010, 1010, '2026-07-14 11:00:00', 'QR_CODE', 'SUCCESS', 'MINI_PROGRAM', false),
(2011, 1011, '2026-07-14 11:15:00', 'FACE', 'FAIL', 'MINI_PROGRAM', false),
(2012, 1012, '2026-07-14 11:30:00', 'MANUAL', 'SUCCESS', 'PC_BACKEND', false);
INSERT INTO sign_in_record (id, member_id, sign_in_time, sign_in_type, sign_in_status, source, is_delete) VALUES
(2013, 1001, '2026-06-23 07:30:00', 'QR_CODE', 'SUCCESS', 'MINI_PROGRAM', false),
(2014, 1002, '2026-06-23 08:00:00', 'MANUAL', 'SUCCESS', 'PC_BACKEND', false),
(2015, 1003, '2026-06-23 08:30:00', 'FACE', 'SUCCESS', 'MINI_PROGRAM', false),
(2016, 1004, '2026-06-23 09:00:00', 'QR_CODE', 'SUCCESS', 'MINI_PROGRAM', false),
(2017, 1005, '2026-06-23 09:30:00', 'MANUAL', 'SUCCESS', 'PC_BACKEND', false),
(2018, 1006, '2026-06-23 10:00:00', 'QR_CODE', 'SUCCESS', 'MINI_PROGRAM', false),
(2019, 1007, '2026-06-23 10:30:00', 'FACE', 'SUCCESS', 'MINI_PROGRAM', false),
(2020, 1008, '2026-06-23 11:00:00', 'QR_CODE', 'SUCCESS', 'MINI_PROGRAM', false);
(2013, 1001, '2026-07-08 07:30:00', 'QR_CODE', 'SUCCESS', 'MINI_PROGRAM', false),
(2014, 1002, '2026-07-08 08:00:00', 'MANUAL', 'SUCCESS', 'PC_BACKEND', false),
(2015, 1003, '2026-07-08 08:30:00', 'FACE', 'SUCCESS', 'MINI_PROGRAM', false),
(2016, 1004, '2026-07-08 09:00:00', 'QR_CODE', 'SUCCESS', 'MINI_PROGRAM', false),
(2017, 1005, '2026-07-08 09:30:00', 'MANUAL', 'SUCCESS', 'PC_BACKEND', false),
(2018, 1006, '2026-07-08 10:00:00', 'QR_CODE', 'SUCCESS', 'MINI_PROGRAM', false),
(2019, 1007, '2026-07-08 10:30:00', 'FACE', 'SUCCESS', 'MINI_PROGRAM', false),
(2020, 1008, '2026-07-08 11:00:00', 'QR_CODE', 'SUCCESS', 'MINI_PROGRAM', false);
INSERT INTO sign_in_record (id, member_id, sign_in_time, sign_in_type, sign_in_status, source, is_delete) VALUES
(2021, 1001, '2026-06-22 07:00:00', 'QR_CODE', 'SUCCESS', 'MINI_PROGRAM', false),
(2022, 1002, '2026-06-22 07:30:00', 'MANUAL', 'SUCCESS', 'PC_BACKEND', false),
(2023, 1003, '2026-06-22 08:00:00', 'FACE', 'FAIL', 'MINI_PROGRAM', false),
(2024, 1004, '2026-06-22 08:30:00', 'QR_CODE', 'SUCCESS', 'MINI_PROGRAM', false),
(2025, 1005, '2026-06-22 09:00:00', 'MANUAL', 'SUCCESS', 'PC_BACKEND', false);
(2021, 1001, '2026-07-07 07:00:00', 'QR_CODE', 'SUCCESS', 'MINI_PROGRAM', false),
(2022, 1002, '2026-07-07 07:30:00', 'MANUAL', 'SUCCESS', 'PC_BACKEND', false),
(2023, 1003, '2026-07-07 08:00:00', 'FACE', 'FAIL', 'MINI_PROGRAM', false),
(2024, 1004, '2026-07-07 08:30:00', 'QR_CODE', 'SUCCESS', 'MINI_PROGRAM', false),
(2025, 1005, '2026-07-07 09:00:00', 'MANUAL', 'SUCCESS', 'PC_BACKEND', false);
-- ============================================================
-- Section J: 团课推荐测试数据(来源 V18,基于 2026-06-29
-- Section J: 团课推荐测试数据(来源 V18,基于 2026-07-14
-- ============================================================
INSERT INTO group_course_recommend (course_id, recommend_title, recommend_content, recommend_reason, priority, is_active, create_by, created_at, updated_at) VALUES
((SELECT id FROM group_course WHERE course_name = '极速燃脂单车'), '本周热门推荐', '极速燃脂单车课程,跟随音乐节奏变换阻力和速度,体验爬坡与冲刺的快感,一节课消耗800大卡!', '教练专业,课程内容丰富,深受学员喜爱,燃脂效果显著', 20, true, 'admin', '2026-06-29 10:00:00', '2026-06-29 10:00:00');
((SELECT id FROM group_course WHERE course_name = '极速燃脂单车'), '本周热门推荐', '极速燃脂单车课程,跟随音乐节奏变换阻力和速度,体验爬坡与冲刺的快感,一节课消耗800大卡!', '教练专业,课程内容丰富,深受学员喜爱,燃脂效果显著', 20, true, 'admin', '2026-07-14 10:00:00', '2026-07-14 10:00:00');
INSERT INTO group_course_recommend (course_id, recommend_title, recommend_content, recommend_reason, priority, is_active, create_by, created_at, updated_at) VALUES
((SELECT id FROM group_course WHERE course_name = '清晨流瑜伽'), '新手友好推荐', '清晨流瑜伽课程,适合有一定基础的学员,通过流畅的体式连接呼吸,唤醒身体能量。', '适合新手入门,教练耐心指导,课程节奏适中', 15, true, 'admin', '2026-06-29 11:00:00', '2026-06-29 11:00:00');
((SELECT id FROM group_course WHERE course_name = '清晨流瑜伽'), '新手友好推荐', '清晨流瑜伽课程,适合有一定基础的学员,通过流畅的体式连接呼吸,唤醒身体能量。', '适合新手入门,教练耐心指导,课程节奏适中', 15, true, 'admin', '2026-07-14 11:00:00', '2026-07-14 11:00:00');
INSERT INTO group_course_recommend (course_id, recommend_title, recommend_content, recommend_reason, priority, is_active, create_by, created_at, updated_at) VALUES
((SELECT id FROM group_course WHERE course_name = '燃脂搏击'), '高强度燃脂', '燃脂搏击课程,高强度间歇训练,配合音乐快速燃脂,释放压力。', '高强度训练,适合进阶学员,快速燃脂塑形', 10, false, 'admin', '2026-06-29 12:00:00', '2026-06-29 12:00:00');
((SELECT id FROM group_course WHERE course_name = '燃脂搏击'), '高强度燃脂', '燃脂搏击课程,高强度间歇训练,配合音乐快速燃脂,释放压力。', '高强度训练,适合进阶学员,快速燃脂塑形', 10, false, 'admin', '2026-07-14 12:00:00', '2026-07-14 12:00:00');
INSERT INTO group_course_recommend (course_id, recommend_title, recommend_content, recommend_reason, priority, is_active, create_by, created_at, updated_at) VALUES
((SELECT id FROM group_course WHERE course_name = '哈他瑜伽'), '基础瑜伽推荐', '基础哈他瑜伽课程,适合所有级别学员,通过基础体式练习提升身体柔韧性和平衡能力。', '零基础友好,适合所有健身水平,放松身心', 12, true, 'coach_li', '2026-06-29 13:00:00', '2026-06-29 13:00:00');
((SELECT id FROM group_course WHERE course_name = '哈他瑜伽'), '基础瑜伽推荐', '基础哈他瑜伽课程,适合所有级别学员,通过基础体式练习提升身体柔韧性和平衡能力。', '零基础友好,适合所有健身水平,放松身心', 12, true, 'coach_li', '2026-07-14 13:00:00', '2026-07-14 13:00:00');
INSERT INTO group_course_recommend (course_id, recommend_title, recommend_content, recommend_reason, priority, is_active, create_by, created_at, updated_at) VALUES
((SELECT id FROM group_course WHERE course_name = '蜜桃臀塑造'), '塑形热门课程', '蜜桃臀塑造课程,针对性训练臀部肌肉群,打造完美曲线。', '专业私教指导,动作标准,效果显著,深受女性学员喜爱', 18, true, 'coach_li', '2026-06-29 09:15:00', '2026-06-29 09:15:00');
((SELECT id FROM group_course WHERE course_name = '蜜桃臀塑造'), '塑形热门课程', '蜜桃臀塑造课程,针对性训练臀部肌肉群,打造完美曲线。', '专业私教指导,动作标准,效果显著,深受女性学员喜爱', 18, true, 'coach_li', '2026-07-14 09:15:00', '2026-07-14 09:15:00');
INSERT INTO group_course_recommend (course_id, recommend_title, recommend_content, recommend_reason, priority, is_active, create_by, created_at, updated_at) VALUES
((SELECT id FROM group_course WHERE course_name = '午间冥想放松'), '午间放松推荐', '午间冥想放松课程,通过呼吸和正念冥想,深度放松身心,缓解工作压力。', '适合上班族,午间放松充电,提升下午工作效率', 8, true, 'admin', '2026-06-29 09:00:00', '2026-06-29 09:00:00');
((SELECT id FROM group_course WHERE course_name = '午间冥想放松'), '午间放松推荐', '午间冥想放松课程,通过呼吸和正念冥想,深度放松身心,缓解工作压力。', '适合上班族,午间放松充电,提升下午工作效率', 8, true, 'admin', '2026-07-14 09:00:00', '2026-07-14 09:00:00');
INSERT INTO group_course_recommend (course_id, recommend_title, recommend_content, recommend_reason, priority, is_active, create_by, created_at, updated_at) VALUES
((SELECT id FROM group_course WHERE course_name = '极速燃脂单车'), '减脂首选课程', '想要快速减脂?极速燃脂单车是你的最佳选择!专业教练带领,科学训练计划。', '减脂效果最佳,课程强度适中,适合想要快速瘦身的学员', 16, true, 'coach_zhang', '2026-06-29 14:00:00', '2026-06-29 14:00:00');
((SELECT id FROM group_course WHERE course_name = '极速燃脂单车'), '减脂首选课程', '想要快速减脂?极速燃脂单车是你的最佳选择!专业教练带领,科学训练计划。', '减脂效果最佳,课程强度适中,适合想要快速瘦身的学员', 16, true, 'coach_zhang', '2026-07-14 14:00:00', '2026-07-14 14:00:00');
INSERT INTO group_course_recommend (course_id, recommend_title, recommend_content, recommend_reason, priority, is_active, create_by, created_at, updated_at) VALUES
((SELECT id FROM group_course WHERE course_name = '清晨流瑜伽'), '晨练优选', '清晨流瑜伽,唤醒身体能量,开启活力一天!适合晨练爱好者。', '晨练最佳选择,提升身体活力,改善精神状态', 14, true, 'coach_wang', '2026-06-29 15:00:00', '2026-06-29 15:00:00');
((SELECT id FROM group_course WHERE course_name = '清晨流瑜伽'), '晨练优选', '清晨流瑜伽,唤醒身体能量,开启活力一天!适合晨练爱好者。', '晨练最佳选择,提升身体活力,改善精神状态', 14, true, 'coach_wang', '2026-07-14 15:00:00', '2026-07-14 15:00:00');
INSERT INTO group_course_recommend (course_id, recommend_title, recommend_content, recommend_reason, priority, is_active, create_by, created_at, updated_at) VALUES
((SELECT id FROM group_course WHERE course_name = '哈他瑜伽'), '身心平衡推荐', '哈他瑜伽课程,通过体式练习和呼吸控制,达到身心平衡,提升整体健康水平。', '改善身体柔韧性,增强核心力量,提升身体协调性', 11, true, 'coach_li', '2026-06-29 16:00:00', '2026-06-29 16:00:00');
((SELECT id FROM group_course WHERE course_name = '哈他瑜伽'), '身心平衡推荐', '哈他瑜伽课程,通过体式练习和呼吸控制,达到身心平衡,提升整体健康水平。', '改善身体柔韧性,增强核心力量,提升身体协调性', 11, true, 'coach_li', '2026-07-14 16:00:00', '2026-07-14 16:00:00');
INSERT INTO group_course_recommend (course_id, recommend_title, recommend_content, recommend_reason, priority, is_active, create_by, created_at, updated_at) VALUES
((SELECT id FROM group_course WHERE course_name = '午间冥想放松'), '职场减压课程', '午间冥想放松,专为职场人士设计,快速缓解工作压力,提升工作状态。', '职场减压首选,课程时间短,效果显著', 9, false, 'admin', '2026-06-29 10:00:00', '2026-06-29 10:00:00');
((SELECT id FROM group_course WHERE course_name = '午间冥想放松'), '职场减压课程', '午间冥想放松,专为职场人士设计,快速缓解工作压力,提升工作状态。', '职场减压首选,课程时间短,效果显著', 9, false, 'admin', '2026-07-14 10:00:00', '2026-07-14 10:00:00');
-- ============================================================
-- Section K: 统计说明
-- ============================================================
-- 今日(2026-06-29)统计预期:
-- 今日(2026-07-14)统计预期:
-- 新增会员: 3 (1005, 1006, 1007)
-- 签到会员: 12
-- 预约总数: 12 (4001-4012),取消: 2,出席: 8,缺席: 2
@@ -1,7 +1,7 @@
-- ============================================================
-- V23: 教练账号测试数据
-- 描述: 创建教练角色、教练用户及相关团课测试数据
-- 日期: 2026-06-22
-- 日期: 2026-07-14
-- ============================================================
-- ============================================================
@@ -4,7 +4,7 @@
-- 1. 新增测试教练用户 coachli(李教练)
-- 2. 为李教练分配教练角色(继承教练的有限权限)
-- 3. 为李教练分配未来一周的测试团课
-- 日期: 2026-06-22
-- 日期: 2026-07-14
-- ============================================================
-- ============================================================
@@ -1,66 +0,0 @@
-- ============================================================
-- V32: 新增测试数据(用于数据统计看板展示)
-- 描述: 基于当天日期,创建跨多个时间区间的会员、签到、预约数据
-- 覆盖时间区间: 今日、本周、本月、近30天、近90天、今年
-- ============================================================
-- ============================================================
-- 1. 新增会员(100人,ID 2001-2100
-- 按时间分布:今日10人 / 本周20人 / 本月30人 / 近30天60人 / 近90天85人 / 今年100人
-- 创建日期从 180 天前均匀分布到今天
-- ============================================================
INSERT INTO member_user (id, member_no, nickname, phone, gender, subscribed, is_deleted, created_at, updated_at)
SELECT
2000 + g,
'M' || TO_CHAR(CURRENT_DATE - (g % 180), 'YYYYMMDD') || LPAD(g::text, 3, '0'),
'测试会员' || g,
'138' || LPAD(g::text, 8, '0'),
(g % 3)::int,
false,
false,
(CURRENT_DATE - (g % 180) + TIME '10:00:00')::timestamp,
(CURRENT_DATE - (g % 180) + TIME '10:00:00')::timestamp
FROM generate_series(1, 100) AS g
ON CONFLICT (id) DO NOTHING;
-- ============================================================
-- 2. 签到记录(80条,使用已有会员 ID 1001-1010
-- 按时间分布:最近90天,每天约1条
-- 签到类型:QR_CODE/MANUAL/FACE 均匀分布
-- 签到状态:SUCCESS(90%) / FAILED(10%)
-- ============================================================
INSERT INTO sign_in_record (member_id, sign_in_time, sign_in_type, sign_in_status, source, is_delete, created_at, updated_at)
SELECT
1001 + (g % 10),
(CURRENT_DATE - (g % 90) + TIME '08:00:00' + (INTERVAL '1 hour' * (g % 12)))::timestamp,
CASE (g % 3) WHEN 0 THEN 'QR_CODE' WHEN 1 THEN 'MANUAL' ELSE 'FACE' END,
CASE WHEN (g % 10) = 0 THEN 'FAILED' ELSE 'SUCCESS' END,
CASE (g % 2) WHEN 0 THEN 'MINI_PROGRAM' ELSE 'PC_BACKEND' END,
false,
(CURRENT_DATE - (g % 90) + TIME '08:00:00')::timestamp,
(CURRENT_DATE - (g % 90) + TIME '08:00:00')::timestamp
FROM generate_series(1, 80) AS g;
-- ============================================================
-- 3. 团课预约(40条,使用已有会员 ID 1001-1010
-- 按时间分布:最近90天
-- 状态分布:出勤(2) 60% / 取消(1) 20% / 缺席(3) 20%
-- ============================================================
INSERT INTO group_course_booking (id, course_id, member_id, member_card_id, booking_time, status, created_at, updated_at)
SELECT
5100 + g,
CASE (g % 3) WHEN 0 THEN 3001 WHEN 1 THEN 3002 ELSE 3003 END,
1001 + (g % 10),
(SELECT id FROM member_card_record ORDER BY id LIMIT 1),
(CURRENT_DATE - (g % 90) + TIME '10:00:00')::timestamp,
CASE WHEN (g % 5) = 0 THEN '1' WHEN (g % 5) = 1 THEN '3' ELSE '2' END,
(CURRENT_DATE - (g % 90) + TIME '10:00:00')::timestamp,
(CURRENT_DATE - (g % 90) + TIME '10:00:00')::timestamp
FROM generate_series(1, 40) AS g;
-- ============================================================
-- 4. 重置序列(防止后续自动插入 ID 冲突)
-- ============================================================
SELECT setval('member_user_id_seq', (SELECT COALESCE(MAX(id), 1) FROM member_user));
SELECT setval('group_course_booking_id_seq', (SELECT COALESCE(MAX(id), 1) FROM group_course_booking));
SELECT setval('sign_in_record_id_seq', (SELECT COALESCE(MAX(id), 1) FROM sign_in_record));
@@ -0,0 +1,8 @@
-- ============================================================
-- V32: 将 group_course_booking 表的 member_card_id 改为可空
-- 说明: 预约团课不再需要会员卡,member_card_id 允许为空
-- 日期: 2026-07-14
-- ============================================================
ALTER TABLE group_course_booking
ALTER COLUMN member_card_id DROP NOT NULL;