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

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

221 lines
7.8 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.
-- 为统计分析页面生成轻医美场景的模拟数据
-- 使用方法: mysql -h localhost -u root -p'nj861021' kaopeilian < seed_statistics_demo_data.sql
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ============================================
-- 1. 获取用户ID使用admin用户
-- ============================================
SET @user_id = (SELECT id FROM users WHERE username = 'admin' LIMIT 1);
SET @user_id = IFNULL(@user_id, 1);
SELECT CONCAT('使用用户ID: ', @user_id) AS info;
-- ============================================
-- 2. 为课程添加知识点(如果不存在)
-- ============================================
-- 皮肤生理学基础
SET @course_id_1 = (SELECT id FROM courses WHERE name LIKE '%皮肤生理学%' LIMIT 1);
INSERT INTO knowledge_points (course_id, material_id, name, description, type, source, is_deleted, created_at, updated_at)
SELECT
@course_id_1,
NULL,
kp.name,
CONCAT('核心知识点:', kp.name),
'核心概念',
0,
FALSE,
NOW(),
NOW()
FROM (
SELECT '皮肤结构与层次' AS name UNION ALL
SELECT '皮肤类型与特征' UNION ALL
SELECT '皮肤屏障功能' UNION ALL
SELECT '皮肤老化机制' UNION ALL
SELECT '皮肤色素形成' UNION ALL
SELECT '皮肤水分平衡'
) AS kp
WHERE @course_id_1 IS NOT NULL
AND NOT EXISTS (
SELECT 1 FROM knowledge_points
WHERE course_id = @course_id_1 AND name = kp.name AND is_deleted = FALSE
);
-- 医美产品知识与应用
SET @course_id_2 = (SELECT id FROM courses WHERE name LIKE '%医美产品%' LIMIT 1);
INSERT INTO knowledge_points (course_id, material_id, name, description, type, source, is_deleted, created_at, updated_at)
SELECT
@course_id_2,
NULL,
kp.name,
CONCAT('核心知识点:', kp.name),
'核心概念',
0,
FALSE,
NOW(),
NOW()
FROM (
SELECT '透明质酸的应用' AS name UNION ALL
SELECT '肉毒素的作用机理' UNION ALL
SELECT '光子嫩肤原理' UNION ALL
SELECT '果酸焕肤技术' UNION ALL
SELECT '维生素C美白' UNION ALL
SELECT '胶原蛋白补充'
) AS kp
WHERE @course_id_2 IS NOT NULL
AND NOT EXISTS (
SELECT 1 FROM knowledge_points
WHERE course_id = @course_id_2 AND name = kp.name AND is_deleted = FALSE
);
SELECT '✓ 知识点创建完成' AS info;
-- ============================================
-- 3. 生成考试记录过去60天呈现进步趋势
-- ============================================
-- 删除旧的演示数据
DELETE FROM exam_mistakes WHERE user_id = @user_id;
DELETE FROM exams WHERE user_id = @user_id;
-- 生成考试记录
INSERT INTO exams (
user_id, course_id, exam_name, question_count, total_score, pass_score,
start_time, end_time, duration_minutes, round1_score, score, is_passed, status,
created_at, updated_at
)
SELECT
@user_id,
c.id,
CONCAT(c.name, '测试'),
10,
100.0,
60.0,
DATE_SUB(NOW(), INTERVAL FLOOR(RAND() * 60) DAY) - INTERVAL FLOOR(RAND() * 86400) SECOND,
DATE_SUB(NOW(), INTERVAL FLOOR(RAND() * 60) DAY) - INTERVAL FLOOR(RAND() * 86400) SECOND + INTERVAL (15 + FLOOR(RAND() * 30)) MINUTE,
15 + FLOOR(RAND() * 30),
-- 分数呈现进步趋势早期60-75分后期75-95分
60 + (RAND() * 15) + (30 * RAND()),
60 + (RAND() * 15) + (30 * RAND()),
TRUE,
'submitted',
DATE_SUB(NOW(), INTERVAL FLOOR(RAND() * 60) DAY),
DATE_SUB(NOW(), INTERVAL FLOOR(RAND() * 60) DAY)
FROM courses c
CROSS JOIN (
SELECT 1 AS n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5
UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10
UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15
UNION ALL SELECT 16 UNION ALL SELECT 17 UNION ALL SELECT 18 UNION ALL SELECT 19 UNION ALL SELECT 20
) AS numbers
WHERE c.is_deleted = FALSE AND c.status = 'published'
LIMIT 50;
-- 更新is_passed状态
UPDATE exams SET is_passed = (round1_score >= pass_score) WHERE user_id = @user_id;
SELECT CONCAT('✓ 创建了 ', COUNT(*), ' 条考试记录') AS info
FROM exams WHERE user_id = @user_id;
-- ============================================
-- 4. 生成错题记录
-- ============================================
-- 为每个考试生成错题(根据分数决定错题数)
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() * 5), 'single_choice', 'multiple_choice', 'true_false', 'fill_blank', 'essay'),
e.created_at,
e.created_at
FROM exams e
CROSS JOIN knowledge_points kp
WHERE e.user_id = @user_id
AND kp.course_id = e.course_id
AND kp.is_deleted = FALSE
AND RAND() < (100 - e.round1_score) / 100 -- 分数越低,错题概率越高
LIMIT 200;
SELECT CONCAT('✓ 创建了 ', COUNT(*), ' 条错题记录') AS info
FROM exam_mistakes WHERE user_id = @user_id;
-- ============================================
-- 5. 生成陪练会话记录
-- ============================================
-- 删除旧的陪练记录
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, scene_type,
start_time, end_time, duration_seconds, turns, status, is_deleted,
created_at, updated_at
)
SELECT
CONCAT('session_', @user_id, '_', UNIX_TIMESTAMP(start_dt)),
@user_id,
1 + FLOOR(RAND() * 5),
ELT(1 + FLOOR(RAND() * 5), '电话销售', '面对面咨询', '客户投诉处理', '售后服务', '产品介绍'),
ELT(1 + FLOOR(RAND() * 5), 'phone', 'face', 'complaint', 'after-sales', 'product-intro'),
start_dt,
DATE_ADD(start_dt, INTERVAL (600 + FLOOR(RAND() * 1200)) SECOND),
600 + FLOOR(RAND() * 1200),
10 + FLOOR(RAND() * 20),
'completed',
FALSE,
start_dt,
start_dt
FROM (
SELECT DATE_SUB(NOW(), INTERVAL FLOOR(RAND() * 60) DAY) - INTERVAL FLOOR(RAND() * 86400) SECOND AS start_dt
FROM (
SELECT 1 AS n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5
UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10
UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15
) AS numbers
) AS dates;
SELECT CONCAT('✓ 创建了 ', COUNT(*), ' 条陪练会话记录') AS info
FROM practice_sessions WHERE user_id = @user_id;
-- ============================================
-- 6. 统计汇总
-- ============================================
SELECT '========================================' AS '';
SELECT '✅ 数据生成完成!' AS '';
SELECT '========================================' AS '';
SELECT CONCAT('用户: ', username, ' (ID: ', id, ')') AS info
FROM users WHERE id = @user_id;
SELECT CONCAT('考试记录: ', COUNT(*), '') AS info
FROM exams WHERE user_id = @user_id;
SELECT CONCAT('错题记录: ', COUNT(*), '') AS info
FROM exam_mistakes WHERE user_id = @user_id;
SELECT CONCAT('陪练记录: ', COUNT(*), '') AS info
FROM practice_sessions WHERE user_id = @user_id;
SELECT '========================================' AS '';
SELECT '现在可以访问统计分析页面查看数据:' AS '';
SELECT 'http://localhost:5173/analysis/statistics' AS '';
SELECT '========================================' AS '';
SET FOREIGN_KEY_CHECKS = 1;