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

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

165 lines
6.5 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.
-- ============================================
-- 为所有学员用户注入陪练会话数据
-- ============================================
USE `kaopeilian`;
-- 先创建陪练场景(如果不存在)
INSERT IGNORE INTO practice_scenes (id, name, description, type, difficulty, status, background, ai_role, objectives, keywords, duration, usage_count, rating, created_by, is_deleted)
VALUES
(1, '电话销售陪练', '模拟电话销售场景,提升电话沟通技巧', 'phone', 'intermediate', 'active', '客户对轻医美项目感兴趣,需要通过电话进行专业介绍', 'AI扮演潜在客户', '["掌握电话开场技巧", "专业介绍项目", "处理客户疑问"]', '["电话销售", "沟通技巧", "项目介绍"]', 15, 0, 4.5, 1, 0),
(2, '面对面咨询陪练', '模拟面对面咨询场景,提升面诊沟通能力', 'face', 'intermediate', 'active', '客户到店咨询轻医美项目,需要专业面诊和方案推荐', 'AI扮演到店客户', '["建立客户信任", "专业面诊", "方案推荐"]', '["面对面", "咨询", "方案设计"]', 20, 0, 4.7, 1, 0),
(3, '客户投诉处理陪练', '模拟客户投诉场景,提升问题处理能力', 'complaint', 'senior', 'active', '客户对服务或效果不满意,需要妥善处理投诉', 'AI扮演投诉客户', '["倾听客户诉求", "安抚客户情绪", "提供解决方案"]', '["投诉处理", "情绪管理", "客户关系"]', 15, 0, 4.3, 1, 0),
(4, '售后服务陪练', '模拟售后服务场景,提升客户满意度', 'after-sales', 'junior', 'active', '项目完成后,进行售后跟进和关怀', 'AI扮演已消费客户', '["售后关怀", "效果跟进", "二次营销"]', '["售后服务", "客户维护", "复购"]', 10, 0, 4.6, 1, 0),
(5, '产品介绍陪练', '模拟产品介绍场景,提升产品讲解能力', 'product-intro', 'beginner', 'active', '向客户详细介绍轻医美项目和产品', 'AI扮演咨询客户', '["产品特点讲解", "适用人群分析", "价值传递"]', '["产品介绍", "专业知识", "销售技巧"]', 15, 0, 4.8, 1, 0);
-- 为每个学员用户创建陪练记录
-- 使用存储过程批量生成
DELIMITER //
DROP PROCEDURE IF EXISTS generate_practice_sessions//
CREATE PROCEDURE generate_practice_sessions(IN target_user_id INT, IN session_count INT)
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE session_date DATETIME;
DECLARE duration INT;
DECLARE scene INT;
DECLARE scene_name_val VARCHAR(200);
DECLARE scene_type_val VARCHAR(50);
DECLARE score INT;
DECLARE turns INT;
WHILE i < session_count DO
-- 在过去60天内随机生成日期
SET session_date = DATE_SUB(NOW(), INTERVAL FLOOR(RAND() * 60) DAY) + INTERVAL FLOOR(RAND() * 43200) SECOND;
-- 随机时长10-30分钟
SET duration = 600 + FLOOR(RAND() * 1200);
-- 随机选择场景
SET scene = 1 + FLOOR(RAND() * 5);
-- 根据场景设置名称和类型
CASE scene
WHEN 1 THEN
SET scene_name_val = '电话销售陪练';
SET scene_type_val = 'phone';
WHEN 2 THEN
SET scene_name_val = '面对面咨询陪练';
SET scene_type_val = 'face';
WHEN 3 THEN
SET scene_name_val = '客户投诉处理陪练';
SET scene_type_val = 'complaint';
WHEN 4 THEN
SET scene_name_val = '售后服务陪练';
SET scene_type_val = 'after-sales';
WHEN 5 THEN
SET scene_name_val = '产品介绍陪练';
SET scene_type_val = 'product-intro';
END CASE;
-- 随机对话轮数
SET turns = 10 + FLOOR(RAND() * 20);
-- 随机分数60-95分
SET score = 60 + FLOOR(RAND() * 35);
-- 插入陪练会话
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
) VALUES (
CONCAT('session_', target_user_id, '_', UNIX_TIMESTAMP(session_date)),
target_user_id,
scene,
scene_name_val,
scene_type_val,
session_date,
DATE_ADD(session_date, INTERVAL duration SECOND),
duration,
turns,
'completed',
0,
session_date,
session_date
);
-- 插入陪练报告
INSERT INTO practice_reports (
session_id,
total_score,
score_breakdown,
ability_dimensions,
created_at,
updated_at
) VALUES (
CONCAT('session_', target_user_id, '_', UNIX_TIMESTAMP(session_date)),
score,
JSON_OBJECT(
'professionalism', score + FLOOR(RAND() * 10) - 5,
'communication', score + FLOOR(RAND() * 10) - 5,
'problem_solving', score + FLOOR(RAND() * 10) - 5
),
JSON_OBJECT(
'technical_skills', score + FLOOR(RAND() * 10) - 5,
'service_attitude', score + FLOOR(RAND() * 10) - 5,
'sales_ability', score + FLOOR(RAND() * 10) - 5
),
session_date,
session_date
);
SET i = i + 1;
END WHILE;
END//
DELIMITER ;
-- 为所有学员角色用户生成陪练数据
-- 获取所有学员用户ID并为每个用户生成15-25条记录
-- user_id = 1 (superadmin) - 20条
CALL generate_practice_sessions(1, 20);
-- user_id = 5 (consultant_001) - 25条
CALL generate_practice_sessions(5, 25);
-- user_id = 7 (therapist_001) - 22条
CALL generate_practice_sessions(7, 22);
-- user_id = 8 (receptionist_001) - 18条
CALL generate_practice_sessions(8, 18);
-- 统计结果
SELECT '========================================' AS '';
SELECT '✅ 陪练数据生成完成!' AS '';
SELECT '========================================' AS '';
SELECT
u.id,
u.username,
u.role,
COUNT(ps.id) as practice_count
FROM users u
LEFT JOIN practice_sessions ps ON u.id = ps.user_id AND ps.is_deleted = 0
WHERE u.is_deleted = 0
GROUP BY u.id, u.username, u.role
ORDER BY u.id;
-- 清理存储过程
DROP PROCEDURE IF EXISTS generate_practice_sessions;