feat: 初始化考培练系统项目
- 从服务器拉取完整代码 - 按框架规范整理项目结构 - 配置 Drone CI 测试环境部署 - 包含后端(FastAPI)、前端(Vue3)、管理端 技术栈: Vue3 + TypeScript + FastAPI + MySQL
This commit is contained in:
164
backend/scripts/seed_practice_sessions.sql
Normal file
164
backend/scripts/seed_practice_sessions.sql
Normal file
@@ -0,0 +1,164 @@
|
||||
-- ============================================
|
||||
-- 为所有学员用户注入陪练会话数据
|
||||
-- ============================================
|
||||
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user