feat(admin): Add user management and upgrade to module permission system

Features - User Management (Phase 4.1):
- Database: Add user_modules table for fine-grained module permissions
- Database: Add 4 user permissions (view/create/edit/delete) to role_permissions
- Backend: UserService (780 lines) - CRUD with tenant isolation
- Backend: UserController + UserRoutes (648 lines) - 13 API endpoints
- Backend: Batch import users from Excel
- Frontend: UserListPage (412 lines) - list/filter/search/pagination
- Frontend: UserFormPage (341 lines) - create/edit with module config
- Frontend: UserDetailPage (393 lines) - details/tenant/module management
- Frontend: 3 modal components (592 lines) - import/assign/configure
- API: GET/POST/PUT/DELETE /api/admin/users/* endpoints

Architecture Upgrade - Module Permission System:
- Backend: Add getUserModules() method in auth.service
- Backend: Login API returns modules array in user object
- Frontend: AuthContext adds hasModule() method
- Frontend: Navigation filters modules based on user.modules
- Frontend: RouteGuard checks requiredModule instead of requiredVersion
- Frontend: Remove deprecated version-based permission system
- UX: Only show accessible modules in navigation (clean UI)
- UX: Smart redirect after login (avoid 403 for regular users)

Fixes:
- Fix UTF-8 encoding corruption in ~100 docs files
- Fix pageSize type conversion in userService (String to Number)
- Fix authUser undefined error in TopNavigation
- Fix login redirect logic with role-based access check
- Update Git commit guidelines v1.2 with UTF-8 safety rules

Database Changes:
- CREATE TABLE user_modules (user_id, tenant_id, module_code, is_enabled)
- ADD UNIQUE CONSTRAINT (user_id, tenant_id, module_code)
- INSERT 4 permissions + role assignments
- UPDATE PUBLIC tenant with 8 module subscriptions

Technical:
- Backend: 5 new files (~2400 lines)
- Frontend: 10 new files (~2500 lines)
- Docs: 1 development record + 2 status updates + 1 guideline update
- Total: ~4900 lines of code

Status: User management 100% complete, module permission system operational
This commit is contained in:
2026-01-16 13:42:10 +08:00
parent 98d862dbd4
commit 66255368b7
560 changed files with 70424 additions and 52353 deletions

View File

@@ -1,9 +1,9 @@
# PKB - <EFBFBD>汉鐭ヨ瘑搴撴ā鍧楋細鏁版嵁搴撹<EFBFBD>璁?
# PKB - 个人知识库模块:数据库设计
> **鐗堟湰锛?* v1.0
> **鏇存柊鏃堕棿锛?* 2025-11-12
> **鏁版嵁搴揝chema锛?* `pkb_schema`
> **鐘舵€侊細** 鉁?宸插疄鏂藉苟杩佺Щ
> **版本:** v1.0
> **更新时间:** 2025-11-12
> **数据库Schema** `pkb_schema`
> **状态:** ✅ 已实施并迁移
---
@@ -23,25 +23,25 @@
### 功能定位
**PKB锛圥ersonal Knowledge Base锛? 涓<>汉鐭ヨ瘑搴撴ā鍧?*鎻愪緵鏂囩尞绠$悊鍜屾櫤鑳介棶绛旇兘鍔涳紝鏍稿績鍔熻兘锛?
**PKBPersonal Knowledge Base- 个人知识库模块**提供文献管理和智能问答能力,核心功能:
1. **鐭ヨ瘑搴撶<EFBFBD>鐞?* - 鍒涘缓鍜岀<E98D9C>鐞嗕釜浜虹煡璇嗗簱
2. **鏂囨。涓婁紶** - <EFBFBD>PDF/Word/TXT绛夋牸寮忔枃妗?
1. **知识库管理** - 创建和管理个人知识库
2. **文档上传** - 支持PDF/Word/TXT等格式文档
3. **智能问答** - 基于知识库的RAG检索增强生成对话
4. **鎵瑰<EFBFBD>鐞嗕换鍔?* - 鎵归噺澶勭悊鏂囩尞鎻愬彇锛圥hase 3锛?
5. **浠诲姟妯℃澘** - 棰勫畾涔夌殑鎵瑰<EFBFBD>鐞嗕换鍔℃ā鏉匡紙Phase 3锛?
4. **批处理任务** - 批量处理文献提取Phase 3
5. **任务模板** - 预定义的批处理任务模板(Phase 3
### 核心业务场景
- 鐢ㄦ埛鍒涘缓鐭ヨ瘑搴擄紙濡?CLL鐩稿叧鐭ヨ瘑搴?锛?
- 用户创建知识库(如"CLL相关知识库"
- 上传PDF文献到知识库
- 自动提取文本并向量化
- 鍩轰簬鐭ヨ瘑搴撹繘琛屾櫤鑳介棶绛?
- 鎵归噺鎻愬彇鏂囩尞涓<EFBFBD>殑缁撴瀯鍖栦俊鎭?
- 基于知识库进行智能问答
- 批量提取文献中的结构化信息
### 与Dify平台集成
PKB妯″潡娣卞害闆嗘垚Dify骞冲彴锛?
PKB模块深度集成Dify平台
- 每个知识库对应一个Dify Dataset
- 每个文档对应一个Dify Document
- 使用Dify的向量检索和RAG能力
@@ -62,26 +62,26 @@ GRANT ALL ON SCHEMA pkb_schema TO aiclinical_admin;
```
### 数据迁移
- **杩佺Щ鏃堕棿锛?* 2025-11-12
- **婧怱chema锛?* public
- **杩佺Щ鑴氭湰锛?* `docs/09-鏋舵瀯瀹炴柦/migration-scripts/004-migrate-pkb.sql`
- **鏁版嵁瀹屾暣鎬э細** 鉁?100%杩佺Щ鎴愬姛
- **迁移时间:** 2025-11-12
- **源Schema** public
- **迁移脚本:** `docs/09-架构实施/migration-scripts/004-migrate-pkb.sql`
- **数据完整性:** 100%迁移成功
---
## 数据库表设计
### 琛ㄥ垪琛?
### 表列表
| 琛ㄥ悕 | 鐢ㄩ€?| 琛屾暟锛堜及璁★級 | 鐘舵€?|
| 表名 | 用途 | 行数(估计) | 状态 |
|------|------|------------|------|
| `knowledge_bases` | 鐭ヨ瘑搴?| 5-50/鐢ㄦ埛 | 鉁?宸查儴缃?|
| `documents` | 鏂囨。 | 10-1000/鐭ヨ瘑搴?| 鉁?宸查儴缃?|
| `batch_tasks` | 鎵瑰<EFBFBD>鐞嗕换鍔?| 1-100/鐭ヨ瘑搴?| 鉁?Phase 3 |
| `batch_results` | 鎵瑰<EFBFBD>鐞嗙粨鏋?| N鏉?浠诲姟 | 鉁?Phase 3 |
| `task_templates` | 浠诲姟妯℃澘 | 10-50/鐢ㄦ埛 | 鉁?Phase 3锛堥<EFBFBD>鐣欙級 |
| `knowledge_bases` | 知识库 | 5-50/用户 | ✅ 已部署 |
| `documents` | 文档 | 10-1000/知识库 | ✅ 已部署 |
| `batch_tasks` | 批处理任务 | 1-100/知识库 | ✅ Phase 3 |
| `batch_results` | 批处理结果 | N条/任务 | Phase 3 |
| `task_templates` | 任务模板 | 10-50/用户 | Phase 3(预留) |
**鎬昏<EFBFBD>锛?* 5涓<35>〃锛?涓<>牳蹇冭〃 + 3涓狿hase 3<EFBFBD>
**总计:** 5个表2个核心表 + 3个Phase 3表)
---
@@ -89,17 +89,17 @@ GRANT ALL ON SCHEMA pkb_schema TO aiclinical_admin;
**用途:** 存储用户创建的个人知识库
#### 琛ㄧ粨鏋?
#### 表结构
| 瀛楁<EFBFBD>鍚?| 鏁版嵁绫诲瀷 | 绾︽潫 | 璇存槑 |
| 字段名 | 数据类型 | 约束 | 说明 |
|--------|---------|------|------|
| id | TEXT | PRIMARY KEY | 鐭ヨ瘑搴撳敮涓€鏍囪瘑锛圲UID锛?|
| id | TEXT | PRIMARY KEY | 知识库唯一标识UUID |
| user_id | TEXT | NOT NULL, FK | 所属用户ID |
| name | TEXT | NOT NULL | 鐭ヨ瘑搴撳悕绉?|
| description | TEXT | NULL | 鐭ヨ瘑搴撴弿杩?|
| name | TEXT | NOT NULL | 知识库名称 |
| description | TEXT | NULL | 知识库描述 |
| dify_dataset_id | TEXT | NOT NULL, UNIQUE | Dify平台的Dataset ID |
| file_count | INTEGER | NOT NULL, DEFAULT 0 | 文件数量 |
| total_size_bytes | BIGINT | NOT NULL, DEFAULT 0 | 鎬绘枃浠跺ぇ灏忥紙瀛楄妭锛?|
| total_size_bytes | BIGINT | NOT NULL, DEFAULT 0 | 总文件大小(字节) |
| created_at | TIMESTAMPTZ | NOT NULL, DEFAULT now() | 创建时间 |
| updated_at | TIMESTAMPTZ | NOT NULL | 更新时间 |
@@ -138,32 +138,32 @@ model KnowledgeBase {
---
### 2. documents - 鏂囨。琛?
### 2. documents - 文档表
**鐢ㄩ€旓細** 瀛樺偍鐭ヨ瘑搴撲腑鐨勬枃妗d俊鎭?
**用途:** 存储知识库中的文档信息
#### 琛ㄧ粨鏋?
#### 表结构
| 瀛楁<EFBFBD>鍚?| 鏁版嵁绫诲瀷 | 绾︽潫 | 璇存槑 |
| 字段名 | 数据类型 | 约束 | 说明 |
|--------|---------|------|------|
| id | TEXT | PRIMARY KEY | 鏂囨。鍞<EFBFBD>竴鏍囪瘑锛圲UID锛?|
| id | TEXT | PRIMARY KEY | 文档唯一标识UUID |
| kb_id | TEXT | NOT NULL, FK | 所属知识库ID |
| user_id | TEXT | NOT NULL, FK | 所属用户ID |
| filename | TEXT | NOT NULL | 鏂囦欢鍚?|
| filename | TEXT | NOT NULL | 文件名 |
| file_type | TEXT | NOT NULL | 文件类型pdf/doc/txt等 |
| file_size_bytes | BIGINT | NOT NULL | 文件大小(字节) |
| file_url | TEXT | NOT NULL | 文件存储URL |
| dify_document_id | TEXT | NOT NULL | Dify平台的Document ID |
| status | TEXT | NOT NULL, DEFAULT 'uploading' | 鐘舵€侊紙uploading/processing/completed/failed锛?|
| progress | INTEGER | NOT NULL, DEFAULT 0 | 澶勭悊杩涘害锛?-100锛?|
| status | TEXT | NOT NULL, DEFAULT 'uploading' | 状态(uploading/processing/completed/failed |
| progress | INTEGER | NOT NULL, DEFAULT 0 | 处理进度0-100 |
| error_message | TEXT | NULL | 错误信息 |
| segments_count | INTEGER | NULL | 切片数量 |
| tokens_count | INTEGER | NULL | Token数量 |
| extraction_method | TEXT | NULL | 鎻愬彇鏂规硶锛坅uto/ocr/parse锛?|
| extraction_method | TEXT | NULL | 提取方法auto/ocr/parse |
| **Phase 2字段** | | | **全文阅读功能** |
| full_text | TEXT | NULL | 完整文本内容 |
| full_text_length | INTEGER | NULL | 文本长度 |
| metadata | JSONB | NULL | 鍏冩暟鎹<EFBFBD>紙浣滆€呫€佹爣棰樸€佹憳瑕佺瓑锛?|
| metadata | JSONB | NULL | 元数据(作者、标题、摘要等) |
| created_at | TIMESTAMPTZ | NOT NULL, DEFAULT now() | 创建时间 |
| updated_at | TIMESTAMPTZ | NOT NULL | 更新时间 |
@@ -211,11 +211,11 @@ model Document {
#### 业务规则
1. **状态机** - `status`字段管理文档处理流程
- `uploading` 鈫?`processing` 鈫?`completed`
- `uploading` `processing` `completed`
- 失败时转为`failed`
2. **Dify同步** - 每个文档对应Dify中的一个Document
3. **鎻愬彇鏂规硶** - <EFBFBD>寔鑷<EFBFBD>姩璇嗗埆銆丱CR銆佽В鏋愪笁绉嶆柟寮?
4. **Phase 2鎵╁睍** - `full_text`瀛楁<EFBFBD>鐢ㄤ簬鍏ㄦ枃闃呰<EFBFBD>鍜屾繁搴﹀垎鏋?
3. **提取方法** - 支持自动识别、OCR、解析三种方式
4. **Phase 2扩展** - `full_text`字段用于全文阅读和深度分析
---
@@ -223,22 +223,22 @@ model Document {
**用途:** 批量处理文献,提取结构化信息
#### 琛ㄧ粨鏋?
#### 表结构
| 瀛楁<EFBFBD>鍚?| 鏁版嵁绫诲瀷 | 绾︽潫 | 璇存槑 |
| 字段名 | 数据类型 | 约束 | 说明 |
|--------|---------|------|------|
| id | TEXT | PRIMARY KEY | 浠诲姟鍞<EFBFBD>竴鏍囪瘑锛圲UID锛?|
| id | TEXT | PRIMARY KEY | 任务唯一标识UUID |
| user_id | TEXT | NOT NULL, FK | 所属用户ID |
| kb_id | TEXT | NOT NULL, FK | 所属知识库ID |
| task_name | TEXT | NOT NULL | 任务名称 |
| task_type | TEXT | NOT NULL | 任务类型extract_info/summarize等 |
| prompt_template | TEXT | NOT NULL | Prompt模板 |
| model_name | TEXT | NOT NULL, DEFAULT 'gpt-4' | 使用的LLM模型 |
| status | TEXT | NOT NULL, DEFAULT 'pending' | 鐘舵€侊紙pending/running/completed/failed锛?|
| status | TEXT | NOT NULL, DEFAULT 'pending' | 状态(pending/running/completed/failed |
| total_documents | INTEGER | NOT NULL, DEFAULT 0 | 总文档数 |
| processed_count | INTEGER | NOT NULL, DEFAULT 0 | 已处理数 |
| success_count | INTEGER | NOT NULL, DEFAULT 0 | 鎴愬姛鏁?|
| failed_count | INTEGER | NOT NULL, DEFAULT 0 | 澶辫触鏁?|
| success_count | INTEGER | NOT NULL, DEFAULT 0 | 成功数 |
| failed_count | INTEGER | NOT NULL, DEFAULT 0 | 失败数 |
| error_message | TEXT | NULL | 错误信息 |
| created_at | TIMESTAMPTZ | NOT NULL, DEFAULT now() | 创建时间 |
| updated_at | TIMESTAMPTZ | NOT NULL | 更新时间 |
@@ -279,12 +279,12 @@ model BatchTask {
#### 业务规则
1. **浠诲姟绫诲瀷** - <EFBFBD>寔澶氱<EFBFBD>鎵瑰<EFBFBD>鐞嗙被鍨?
- `extract_info` - 鎻愬彇缁撴瀯鍖栦俊鎭?
1. **任务类型** - 支持多种批处理类型
- `extract_info` - 提取结构化信息
- `summarize` - 批量摘要
- `classify` - 文献分类
2. **鐘舵€佹満** - `status`悊浠诲姟鎵ц<EFBFBD>鐘舵€?
3. **杩涘害璺熻釜** - 瀹炴椂鏇存柊璁℃暟鍣ㄥ瓧娈?
2. **状态机** - `status`管理任务执行状态
3. **进度跟踪** - 实时更新计数器字段
4. **模型选择** - 支持多种LLM模型
---
@@ -293,17 +293,17 @@ model BatchTask {
**用途:** 存储批处理任务的每篇文献结果
#### 琛ㄧ粨鏋?
#### 表结构
| 瀛楁<EFBFBD>鍚?| 鏁版嵁绫诲瀷 | 绾︽潫 | 璇存槑 |
| 字段名 | 数据类型 | 约束 | 说明 |
|--------|---------|------|------|
| id | TEXT | PRIMARY KEY | 缁撴灉鍞<EFBFBD>竴鏍囪瘑锛圲UID锛?|
| id | TEXT | PRIMARY KEY | 结果唯一标识UUID |
| task_id | TEXT | NOT NULL, FK | 所属任务ID |
| document_id | TEXT | NOT NULL, FK | 所属文档ID |
| status | TEXT | NOT NULL, DEFAULT 'pending' | 鐘舵€侊紙pending/processing/completed/failed锛?|
| status | TEXT | NOT NULL, DEFAULT 'pending' | 状态(pending/processing/completed/failed |
| result_data | JSONB | NULL | 提取的结构化数据 |
| raw_output | TEXT | NULL | LLM原始输出 |
| tokens_used | INTEGER | NULL | 浣跨敤鐨凾oken鏁?|
| tokens_used | INTEGER | NULL | 使用的Token|
| error_message | TEXT | NULL | 错误信息 |
| created_at | TIMESTAMPTZ | NOT NULL, DEFAULT now() | 创建时间 |
@@ -336,20 +336,20 @@ model BatchResult {
#### 业务规则
1. **结果存储** - `result_data`存储JSON格式的结构化数据
2. **鍘熷<EFBFBD>杈撳嚭** - `raw_output`淇濈暀LLM鍘熷<EFBFBD>杈撳嚭锛屼究浜庤皟璇?
3. **Token缁熻<EFBFBD>** - 璁板綍姣忕瘒鏂囩尞鐨凾oken娑堣€?
2. **原始输出** - `raw_output`保留LLM原始输出便于调试
3. **Token统计** - 记录每篇文献的Token消耗
---
### 5. task_templates - 浠诲姟妯℃澘琛?(Phase 3, 鏆備笉瀹炵幇)
### 5. task_templates - 任务模板表 (Phase 3, 暂不实现)
**鐢ㄩ€旓細** 瀛樺偍棰勫畾涔夌殑鎵瑰<EFBFBD>鐞嗕换鍔℃ā鏉?
**用途:** 存储预定义的批处理任务模板
#### 琛ㄧ粨鏋?
#### 表结构
| 瀛楁<EFBFBD>鍚?| 鏁版嵁绫诲瀷 | 绾︽潫 | 璇存槑 |
| 字段名 | 数据类型 | 约束 | 说明 |
|--------|---------|------|------|
| id | TEXT | PRIMARY KEY | 妯℃澘鍞<EFBFBD>竴鏍囪瘑锛圲UID锛?|
| id | TEXT | PRIMARY KEY | 模板唯一标识UUID |
| user_id | TEXT | NOT NULL, FK | 所属用户ID |
| template_name | TEXT | NOT NULL | 模板名称 |
| task_type | TEXT | NOT NULL | 任务类型 |
@@ -385,8 +385,8 @@ model TaskTemplate {
#### 业务规则
1. **模板复用** - 用户可保存常用的任务配置
2. **瀛楁<EFBFBD>瀹氫箟** - `output_fields`瀹氫箟鏈熸湜鐨勮緭鍑虹粨鏋?
3. **鏆備笉瀹炵幇** - Phase 3棰勭暀锛屽悗缁<EFBFBD>紑鍙?
2. **字段定义** - `output_fields`定义期望的输出结构
3. **暂不实现** - Phase 3预留,后续开发
---
@@ -463,51 +463,51 @@ erDiagram
### 跨Schema引用
**澶栭敭鍏崇郴锛?*
- `knowledge_bases.user_id` 鈫?`platform_schema.users.id`
- `documents.user_id` 鈫?`platform_schema.users.id`
- `batch_tasks.user_id` 鈫?`platform_schema.users.id`
- `task_templates.user_id` 鈫?`platform_schema.users.id`
**外键关系:**
- `knowledge_bases.user_id` `platform_schema.users.id`
- `documents.user_id` `platform_schema.users.id`
- `batch_tasks.user_id` `platform_schema.users.id`
- `task_templates.user_id` `platform_schema.users.id`
**璇存槑锛?* Prisma鑷<61>姩澶勭悊璺⊿chema澶栭敭锛屽簲鐢ㄤ唬鐮佹棤闇€鍏冲績Schema鍓嶇紑
**说明:** Prisma自动处理跨Schema外键应用代码无需关心Schema前缀
---
## 索引设计
### 主键索引
鎵€鏈夎〃鐨刞id`瀛楁<E7809B><EFBFBD>姩鍒涘缓B-tree涓婚敭绱㈠紩銆?
所有表的`id`字段自动创建B-tree主键索引。
### 外键索引
| 琛ㄥ悕 | 绱㈠紩瀛楁<E7809B> | 鐢ㄩ€?|
| 表名 | 索引字段 | 用途 |
|------|---------|------|
| knowledge_bases | user_id | 查询用户的所有知识库 |
| knowledge_bases | dify_dataset_id | Dify数据同步 |
| documents | kb_id | 鏌ヨ<EFBFBD>鐭ヨ瘑搴撶殑鎵€鏈夋枃妗?|
| documents | user_id | 鏌ヨ<EFBFBD>鐢ㄦ埛鐨勬墍鏈夋枃妗?|
| documents | status | 杩囨护鏂囨。鐘舵€?|
| documents | kb_id | 查询知识库的所有文档 |
| documents | user_id | 查询用户的所有文档 |
| documents | status | 过滤文档状态 |
| documents | dify_document_id | Dify数据同步 |
| documents | extraction_method | 鎸夋彁鍙栨柟娉曡繃婊?|
| batch_tasks | user_id | 鏌ヨ<EFBFBD>鐢ㄦ埛鐨勪换鍔?|
| documents | extraction_method | 按提取方法过滤 |
| batch_tasks | user_id | 查询用户的任务 |
| batch_tasks | kb_id | 查询知识库的任务 |
| batch_tasks | status | 杩囨护浠诲姟鐘舵€?|
| batch_results | task_id | 鏌ヨ<EFBFBD>浠诲姟鐨勬墍鏈夌粨鏋?|
| batch_results | document_id | 鏌ヨ<EFBFBD>鏂囨。鐨勫<EFBFBD>鐞嗙粨鏋?|
| batch_results | status | 杩囨护缁撴灉鐘舵€?|
| task_templates | user_id | 鏌ヨ<EFBFBD>鐢ㄦ埛鐨勬ā鏉?|
| batch_tasks | status | 过滤任务状态 |
| batch_results | task_id | 查询任务的所有结果 |
| batch_results | document_id | 查询文档的处理结果 |
| batch_results | status | 过滤结果状态 |
| task_templates | user_id | 查询用户的模板 |
### 时间索引
| 琛ㄥ悕 | 绱㈠紩瀛楁<E7809B> | 鐢ㄩ€?|
| 表名 | 索引字段 | 用途 |
|------|---------|------|
| batch_tasks | created_at | 鎸夋椂闂存帓搴忎换鍔?|
| batch_tasks | created_at | 按时间排序任务 |
---
## Phase 3功能说明
### 鎵瑰<EFBFBD>鐞嗗伐浣滄祦绋?
### 批处理工作流程
```mermaid
sequenceDiagram
@@ -518,23 +518,23 @@ sequenceDiagram
participant LLM
participant BatchResult
User->>API: 鍒涘缓鎵瑰<EFBFBD>鐞嗕换鍔?
User->>API: 创建批处理任务
API->>BatchTask: 创建任务记录
API->>Document: 鏌ヨ<EFBFBD>鐭ヨ瘑搴撴枃妗垪琛?
API->>Document: 查询知识库文档列表
loop 每篇文档
BatchTask->>Document: 读取文档全文
BatchTask->>LLM: 调用LLM提取信息
LLM-->>BatchTask: 杩斿洖缁撴瀯鍖栨暟鎹?
LLM-->>BatchTask: 返回结构化数据
BatchTask->>BatchResult: 保存结果
BatchTask->>BatchTask: 更新进度
end
BatchTask->>API: 任务完成
API-->>User: 杩斿洖缁撴灉姹囨€?
API-->>User: 返回结果汇总
```
### 鎵瑰<EFBFBD>鐞嗕换鍔被鍨嬬ず渚?
### 批处理任务类型示例
1. **信息提取** (`extract_info`)
- 提取研究方法、样本量、P值等
@@ -542,52 +542,52 @@ sequenceDiagram
2. **文献摘要** (`summarize`)
- 批量生成文献摘要
- 缁熶竴鏍煎紡鍜岄暱搴?
- 统一格式和长度
3. **文献分类** (`classify`)
- 根据研究类型分类
- 鏍囩<E98F8D>鍖栫<E98D96>鐞?
- 标签化管理
---
## 变更历史
### v1.0 - 2025-11-12 - 鍒濆<EFBFBD>鐗堟湰 鉁?
### v1.0 - 2025-11-12 - 初始版本 ✅
**鍙樻洿鍐呭<EFBFBD>锛?*
**变更内容:**
1.`public` schema迁移到`pkb_schema`
2. 5<EFBFBD>〃鍏ㄩ儴杩佺Щ锛?
2. 5个表全部迁移:
- knowledge_bases
- documents
- batch_tasks
- batch_results
- task_templates
3. 在Prisma中添加`@@schema("pkb_schema")`标签
4. 鎵€鏈夋暟鎹?00%瀹屾暣杩佺Щ
4. 所有数据100%完整迁移
**杩佺Щ鑴氭湰锛?* `docs/09-鏋舵瀯瀹炴柦/migration-scripts/004-migrate-pkb.sql`
**迁移脚本:** `docs/09-架构实施/migration-scripts/004-migrate-pkb.sql`
**楠岃瘉鐘舵€侊細** 鉁?宸查獙璇侊紝鍔熻兘姝e父
**验证状态:** ✅ 已验证,功能正常
**鐗规畩澶勭悊锛?*
- `batch_results.rawOutput` 鈫?`raw_output`锛堝垪鍚嶆槧灏勪慨姝o級
- `task_templates.outputFields` 鈫?`output_fields`锛堝垪鍚嶆槧灏勪慨姝o級
**特殊处理:**
- `batch_results.rawOutput` `raw_output`(列名映射修正)
- `task_templates.outputFields` `output_fields`(列名映射修正)
---
## 📚 相关文档
- [Schema闅旂<EFBFBD>鏋舵瀯璁捐<EFBFBD>](../../../09-鏋舵瀯瀹炴柦/01-Schema闅旂<EFBFBD>鏋舵瀯璁捐<EFBFBD>锛?0涓<30>.md)
- [Schema隔离架构设计](../../../09-架构实施/01-Schema隔离架构设计10个.md)
- [Schema迁移完成报告](../../../09-架构实施/Schema迁移完成报告.md)
- [Prisma配置完成报告](../../../09-架构实施/Prisma配置完成报告.md)
- [<EFBFBD>€熷姛鑳芥祴璇曟姤鍛奭(../../../09-鏋舵瀯瀹炴柦/蹇<>€熷姛鑳芥祴璇曟姤鍛?md)
- [AIA鏁版嵁搴撹<EFBFBD>璁℃枃妗<EFBFBD>(../../AIA-AI鏅鸿兘闂<E58598>瓟/02-鎶€鏈<E282AC><E98F88>璁?01-鏁版嵁搴撹<E690B4>璁?md)
- [快速功能测试报告](../../../09-架构实施/快速功能测试报告.md)
- [AIA数据库设计文档](../../AIA-AI智能问答/02-技术设计/01-数据库设计.md)
---
**文档维护者:** AI助手
**最后更新:** 2025-11-12
**鏂囨。鐘舵€侊細** 鉁?宸插畬鎴愬苟楠岃瘉
**文档状态:** ✅ 已完成并验证