Merge branch 'codex/brd-release-20260715' into codex/multi-tenant-knowledge-platform

# Conflicts:
#	AGENTS.md
#	README.md
#	backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/domain/AihrPracticeDto.java
#	backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrOrgSyncService.java
#	backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrPracticeSeedService.java
#	backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrUploadQueueService.java
#	backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrOrgSyncServiceTest.java
#	backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrPracticeSeedServiceTest.java
#	backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrUploadQueueServiceTest.java
#	docs/20260708/uni-app用户侧前端重建计划.md
#	docs/API_INTEGRATION.md
#	docs/BRD_IMPLEMENTATION_AUDIT.md
#	docs/BRD_PRODUCTION_MIGRATION_RUNBOOK.md
#	docs/DEMO_ACCEPTANCE.md
#	docs/DEV_SETUP.md
#	docs/FIGMA_IMPLEMENTATION_MATRIX.md
#	docs/README.md
#	frontend/src/views/knowledge/processing.vue
#	mobile-uni/src/pages/supervisor/assign/index.vue
#	mobile-uni/src/pages/supervisor/index/index.vue
#	mobile-uni/src/pages/supervisor/profile/index.vue
#	mobile-uni/src/pages/supervisor/review/index.vue
#	mobile-uni/src/pages/supervisor/reviews/index.vue
#	mobile-uni/src/pages/supervisor/team/index.vue
#	mobile-uni/src/pages/user/cases/index.vue
#	mobile-uni/src/pages/user/practice/index.vue
#	mobile-uni/src/pages/user/profile/index.vue
#	mobile-uni/src/pages/user/sop/index.vue
#	mobile-uni/src/pages/user/today/index.vue
#	mobile-uni/src/types/api.ts
#	scripts/tests/aihr-schema-migrations.test.sh
This commit is contained in:
2026-07-22 08:41:49 +08:00
27 changed files with 1011 additions and 38 deletions
@@ -21,6 +21,8 @@ CREATE TABLE IF NOT EXISTS `aihr_knowledge_answer_feedback` (
`query_norm` varchar(500) NOT NULL COMMENT '规范化问题',
`fragment_id` bigint NOT NULL COMMENT '知识片段ID',
`verdict` varchar(10) NOT NULL COMMENT '反馈: up/down',
`feedback_reason_codes` varchar(255) DEFAULT NULL COMMENT '未解决原因代码',
`feedback_comment` varchar(500) DEFAULT NULL COMMENT '未解决补充说明',
`category` varchar(100) DEFAULT NULL COMMENT '知识分类',
`position` varchar(80) DEFAULT NULL COMMENT '岗位',
`source` varchar(50) DEFAULT 'knowledge_search' COMMENT '来源',
@@ -59,6 +61,38 @@ PREPARE aihr_feedback_review_id_stmt FROM @aihr_feedback_review_id_ddl;
EXECUTE aihr_feedback_review_id_stmt;
DEALLOCATE PREPARE aihr_feedback_review_id_stmt;
SET @aihr_feedback_reason_codes_exists := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'aihr_knowledge_answer_feedback'
AND COLUMN_NAME = 'feedback_reason_codes'
);
SET @aihr_feedback_reason_codes_ddl := IF(
@aihr_feedback_table_exists = 1 AND @aihr_feedback_reason_codes_exists = 0,
'ALTER TABLE aihr_knowledge_answer_feedback ADD COLUMN `feedback_reason_codes` varchar(255) DEFAULT NULL COMMENT ''未解决原因代码'' AFTER `verdict`',
'SELECT 1'
);
PREPARE aihr_feedback_reason_codes_stmt FROM @aihr_feedback_reason_codes_ddl;
EXECUTE aihr_feedback_reason_codes_stmt;
DEALLOCATE PREPARE aihr_feedback_reason_codes_stmt;
SET @aihr_feedback_comment_exists := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'aihr_knowledge_answer_feedback'
AND COLUMN_NAME = 'feedback_comment'
);
SET @aihr_feedback_comment_ddl := IF(
@aihr_feedback_table_exists = 1 AND @aihr_feedback_comment_exists = 0,
'ALTER TABLE aihr_knowledge_answer_feedback ADD COLUMN `feedback_comment` varchar(500) DEFAULT NULL COMMENT ''未解决补充说明'' AFTER `feedback_reason_codes`',
'SELECT 1'
);
PREPARE aihr_feedback_comment_stmt FROM @aihr_feedback_comment_ddl;
EXECUTE aihr_feedback_comment_stmt;
DEALLOCATE PREPARE aihr_feedback_comment_stmt;
SET @aihr_feedback_reviewer_exists := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
@@ -0,0 +1,57 @@
-- AIHR 主管训练指派字段契约(MySQL 8.x)
-- 补齐训练目标、任务要求和截止时间;不写入业务数据,可重复执行。
SET @aihr_assignment_table_exists := (
SELECT COUNT(*)
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'aihr_practice_assignment'
);
SET @aihr_assignment_goal_exists := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'aihr_practice_assignment'
AND COLUMN_NAME = 'task_goal'
);
SET @aihr_assignment_goal_ddl := IF(
@aihr_assignment_table_exists = 1 AND @aihr_assignment_goal_exists = 0,
'ALTER TABLE aihr_practice_assignment ADD COLUMN `task_goal` varchar(200) DEFAULT NULL COMMENT ''训练目标'' AFTER `reason`',
'SELECT 1'
);
PREPARE aihr_assignment_goal_stmt FROM @aihr_assignment_goal_ddl;
EXECUTE aihr_assignment_goal_stmt;
DEALLOCATE PREPARE aihr_assignment_goal_stmt;
SET @aihr_assignment_requirements_exists := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'aihr_practice_assignment'
AND COLUMN_NAME = 'task_requirements'
);
SET @aihr_assignment_requirements_ddl := IF(
@aihr_assignment_table_exists = 1 AND @aihr_assignment_requirements_exists = 0,
'ALTER TABLE aihr_practice_assignment ADD COLUMN `task_requirements` varchar(500) DEFAULT NULL COMMENT ''任务要求'' AFTER `task_goal`',
'SELECT 1'
);
PREPARE aihr_assignment_requirements_stmt FROM @aihr_assignment_requirements_ddl;
EXECUTE aihr_assignment_requirements_stmt;
DEALLOCATE PREPARE aihr_assignment_requirements_stmt;
SET @aihr_assignment_due_exists := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'aihr_practice_assignment'
AND COLUMN_NAME = 'due_time'
);
SET @aihr_assignment_due_ddl := IF(
@aihr_assignment_table_exists = 1 AND @aihr_assignment_due_exists = 0,
'ALTER TABLE aihr_practice_assignment ADD COLUMN `due_time` datetime DEFAULT NULL COMMENT ''截止时间'' AFTER `task_requirements`',
'SELECT 1'
);
PREPARE aihr_assignment_due_stmt FROM @aihr_assignment_due_ddl;
EXECUTE aihr_assignment_due_stmt;
DEALLOCATE PREPARE aihr_assignment_due_stmt;