129 lines
7.4 KiB
SQL
129 lines
7.4 KiB
SQL
-- ==============================================================================
|
|||
|
|
-- RailwaySystem Clean Demo 资产: verify_demo_data.sql
|
||
|
|
-- 适用数据库: KingbaseES V009R003C018 (schema: public)
|
||
|
|
-- 执行目标: 对 Clean Demo Candidate 数据库进行全量数据充盈度与业务一致性强断言
|
||
|
|
-- 断言规则: 任何一项不符合硬性指标立即抛出 EXCEPTION
|
||
|
|
-- ==============================================================================
|
||
|
|
|
||
|
|
DO $$
|
||
|
|
DECLARE
|
||
|
|
v_cnt INT;
|
||
|
|
v_states INT;
|
||
|
|
BEGIN
|
||
|
|
RAISE NOTICE '==================================================';
|
||
|
|
RAISE NOTICE '>>> STARTING DEMO DATASET VERIFICATION <<<';
|
||
|
|
RAISE NOTICE '==================================================';
|
||
|
|
|
||
|
|
-- 1. 教师断言: Teachers >= 6
|
||
|
|
SELECT count(*) INTO v_cnt FROM public.train_teacher WHERE del_flag = 0;
|
||
|
|
IF v_cnt < 6 THEN
|
||
|
|
RAISE EXCEPTION '>>> [VERIFY-FATAL] 教师数量未达标: 当前 % 名 (要求 >= 6)', v_cnt;
|
||
|
|
END IF;
|
||
|
|
RAISE NOTICE '[VERIFY-PASS] 教师总数 = % (>= 6)', v_cnt;
|
||
|
|
|
||
|
|
-- 2. 学员断言: Students >= 30
|
||
|
|
SELECT count(*) INTO v_cnt FROM public.train_student WHERE del_flag = 0;
|
||
|
|
IF v_cnt < 30 THEN
|
||
|
|
RAISE EXCEPTION '>>> [VERIFY-FATAL] 学员档案数量未达标: 当前 % 名 (要求 >= 30)', v_cnt;
|
||
|
|
END IF;
|
||
|
|
RAISE NOTICE '[VERIFY-PASS] 学员总数 = % (>= 30)', v_cnt;
|
||
|
|
|
||
|
|
-- 3. 课程断言: Courses >= 8
|
||
|
|
SELECT count(*) INTO v_cnt FROM public.train_course WHERE del_flag = 0;
|
||
|
|
IF v_cnt < 8 THEN
|
||
|
|
RAISE EXCEPTION '>>> [VERIFY-FATAL] 课程标准库未达标: 当前 % 门 (要求 >= 8)', v_cnt;
|
||
|
|
END IF;
|
||
|
|
RAISE NOTICE '[VERIFY-PASS] 课程总数 = % (>= 8)', v_cnt;
|
||
|
|
|
||
|
|
-- 4. 教室断言: Classrooms >= 4
|
||
|
|
SELECT count(*) INTO v_cnt FROM public.train_classroom_info;
|
||
|
|
IF v_cnt < 4 THEN
|
||
|
|
RAISE EXCEPTION '>>> [VERIFY-FATAL] 教室数量未达标: 当前 % 间 (要求 >= 4)', v_cnt;
|
||
|
|
END IF;
|
||
|
|
RAISE NOTICE '[VERIFY-PASS] 教室总数 = % (>= 4)', v_cnt;
|
||
|
|
|
||
|
|
-- 5. 实训场地断言: Training sites >= 3
|
||
|
|
SELECT count(*) INTO v_cnt FROM public.train_training_site;
|
||
|
|
IF v_cnt < 3 THEN
|
||
|
|
RAISE EXCEPTION '>>> [VERIFY-FATAL] 实训场地未达标: 当前 % 处 (要求 >= 3)', v_cnt;
|
||
|
|
END IF;
|
||
|
|
RAISE NOTICE '[VERIFY-PASS] 实训场地总数 = % (>= 3)', v_cnt;
|
||
|
|
|
||
|
|
-- 6. 宿舍房间断言: Dormitory rooms >= 20
|
||
|
|
SELECT count(*) INTO v_cnt FROM public.train_dormitory_info;
|
||
|
|
IF v_cnt < 20 THEN
|
||
|
|
RAISE EXCEPTION '>>> [VERIFY-FATAL] 宿舍房间数量未达标: 当前 % 间 (要求 >= 20)', v_cnt;
|
||
|
|
END IF;
|
||
|
|
RAISE NOTICE '[VERIFY-PASS] 宿舍房间总数 = % (>= 20)', v_cnt;
|
||
|
|
|
||
|
|
-- 7. 开班计划状态断言: 覆盖 DRAFT(3), UPCOMING(0), IN_PROGRESS(1), COMPLETED(2)
|
||
|
|
SELECT count(DISTINCT plan_status) INTO v_states FROM public.train_class_plan;
|
||
|
|
IF v_states < 4 THEN
|
||
|
|
RAISE EXCEPTION '>>> [VERIFY-FATAL] 开班计划状态不完整: 仅覆盖 % 种状态 (要求覆盖 4 种生命周期状态)', v_states;
|
||
|
|
END IF;
|
||
|
|
RAISE NOTICE '[VERIFY-PASS] 开班计划状态多样性 = % 种全覆盖', v_states;
|
||
|
|
|
||
|
|
-- 8. 参训名单状态断言: 覆盖待报到(0)、已报到(1)、请假(2)、放弃(3)、已完成(4)
|
||
|
|
SELECT count(DISTINCT enrollment_status) INTO v_states FROM public.train_enrollment;
|
||
|
|
IF v_states < 5 THEN
|
||
|
|
RAISE EXCEPTION '>>> [VERIFY-FATAL] 参训名单状态不完整: 仅覆盖 % 种状态 (要求覆盖 5 种状态)', v_states;
|
||
|
|
END IF;
|
||
|
|
RAISE NOTICE '[VERIFY-PASS] 学员参训状态多样性 = % 种全覆盖', v_states;
|
||
|
|
|
||
|
|
-- 9. 住宿交互断言: 必须有 >=2 条预分配记录(办理入住演示), >=2 条在住记录(退宿/调房演示)
|
||
|
|
SELECT count(*) INTO v_cnt FROM public.train_accommodation WHERE accommodation_status = 0;
|
||
|
|
IF v_cnt < 2 THEN
|
||
|
|
RAISE EXCEPTION '>>> [VERIFY-FATAL] 预分配住宿记录不足 2 条 (当前 % 条),无法演示现场办理入住!', v_cnt;
|
||
|
|
END IF;
|
||
|
|
SELECT count(*) INTO v_cnt FROM public.train_accommodation WHERE accommodation_status = 1;
|
||
|
|
IF v_cnt < 2 THEN
|
||
|
|
RAISE EXCEPTION '>>> [VERIFY-FATAL] 在住记录不足 2 条 (当前 % 条),无法演示现场调房与退宿!', v_cnt;
|
||
|
|
END IF;
|
||
|
|
RAISE NOTICE '[VERIFY-PASS] 住宿交互预留断言 = PASS (预分配 >= 2, 在住 >= 2)';
|
||
|
|
|
||
|
|
-- 10. 考勤状态多样性断言: 必须涵盖 缺勤(0)、正常(1)、迟到(2)、早退(3)、请假(4)
|
||
|
|
SELECT count(DISTINCT attendance_status) INTO v_states FROM public.train_student_checkin;
|
||
|
|
IF v_states < 4 THEN
|
||
|
|
RAISE EXCEPTION '>>> [VERIFY-FATAL] 考勤打卡状态多样性不足: 仅 % 种状态 (要求至少 4 种)', v_states;
|
||
|
|
END IF;
|
||
|
|
RAISE NOTICE '[VERIFY-PASS] 考勤打卡状态多样性 = % 种全覆盖 (杜绝全零图表)', v_states;
|
||
|
|
|
||
|
|
-- 11. 成绩 V2 架构断言: train_score_info 必须为 0/不存在,train_score_item 与 train_student_score 必须丰满
|
||
|
|
SELECT count(*) INTO v_cnt FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'train_score_info';
|
||
|
|
IF v_cnt > 0 THEN
|
||
|
|
RAISE EXCEPTION '>>> [VERIFY-FATAL] 历史废弃表 train_score_info 仍然存在!必须彻底下线!';
|
||
|
|
END IF;
|
||
|
|
SELECT count(*) INTO v_cnt FROM public.train_student_score;
|
||
|
|
IF v_cnt < 20 THEN
|
||
|
|
RAISE EXCEPTION '>>> [VERIFY-FATAL] Score V2 成绩数据不足: 当前 % 条 (要求 >= 20)', v_cnt;
|
||
|
|
END IF;
|
||
|
|
RAISE NOTICE '[VERIFY-PASS] Score V2 成绩体系 = PASS (废表彻底下线,新表数据量: % 条)', v_cnt;
|
||
|
|
|
||
|
|
-- 12. 学员画像与学习时长断言
|
||
|
|
SELECT count(*) INTO v_cnt FROM public.train_student_portrait;
|
||
|
|
IF v_cnt < 10 THEN
|
||
|
|
RAISE EXCEPTION '>>> [VERIFY-FATAL] 学员画像记录不足: 当前 % 条', v_cnt;
|
||
|
|
END IF;
|
||
|
|
SELECT count(*) INTO v_cnt FROM public.train_study_duration;
|
||
|
|
IF v_cnt < 20 THEN
|
||
|
|
RAISE EXCEPTION '>>> [VERIFY-FATAL] 自主学习时长明细不足: 当前 % 条', v_cnt;
|
||
|
|
END IF;
|
||
|
|
RAISE NOTICE '[VERIFY-PASS] 学员360画像与驾驶舱分析数据 = PASS (画像数: %, 学习时长明细: %)',
|
||
|
|
(SELECT count(*) FROM public.train_student_portrait), v_cnt;
|
||
|
|
|
||
|
|
-- 13. 角色与账号断言
|
||
|
|
IF NOT EXISTS (SELECT 1 FROM public.sys_user u JOIN public.sys_user_role ur ON ur.user_id = u.user_id WHERE u.user_name = 'demo_admin' AND ur.role_id = 3) THEN
|
||
|
|
RAISE EXCEPTION '>>> [VERIFY-FATAL] 培训管理员账号 demo_admin 未就绪或未正确绑定 role_id = 3';
|
||
|
|
END IF;
|
||
|
|
IF NOT EXISTS (SELECT 1 FROM public.sys_user u JOIN public.sys_user_role ur ON ur.user_id = u.user_id JOIN public.train_teacher t ON t.user_id = u.user_id WHERE u.user_name = 'demo_teacher' AND ur.role_id = 4) THEN
|
||
|
|
RAISE EXCEPTION '>>> [VERIFY-FATAL] 培训教师账号 demo_teacher 未就绪、未绑定 role_id = 4 或未绑定教师主档';
|
||
|
|
END IF;
|
||
|
|
IF NOT EXISTS (SELECT 1 FROM public.sys_user u JOIN public.sys_user_role ur ON ur.user_id = u.user_id JOIN public.train_student s ON s.user_id = u.user_id WHERE u.user_name = 'demo_student' AND ur.role_id = 5) THEN
|
||
|
|
RAISE EXCEPTION '>>> [VERIFY-FATAL] 培训学员账号 demo_student 未就绪、未绑定 role_id = 5 或未绑定学员主档';
|
||
|
|
END IF;
|
||
|
|
RAISE NOTICE '[VERIFY-PASS] 业务角色账号就绪性 = PASS (demo_admin, demo_teacher, demo_student 均绑定成功)';
|
||
|
|
|
||
|
|
RAISE NOTICE '==================================================';
|
||
|
|
RAISE NOTICE '>>> DEMO DATASET VERIFICATION SUCCESSFUL! <<<';
|
||
|
|
RAISE NOTICE '==================================================';
|
||
|
|
END $$;
|