Initial commit of akmon project

This commit is contained in:
2026-01-20 08:04:15 +08:00
commit 77a2bab985
1309 changed files with 343305 additions and 0 deletions

View File

@@ -0,0 +1,605 @@
-- ===================================================================
-- 消息系统测试数据生成脚本
-- 适用于运动训练监测与AI评估平台
-- 包含教师端和学生端用户的各种消息场景
-- ===================================================================
-- 测试用户ID
-- 教师端用户ID: 7bf7378e-a027-473e-97ac-3460ed3f170a
-- 学生端用户ID: eed3824b-bba1-4309-8048-19d17367c084
-- 清理可能存在的测试数据
DO $$
BEGIN
-- 删除测试消息数据(按依赖关系顺序)
DELETE FROM public.ak_message_recipients WHERE message_id IN (
SELECT id FROM public.ak_messages WHERE metadata->>'test_data' = 'true'
);
DELETE FROM public.ak_messages WHERE metadata->>'test_data' = 'true';
DELETE FROM public.ak_message_group_members WHERE group_id IN (
SELECT id FROM public.ak_message_groups WHERE name LIKE '%测试%'
);
DELETE FROM public.ak_message_groups WHERE name LIKE '%测试%';
RAISE NOTICE '已清理现有测试数据';
EXCEPTION WHEN OTHERS THEN
RAISE NOTICE '清理测试数据时出现错误,继续执行...';
END $$;
-- ===================================================================
-- 1. 创建测试用户消息偏好设置
-- ===================================================================
-- 为教师用户创建消息偏好设置
INSERT INTO public.ak_user_message_preferences (
user_id,
global_enabled,
push_enabled,
email_enabled,
type_preferences
) VALUES (
'7bf7378e-a027-473e-97ac-3460ed3f170a',
true,
true,
true,
'{
"system": {"enabled": true, "push": true, "email": true},
"device": {"enabled": true, "push": true, "email": false},
"training": {"enabled": true, "push": true, "email": false},
"social": {"enabled": true, "push": true, "email": false},
"assignment": {"enabled": true, "push": true, "email": true},
"achievement": {"enabled": true, "push": true, "email": false},
"chat": {"enabled": true, "push": true, "email": false},
"announcement": {"enabled": true, "push": true, "email": true},
"reminder": {"enabled": true, "push": true, "email": true},
"alert": {"enabled": true, "push": true, "email": true}
}'::jsonb
) ON CONFLICT (user_id) DO UPDATE SET
global_enabled = EXCLUDED.global_enabled,
push_enabled = EXCLUDED.push_enabled,
email_enabled = EXCLUDED.email_enabled,
type_preferences = EXCLUDED.type_preferences;
-- 为学生用户创建消息偏好设置
INSERT INTO public.ak_user_message_preferences (
user_id,
global_enabled,
push_enabled,
email_enabled,
type_preferences
) VALUES (
'eed3824b-bba1-4309-8048-19d17367c084',
true,
true,
false,
'{
"system": {"enabled": true, "push": true, "email": false},
"device": {"enabled": true, "push": true, "email": false},
"training": {"enabled": true, "push": true, "email": false},
"social": {"enabled": true, "push": true, "email": false},
"assignment": {"enabled": true, "push": true, "email": false},
"achievement": {"enabled": true, "push": true, "email": false},
"chat": {"enabled": true, "push": true, "email": false},
"announcement": {"enabled": true, "push": true, "email": false},
"reminder": {"enabled": true, "push": true, "email": false},
"alert": {"enabled": true, "push": true, "email": false}
}'::jsonb
) ON CONFLICT (user_id) DO UPDATE SET
global_enabled = EXCLUDED.global_enabled,
push_enabled = EXCLUDED.push_enabled,
email_enabled = EXCLUDED.email_enabled,
type_preferences = EXCLUDED.type_preferences;
-- ===================================================================
-- 2. 创建测试消息群组
-- ===================================================================
-- 创建班级群组
INSERT INTO public.ak_message_groups (
id,
name,
description,
group_type,
owner_id,
is_public,
member_limit,
settings
) VALUES (
'f47ac10b-58cc-4372-a567-0e02b2c3d479',
'高一(1)班运动训练群',
'高一(1)班运动训练讨论群,用于发布训练任务和交流心得',
'class',
'7bf7378e-a027-473e-97ac-3460ed3f170a',
false,
50,
'{"allow_file_upload": true, "allow_voice_message": true, "auto_archive_days": 30}'::jsonb
);
-- 创建师生群组
INSERT INTO public.ak_message_groups (
id,
name,
description,
group_type,
owner_id,
is_public,
member_limit,
settings
) VALUES (
'a1b2c3d4-e5f6-7890-abcd-ef1234567890',
'师生交流群',
'教师与学生的日常交流群组',
'normal',
'7bf7378e-a027-473e-97ac-3460ed3f170a',
false,
100,
'{"allow_file_upload": true, "allow_voice_message": true}'::jsonb
);
-- 添加群组成员
INSERT INTO public.ak_message_group_members (
group_id,
user_id,
role,
status,
nickname,
notification_enabled
) VALUES
-- 班级群成员
('f47ac10b-58cc-4372-a567-0e02b2c3d479', '7bf7378e-a027-473e-97ac-3460ed3f170a', 'owner', 'active', '李老师', true),
('f47ac10b-58cc-4372-a567-0e02b2c3d479', 'eed3824b-bba1-4309-8048-19d17367c084', 'member', 'active', '张同学', true),
-- 师生交流群成员
('a1b2c3d4-e5f6-7890-abcd-ef1234567890', '7bf7378e-a027-473e-97ac-3460ed3f170a', 'owner', 'active', '李老师', true),
('a1b2c3d4-e5f6-7890-abcd-ef1234567890', 'eed3824b-bba1-4309-8048-19d17367c084', 'member', 'active', '张同学', true);
-- ===================================================================
-- 3. 创建各类型测试消息
-- ===================================================================
-- 变量声明
DO $$
DECLARE
teacher_id uuid := '7bf7378e-a027-473e-97ac-3460ed3f170a';
student_id uuid := 'eed3824b-bba1-4309-8048-19d17367c084';
class_group_id uuid := 'f47ac10b-58cc-4372-a567-0e02b2c3d479';
chat_group_id uuid := 'a1b2c3d4-e5f6-7890-abcd-ef1234567890';
-- 消息类型ID
system_type_id uuid;
device_type_id uuid;
training_type_id uuid;
social_type_id uuid;
assignment_type_id uuid;
achievement_type_id uuid;
chat_type_id uuid;
announcement_type_id uuid;
reminder_type_id uuid;
alert_type_id uuid;
-- 消息ID变量
msg_id uuid;
BEGIN
-- 获取消息类型ID
SELECT id INTO system_type_id FROM public.ak_message_types WHERE code = 'system';
SELECT id INTO device_type_id FROM public.ak_message_types WHERE code = 'device';
SELECT id INTO training_type_id FROM public.ak_message_types WHERE code = 'training';
SELECT id INTO social_type_id FROM public.ak_message_types WHERE code = 'social';
SELECT id INTO assignment_type_id FROM public.ak_message_types WHERE code = 'assignment';
SELECT id INTO achievement_type_id FROM public.ak_message_types WHERE code = 'achievement';
SELECT id INTO chat_type_id FROM public.ak_message_types WHERE code = 'chat';
SELECT id INTO announcement_type_id FROM public.ak_message_types WHERE code = 'announcement';
SELECT id INTO reminder_type_id FROM public.ak_message_types WHERE code = 'reminder';
SELECT id INTO alert_type_id FROM public.ak_message_types WHERE code = 'alert';
-- 3.1 系统消息
INSERT INTO public.ak_messages (
id, message_type_id, sender_type, sender_id, sender_name,
receiver_type, receiver_id, title, content, content_type,
priority, is_broadcast, metadata, created_at
) VALUES (
gen_random_uuid(), system_type_id, 'system', null, '系统',
'user', student_id, '欢迎使用运动训练平台!',
'欢迎来到运动训练监测平台您可以在这里记录训练数据、查看AI分析报告、与老师同学交流。祝您运动愉快',
'text', 100, false,
'{"test_data": "true", "welcome_message": true}'::jsonb,
now() - interval '2 days'
) RETURNING id INTO msg_id;
-- 创建接收记录
INSERT INTO public.ak_message_recipients (
message_id, recipient_type, recipient_id, status, delivered_at, read_at
) VALUES (
msg_id, 'user', student_id, 'read', now() - interval '2 days', now() - interval '1 day'
);
-- 3.2 设备消息 - 设备连接成功
INSERT INTO public.ak_messages (
id, message_type_id, sender_type, sender_id, sender_name,
receiver_type, receiver_id, title, content, content_type,
priority, device_data, metadata, created_at
) VALUES (
gen_random_uuid(), device_type_id, 'device', gen_random_uuid(), '智能手环Pro',
'user', student_id, '设备连接成功',
'您的智能手环Pro已成功连接电量85%,可以开始记录运动数据了。',
'text', 80,
'{"device_name": "智能手环Pro", "battery_level": 85, "firmware_version": "2.1.3", "connection_type": "bluetooth"}'::jsonb,
'{"test_data": "true", "device_type": "wearable"}'::jsonb,
now() - interval '1 day'
) RETURNING id INTO msg_id;
INSERT INTO public.ak_message_recipients (
message_id, recipient_type, recipient_id, status, delivered_at, read_at
) VALUES (
msg_id, 'user', student_id, 'read', now() - interval '1 day', now() - interval '20 hours'
);
-- 3.3 设备消息 - 低电量警告
INSERT INTO public.ak_messages (
id, message_type_id, sender_type, sender_id, sender_name,
receiver_type, receiver_id, title, content, content_type,
priority, is_urgent, device_data, metadata, created_at
) VALUES (
gen_random_uuid(), device_type_id, 'device', gen_random_uuid(), '智能手环Pro',
'user', student_id, '设备电量不足',
'您的智能手环Pro电量仅剩15%,请及时充电以确保正常使用。',
'text', 85, true,
'{"device_name": "智能手环Pro", "battery_level": 15, "estimated_time_left": "2小时"}'::jsonb,
'{"test_data": "true", "alert_type": "low_battery"}'::jsonb,
now() - interval '2 hours'
) RETURNING id INTO msg_id;
INSERT INTO public.ak_message_recipients (
message_id, recipient_type, recipient_id, status, delivered_at
) VALUES (
msg_id, 'user', student_id, 'delivered', now() - interval '2 hours'
);
-- 3.4 训练消息 - 训练完成通知
INSERT INTO public.ak_messages (
id, message_type_id, sender_type, sender_id, sender_name,
receiver_type, receiver_id, title, content, content_type,
priority, metadata, created_at
) VALUES (
gen_random_uuid(), training_type_id, 'system', null, '训练助手',
'user', student_id, '🎉 训练完成!',
'恭喜完成跑步训练用时25分钟消耗180卡路里步数3250步平均心率145 bpm。您的表现很棒继续保持',
'text', 70,
'{"test_data": "true", "activity_type": "running", "duration": 25, "calories": 180, "steps": 3250, "avg_heart_rate": 145}'::jsonb,
now() - interval '3 hours'
) RETURNING id INTO msg_id;
INSERT INTO public.ak_message_recipients (
message_id, recipient_type, recipient_id, status, delivered_at, read_at
) VALUES (
msg_id, 'user', student_id, 'read', now() - interval '3 hours', now() - interval '2 hours'
);
-- 3.5 作业通知 - 教师发布作业
INSERT INTO public.ak_messages (
id, message_type_id, sender_type, sender_id, sender_name,
receiver_type, receiver_id, title, content, content_type,
priority, metadata, expires_at, created_at
) VALUES (
gen_random_uuid(), assignment_type_id, 'user', teacher_id, '李老师',
'user', student_id, '新作业:每日运动打卡',
'同学们好本周的运动作业已发布每天完成30分钟有氧运动记录心率和步数数据。截止时间本周日23:59。请按时完成并上传数据。',
'text', 75,
'{"test_data": "true", "assignment_id": "homework_001", "due_date": "2025-06-22 23:59:00", "subject": "体育"}'::jsonb,
'2025-06-22 23:59:00'::timestamp,
now() - interval '1 day'
) RETURNING id INTO msg_id;
INSERT INTO public.ak_message_recipients (
message_id, recipient_type, recipient_id, status, delivered_at, read_at
) VALUES (
msg_id, 'user', student_id, 'read', now() - interval '1 day', now() - interval '18 hours'
);
-- 3.6 成就通知
INSERT INTO public.ak_messages (
id, message_type_id, sender_type, sender_id, sender_name,
receiver_type, receiver_id, title, content, content_type,
priority, metadata, created_at
) VALUES (
gen_random_uuid(), achievement_type_id, 'system', null, '成就系统',
'user', student_id, '🏆 恭喜解锁新成就!',
'恭喜您解锁了"坚持不懈"成就连续7天完成运动打卡获得50积分奖励。继续努力向更高目标前进',
'text', 50,
'{"test_data": "true", "achievement_name": "坚持不懈", "points": 50, "days_streak": 7}'::jsonb,
now() - interval '6 hours'
) RETURNING id INTO msg_id;
INSERT INTO public.ak_message_recipients (
message_id, recipient_type, recipient_id, status, delivered_at
) VALUES (
msg_id, 'user', student_id, 'delivered', now() - interval '6 hours'
);
-- 3.7 群组聊天消息 - 教师在班级群发消息
INSERT INTO public.ak_messages (
id, message_type_id, sender_type, sender_id, sender_name,
receiver_type, receiver_id, title, content, content_type,
priority, conversation_id, metadata, created_at
) VALUES (
gen_random_uuid(), chat_type_id, 'user', teacher_id, '李老师',
'group', class_group_id, null,
'同学们下周一我们将进行体能测试请大家提前做好准备。测试项目包括50米跑、立定跳远、引体向上。有问题随时问我。',
'text', 90, class_group_id,
'{"test_data": "true", "group_message": true}'::jsonb,
now() - interval '4 hours'
) RETURNING id INTO msg_id;
-- 为群组成员创建接收记录
INSERT INTO public.ak_message_recipients (
message_id, recipient_type, recipient_id, status, delivered_at, read_at
) VALUES
(msg_id, 'user', student_id, 'read', now() - interval '4 hours', now() - interval '3 hours'),
(msg_id, 'user', teacher_id, 'read', now() - interval '4 hours', now() - interval '4 hours');
-- 3.8 学生回复群组消息
INSERT INTO public.ak_messages (
id, message_type_id, sender_type, sender_id, sender_name,
receiver_type, receiver_id, title, content, content_type,
priority, conversation_id, parent_message_id, metadata, created_at
) VALUES (
gen_random_uuid(), chat_type_id, 'user', student_id, '张同学',
'group', class_group_id, null,
'好的老师,我会认真准备的!请问引体向上有什么技巧吗?',
'text', 90, class_group_id, msg_id,
'{"test_data": "true", "group_message": true, "reply": true}'::jsonb,
now() - interval '3 hours'
) RETURNING id INTO msg_id;
INSERT INTO public.ak_message_recipients (
message_id, recipient_type, recipient_id, status, delivered_at, read_at
) VALUES
(msg_id, 'user', teacher_id, 'read', now() - interval '3 hours', now() - interval '2 hours'),
(msg_id, 'user', student_id, 'read', now() - interval '3 hours', now() - interval '3 hours');
-- 3.9 私聊消息 - 教师私信学生
INSERT INTO public.ak_messages (
id, message_type_id, sender_type, sender_id, sender_name,
receiver_type, receiver_id, title, content, content_type,
priority, metadata, created_at
) VALUES (
gen_random_uuid(), chat_type_id, 'user', teacher_id, '李老师',
'user', student_id, null,
'张同学,我看到你最近的运动数据很不错,心率控制得很好。继续保持这个节奏,相信你的体能会有很大提升。',
'text', 90,
'{"test_data": "true", "private_message": true}'::jsonb,
now() - interval '1 hour'
) RETURNING id INTO msg_id;
INSERT INTO public.ak_message_recipients (
message_id, recipient_type, recipient_id, status, delivered_at
) VALUES (
msg_id, 'user', student_id, 'delivered', now() - interval '1 hour'
);
-- 3.10 公告消息
INSERT INTO public.ak_messages (
id, message_type_id, sender_type, sender_id, sender_name,
receiver_type, receiver_id, title, content, content_type,
priority, is_broadcast, metadata, created_at
) VALUES (
gen_random_uuid(), announcement_type_id, 'system', null, '运动平台',
'broadcast', null, '平台升级通知',
'各位用户运动训练平台将于本周六凌晨2:00-4:00进行系统升级届时将暂停服务。升级后将新增AI运动分析功能敬请期待',
'text', 95, true,
'{"test_data": "true", "maintenance": true, "upgrade": true}'::jsonb,
now() - interval '12 hours'
) RETURNING id INTO msg_id;
-- 为所有用户创建接收记录(这里只为测试用户创建)
INSERT INTO public.ak_message_recipients (
message_id, recipient_type, recipient_id, status, delivered_at, read_at
) VALUES
(msg_id, 'user', teacher_id, 'read', now() - interval '12 hours', now() - interval '11 hours'),
(msg_id, 'user', student_id, 'read', now() - interval '12 hours', now() - interval '10 hours');
-- 3.11 提醒消息 - 运动提醒
INSERT INTO public.ak_messages (
id, message_type_id, sender_type, sender_id, sender_name,
receiver_type, receiver_id, title, content, content_type,
priority, metadata, scheduled_at, created_at
) VALUES (
gen_random_uuid(), reminder_type_id, 'system', null, '运动助手',
'user', student_id, '⏰ 运动时间到了!',
'根据您的运动计划现在是跑步时间。建议运动30分钟注意热身和拉伸。今天天气不错适合户外运动',
'text', 65,
'{"test_data": "true", "reminder_type": "exercise", "activity": "running", "duration": 30}'::jsonb,
now() - interval '30 minutes',
now() - interval '30 minutes'
) RETURNING id INTO msg_id;
INSERT INTO public.ak_message_recipients (
message_id, recipient_type, recipient_id, status, delivered_at
) VALUES (
msg_id, 'user', student_id, 'delivered', now() - interval '30 minutes'
);
-- 3.12 警报消息 - 异常心率警报
INSERT INTO public.ak_messages (
id, message_type_id, sender_type, sender_id, sender_name,
receiver_type, receiver_id, title, content, content_type,
priority, is_urgent, device_data, metadata, created_at
) VALUES (
gen_random_uuid(), alert_type_id, 'device', gen_random_uuid(), '智能手环Pro',
'user', student_id, '⚠️ 心率异常警报',
'检测到您的心率持续偏高185 bpm已超过安全范围。建议立即停止运动休息并观察。如有不适请及时就医。',
'text', 99, true,
'{"device_name": "智能手环Pro", "heart_rate": 185, "safe_range": "60-180", "duration": "5分钟"}'::jsonb,
'{"test_data": "true", "alert_type": "heart_rate", "severity": "high"}'::jsonb,
now() - interval '10 minutes'
) RETURNING id INTO msg_id;
INSERT INTO public.ak_message_recipients (
message_id, recipient_type, recipient_id, status, delivered_at, read_at
) VALUES (
msg_id, 'user', student_id, 'read', now() - interval '10 minutes', now() - interval '8 minutes'
);
-- 3.13 社交消息 - 点赞通知
INSERT INTO public.ak_messages (
id, message_type_id, sender_type, sender_id, sender_name,
receiver_type, receiver_id, title, content, content_type,
priority, metadata, created_at
) VALUES (
gen_random_uuid(), social_type_id, 'user', teacher_id, '李老师',
'user', student_id, '👍 老师为您点赞了',
'李老师为您的运动记录"今日跑步5公里"点赞了,并评论:"坚持得很好,继续加油!"',
'text', 60,
'{"test_data": "true", "social_action": "like", "post_id": "post_001", "comment": "坚持得很好,继续加油!"}'::jsonb,
now() - interval '5 hours'
) RETURNING id INTO msg_id;
INSERT INTO public.ak_message_recipients (
message_id, recipient_type, recipient_id, status, delivered_at, read_at
) VALUES (
msg_id, 'user', student_id, 'read', now() - interval '5 hours', now() - interval '4 hours'
);
-- 更新消息统计
UPDATE public.ak_messages
SET
total_recipients = (SELECT COUNT(*) FROM public.ak_message_recipients WHERE message_id = public.ak_messages.id),
delivered_count = (SELECT COUNT(*) FROM public.ak_message_recipients WHERE message_id = public.ak_messages.id AND status IN ('delivered', 'read')),
read_count = (SELECT COUNT(*) FROM public.ak_message_recipients WHERE message_id = public.ak_messages.id AND status = 'read')
WHERE metadata->>'test_data' = 'true';
RAISE NOTICE '测试消息数据创建完成!';
END $$;
-- ===================================================================
-- 4. 创建一些历史消息数据(模拟长期使用)
-- ===================================================================
-- 创建过去一个月的消息统计数据
INSERT INTO public.ak_message_stats (
date_bucket, hour_bucket, message_type_id, sender_type,
total_sent, total_delivered, total_read, total_replied
)
SELECT
date_bucket,
hour_bucket,
mt.id,
sender_type,
FLOOR(RANDOM() * 50 + 10)::INT as total_sent,
FLOOR(RANDOM() * 45 + 8)::INT as total_delivered,
FLOOR(RANDOM() * 40 + 5)::INT as total_read,
FLOOR(RANDOM() * 10 + 1)::INT as total_replied
FROM (
SELECT generate_series(
CURRENT_DATE - INTERVAL '30 days',
CURRENT_DATE - INTERVAL '1 day',
INTERVAL '1 day'
)::DATE as date_bucket,
generate_series(8, 22) as hour_bucket
) dates
CROSS JOIN (
SELECT UNNEST(ARRAY['user', 'system', 'device']) as sender_type
) senders
CROSS JOIN public.ak_message_types mt
WHERE mt.is_active = true
AND RANDOM() > 0.3; -- 随机生成70%的数据
-- ===================================================================
-- 5. 创建一些测试查询和验证
-- ===================================================================
-- 显示测试数据统计
DO $$
DECLARE
msg_count INTEGER;
recipient_count INTEGER;
unread_count INTEGER;
BEGIN
-- 统计消息数量
SELECT COUNT(*) INTO msg_count FROM public.ak_messages WHERE metadata->>'test_data' = 'true';
SELECT COUNT(*) INTO recipient_count FROM public.ak_message_recipients mr
JOIN public.ak_messages m ON mr.message_id = m.id
WHERE m.metadata->>'test_data' = 'true';
-- 统计学生未读消息
SELECT COUNT(*) INTO unread_count FROM public.ak_message_recipients mr
JOIN public.ak_messages m ON mr.message_id = m.id
WHERE m.metadata->>'test_data' = 'true'
AND mr.recipient_id = 'eed3824b-bba1-4309-8048-19d17367c084'
AND mr.status != 'read';
RAISE NOTICE '===================================================================';
RAISE NOTICE '测试数据统计:';
RAISE NOTICE '- 总消息数:%', msg_count;
RAISE NOTICE '- 总接收记录数:%', recipient_count;
RAISE NOTICE '- 学生未读消息数:%', unread_count;
RAISE NOTICE '===================================================================';
END $$;
-- ===================================================================
-- 6. 常用测试查询示例
-- ===================================================================
-- 查询学生的所有消息(按时间倒序)
/*
SELECT
m.title,
m.content,
mt.name as message_type,
m.sender_name,
mr.status,
m.created_at,
m.is_urgent,
m.priority
FROM public.ak_messages m
JOIN public.ak_message_types mt ON m.message_type_id = mt.id
JOIN public.ak_message_recipients mr ON m.id = mr.message_id
WHERE mr.recipient_id = 'eed3824b-bba1-4309-8048-19d17367c084'
AND mr.recipient_type = 'user'
AND m.metadata->>'test_data' = 'true'
ORDER BY m.created_at DESC;
*/
-- 查询教师发送的所有消息
/*
SELECT
m.title,
m.content,
mt.name as message_type,
m.receiver_type,
m.created_at,
m.total_recipients,
m.read_count
FROM public.ak_messages m
JOIN public.ak_message_types mt ON m.message_type_id = mt.id
WHERE m.sender_id = '7bf7378e-a027-473e-97ac-3460ed3f170a'
AND m.metadata->>'test_data' = 'true'
ORDER BY m.created_at DESC;
*/
-- 查询群组消息
/*
SELECT
m.title,
m.content,
m.sender_name,
mg.name as group_name,
m.created_at
FROM public.ak_messages m
JOIN public.ak_message_groups mg ON m.receiver_id = mg.id
WHERE m.receiver_type = 'group'
AND m.metadata->>'test_data' = 'true'
ORDER BY m.created_at DESC;
*/
-- 查询未读消息统计
/*
SELECT * FROM public.get_unread_message_count('eed3824b-bba1-4309-8048-19d17367c084');
*/
RAISE NOTICE '===================================================================';
RAISE NOTICE '测试数据生成完成!';
RAISE NOTICE '教师ID: 7bf7378e-a027-473e-97ac-3460ed3f170a';
RAISE NOTICE '学生ID: eed3824b-bba1-4309-8048-19d17367c084';
RAISE NOTICE '可以使用注释中的查询语句测试各种消息场景';
RAISE NOTICE '===================================================================';