From e0da5f0ac53de02bf74cb8e0753112a73a5f7e45 Mon Sep 17 00:00:00 2001 From: let5sne Date: Tue, 14 Jul 2026 14:40:00 +0800 Subject: [PATCH] chore(aihr): add practice evidence migration --- ...aihr_20260714_practice_evidence_mysql8.sql | 33 +++++++++++++++++++ docs/BRD_IMPLEMENTATION_AUDIT.md | 1 + scripts/demo-check.sh | 2 ++ 3 files changed, 36 insertions(+) create mode 100644 backend/script/sql/update/aihr_20260714_practice_evidence_mysql8.sql diff --git a/backend/script/sql/update/aihr_20260714_practice_evidence_mysql8.sql b/backend/script/sql/update/aihr_20260714_practice_evidence_mysql8.sql new file mode 100644 index 00000000..77ad8688 --- /dev/null +++ b/backend/script/sql/update/aihr_20260714_practice_evidence_mysql8.sql @@ -0,0 +1,33 @@ +-- AIHR 训练证据表迁移(MySQL 8.x) +-- 仅补齐结构,不写入业务数据;可重复执行。 + +CREATE TABLE IF NOT EXISTS `aihr_practice_audio` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号', + `session_id` varchar(100) NOT NULL COMMENT '训练会话ID', + `turn_index` int NOT NULL COMMENT '话术序号', + `role` varchar(30) NOT NULL COMMENT '音频角色', + `oss_id` bigint DEFAULT NULL COMMENT 'OSS文件ID', + `audio_url` varchar(1000) DEFAULT NULL COMMENT '音频URL', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_aihr_practice_audio` (`tenant_id`, `session_id`, `turn_index`, `role`), + KEY `idx_aihr_practice_audio_session` (`tenant_id`, `session_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 对练音频'; + +CREATE TABLE IF NOT EXISTS `aihr_practice_calibration` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号', + `session_id` varchar(100) NOT NULL COMMENT '训练会话ID', + `reviewer` varchar(100) DEFAULT NULL COMMENT '校准人', + `original_score` int DEFAULT NULL COMMENT 'AI原始总分', + `corrected_score` int DEFAULT NULL COMMENT '人工校准总分', + `corrected_dimensions_json` text DEFAULT NULL COMMENT '校准维度JSON', + `reason` varchar(500) DEFAULT NULL COMMENT '校准原因', + `status` varchar(30) DEFAULT '已记录' COMMENT '状态', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + KEY `idx_aihr_calibration_session` (`tenant_id`, `session_id`, `create_time`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 评分校准记录'; diff --git a/docs/BRD_IMPLEMENTATION_AUDIT.md b/docs/BRD_IMPLEMENTATION_AUDIT.md index 80672e0a..f4da525b 100644 --- a/docs/BRD_IMPLEMENTATION_AUDIT.md +++ b/docs/BRD_IMPLEMENTATION_AUDIT.md @@ -289,3 +289,4 @@ - 2026-07-14 BRD 4.1 面试完成门禁收紧:前端要求完成全部面试题,但后端此前只要求至少一题有效回答,部分回答仍可生成面试结果;现 `finish` 要求所有服务端题目均有非空回答,空/部分回答均不落结果表。新增部分作答回归测试和 `demo-check` marker,未修改业务数据。 - 2026-07-14 BRD 发布状态只读复核:生产根站、`/h5/`、租户列表和员工首页 API 均返回 `200`,但线上仍加载管理端 `assets/index-CJZ3Ax3Z.js` 与 H5 `assets/index-D4-NrEpb.js`;当前分支 `c4f98b9a` 的面试完成门禁修复尚未发布。本轮未执行生产静态同步、后端重启或业务数据写入。 - 2026-07-14 BRD 4.1 面试证据输入边界修复:`answer/finish` 此前接受不存在于服务端题目列表的 `questionId`,可能把伪造字段写入回答快照;现统一拒绝未知题目 ID,评分和持久化只接受本次服务端生成的题目集合。新增 answer/finish 回归测试和 `demo-check` marker,未修改业务数据。 +- 2026-07-14 BRD 生产迁移资产补齐:`aihr_practice_audio`、`aihr_practice_calibration` 此前只有 reset SQL 和运行时懒建表,生产曾依赖人工建表;现新增可重复执行的 MySQL 8 版本化迁移脚本,仅补齐结构、不写入业务数据。仍需由运维在正式发布窗口执行并核对生产 schema,不能把脚本存在视为迁移已执行。 diff --git a/scripts/demo-check.sh b/scripts/demo-check.sh index 8c522b35..c2b2b9b7 100755 --- a/scripts/demo-check.sh +++ b/scripts/demo-check.sh @@ -495,6 +495,8 @@ contains frontend/src/views/train/reviews.vue "不展示演示复盘记录或猜 contains frontend/src/api/aihr/practice.ts "/api/train/practice/export" contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrPracticeSeedService.java "final_adopted_score" contains backend/script/sql/aihr_practice_mysql8.sql "aihr_practice_calibration" +contains backend/script/sql/update/aihr_20260714_practice_evidence_mysql8.sql "aihr_practice_audio" +contains backend/script/sql/update/aihr_20260714_practice_evidence_mysql8.sql "aihr_practice_calibration" contains frontend/src/api/aihr/practice.ts '/api/train/practice/scenarios/${id}/enabled' contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrPracticeController.java "/scenarios/{id}/enabled" contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrModelController.java "@SaCheckRole"