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,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;