Initial commit of akmon project
This commit is contained in:
126
test_class_id_functionality.sql
Normal file
126
test_class_id_functionality.sql
Normal file
@@ -0,0 +1,126 @@
|
||||
-- 测试当前用户class_id功能的验证脚本
|
||||
|
||||
-- 1. 检查ak_users表中用户的class_id设置情况
|
||||
SELECT
|
||||
id,
|
||||
username,
|
||||
email,
|
||||
role,
|
||||
school_id,
|
||||
grade_id,
|
||||
class_id
|
||||
FROM public.ak_users
|
||||
WHERE role IN ('teacher', 'student')
|
||||
ORDER BY role, username;
|
||||
|
||||
-- 2. 检查每个班级的学生分布
|
||||
SELECT
|
||||
c.id as class_id,
|
||||
c.name as class_name,
|
||||
g.name as grade_name,
|
||||
s.name as school_name,
|
||||
COUNT(u.id) as student_count,
|
||||
array_agg(u.username) as student_names
|
||||
FROM public.ak_classes c
|
||||
LEFT JOIN public.ak_grades g ON c.grade_id = g.id
|
||||
LEFT JOIN public.ak_schools s ON g.school_id = s.id
|
||||
LEFT JOIN public.ak_users u ON u.class_id = c.id AND u.role = 'student'
|
||||
GROUP BY c.id, c.name, g.name, s.name
|
||||
ORDER BY s.name, g.name, c.name;
|
||||
|
||||
-- 3. 检查是否有用户(老师或学生)分配到了同一个班级
|
||||
SELECT
|
||||
class_id,
|
||||
COUNT(CASE WHEN role = 'teacher' THEN 1 END) as teacher_count,
|
||||
COUNT(CASE WHEN role = 'student' THEN 1 END) as student_count,
|
||||
array_agg(CASE WHEN role = 'teacher' THEN username END) as teachers,
|
||||
array_agg(CASE WHEN role = 'student' THEN username END) as students
|
||||
FROM public.ak_users
|
||||
WHERE class_id IS NOT NULL
|
||||
GROUP BY class_id
|
||||
ORDER BY class_id;
|
||||
|
||||
-- 4. 模拟前端功能:假设当前登录用户有class_id,查询同班级学生
|
||||
-- 这里以第一个有class_id的用户为例
|
||||
WITH current_user_class AS (
|
||||
SELECT class_id
|
||||
FROM public.ak_users
|
||||
WHERE class_id IS NOT NULL
|
||||
LIMIT 1
|
||||
)
|
||||
SELECT
|
||||
u.id,
|
||||
u.username,
|
||||
u.role,
|
||||
u.class_id,
|
||||
c.name as class_name
|
||||
FROM public.ak_users u
|
||||
JOIN current_user_class cuc ON u.class_id = cuc.class_id
|
||||
LEFT JOIN public.ak_classes c ON u.class_id = c.id
|
||||
WHERE u.role = 'student'
|
||||
ORDER BY u.username;
|
||||
|
||||
-- 5. 检查v_latest_student_health视图是否存在并能正常查询
|
||||
-- 如果视图不存在,这个查询会报错
|
||||
SELECT
|
||||
user_id,
|
||||
name,
|
||||
temperature_c,
|
||||
heart_rate_bpm,
|
||||
spo2_percent,
|
||||
step_count
|
||||
FROM public.v_latest_student_health
|
||||
LIMIT 5;
|
||||
|
||||
-- 6. 完整的模拟查询:模拟前端的完整逻辑
|
||||
-- 假设当前用户的class_id是第一个有class_id的用户
|
||||
WITH current_user_info AS (
|
||||
SELECT id, username, class_id
|
||||
FROM public.ak_users
|
||||
WHERE class_id IS NOT NULL
|
||||
LIMIT 1
|
||||
),
|
||||
same_class_students AS (
|
||||
SELECT u.id, u.username, u.student_id, u.avatar
|
||||
FROM public.ak_users u
|
||||
JOIN current_user_info cui ON u.class_id = cui.class_id
|
||||
WHERE u.role = 'student'
|
||||
)
|
||||
SELECT
|
||||
scs.id,
|
||||
scs.username,
|
||||
scs.student_id,
|
||||
vh.temperature_c,
|
||||
vh.heart_rate_bpm,
|
||||
vh.spo2_percent,
|
||||
vh.step_count,
|
||||
-- 模拟异常判断
|
||||
CASE
|
||||
WHEN vh.temperature_c < 36.0 OR vh.temperature_c > 37.5 THEN 1
|
||||
ELSE 0
|
||||
END +
|
||||
CASE
|
||||
WHEN vh.heart_rate_bpm < 60 OR vh.heart_rate_bpm > 100 THEN 1
|
||||
ELSE 0
|
||||
END +
|
||||
CASE
|
||||
WHEN vh.spo2_percent < 95 THEN 1
|
||||
ELSE 0
|
||||
END as abnormal_count
|
||||
FROM same_class_students scs
|
||||
LEFT JOIN public.v_latest_student_health vh ON scs.id = vh.user_id
|
||||
ORDER BY
|
||||
-- 异常优先排序
|
||||
(CASE
|
||||
WHEN vh.temperature_c < 36.0 OR vh.temperature_c > 37.5 THEN 1
|
||||
ELSE 0
|
||||
END +
|
||||
CASE
|
||||
WHEN vh.heart_rate_bpm < 60 OR vh.heart_rate_bpm > 100 THEN 1
|
||||
ELSE 0
|
||||
END +
|
||||
CASE
|
||||
WHEN vh.spo2_percent < 95 THEN 1
|
||||
ELSE 0
|
||||
END) DESC,
|
||||
scs.username;
|
||||
Reference in New Issue
Block a user