- 从服务器拉取完整代码 - 按框架规范整理项目结构 - 配置 Drone CI 测试环境部署 - 包含后端(FastAPI)、前端(Vue3)、管理端 技术栈: Vue3 + TypeScript + FastAPI + MySQL
165 lines
6.5 KiB
SQL
165 lines
6.5 KiB
SQL
-- ============================================
|
||
-- 为所有学员用户注入陪练会话数据
|
||
-- ============================================
|
||
|
||
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;
|
||
|