fix(aihr): align practice scoring with BRD five dimensions

This commit is contained in:
2026-07-14 15:12:47 +08:00
parent 3f39be7fee
commit 94d483d334
11 changed files with 391 additions and 74 deletions
@@ -0,0 +1,100 @@
-- AIHR 对练五维评分迁移(MySQL 8.x)
-- 补齐会话结构与生活顾问试点 Rubric,不写入训练业务数据;可重复执行。
SET @aihr_practice_table_exists := (
SELECT COUNT(*)
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'aihr_practice_session'
);
SET @aihr_task_completion_exists := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'aihr_practice_session'
AND COLUMN_NAME = 'dim_task_completion'
);
SET @aihr_task_completion_ddl := IF(
@aihr_practice_table_exists = 1 AND @aihr_task_completion_exists = 0,
'ALTER TABLE aihr_practice_session ADD COLUMN `dim_task_completion` int DEFAULT NULL COMMENT ''任务完成度分'' AFTER `total_score`',
'SELECT 1'
);
PREPARE aihr_task_completion_stmt FROM @aihr_task_completion_ddl;
EXECUTE aihr_task_completion_stmt;
DEALLOCATE PREPARE aihr_task_completion_stmt;
SET @aihr_response_timeliness_exists := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'aihr_practice_session'
AND COLUMN_NAME = 'dim_response_timeliness'
);
SET @aihr_response_timeliness_ddl := IF(
@aihr_practice_table_exists = 1 AND @aihr_response_timeliness_exists = 0,
'ALTER TABLE aihr_practice_session ADD COLUMN `dim_response_timeliness` int DEFAULT NULL COMMENT ''响应时效分'' AFTER `dim_task_completion`',
'SELECT 1'
);
PREPARE aihr_response_timeliness_stmt FROM @aihr_response_timeliness_ddl;
EXECUTE aihr_response_timeliness_stmt;
DEALLOCATE PREPARE aihr_response_timeliness_stmt;
SET @aihr_response_latency_exists := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'aihr_practice_session'
AND COLUMN_NAME = 'response_latency_ms'
);
SET @aihr_response_latency_ddl := IF(
@aihr_practice_table_exists = 1 AND @aihr_response_latency_exists = 0,
'ALTER TABLE aihr_practice_session ADD COLUMN `response_latency_ms` int DEFAULT NULL COMMENT ''平均陪练响应时长毫秒'' AFTER `dim_response_timeliness`',
'SELECT 1'
);
PREPARE aihr_response_latency_stmt FROM @aihr_response_latency_ddl;
EXECUTE aihr_response_latency_stmt;
DEALLOCATE PREPARE aihr_response_latency_stmt;
CREATE TEMPORARY TABLE IF NOT EXISTS aihr_brd_rubric_codes (
tenant_id varchar(20) NOT NULL,
rubric_code varchar(100) NOT NULL,
PRIMARY KEY (tenant_id, rubric_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
DELETE FROM aihr_brd_rubric_codes;
INSERT INTO aihr_brd_rubric_codes (tenant_id, rubric_code)
SELECT r.tenant_id, r.rubric_code
FROM aihr_practice_rubric r
JOIN aihr_practice_scenario s
ON s.tenant_id = r.tenant_id AND s.scenario_code = r.scenario_code
JOIN (
SELECT tenant_id, rubric_code
FROM aihr_practice_rubric_dimension
WHERE dimension_code IN ('compliance', 'communication', 'emotion', 'marketing')
GROUP BY tenant_id, rubric_code
HAVING COUNT(*) = 4
) old_dimensions
ON old_dimensions.tenant_id = r.tenant_id AND old_dimensions.rubric_code = r.rubric_code
WHERE r.tenant_id = '000000'
AND s.position = '生活顾问';
DELETE d
FROM aihr_practice_rubric_dimension d
JOIN aihr_brd_rubric_codes r
ON r.tenant_id = d.tenant_id AND r.rubric_code = d.rubric_code;
INSERT INTO aihr_practice_rubric_dimension
(tenant_id, rubric_code, dimension_code, dimension_name, weight, description, sort_order, create_time, update_time)
SELECT r.tenant_id, r.rubric_code, d.dimension_code, d.dimension_name, d.weight, d.description, d.sort_order, NOW(), NOW()
FROM aihr_brd_rubric_codes r
JOIN (
SELECT 'task_completion' AS dimension_code, '任务完成度' AS dimension_name, 0.40 AS weight, '问题解决有效性、工单闭环率、首解率、SOP关键点执行率' AS description, 10 AS sort_order
UNION ALL SELECT 'standardization', '话术规范性', 0.25, '流程完整性、法规引用准确性、沟通合规、用语专业度', 20
UNION ALL SELECT 'emotion', '情绪管理能力', 0.20, '共情、语速语气控制、业主情绪引导安抚有效性', 30
UNION ALL SELECT 'response_timeliness', '响应时效', 0.10, '首响时长、处理周期、跟进频率', 40
UNION ALL SELECT 'marketing', '增值转化潜力', 0.05, '活动引导、产品推介时机与成功率', 50
) d;
DROP TEMPORARY TABLE IF EXISTS aihr_brd_rubric_codes;