Files
012-kaopeilian/backend/scripts/seed_statistics_for_user6.sql
111 998211c483 feat: 初始化考培练系统项目
- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
2026-01-24 19:33:28 +08:00

173 lines
6.4 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ==============================================
-- 为 user_id=6 (nurse_001) 生成统计分析数据
-- ==============================================
USE kaopeilian;
SET @user_id = 6;
SET @user_name = (SELECT username FROM users WHERE id = @user_id);
SELECT CONCAT('开始为用户 ', @user_name, ' (ID: ', @user_id, ') 生成统计数据') AS '';
-- ============================================
-- 1. 生成考试记录 (50条)
-- ============================================
-- 保留原有的3条记录再生成47条
INSERT INTO exams (
user_id, course_id, exam_name, question_count, pass_score,
questions, start_time, end_time, status, duration_minutes,
round1_score, is_passed, created_at, updated_at
)
SELECT
@user_id,
c.id,
CONCAT(c.name, '练习测试_', DATE_FORMAT(exam_dt, '%m月%d日')),
10,
60,
'[]',
exam_dt,
DATE_ADD(exam_dt, INTERVAL FLOOR(20 + RAND() * 40) MINUTE),
'completed',
FLOOR(20 + RAND() * 40), -- 20-60分钟
FLOOR(55 + RAND() * 45), -- 55-100分
1,
exam_dt,
exam_dt
FROM (
SELECT DATE_SUB(NOW(), INTERVAL days DAY) + INTERVAL hours HOUR + INTERVAL minutes MINUTE as exam_dt
FROM (
SELECT 0 as days UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL
SELECT 5 UNION ALL SELECT 7 UNION ALL SELECT 9 UNION ALL SELECT 12 UNION ALL SELECT 15
) d,
(SELECT 9 as hours UNION ALL SELECT 10 UNION ALL SELECT 14 UNION ALL SELECT 15 UNION ALL SELECT 16) h,
(SELECT 0 as minutes UNION ALL SELECT 15 UNION ALL SELECT 30 UNION ALL SELECT 45) m
) exam_dates
CROSS JOIN (
SELECT id, name FROM courses WHERE is_deleted = FALSE LIMIT 3
) c
LIMIT 47;
-- 更新 is_passed 标志
UPDATE exams SET is_passed = (round1_score >= pass_score) WHERE user_id = @user_id AND is_passed = 0;
SELECT CONCAT('✓ 当前考试记录总数: ', COUNT(*), '') AS ''
FROM exams WHERE user_id = @user_id;
-- ============================================
-- 2. 生成错题记录 (250条)
-- ============================================
-- 删除旧的错题记录,重新生成
DELETE FROM exam_mistakes WHERE user_id = @user_id;
-- 为每个考试生成3-6个错题
INSERT INTO exam_mistakes (
user_id, exam_id, question_id, knowledge_point_id,
question_content, correct_answer, user_answer, question_type,
created_at, updated_at
)
SELECT
e.user_id,
e.id,
NULL,
kp.id,
CONCAT('关于"', kp.name, '"的',
ELT(1 + FLOOR(RAND() * 3), '概念理解', '实际应用', '综合分析'), '问题'),
CONCAT('正确答案:', kp.name, '的标准解释'),
CONCAT('错误理解:', '学员对', kp.name, '的误解'),
ELT(1 + FLOOR(RAND() * 5), 'single_choice', 'multiple_choice', 'true_false', 'fill_blank', 'essay'),
e.start_time,
e.start_time
FROM exams e
CROSS JOIN (
SELECT 1 AS mistake_num UNION ALL SELECT 2 UNION ALL SELECT 3
UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
) AS mistake_counts
INNER JOIN knowledge_points kp ON kp.course_id = e.course_id
WHERE e.user_id = @user_id
AND kp.is_deleted = FALSE
AND RAND() < 0.8
ORDER BY RAND()
LIMIT 250;
SELECT CONCAT('✓ 错题记录: ', COUNT(*), '') AS ''
FROM exam_mistakes WHERE user_id = @user_id;
-- ============================================
-- 3. 生成陪练记录 (20条)
-- ============================================
-- 删除旧的陪练记录
DELETE FROM practice_dialogues WHERE session_id IN (
SELECT session_id FROM practice_sessions WHERE user_id = @user_id
);
DELETE FROM practice_reports WHERE session_id IN (
SELECT session_id FROM practice_sessions WHERE user_id = @user_id
);
DELETE FROM practice_sessions WHERE user_id = @user_id;
-- 生成新的陪练记录
INSERT INTO practice_sessions (
session_id, user_id, scene_id, scene_name,
duration_seconds, status,
start_time, end_time, created_at, updated_at
)
SELECT
CONCAT('session_', @user_id, '_', UNIX_TIMESTAMP(practice_dt)),
@user_id,
1 + FLOOR(RAND() * 5),
ELT(1 + FLOOR(RAND() * 5), '电话销售陪练', '面对面咨询陪练', '客户投诉处理陪练', '售后服务陪练', '产品介绍陪练'),
FLOOR(600 + RAND() * 3000), -- 600-3600秒 (10-60分钟)
'completed',
practice_dt,
DATE_ADD(practice_dt, INTERVAL FLOOR(10 + RAND() * 50) MINUTE),
practice_dt,
practice_dt
FROM (
SELECT DATE_SUB(NOW(), INTERVAL days DAY) + INTERVAL hours HOUR as practice_dt
FROM (
SELECT 0 as days UNION ALL SELECT 1 UNION ALL SELECT 3 UNION ALL SELECT 5 UNION ALL
SELECT 7 UNION ALL SELECT 10 UNION ALL SELECT 12 UNION ALL SELECT 15 UNION ALL SELECT 20
) d,
(SELECT 10 as hours UNION ALL SELECT 14 UNION ALL SELECT 16) h
) practice_dates
LIMIT 20;
SELECT CONCAT('✓ 陪练记录: ', COUNT(*), '') AS ''
FROM practice_sessions WHERE user_id = @user_id;
-- ============================================
-- 4. 统计概览
-- ============================================
SELECT '========================================' AS '';
SELECT '数据生成完成' AS '';
SELECT '========================================' AS '';
SELECT CONCAT('用户: ', username, ' (', role, ')') AS ''
FROM users WHERE id = @user_id;
SELECT CONCAT('✓ 考试记录: ', COUNT(*), '') AS ''
FROM exams WHERE user_id = @user_id;
SELECT CONCAT('✓ 错题记录: ', COUNT(*), '') AS ''
FROM exam_mistakes WHERE user_id = @user_id;
SELECT CONCAT('✓ 陪练记录: ', COUNT(*), '') AS ''
FROM practice_sessions WHERE user_id = @user_id;
SELECT CONCAT('✓ 知识点数量: ', COUNT(*), '') AS ''
FROM knowledge_points WHERE is_deleted = FALSE;
-- 成绩分布
SELECT '========================================' AS '';
SELECT '成绩分布情况' AS '';
SELECT '========================================' AS '';
SELECT
CONCAT('优秀(90-100): ', SUM(CASE WHEN round1_score >= 90 THEN 1 ELSE 0 END), '') AS '',
CONCAT('良好(80-89): ', SUM(CASE WHEN round1_score >= 80 AND round1_score < 90 THEN 1 ELSE 0 END), '') AS '',
CONCAT('中等(70-79): ', SUM(CASE WHEN round1_score >= 70 AND round1_score < 80 THEN 1 ELSE 0 END), '') AS '',
CONCAT('及格(60-69): ', SUM(CASE WHEN round1_score >= 60 AND round1_score < 70 THEN 1 ELSE 0 END), '') AS '',
CONCAT('不及格(<60): ', SUM(CASE WHEN round1_score < 60 THEN 1 ELSE 0 END), '') AS ''
FROM exams WHERE user_id = @user_id;
SELECT '✓ 数据生成成功,可以刷新统计分析页面查看' AS '';