fix(aihr): version candidate interview review migration

This commit is contained in:
2026-07-15 00:59:08 +08:00
parent ef21d4d61b
commit 1ca5d1eca4
5 changed files with 233 additions and 3 deletions
@@ -0,0 +1,196 @@
-- AIHR 候选人资料、面试复核和入职关联迁移(MySQL 8.x)
-- 仅补齐生产结构,不写入业务数据;可重复执行。
CREATE TABLE IF NOT EXISTS `aihr_candidate_material` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
`candidate_id` varchar(80) NOT NULL COMMENT '候选人外部ID',
`candidate_name` varchar(100) DEFAULT NULL COMMENT '候选人姓名',
`material_type` varchar(50) DEFAULT NULL COMMENT '资料类型',
`file_name` varchar(255) NOT NULL COMMENT '文件名',
`file_size` bigint DEFAULT 0 COMMENT '文件大小',
`content_type` varchar(100) DEFAULT NULL COMMENT '文件MIME',
`oss_id` bigint NOT NULL COMMENT '对象存储ID',
`status` varchar(20) DEFAULT '待审核' COMMENT '审核状态',
`reviewer` varchar(100) DEFAULT NULL COMMENT '审核人',
`reviewed_time` datetime DEFAULT NULL COMMENT '审核时间',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_aihr_candidate_material_candidate` (`tenant_id`, `candidate_id`, `id`),
KEY `idx_aihr_candidate_material_review` (`tenant_id`, `status`, `id`),
KEY `idx_aihr_candidate_material_oss` (`oss_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 候选人补充资料';
SET @aihr_candidate_material_reviewer_exists := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'aihr_candidate_material'
AND COLUMN_NAME = 'reviewer'
);
SET @aihr_candidate_material_reviewer_ddl := IF(
@aihr_candidate_material_reviewer_exists = 0,
'ALTER TABLE aihr_candidate_material ADD COLUMN `reviewer` varchar(100) DEFAULT NULL COMMENT ''审核人''',
'SELECT 1'
);
PREPARE aihr_candidate_material_reviewer_stmt FROM @aihr_candidate_material_reviewer_ddl;
EXECUTE aihr_candidate_material_reviewer_stmt;
DEALLOCATE PREPARE aihr_candidate_material_reviewer_stmt;
SET @aihr_candidate_material_reviewed_time_exists := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'aihr_candidate_material'
AND COLUMN_NAME = 'reviewed_time'
);
SET @aihr_candidate_material_reviewed_time_ddl := IF(
@aihr_candidate_material_reviewed_time_exists = 0,
'ALTER TABLE aihr_candidate_material ADD COLUMN `reviewed_time` datetime DEFAULT NULL COMMENT ''审核时间''',
'SELECT 1'
);
PREPARE aihr_candidate_material_reviewed_time_stmt FROM @aihr_candidate_material_reviewed_time_ddl;
EXECUTE aihr_candidate_material_reviewed_time_stmt;
DEALLOCATE PREPARE aihr_candidate_material_reviewed_time_stmt;
CREATE TABLE IF NOT EXISTS `aihr_interview_result` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
`session_id` varchar(100) NOT NULL COMMENT '面试会话ID',
`candidate_id` varchar(80) DEFAULT NULL COMMENT '候选人ID',
`candidate_name` varchar(100) DEFAULT NULL COMMENT '候选人姓名',
`position_code` varchar(120) DEFAULT NULL COMMENT '岗位',
`total_score` int DEFAULT NULL COMMENT '总分',
`reviewed_score` int DEFAULT NULL COMMENT '人工复核分',
`review_status` varchar(20) DEFAULT '待复核' COMMENT '人工复核状态',
`reviewer` varchar(100) DEFAULT NULL COMMENT '复核人',
`review_note` varchar(1000) DEFAULT NULL COMMENT '人工复核意见',
`reviewed_time` datetime DEFAULT NULL COMMENT '复核时间',
`result` varchar(40) DEFAULT NULL COMMENT '结论',
`suggestion` varchar(500) DEFAULT NULL COMMENT '建议',
`ai_summary` varchar(1000) DEFAULT NULL COMMENT 'AI摘要',
`evidence` varchar(1000) DEFAULT NULL COMMENT '评分依据',
`source` varchar(40) DEFAULT NULL COMMENT '评分来源',
`answers_json` text DEFAULT NULL COMMENT '候选人回答JSON',
`questions_json` text DEFAULT NULL COMMENT '面试问题与回答快照JSON',
`dimensions_json` text DEFAULT NULL COMMENT '维度评分JSON',
`finished_time` datetime DEFAULT NULL COMMENT '完成时间',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_aihr_interview_session` (`tenant_id`, `session_id`),
KEY `idx_aihr_interview_candidate` (`tenant_id`, `candidate_id`, `finished_time`),
KEY `idx_aihr_interview_finished` (`tenant_id`, `finished_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 面试结果';
SET @aihr_interview_result_questions_exists := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'aihr_interview_result'
AND COLUMN_NAME = 'questions_json'
);
SET @aihr_interview_result_questions_ddl := IF(
@aihr_interview_result_questions_exists = 0,
'ALTER TABLE aihr_interview_result ADD COLUMN `questions_json` text DEFAULT NULL COMMENT ''面试问题与回答快照JSON''',
'SELECT 1'
);
PREPARE aihr_interview_result_questions_stmt FROM @aihr_interview_result_questions_ddl;
EXECUTE aihr_interview_result_questions_stmt;
DEALLOCATE PREPARE aihr_interview_result_questions_stmt;
SET @aihr_interview_reviewed_score_exists := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'aihr_interview_result'
AND COLUMN_NAME = 'reviewed_score'
);
SET @aihr_interview_reviewed_score_ddl := IF(
@aihr_interview_reviewed_score_exists = 0,
'ALTER TABLE aihr_interview_result ADD COLUMN `reviewed_score` int DEFAULT NULL COMMENT ''人工复核分''',
'SELECT 1'
);
PREPARE aihr_interview_reviewed_score_stmt FROM @aihr_interview_reviewed_score_ddl;
EXECUTE aihr_interview_reviewed_score_stmt;
DEALLOCATE PREPARE aihr_interview_reviewed_score_stmt;
SET @aihr_interview_review_status_exists := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'aihr_interview_result'
AND COLUMN_NAME = 'review_status'
);
SET @aihr_interview_review_status_ddl := IF(
@aihr_interview_review_status_exists = 0,
'ALTER TABLE aihr_interview_result ADD COLUMN `review_status` varchar(20) DEFAULT ''待复核'' COMMENT ''人工复核状态''',
'SELECT 1'
);
PREPARE aihr_interview_review_status_stmt FROM @aihr_interview_review_status_ddl;
EXECUTE aihr_interview_review_status_stmt;
DEALLOCATE PREPARE aihr_interview_review_status_stmt;
SET @aihr_interview_reviewer_exists := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'aihr_interview_result'
AND COLUMN_NAME = 'reviewer'
);
SET @aihr_interview_reviewer_ddl := IF(
@aihr_interview_reviewer_exists = 0,
'ALTER TABLE aihr_interview_result ADD COLUMN `reviewer` varchar(100) DEFAULT NULL COMMENT ''复核人''',
'SELECT 1'
);
PREPARE aihr_interview_reviewer_stmt FROM @aihr_interview_reviewer_ddl;
EXECUTE aihr_interview_reviewer_stmt;
DEALLOCATE PREPARE aihr_interview_reviewer_stmt;
SET @aihr_interview_review_note_exists := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'aihr_interview_result'
AND COLUMN_NAME = 'review_note'
);
SET @aihr_interview_review_note_ddl := IF(
@aihr_interview_review_note_exists = 0,
'ALTER TABLE aihr_interview_result ADD COLUMN `review_note` varchar(1000) DEFAULT NULL COMMENT ''人工复核意见''',
'SELECT 1'
);
PREPARE aihr_interview_review_note_stmt FROM @aihr_interview_review_note_ddl;
EXECUTE aihr_interview_review_note_stmt;
DEALLOCATE PREPARE aihr_interview_review_note_stmt;
SET @aihr_interview_reviewed_time_exists := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'aihr_interview_result'
AND COLUMN_NAME = 'reviewed_time'
);
SET @aihr_interview_reviewed_time_ddl := IF(
@aihr_interview_reviewed_time_exists = 0,
'ALTER TABLE aihr_interview_result ADD COLUMN `reviewed_time` datetime DEFAULT NULL COMMENT ''复核时间''',
'SELECT 1'
);
PREPARE aihr_interview_reviewed_time_stmt FROM @aihr_interview_reviewed_time_ddl;
EXECUTE aihr_interview_reviewed_time_stmt;
DEALLOCATE PREPARE aihr_interview_reviewed_time_stmt;
CREATE TABLE IF NOT EXISTS `aihr_candidate_employee_link` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
`candidate_id` varchar(80) NOT NULL COMMENT '本地候选人ID',
`ext_party_id` varchar(100) NOT NULL COMMENT '外部员工主体ID',
`status` varchar(20) DEFAULT '已关联' COMMENT '关联状态',
`linked_by` varchar(100) DEFAULT NULL COMMENT '关联操作人',
`linked_time` datetime DEFAULT NULL COMMENT '关联时间',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_aihr_candidate_employee_link_candidate` (`tenant_id`, `candidate_id`),
UNIQUE KEY `uk_aihr_candidate_employee_link_party` (`tenant_id`, `ext_party_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 候选人与员工主体关联';