diff --git a/backend/script/sql/update/aihr_20260714_practice_brd_scenarios_mysql8.sql b/backend/script/sql/update/aihr_20260714_practice_brd_scenarios_mysql8.sql index 95a91bb2..d8ed0f3f 100644 --- a/backend/script/sql/update/aihr_20260714_practice_brd_scenarios_mysql8.sql +++ b/backend/script/sql/update/aihr_20260714_practice_brd_scenarios_mysql8.sql @@ -1,5 +1,6 @@ -- AIHR BRD 补充场景迁移(MySQL 8.x) -- 补齐 BRD 4.3.4 的服务推介与日常服务场景;不写入正式试点训练、校准或评审数据,可重复执行。 +-- 执行前先运行 aihr_20260714_practice_catalog_schema_mysql8.sql。 INSERT INTO `aihr_practice_scenario` (`tenant_id`, `scenario_code`, `scenario_name`, `position`, `scenario_type`, `project_type`, `difficulty`, diff --git a/backend/script/sql/update/aihr_20260714_practice_catalog_schema_mysql8.sql b/backend/script/sql/update/aihr_20260714_practice_catalog_schema_mysql8.sql new file mode 100644 index 00000000..3e0d7ec3 --- /dev/null +++ b/backend/script/sql/update/aihr_20260714_practice_catalog_schema_mysql8.sql @@ -0,0 +1,66 @@ +-- AIHR 对练场景与 Rubric 基础表迁移(MySQL 8.x) +-- 仅补齐旧库缺失的结构,不写入场景/Rubric业务数据;可重复执行。 + +CREATE TABLE IF NOT EXISTS `aihr_practice_scenario` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号', + `scenario_code` varchar(80) NOT NULL COMMENT '场景编码', + `scenario_name` varchar(100) NOT NULL COMMENT '场景名称', + `position` varchar(80) NOT NULL COMMENT '岗位', + `scenario_type` varchar(50) NOT NULL COMMENT '场景类型', + `project_type` varchar(80) DEFAULT NULL COMMENT '项目类型', + `difficulty` tinyint DEFAULT 1 COMMENT '难度', + `customer_persona` varchar(500) DEFAULT NULL COMMENT '业主人设', + `opening_text` varchar(500) DEFAULT NULL COMMENT '开场白', + `explicit_need` varchar(300) DEFAULT NULL COMMENT '显性诉求', + `hidden_need` varchar(300) DEFAULT NULL COMMENT '隐性诉求', + `irritants` varchar(500) DEFAULT NULL COMMENT '雷点', + `delights` varchar(500) DEFAULT NULL COMMENT '爽点', + `sop_refs` varchar(500) DEFAULT NULL COMMENT 'SOP引用', + `success_criteria` varchar(500) DEFAULT NULL COMMENT '成功条件', + `strategy` varchar(500) DEFAULT NULL COMMENT '训练策略', + `goal` varchar(500) DEFAULT NULL COMMENT '训练目标', + `trainee_name` varchar(100) DEFAULT '张三' COMMENT '默认学员', + `trust_start` int DEFAULT 60 COMMENT '起始信任', + `trust_end` int DEFAULT 80 COMMENT '目标信任', + `rounds_json` text DEFAULT NULL COMMENT '回合seed JSON', + `enabled` tinyint DEFAULT 1 COMMENT '是否启用', + `sort_order` int DEFAULT 0 COMMENT '排序', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_aihr_practice_scenario` (`tenant_id`, `scenario_code`), + KEY `idx_aihr_practice_scenario_filter` (`tenant_id`, `position`, `scenario_type`, `enabled`, `sort_order`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 对练场景'; + +CREATE TABLE IF NOT EXISTS `aihr_practice_rubric` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号', + `rubric_code` varchar(100) NOT NULL COMMENT 'Rubric编码', + `scenario_code` varchar(80) NOT NULL COMMENT '场景编码', + `rubric_name` varchar(100) NOT NULL COMMENT 'Rubric名称', + `version` varchar(30) DEFAULT 'v1' COMMENT '版本', + `enabled` tinyint DEFAULT 1 COMMENT '是否启用', + `description` varchar(500) DEFAULT NULL COMMENT '说明', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_aihr_practice_rubric` (`tenant_id`, `rubric_code`), + KEY `idx_aihr_practice_rubric_scenario` (`tenant_id`, `scenario_code`, `enabled`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 对练评分标准'; + +CREATE TABLE IF NOT EXISTS `aihr_practice_rubric_dimension` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号', + `rubric_code` varchar(100) NOT NULL COMMENT 'Rubric编码', + `dimension_code` varchar(50) NOT NULL COMMENT '维度编码', + `dimension_name` varchar(50) NOT NULL COMMENT '维度名称', + `weight` decimal(5,2) NOT NULL COMMENT '权重', + `description` varchar(500) DEFAULT NULL COMMENT '评分说明', + `sort_order` int DEFAULT 0 COMMENT '排序', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_aihr_practice_rubric_dimension` (`tenant_id`, `rubric_code`, `dimension_code`), + KEY `idx_aihr_practice_rubric_dimension` (`tenant_id`, `rubric_code`, `sort_order`) +) 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 04d68b19..0f2aa58b 100644 --- a/docs/BRD_IMPLEMENTATION_AUDIT.md +++ b/docs/BRD_IMPLEMENTATION_AUDIT.md @@ -367,4 +367,5 @@ - 2026-07-14 BRD 4.6 案例数量与媒体资产门禁:当前 `aihr_case_record` 只有 2 条“已入库”案例,严格预检要求至少 20 条;知识库中的案例类 PPT/文档附件不等同于已完成转写、整理、脱敏和人工入库的案例,暂不自动改写为“已入库”以避免伪造正式资产。案例页现有真实音频上传→ASR→整理→人工入库链路可继续采集,预渲染视频样片、学习点和主管点评仍需业务媒体字段/素材。 - 2026-07-14 BRD 发布状态复核:本地 `HEAD=0a30fe70` 新增场景与住宅 SOP 的 reset/版本化迁移已在开发库验证,但尚未发布或在生产执行;线上 `wygj-aihr.service` 仍为 `active`,根站与 `/h5/` 返回 `200`,线上资源/后端仍对应上一发布批次。发布继续受两份用户未提交 Figma 文档和生产迁移执行窗口约束,未执行生产写入。 - 2026-07-14 BRD 4.3.4 场景覆盖补齐:原生活顾问 12 条 seed 只有投诉、催费、报修、突发求助,缺少 BRD 明确要求的服务推介/增值与日常服务;现新增 `service-promotion-needs`、`daily-service-followup` 两条补充场景及五维 Rubric,保留原 12 条核心场景不变。提供幂等迁移 `aihr_20260714_practice_brd_scenarios_mysql8.sql` 和临时库回归脚本;该内容属于待业务复核的初始化素材,不等同于正式试点样本。 +- 2026-07-14 BRD 4.3.4 场景 schema 发布补齐:只读核验发现生产缺少 `aihr_practice_scenario`、`aihr_practice_rubric`、`aihr_practice_rubric_dimension` 三张表;现新增只建结构的 `aihr_20260714_practice_catalog_schema_mysql8.sql`,并让补充场景迁移显式依赖该基础迁移。未写入生产数据,正式发布仍需按顺序执行基础 schema、场景 seed 与 SOP seed 迁移。 - 2026-07-14 BRD 4.7 住宅 SOP 内容补齐:原知识库只有 3 份已解析住宅 SOP;现新增增值服务需求识别、日常服务回访两份 SOP 及各 3 个检索片段,reset SQL 与版本化迁移同步,临时库连续执行两次保持幂等。严格门禁已从 `sop_docs=3/5` 推进到 `5/5`;案例库、正式组织身份和正式试点证据仍未完成。 diff --git a/scripts/demo-check.sh b/scripts/demo-check.sh index b0629d3d..06ffcc62 100755 --- a/scripts/demo-check.sh +++ b/scripts/demo-check.sh @@ -533,6 +533,7 @@ contains mobile-uni/src/pages/user/learning/index.vue "mistakeFilters" contains mobile-uni/src/pages/user/profile/index.vue "AI训练综合分仅作训练参考" contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrPracticeSeedService.java "aihr_practice_session" contains backend/script/sql/aihr_practice_mysql8.sql "aihr_practice_scenario" +contains backend/script/sql/update/aihr_20260714_practice_catalog_schema_mysql8.sql "aihr_practice_rubric_dimension" contains backend/script/sql/update/aihr_20260714_practice_brd_scenarios_mysql8.sql "service-promotion-needs" contains backend/script/sql/update/aihr_20260714_practice_brd_scenarios_mysql8.sql "daily-service-followup" contains backend/script/sql/update/aihr_20260714_brd_sop_seed_mysql8.sql "sop_service_promotion_v1" diff --git a/scripts/tests/aihr-practice-brd-scenarios.test.sh b/scripts/tests/aihr-practice-brd-scenarios.test.sh index 949a16da..f3a5f458 100644 --- a/scripts/tests/aihr-practice-brd-scenarios.test.sh +++ b/scripts/tests/aihr-practice-brd-scenarios.test.sh @@ -20,6 +20,11 @@ cleanup() { trap cleanup EXIT mysql -e "CREATE DATABASE \`$DB\` CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;" +mysql "$DB" < "$ROOT_DIR/backend/script/sql/update/aihr_20260714_practice_catalog_schema_mysql8.sql" +mysql "$DB" < "$ROOT_DIR/backend/script/sql/update/aihr_20260714_practice_catalog_schema_mysql8.sql" +catalog_tables="$(mysql "$DB" -N -B -e "SELECT GROUP_CONCAT(table_name ORDER BY table_name) FROM information_schema.tables WHERE table_schema='$DB' AND table_name IN ('aihr_practice_rubric','aihr_practice_rubric_dimension','aihr_practice_scenario');")" +test "$catalog_tables" = 'aihr_practice_rubric,aihr_practice_rubric_dimension,aihr_practice_scenario' + mysql "$DB" < "$ROOT_DIR/backend/script/sql/aihr_practice_mysql8.sql" mysql "$DB" < "$ROOT_DIR/backend/script/sql/update/aihr_20260714_practice_brd_scenarios_mysql8.sql" mysql "$DB" < "$ROOT_DIR/backend/script/sql/update/aihr_20260714_practice_brd_scenarios_mysql8.sql"