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,52 +1,52 @@
# PKB个人知识库和 RVW审稿功能迁移计划
> **鍒涘缓鏃ユ湡锛?* 2025-12-28
> **缁存姢鑰咃細** 鎶€鏈<E282AC>洟闃?
> **<EFBFBD>爣锛?* 灏嗗凡寮€鍙戠殑PKB鍜孯VW鍔熻兘杩佺Щ鍒版渶鏂扮殑妯″潡鍖栨灦鏋勪笂
> **创建日期:** 2025-12-28
> **维护者:** 技术团队
> **目标:** 将已开发的PKB和RVW功能迁移到最新的模块化架构上
---
## 📋 执行摘要
### 迁移目标
灏嗘棫鐗堟湰锛坄frontend` + `backend/src/legacy`锛変腑鐨?*涓<>汉鐭ヨ瘑搴擄紙PKB锛?*鍜?*瀹ǹ鍔熻兘锛圧VW锛?*杩佺Щ鍒版柊鏋舵瀯锛坄frontend-v2` + `backend/src/modules`锛夛紝浣垮叾绗﹀悎鏈€鏂扮殑妯″潡鍖栥€佷簯鍘熺敓璁捐<EFBFBD>瑙勮寖銆?
将旧版本(`frontend` + `backend/src/legacy`)中的**个人知识库PKB**和**审稿功能RVW**迁移到新架构(`frontend-v2` + `backend/src/modules`),使其符合最新的模块化、云原生设计规范。
### 褰撳墠鐘舵€?
### 当前状态
| 鍔熻兘 | 鏃ф灦鏋勪綅缃?| 瀹屾垚搴?| 鏁版嵁搴揝chema | 鍓嶇<EFBFBD>UI |
| 功能 | 旧架构位置 | 完成度 | 数据库Schema | 前端UI |
|------|-----------|--------|-------------|--------|
| **PKB <EFBFBD>汉鐭ヨ瘑搴?* | `backend/src/legacy` + `frontend/src` | 鉁?100% | `pkb_schema` | 鉁?瀹屾暣UI |
| **RVW 瀹$ǹ鍔熻兘** | `backend/src/legacy` + `frontend/src` | 鉁?100% | `public.ReviewTask` | 鉁?瀹屾暣UI |
| **PKB 个人知识库** | `backend/src/legacy` + `frontend/src` | 100% | `pkb_schema` | ✅ 完整UI |
| **RVW 审稿功能** | `backend/src/legacy` + `frontend/src` | 100% | `public.ReviewTask` | ✅ 完整UI |
### 杩佺Щ浼樺厛绾?
1. **P0锛堟渶楂樹紭鍏堢骇锛?*: PKB涓<42>汉鐭ヨ瘑搴?- 宸?00%瀹屾垚锛岃縼绉婚<E7BB89>闄╀綆
2. **P1锛堥珮浼樺厛绾э級**: RVW瀹$ǹ鍔熻兘 - 宸?00%瀹屾垚锛岃縼绉婚<EFBFBD>闄╀綆
### 迁移优先级
1. **P0(最高优先级)**: PKB个人知识库 - 已100%完成,迁移风险低
2. **P1(高优先级)**: RVW审稿功能 - 已100%完成,迁移风险低
---
## 🔍 已有功能深度分析
### 涓€銆丳KB锛堜釜浜虹煡璇嗗簱锛夊姛鑳借<EFBFBD>鎯?
### 一、PKB个人知识库功能详情
#### 1.1 鍔熻兘鐗规€?
#### 1.1 功能特性
**鏍稿績鑳藉姏锛?*
- 鉁?**鐭ヨ瘑搴揅RUD**锛氬垱寤恒€佹煡鐪嬨€佺紪杈戙€佸垹闄ょ煡璇嗗簱
- 鉁?**閰嶉<E996B0>悊**锛氭瘡鐢ㄦ埛3涓<33>煡璇嗗簱锛屾瘡搴?0涓<30>枃妗?
- 鉁?**鏂囨。涓婁紶**锛氭敮鎸丳DF銆乄ord銆乀XT銆丮arkdown
- 鉁?**鏂囨。鐘舵€佽拷韪?*锛歶ploading 鈫?parsing 鈫?indexing 鈫?completed/error
- 鉁?**Dify RAG闆嗘垚**锛氬熀浜嶥ify骞冲彴鐨勫悜閲忔<E996B2>绱?
- 鉁?**璇<>箟妫€绱?*锛氭敮鎸佸<E98EB8>鐭ヨ瘑搴撹仈鍚堟<E98D9A><EFBFBD>top_k=15
- 鉁?**缁熻<E7BC81>淇℃伅**锛氭枃妗暟銆乀oken鏁般€佹<E282AC>钀芥暟缁熻<E7BC81>
- 鉁?**鍏ㄦ枃闃呰<E99783>妯″紡**锛圥hase2锛夛細Token闄愬埗銆佹櫤鑳芥枃妗i€夋嫨
**核心能力:**
- **知识库CRUD**:创建、查看、编辑、删除知识库
- **配额管理**每用户3个知识库每库50个文档
- **文档上传**支持PDF、Word、TXT、Markdown
- **文档状态追踪**uploading parsing indexing completed/error
- **Dify RAG集成**基于Dify平台的向量检索
- **语义检索**:支持多知识库联合检索,top_k=15
- **统计信息**文档数、Token数、段落数统计
- **全文阅读模式**Phase2Token限制、智能文档选择
**技术亮点:**
- 馃弳 **Python<EFBFBD>湇鍔¢泦鎴?*锛氳皟鐢╜extraction_service`鎻愬彇鏂囨。鏂囨湰
- 🏆 **Python微服务集成**:调用`extraction_service`提取文档文本
- 🏆 **Dify Dataset管理**每个知识库对应一个Dify Dataset
- 馃弳 **Token绮剧‘璁$畻**锛氫娇鐢╰iktoken璁$畻Token鏁帮紝鍙岄噸闄愬埗锛?0鏂囦欢 + 980K tokens锛?
- 馃弳 **鏅鸿兘鏂囨。閫夋嫨**锛氬熀浜嶵oken瀹归噺鐨勬櫤鑳芥帹鑽愮畻娉?
- 🏆 **Token精确计算**使用tiktoken计算Token双重限制50文件 + 980K tokens
- 🏆 **智能文档选择**基于Token容量的智能推荐算法
#### 1.2 鏁版嵁搴撶粨鏋?
#### 1.2 数据库结构
**PKB Schema`pkb_schema`**
```prisma
@@ -83,7 +83,7 @@ model Document {
extractionQuality Float?
charCount Int?
language String? // chinese/english
extractedText String? // Phase2锛氬叏鏂囧瓨鍌?
extractedText String? // Phase2:全文存储
uploadedAt DateTime @default(now())
processedAt DateTime?
}
@@ -114,24 +114,24 @@ model BatchTask {
**服务层(`backend/src/legacy/services/`**
```typescript
knowledgeBaseService.ts (365?
createKnowledgeBase() // 鍒涘缓鐭ヨ瘑搴擄紙Dify Dataset锛?
knowledgeBaseService.ts (365)
createKnowledgeBase() // 创建知识库(Dify Dataset
getKnowledgeBases() // 获取列表
getKnowledgeBaseById() // 获取详情
updateKnowledgeBase() // 更新
deleteKnowledgeBase() // 鍒犻櫎锛堢骇鑱斿垹闄<EFBFBD>ify Dataset锛?
searchKnowledgeBase() // <EFBFBD>箟妫€绱<EFBFBD>紙璋冪敤Dify API锛?
deleteKnowledgeBase() // 删除级联删除Dify Dataset
searchKnowledgeBase() // 语义检索(调用Dify API
getKnowledgeBaseStats() // 统计信息
getDocumentSelection() // 鏅鸿兘鏂囨。閫夋嫨锛圥hase2锛?
getDocumentSelection() // 智能文档选择Phase2
documentService.ts
uploadDocument() // 上传文档
getDocuments() // 获取文档列表
deleteDocument() // 删除文档
reprocessDocument() // 重新处理
pollDocumentStatus() // <EFBFBD><EFBFBD>鐘舵€?
pollDocumentStatus() // 轮询状态
tokenService.ts (243?
tokenService.ts (243)
calculateDocumentTokens() // 计算Token
selectDocumentsForFullText() // 智能选择
TOKEN_LIMITS
@@ -139,7 +139,7 @@ tokenService.ts (243
**控制器层(`backend/src/legacy/controllers/`**
```typescript
knowledgeBaseController.ts (341?
knowledgeBaseController.ts (341)
POST /knowledge-bases
GET /knowledge-bases
GET /knowledge-bases/:id
@@ -160,22 +160,22 @@ documentController.ts
#### 1.4 前端代码结构
**涓婚〉闈<EFBFBD>`frontend/src/pages/KnowledgePage.tsx`锛夛細** 281琛?
- 鐭ヨ瘑搴撳垪琛ㄨ<EFBFBD>鍥?
- 鐭ヨ瘑搴撹<EFBFBD>鎯呰<EFBFBD>鍥撅紙Tabs锛氭枃妗<EFBFBD>鐞?+ 缁熻<E7BC81>淇℃伅锛?
**主页面(`frontend/src/pages/KnowledgePage.tsx`** 281
- 知识库列表视图
- 知识库详情视图Tabs文档管理 + 统计信息)
- 双进度条容量显示(文件数 + Token数
**组件(`frontend/src/components/knowledge/`**
```
KnowledgeBaseList.tsx // 鐭ヨ瘑搴撳崱鐗囧垪琛?
CreateKBDialog.tsx // 鍒涘缓瀵硅瘽妗?
EditKBDialog.tsx // 缂栬緫瀵硅瘽妗?
KnowledgeBaseList.tsx // 知识库卡片列表
CreateKBDialog.tsx // 创建对话框
EditKBDialog.tsx // 编辑对话框
DocumentList.tsx // 文档列表(含状态徽章)
DocumentUpload.tsx // 文件上传(拖拽支持)
```
**状态管理(`frontend/src/stores/useKnowledgeBaseStore.ts`**
- Zustand鐘舵€佺<EFBFBD>鐞?
- Zustand状态管理
- API调用封装
- 实时状态轮询5秒间隔
@@ -183,40 +183,40 @@ DocumentUpload.tsx // 文件上传(拖拽支持)
### 二、RVW审稿功能功能详情
#### 2.1 鍔熻兘鐗规€?
#### 2.1 功能特性
**鏍稿績鑳藉姏锛?*
- 鉁?**绋夸欢涓婁紶**锛氭敮鎸乄ord鏂囨。锛?doc/.docx锛夛紝鏈€澶?MB
- 鉁?**鍙岀淮搴﹁瘎浼?*锛?
**核心能力:**
- **稿件上传**支持Word文档.doc/.docx最大5MB
- **双维度评估**
- 稿约规范性评估11项标准
- 方法学评估3大部分
- 鉁?**鍩轰簬鐪熷疄鏈熷垔鏍囧噯**锛氥€婁腑鍗庡尰瀛﹁秴澹版潅蹇椼€嬬ǹ绾?
- 鉁?**鏅鸿兘鍒嗘瀽**锛氫娇鐢↙LM杩涜<E69DA9>缁撴瀯鍖栬瘎浼?
- 鉁?**瀹屾暣鎶ュ憡**锛欽SON鏍煎紡缁撴灉锛屾敮鎸佸<E98EB8>鍑篜DF/澶嶅埗鏂囨湰
- 鉁?**妯″瀷閫夋嫨**锛欴eepSeek-V3 / Qwen3-72B / Qwen-Long
- 鉁?**浠诲姟绠$悊**锛氫换鍔″垪琛ㄣ€佺姸鎬佽拷韪<E68BB7>€佽繘搴︽樉绀?
- **基于真实期刊标准**:《中华医学超声杂志》稿约
- **智能分析**使用LLM进行结构化评估
- **完整报告**JSON格式结果支持导出PDF/复制文本
- **模型选择**DeepSeek-V3 / Qwen3-72B / Qwen-Long
- **任务管理**:任务列表、状态追踪、进度显示
**璇勪及鏍囧噯锛?*
**评估标准:**
**绋跨害瑙勮寖鎬ц瘎浼帮紙11椤癸級锛?*
1. 鏂囬<EFBFBD>锛圱itle锛?
2. 浣滆€咃紙Authors锛?
3. <EFBFBD>枃鎽樿<EFBFBD>锛圕hinese Abstract锛?
4. 鑻辨枃鎽樿<EFBFBD>锛圗nglish Abstract锛?
5. <EFBFBD>枃鍏抽敭璇嶏紙Chinese Keywords锛?
6. 鑻辨枃鍏抽敭璇嶏紙English Keywords锛?
7. 姝f枃锛圡ain Text锛?
8. 鍙傝€冩枃鐚<EFBFBD>References锛?
9. 鍥捐〃锛團igures and Tables锛?
10. 鍒╃泭鍐茬獊锛圕onflict of Interest锛?
11. 浼︾悊瀹℃煡锛圗thics Approval锛?
**稿约规范性评估11项**
1. 文题Title
2. 作者(Authors
3. 中文摘要Chinese Abstract
4. 英文摘要English Abstract
5. 中文关键词(Chinese Keywords
6. 英文关键词(English Keywords
7. 正文Main Text
8. 参考文献(References
9. 图表Figures and Tables
10. 利益冲突Conflict of Interest
11. 伦理审查Ethics Approval
**方法学评估3部分**
1. 绉戠爺璁捐<EFBFBD>锛圧esearch Design锛?
2. 缁熻<EFBFBD>鏂规硶锛圫tatistical Methods锛?
3. 缁熻<EFBFBD>鍒嗘瀽锛圫tatistical Analysis锛?
1. 科研设计Research Design
2. 统计方法Statistical Methods
3. 统计分析Statistical Analysis
#### 2.2 鏁版嵁搴撶粨鏋?
#### 2.2 数据库结构
**ReviewTask表当前在`public` schema需迁移到`rvw_schema`**
```prisma
@@ -230,8 +230,8 @@ model ReviewTask {
status String // pending/extracting/reviewing_editorial/reviewing_methodology/completed/failed
modelUsed String
overallScore Float?
editorialReview Json? // 绋跨害瑙勮寖鎬ц瘎浼扮粨鏋?
methodologyReview Json? // 鏂规硶瀛﹁瘎浼扮粨鏋?
editorialReview Json? // 稿约规范性评估结果
methodologyReview Json? // 方法学评估结果
errorMessage String?
startedAt DateTime?
completedAt DateTime?
@@ -242,14 +242,14 @@ model ReviewTask {
#### 2.3 后端代码结构
**鏈嶅姟灞傦紙`backend/src/legacy/services/reviewService.ts`锛夛細** 453琛?
**服务层(`backend/src/legacy/services/reviewService.ts`** 453
```typescript
reviewManuscript() // 涓诲叆鍙紙寮傛<EFBFBD>鎵ц<EFBFBD>锛?
reviewManuscript() // 主入口(异步执行)
processReviewTask() // 后台处理任务
reviewEditorialStandards() // 绋跨害瑙勮寖鎬ц瘎浼?
reviewMethodology() // 鏂规硶瀛﹁瘎浼?
reviewEditorialStandards() // 稿约规范性评估
reviewMethodology() // 方法学评估
parseJSONFromLLMResponse() // 容错JSON解析
getReviewTask() // 鑾峰彇浠诲姟鐘舵€?
getReviewTask() // 获取任务状态
getReviewTasks() // 获取任务列表(分页)
deleteReviewTask() // 删除任务
getReviewReport() // 获取完整报告
@@ -257,17 +257,17 @@ getReviewReport() // 获取完整报告
**Prompt设计`backend/prompts/`**
```
review_editorial_system.txt (210琛?
review_editorial_system.txt (210行)
└── 11个评估维度的详细标准
review_methodology_system.txt (231琛?
review_methodology_system.txt (231行)
└── 3个部分的评估标准
```
**鎺у埗鍣ㄥ眰锛坄backend/src/legacy/controllers/reviewController.ts`锛夛細** 265琛?
**控制器层(`backend/src/legacy/controllers/reviewController.ts`** 265
```typescript
POST /review/upload // 涓婁紶绋夸欢骞跺紑濮嬪<EFBFBD>鏌?
GET /review/tasks/:taskId // 鑾峰彇浠诲姟鐘舵€?
POST /review/upload // 上传稿件并开始审查
GET /review/tasks/:taskId // 获取任务状态
GET /review/tasks/:taskId/report // 获取审查报告
GET /review/tasks // 获取任务列表(分页)
DELETE /review/tasks/:taskId // 删除任务
@@ -275,23 +275,23 @@ DELETE /review/tasks/:taskId // 删除任务
#### 2.4 前端代码结构
**涓婚〉闈<EFBFBD>`frontend/src/pages/ReviewPage.tsx`锛夛細** 625琛?
- 娓愬彉鑹叉爣棰樺崱鐗?
- 3姝ユ祦绋嬶細涓婁紶绋夸欢 鈫?閫夋嫨妯″瀷 鈫?寮€濮嬪<E6BFAE>鏌?
- 5姝ヨ繘搴﹀睍绀猴細涓婁紶 鈫?鎻愬彇鏂囨湰 鈫?绋跨害璇勪及 鈫?鏂规硶瀛﹁瘎浼?鈫?鐢熸垚鎶ュ憡
- 鎶ュ憡灞曠ず锛圱abs鍒囨崲锛?
- 瀵煎嚭鍔熻兘锛圥DF鐢熸垚 + 鏂囨湰澶嶅埗锛?
**主页面(`frontend/src/pages/ReviewPage.tsx`** 625
- 渐变色标题卡片
- 3步流程:上传稿件 → 选择模型 → 开始审查
- 5步进度展示:上传 → 提取文本 → 稿约评估 → 方法学评估 → 生成报告
- 报告展示Tabs切换
- 导出功能PDF生成 + 文本复制)
**组件(`frontend/src/components/review/`**
```
ScoreCard.tsx // 分数卡片(颜色编码)
EditorialReview.tsx // 绋跨害瑙勮寖鎬ц瘎浼拌<EFBFBD>鎯?
MethodologyReview.tsx // 鏂规硶瀛﹁瘎浼拌<EFBFBD>鎯?
EditorialReview.tsx // 稿约规范性评估详情
MethodologyReview.tsx // 方法学评估详情
```
**瑙嗚<EFBFBD>璁捐<EFBFBD>锛?*
**视觉设计:**
- 渐变色主题:`linear-gradient(135deg, #667eea 0%, #764ba2 100%)`
- 鍒嗘暟棰滆壊缂栫爜锛氣墺90浼樼<EFBFBD>锛堢豢锛夈€佲墺80鑹<EFBFBD>ソ锛堣摑锛夈€佲墺70涓<EFBFBD>瓑锛堥粍锛夈€?70闇€鏀硅繘锛堢孩锛?
- 分数颜色编码≥90优秀绿、≥80良好、≥70中等、<70需改进
- 拖拽上传支持
- 响应式布局
@@ -300,66 +300,66 @@ MethodologyReview.tsx // 方法学评估详
## 🎯 迁移策略
### 迁移原则
1. **淇濇寔鍔熻兘瀹屾暣鎬?*锛?00%淇濈暀鐜版湁鍔熻兘锛屼笉鍋氬垹鍑?
2. **閬靛惊鏂版灦鏋勮<EFBFBD>鑼?*锛氱<E9949B>鍚堟ā鍧楀寲銆丼chema闅旂<E99785>銆佷簯鍘熺敓璁捐<E79281>
3. **澶嶇敤骞冲彴鑳藉姏**锛氫娇鐢╜common`灞傜殑瀛樺偍銆佹棩蹇椼€丩LM銆佹枃妗<E5A697>鐞嗘湇鍔?
4. **娓愯繘寮忚縼绉?*锛氬厛鍚庣<E98D9A>鍐嶅墠绔<E5A2A0>紝纭<E7B49D>繚姣忔<E5A7A3><EFBFBD>祴璇?
5. **淇濇寔鏁版嵁鍏煎<EFBFBD>**锛氭暟鎹<E69A9F>簱琛ㄧ粨鏋勫钩婊戣縼绉伙紝涓嶄涪澶辨暟鎹?
1. **保持功能完整性**100%保留现有功能,不做删减
2. **遵循新架构规范**符合模块化、Schema隔离、云原生设计
3. **复用平台能力**:使用`common`层的存储、日志、LLM、文档处理服务
4. **渐进式迁移**:先后端再前端,确保每步可测试
5. **保持数据兼容**:数据库表结构平滑迁移,不丢失数据
---
## 📋 迁移任务清单
### Phase 1: PKB<EFBFBD>汉鐭ヨ瘑搴撹縼绉伙紙浼樺厛锛?
### Phase 1: PKB个人知识库迁移(优先)
#### Task 1.1锛氬悗绔<EFBFBD>唬鐮佽縼绉?鈴憋笍 棰勮<E6A3B0>2-3灏忔椂
#### Task 1.1:后端代码迁移 ⏱️ 预计2-3小时
**<EFBFBD>爣鐩<EFBFBD>綍锛?* `backend/src/modules/pkb/`
**目标目录:** `backend/src/modules/pkb/`
**杩佺Щ姝ラ<EFBFBD>锛?*
**迁移步骤:**
1. **创建模块结构** (30分钟)
```bash
backend/src/modules/pkb/
├── README.md # 模块说明
├── controllers/
鈹? 鈹溾攢鈹€ knowledgeBaseController.ts # 浠巐egacy杩佺Щ
鈹? 鈹斺攢鈹€ documentController.ts # 浠巐egacy杩佺Щ
│ ├── knowledgeBaseController.ts # 从legacy迁移
│ └── documentController.ts # 从legacy迁移
├── services/
鈹? 鈹溾攢鈹€ knowledgeBaseService.ts # 浠巐egacy杩佺Щ
鈹? 鈹溾攢鈹€ documentService.ts # 浠巐egacy杩佺Щ
鈹? 鈹斺攢鈹€ tokenService.ts # 浠巐egacy杩佺Щ
│ ├── knowledgeBaseService.ts # 从legacy迁移
│ ├── documentService.ts # 从legacy迁移
│ └── tokenService.ts # 从legacy迁移
├── routes/
鈹? 鈹斺攢鈹€ index.ts # <EFBFBD>敱娉ㄥ唽
│ └── index.ts # 路由注册
└── types/
└── index.ts # 类型定义
```
2. **复制并更新服务层** (60分钟)
- 从`backend/src/legacy/services/`复制文件
- 鏇存柊瀵煎叆璺<E58F86>緞锛?
- 更新导入路径:
```typescript
// 鉂?鏃т唬鐮?
// ❌ 旧代码
import { prisma } from '../../config/database.js';
import { difyClient } from '../../common/rag/DifyClient.js';
// 鉁?鏂颁唬鐮?
// ✅ 新代码
import { prisma } from '@/config/database';
import { difyClient } from '@/common/rag/DifyClient';
```
- 浣跨敤骞冲彴鑳藉姏锛?
- 使用平台能力:
```typescript
// 鉁?浣跨敤storage鎶借薄灞傦紙濡傛灉闇€瑕佹枃浠跺瓨鍌<EFBFBD>
// ✅ 使用storage抽象层(如果需要文件存储)
import { storage } from '@/common/storage';
// 鉁?浣跨敤logger锛堟浛鎹<EFBFBD>onsole.log锛?
// ✅ 使用logger替换console.log
import { logger } from '@/common/logging';
// 鉁?浣跨敤extractionClient锛堝凡鏈夛級
// ✅ 使用extractionClient(已有)
import { extractionClient } from '@/common/document/ExtractionClient';
```
3. **澶嶅埗骞舵洿鏂版帶鍒跺櫒灞?* (30鍒嗛挓)
3. **复制并更新控制器层** (30分钟)
- 从`backend/src/legacy/controllers/`复制文件
- 更新导入路径
- 移除`MOCK_USER_ID`,从`request.user`获取(待实现认证中间件)
@@ -372,7 +372,7 @@ MethodologyReview.tsx // 方法学评估详
import * as documentController from '../controllers/documentController';
export default async function pkbRoutes(fastify: FastifyInstance) {
// 鐭ヨ瘑搴撶<EFBFBD>鐞?
// 知识库管理
fastify.post('/api/v1/pkb/knowledge-bases', knowledgeBaseController.createKnowledgeBase);
fastify.get('/api/v1/pkb/knowledge-bases', knowledgeBaseController.getKnowledgeBases);
fastify.get('/api/v1/pkb/knowledge-bases/:id', knowledgeBaseController.getKnowledgeBaseById);
@@ -403,13 +403,13 @@ MethodologyReview.tsx // 方法学评估详
6. **创建模块README** (20分钟)
```markdown
# PKB <EFBFBD>汉鐭ヨ瘑搴撴ā鍧?
# PKB 个人知识库模块
## 功能概述
- 知识库CRUD
- 鏂囨。涓婁紶涓庣<EFBFBD>鐞?
- Dify RAG妫€绱?
- 鎵瑰<EFBFBD>鐞嗕换鍔?
- 文档上传与管理
- Dify RAG检索
- 批处理任务
## API端点
...
@@ -421,47 +421,47 @@ MethodologyReview.tsx // 方法学评估详
- pkb_schema.batch_results
```
#### Task 1.2锛氬墠绔<EFBFBD>唬鐮佽縼绉?鈴憋笍 棰勮<E6A3B0>2-3灏忔椂
#### Task 1.2:前端代码迁移 ⏱️ 预计2-3小时
**<EFBFBD>爣鐩<EFBFBD>綍锛?* `frontend-v2/src/modules/pkb/`
**目标目录:** `frontend-v2/src/modules/pkb/`
**杩佺Щ姝ラ<EFBFBD>锛?*
**迁移步骤:**
1. **创建模块结构** (30分钟)
```bash
frontend-v2/src/modules/pkb/
├── index.tsx # 模块入口(路由配置)
├── api/
鈹? 鈹斺攢鈹€ index.ts # API灏佽<EFBFBD>
│ └── index.ts # API封装
├── pages/
鈹? 鈹溾攢鈹€ KnowledgeBasePage.tsx # 鐭ヨ瘑搴撳垪琛ㄩ〉
鈹? 鈹斺攢鈹€ KnowledgeBaseDetail.tsx # 鐭ヨ瘑搴撹<EFBFBD>鎯呴〉
│ ├── KnowledgeBasePage.tsx # 知识库列表页
│ └── KnowledgeBaseDetail.tsx # 知识库详情页
├── components/
鈹? 鈹溾攢鈹€ KnowledgeBaseList.tsx
鈹? 鈹溾攢鈹€ CreateKBDialog.tsx
鈹? 鈹溾攢鈹€ EditKBDialog.tsx
鈹? 鈹溾攢鈹€ DocumentList.tsx
鈹? 鈹斺攢鈹€ DocumentUpload.tsx
│ ├── KnowledgeBaseList.tsx
│ ├── CreateKBDialog.tsx
│ ├── EditKBDialog.tsx
│ ├── DocumentList.tsx
│ └── DocumentUpload.tsx
├── hooks/
鈹? 鈹斺攢鈹€ useKnowledgeBase.ts # 鐘舵€佺<EFBFBD>鐞?
│ └── useKnowledgeBase.ts # 状态管理
└── types/
└── index.ts # 类型定义
```
2. **澶嶅埗骞舵洿鏂癆PI灞?* (30鍒嗛挓)
2. **复制并更新API层** (30分钟)
- 从`frontend/src/api/knowledgeBaseApi.ts`复制
- 鏇存柊API璺<49>緞锛歚/api/knowledge-bases` 鈫?`/api/v1/pkb/knowledge-bases`
- 更新API路径`/api/knowledge-bases` `/api/v1/pkb/knowledge-bases`
3. **澶嶅埗骞舵洿鏂扮粍浠?* (90鍒嗛挓)
- 浠巂frontend/src/components/knowledge/`澶嶅埗鎵€鏈夌粍浠?
3. **复制并更新组件** (90分钟)
- 从`frontend/src/components/knowledge/`复制所有组件
- 更新导入路径
- 浣跨敤鏂扮殑`request`瀹炰緥锛堝<EFBFBD>鏋滄湁锛?
- 淇濇寔Ant Design 6.0缁勪欢鍏煎<EFBFBD>鎬?
- 使用新的`request`实例(如果有)
- 保持Ant Design 6.0组件兼容性
4. **复制并更新主页面** (60分钟)
- 从`frontend/src/pages/KnowledgePage.tsx`复制
- 鎷嗗垎涓轰袱涓<E8A2B1>〉闈<E38089>細鍒楄〃椤?+ 璇︽儏椤碉紙鍙<E7B499>€夛級
- 鏇存柊鐘舵€佺<E282AC>鐞嗭細Zustand 鈫?React Query鎴栦繚鎸乑ustand
- 拆分为两个页面:列表页 + 详情页(可选)
- 更新状态管理:Zustand React Query或保持Zustand
5. **创建模块入口** (30分钟)
```typescript
@@ -473,7 +473,7 @@ MethodologyReview.tsx // 方法学评估详
const pkbModule: ModuleConfig = {
id: 'pkb',
name: '<EFBFBD>汉鐭ヨ瘑搴?,
name: '个人知识库',
icon: 'FileTextOutlined',
routes: [
{
@@ -498,50 +498,50 @@ MethodologyReview.tsx // 方法学评估详
#### Task 1.3数据库Schema验证 ⏱️ 预计30分钟
**检查事项:**
- 鉁?`pkb_schema.knowledge_bases` 琛ㄧ粨鏋勫畬鏁?
- 鉁?`pkb_schema.documents` 琛ㄧ粨鏋勫畬鏁?
- 鉁?`pkb_schema.batch_tasks` 琛ㄧ粨鏋勫畬鏁?
- 鉁?`pkb_schema.batch_results` 琛ㄧ粨鏋勫畬鏁?
- 鉁?澶栭敭鍏崇郴姝g‘
- 鉁?绱㈠紩榻愬叏
- `pkb_schema.knowledge_bases` 表结构完整
- `pkb_schema.documents` 表结构完整
- `pkb_schema.batch_tasks` 表结构完整
- `pkb_schema.batch_results` 表结构完整
- ✅ 外键关系正确
- ✅ 索引齐全
**Prisma Schema宸插瓨鍦<EFBFBD>紝鏃犻渶淇<EFBFBD>敼銆?*
**Prisma Schema已存在,无需修改。**
#### Task 1.4锛氶泦鎴愭祴璇?鈴憋笍 棰勮<E6A3B0>1灏忔椂
#### Task 1.4:集成测试 ⏱️ 预计1小时
**娴嬭瘯娓呭崟锛?*
1. 鉁?鍒涘缓鐭ヨ瘑搴?
2. 鉁?涓婁紶鏂囨。锛圥DF/Word锛?
3. 鉁?鏂囨。鐘舵€佽疆璇?
4. 鉁?璇<>箟妫€绱?
5. 鉁?鍒犻櫎鏂囨。
6. 鉁?鍒犻櫎鐭ヨ瘑搴?
7. 鉁?Token璁$畻鍜屾櫤鑳介€夋嫨
8. 鉁?鎵瑰<E98EB5>鐞嗕换鍔″垱寤哄拰鎵ц<E98EB5>
**测试清单:**
1. ✅ 创建知识库
2. ✅ 上传文档PDF/Word
3. ✅ 文档状态轮询
4. ✅ 语义检索
5. ✅ 删除文档
6. ✅ 删除知识库
7. Token计算和智能选择
8. ✅ 批处理任务创建和执行
---
### Phase 2: RVW审稿功能迁移
#### Task 2.1锛氬悗绔<EFBFBD>唬鐮佽縼绉?鈴憋笍 棰勮<E6A3B0>2-3灏忔椂
#### Task 2.1:后端代码迁移 ⏱️ 预计2-3小时
**<EFBFBD>爣鐩<EFBFBD>綍锛?* `backend/src/modules/rvw/`
**目标目录:** `backend/src/modules/rvw/`
**杩佺Щ姝ラ<EFBFBD>锛?*
**迁移步骤:**
1. **创建模块结构** (30分钟)
```bash
backend/src/modules/rvw/
├── README.md
├── controllers/
鈹? 鈹斺攢鈹€ reviewController.ts
│ └── reviewController.ts
├── services/
鈹? 鈹斺攢鈹€ reviewService.ts
│ └── reviewService.ts
├── routes/
鈹? 鈹斺攢鈹€ index.ts
│ └── index.ts
├── prompts/
鈹? 鈹溾攢鈹€ editorial_system.txt # 浠巄ackend/prompts/澶嶅埗
鈹? 鈹斺攢鈹€ methodology_system.txt # 浠巄ackend/prompts/澶嶅埗
│ ├── editorial_system.txt # 从backend/prompts/复制
│ └── methodology_system.txt # 从backend/prompts/复制
└── types/
└── index.ts
```
@@ -549,15 +549,15 @@ MethodologyReview.tsx // 方法学评估详
2. **复制并更新服务层** (60分钟)
- 从`backend/src/legacy/services/reviewService.ts`复制
- 更新导入路径
- 浣跨敤骞冲彴鑳藉姏锛?
- 使用平台能力:
```typescript
import { logger } from '@/common/logging';
import { extractionClient } from '@/common/document/ExtractionClient';
import { LLMFactory } from '@/common/llm/adapters/LLMFactory';
```
- 绉诲姩Prompt鏂囦欢鍒版ā鍧楀唴閮?
- 移动Prompt文件到模块内部
3. **澶嶅埗骞舵洿鏂版帶鍒跺櫒灞?* (30鍒嗛挓)
3. **复制并更新控制器层** (30分钟)
- 从`backend/src/legacy/controllers/reviewController.ts`复制
- 更新导入路径
@@ -586,9 +586,9 @@ MethodologyReview.tsx // 方法学评估详
#### Task 2.2数据库Schema迁移 ⏱️ 预计1小时
**褰撳墠闂<EFBFBD><EFBFBD>锛?* `ReviewTask`琛ㄥ湪`public` schema锛岄渶杩佺Щ鍒癭rvw_schema`
**当前问题:** `ReviewTask`表在`public` schema,需迁移到`rvw_schema`
**杩佺Щ姝ラ<EFBFBD>锛?*
**迁移步骤:**
1. **更新Prisma Schema** (20分钟)
```prisma
@@ -615,7 +615,7 @@ MethodologyReview.tsx // 方法学评估详
@@index([status], map: "idx_rvw_tasks_status")
@@index([createdAt], map: "idx_rvw_tasks_created_at")
@@map("review_tasks")
@@schema("rvw_schema") // 猸?杩佺Щ鍒皉vw_schema
@@schema("rvw_schema") // ⭐ 迁移到rvw_schema
}
```
@@ -623,12 +623,12 @@ MethodologyReview.tsx // 方法学评估详
```sql
-- backend/prisma/migrations/migrate_review_to_rvw_schema.sql
-- 1. 鍒涘缓rvw_schema锛堝<EFBFBD>鏋滀笉瀛樺湪锛?
-- 1. 创建rvw_schema(如果不存在)
CREATE SCHEMA IF NOT EXISTS rvw_schema;
-- 2. 鍦╮vw_schema<EFBFBD>垱寤烘柊琛?
-- 2. 在rvw_schema中创建新表
CREATE TABLE rvw_schema.review_tasks (
-- 澶嶅埗public.ReviewTask琛ㄧ粨鏋?
-- 复制public.ReviewTask表结构
-- 添加蛇形命名user_id, file_name等
);
@@ -661,37 +661,37 @@ MethodologyReview.tsx // 方法学评估详
npm run test:db
```
#### Task 2.3锛氬墠绔<EFBFBD>唬鐮佽縼绉?鈴憋笍 棰勮<E6A3B0>2-3灏忔椂
#### Task 2.3:前端代码迁移 ⏱️ 预计2-3小时
**<EFBFBD>爣鐩<EFBFBD>綍锛?* `frontend-v2/src/modules/rvw/`
**目标目录:** `frontend-v2/src/modules/rvw/`
**杩佺Щ姝ラ<EFBFBD>锛?*
**迁移步骤:**
1. **创建模块结构** (30分钟)
```bash
frontend-v2/src/modules/rvw/
├── index.tsx
├── api/
鈹? 鈹斺攢鈹€ index.ts
│ └── index.ts
├── pages/
鈹? 鈹溾攢鈹€ ReviewPage.tsx
鈹? 鈹斺攢鈹€ ReviewList.tsx (<EFBFBD>€?
│ ├── ReviewPage.tsx
│ └── ReviewList.tsx (可选)
├── components/
鈹? 鈹溾攢鈹€ ScoreCard.tsx
鈹? 鈹溾攢鈹€ EditorialReview.tsx
鈹? 鈹斺攢鈹€ MethodologyReview.tsx
│ ├── ScoreCard.tsx
│ ├── EditorialReview.tsx
│ └── MethodologyReview.tsx
├── hooks/
鈹? 鈹斺攢鈹€ useReviewTask.ts
│ └── useReviewTask.ts
└── types/
└── index.ts
```
2. **澶嶅埗骞舵洿鏂癆PI灞?* (30鍒嗛挓)
2. **复制并更新API层** (30分钟)
- 从`frontend/src/api/reviewApi.ts`复制
- 鏇存柊API璺<49>緞锛歚/api/review` 鈫?`/api/v1/rvw`
- 更新API路径`/api/review` `/api/v1/rvw`
3. **澶嶅埗骞舵洿鏂扮粍浠?* (60鍒嗛挓)
- 浠巂frontend/src/components/review/`澶嶅埗鎵€鏈夌粍浠?
3. **复制并更新组件** (60分钟)
- 从`frontend/src/components/review/`复制所有组件
- 保持视觉设计(渐变色、颜色编码)
4. **复制并更新主页面** (90分钟)
@@ -725,91 +725,91 @@ MethodologyReview.tsx // 方法学评估详
6. **在框架中注册模块** (10分钟)
#### Task 2.4锛氶泦鎴愭祴璇?鈴憋笍 棰勮<E6A3B0>1灏忔椂
#### Task 2.4:集成测试 ⏱️ 预计1小时
**娴嬭瘯娓呭崟锛?*
1. 鉁?涓婁紶Word绋夸欢
2. 鉁?鐘舵€佽疆璇<E79686>紙5涓<35><E6B693>楠わ級
3. 鉁?绋跨害瑙勮寖鎬ц瘎浼帮紙11椤癸級
4. 鉁?鏂规硶瀛﹁瘎浼帮紙3閮ㄥ垎锛?
5. 鉁?鎬讳綋璇勫垎璁$畻
6. 鉁?鎶ュ憡灞曠ず锛圱abs鍒囨崲锛?
7. 鉁?瀵煎嚭PDF
8. 鉁?澶嶅埗鎶ュ憡鏂囨湰
9. 鉁?浠诲姟鍒楄〃鏌ヨ<E98F8C>
10. 鉁?鍒犻櫎浠诲姟
**测试清单:**
1. ✅ 上传Word稿件
2. ✅ 状态轮询5个步骤
3. ✅ 稿约规范性评估11项
4. ✅ 方法学评估3部分
5. ✅ 总体评分计算
6. ✅ 报告展示Tabs切换
7. ✅ 导出PDF
8. ✅ 复制报告文本
9. ✅ 任务列表查询
10. ✅ 删除任务
---
## 馃敡 鎶€鏈<E282AC>粏鑺傝ˉ鍏?
## 🔧 技术细节补充
### 关键依赖复用
**已有平台能力(可直接复用):**
```typescript
// 鉁?鏂囨。鎻愬彇鏈嶅姟锛堝凡鏈夛級
// ✅ 文档提取服务(已有)
import { extractionClient } from '@/common/document/ExtractionClient';
// <EFBFBD>寔锛歅DF銆乄ord銆乀XT锛屽凡闆嗘垚Python<EFBFBD>湇鍔?
// 支持PDF、Word、TXT已集成Python微服务
// 鉁?LLM缃戝叧锛堝凡鏈夛級
// LLM网关(已有)
import { LLMFactory } from '@/common/llm/adapters/LLMFactory';
// 支持DeepSeek-V3, Qwen-Max, GPT-5-Pro, Claude-4.5
// 鉁?瀛樺偍鏈嶅姟锛堝凡鏈夛級
// ✅ 存储服务(已有)
import { storage } from '@/common/storage';
// <EFBFBD>寔锛歀ocalAdapter 鈫?OSSAdapter闆朵唬鐮佸垏鎹?
// 支持LocalAdapter OSSAdapter零代码切换
// 鉁?鏃ュ織绯荤粺锛堝凡鏈夛級
// ✅ 日志系统(已有)
import { logger } from '@/common/logging';
// 鉁?RAG鏈嶅姟锛堝凡鏈夛紝PKB闇€瑕侊級
// RAG服务已有PKB需要
import { difyClient } from '@/common/rag/DifyClient';
```
### 外部依赖
**PKB妯″潡棰濆<EFBFBD>渚濊禆锛?*
- 鉁?**Dify骞冲彴**锛氬凡閮ㄧ讲锛屾彁渚汻AG妫€绱㈣兘鍔?
- 鉁?**tiktoken**锛歍oken畻锛屽凡瀹夎<EFBFBD>锛坄@dqbd/tiktoken`锛?
- 鉁?**Python<EFBFBD>湇鍔?*锛氭枃妗f彁鍙栵紝宸查儴缃?
**PKB模块额外依赖:**
- **Dify平台**已部署提供RAG检索能力
- **tiktoken**Token计算,已安装(`@dqbd/tiktoken`
- ✅ **Python微服务**:文档提取,已部署
**RVW妯″潡棰濆<EFBFBD>渚濊禆锛?*
- 鉁?**html2canvas**锛歅DF瀵煎嚭锛堝墠绔<EFBFBD>級锛岄渶瀹夎<EFBFBD>
- 鉁?**jspdf**锛歅DF鐢熸垚锛堝墠绔<EFBFBD>級锛岄渶瀹夎<EFBFBD>
**RVW模块额外依赖:**
- ✅ **html2canvas**PDF导出前端需安装
- ✅ **jspdf**PDF生成前端需安装
### API路径规范
**鏂版灦鏋凙PI璺<EFBFBD>緞锛?*
**新架构API路径**
```
PKB妯″潡锛?
PKB模块:
/api/v1/pkb/knowledge-bases/*
/api/v1/pkb/documents/*
RVW妯″潡锛?
RVW模块:
/api/v1/rvw/upload
/api/v1/rvw/tasks/*
```
**旧架构API路径需向后兼容**
```
/api/knowledge-bases/* 锛堝彲淇濈暀锛岄噸瀹氬悜鍒版柊璺<EFBFBD>緞锛?
/api/review/* 锛堝彲淇濈暀锛岄噸瀹氬悜鍒版柊璺<EFBFBD>緞锛?
/api/knowledge-bases/* (可保留,重定向到新路径)
/api/review/* (可保留,重定向到新路径)
```
---
## 馃摑 鏁版嵁杩佺Щ涓庡悜鍚庡吋瀹?
## 📝 数据迁移与向后兼容
### PKB模块
- 鉁?**鏃犻渶鏁版嵁杩佺Щ**锛歚pkb_schema`宸插瓨鍦ㄤ笖缁撴瀯瀹屾暣
- 鉁?**API鍚戝悗鍏煎<E98D8F>**锛氫繚鐣欐棫璺<E6A3AB>`/api/knowledge-bases`锛屽唴閮ㄨ浆鍙戝埌鏂拌矾寰?
- ✅ **无需数据迁移**`pkb_schema`已存在且结构完整
- ✅ **API向后兼容**:保留旧路径`/api/knowledge-bases`,内部转发到新路径
### RVW模块
- 鈿狅笍 **闇€瑕佹暟鎹<E69A9F>縼绉?*锛歚public.ReviewTask` 鈫?`rvw_schema.review_tasks`
- 鈿狅笍 **瀛楁<E7809B>鍚嶈皟鏁?*锛氶┘宄板懡鍚?鈫?铔囧舰鍛藉悕锛坄userId` 鈫?`user_id`锛?
- 鉁?**API鍚戝悗鍏煎<E98D8F>**锛氫繚鐣欐棫璺<E6A3AB>`/api/review`锛屽唴閮ㄨ浆鍙戝埌鏂拌矾寰?
- ⚠️ **需要数据迁移**`public.ReviewTask` `rvw_schema.review_tasks`
- ⚠️ **字段名调整**:驼峰命名 → 蛇形命名(`userId` `user_id`
- ✅ **API向后兼容**:保留旧路径`/api/review`,内部转发到新路径
**杩佺Щ鑴氭湰妯℃澘锛?*
**迁移脚本模板:**
```sql
-- 创建新Schema
CREATE SCHEMA IF NOT EXISTS rvw_schema;
@@ -843,26 +843,26 @@ CREATE INDEX idx_rvw_tasks_created_at ON rvw_schema.review_tasks(created_at);
---
## 鉁?楠屾敹鏍囧噯
## ✅ 验收标准
### PKB模块迁移完成标准
1. 鉁?鍚庣<E98D9A>爜鍦╜backend/src/modules/pkb/`
2. 鉁?鍓嶇<E98D93>爜鍦╜frontend-v2/src/modules/pkb/`
3. 鉁?API璺<49>緞涓篳/api/v1/pkb/*`
4. 鉁?鎵€鏈夊姛鑳芥祴璇曢€氳繃锛堢煡璇嗗簱CRUD銆佹枃妗笂浼犮€佹<E282AC>绱€€佹壒澶勭悊锛?
5. 鉁?鍓嶇<E98D93>UI瀹屽叏杩佺Щ锛堝垪琛ㄣ€佽<E282AC>鎯呫€佷笂浼犮€佸<E282AC>璇濇<E79287>锛?
6. 鉁?澶嶇敤骞冲彴鑳藉姏锛坙ogger銆乻torage銆乪xtractionClient銆乨ifyClient锛?
7. 鉁?鏂囨。瀹屾暣锛圧EADME.md銆丄PI鏂囨。锛?
1. ✅ 后端代码在`backend/src/modules/pkb/`
2. ✅ 前端代码在`frontend-v2/src/modules/pkb/`
3. ✅ API路径为`/api/v1/pkb/*`
4. ✅ 所有功能测试通过知识库CRUD、文档上传、检索、批处理
5. ✅ 前端UI完全迁移列表、详情、上传、对话框
6. ✅ 复用平台能力logger、storage、extractionClient、difyClient
7. ✅ 文档完整README.md、API文档
### RVW模块迁移完成标准
1. 鉁?鍚庣<E98D9A>爜鍦╜backend/src/modules/rvw/`
2. 鉁?鍓嶇<E98D93>爜鍦╜frontend-v2/src/modules/rvw/`
3. 鉁?API璺<49>緞涓篳/api/v1/rvw/*`
4. 鉁?鏁版嵁宸茶縼绉诲埌`rvw_schema.review_tasks`
5. 鉁?鎵€鏈夊姛鑳芥祴璇曢€氳繃锛堜笂浼犮€佽瘎浼般€佹姤鍛娿€佸<E282AC>鍑猴級
6. 鉁?鍓嶇<E98D93>UI瀹屽叏杩佺Щ锛堜笂浼犮€佽繘搴︺€佹姤鍛娿€佸<E282AC>鍑猴級
7. 鉁?澶嶇敤骞冲彴鑳藉姏锛坙ogger銆乪xtractionClient銆丩LMFactory锛?
8. 鉁?Prompt鏂囦欢鍦ㄦā鍧楀唴閮<EFBFBD>`modules/rvw/prompts/`锛?
1. ✅ 后端代码在`backend/src/modules/rvw/`
2. ✅ 前端代码在`frontend-v2/src/modules/rvw/`
3. ✅ API路径为`/api/v1/rvw/*`
4. ✅ 数据已迁移到`rvw_schema.review_tasks`
5. ✅ 所有功能测试通过(上传、评估、报告、导出)
6. ✅ 前端UI完全迁移上传、进度、报告、导出
7. ✅ 复用平台能力logger、extractionClient、LLMFactory
8.Prompt文件在模块内部(`modules/rvw/prompts/`
---
@@ -870,9 +870,9 @@ CREATE INDEX idx_rvw_tasks_created_at ON rvw_schema.review_tasks(created_at);
### 需要更新的文档
1. **绯荤粺褰撳墠鐘舵€佷笌寮€鍙戞寚鍗?*
- 鏂囦欢锛歚docs/00-绯荤粺鎬讳綋璁捐<E79281>/00-绯荤粺褰撳墠鐘舵€佷笌寮€鍙戞寚鍗?md`
- 鏇存柊锛歅KB鍜孯VW妯″潡鐘舵€佷粠"宸插畬鎴愶紙鏃ф灦鏋勶級"鏀逛负"鉁?100%锛堟柊鏋舵瀯锛?
1. **系统当前状态与开发指南**
- 文件:`docs/00-系统总体设计/00-系统当前状态与开发指南.md`
- 更新PKB和RVW模块状态从"已完成(旧架构)"改为"✅ 100%(新架构)"
2. **模块README创建**
- `backend/src/modules/pkb/README.md`
@@ -883,37 +883,37 @@ CREATE INDEX idx_rvw_tasks_created_at ON rvw_schema.review_tasks(created_at);
- `frontend-v2/src/modules/rvw/README.md`
4. **API文档更新**
- `docs/04-寮€鍙戣<EFBFBD>鑼?04-API璺<49>敱鎬昏<E98EAC>.md`
- `docs/04-开发规范/04-API路由总览.md`
- 添加PKB和RVW的API端点清单
5. **迁移完成报告**
- 新建:`docs/08-项目管理/PKB和RVW迁移完成报告.md`
- 璁板綍锛氳縼绉绘椂闂淬€侀亣鍒扮殑闂<EFBFBD><EFBFBD>銆佽В鍐虫柟妗堛€佹祴璇曠粨鏋?
- 记录:迁移时间、遇到的问题、解决方案、测试结果
---
## 🎯 总结
### 迁移优势
1. 鉁?**鏋舵瀯缁熶竴**锛氭墍鏈夋ā鍧楅伒寰<E4BC92>浉鍚岀殑妯″潡鍖栫粨鏋?
2. 鉁?**鏄撲簬缁存姢**锛氫唬鐮佺粍缁囨竻鏅帮紝鑱岃矗鏄庣‘
3. 鉁?**澶嶇敤骞冲彴鑳藉姏**锛氬噺灏戦噸澶嶄唬鐮侊紝鎻愬崌浠g爜璐ㄩ噺
4. 鉁?**鏀<>寔鐙<E5AF94>珛閮ㄧ讲**锛氭瘡涓<E798A1>ā鍧楀彲鐙<E5BDB2>珛鎵撳寘銆侀儴缃层€侀攢鍞?
5. 鉁?**Schema闅旂<EFBFBD>**锛氭暟鎹<E69A9F>簱灞傞潰妯″潡鐙<E6BDA1>珛锛岄檷浣庤€﹀悎
1. **架构统一**:所有模块遵循相同的模块化结构
2. **易于维护**:代码组织清晰,职责明确
3. **复用平台能力**:减少重复代码,提升代码质量
4. **支持独立部署**:每个模块可独立打包、部署、销售
5. **Schema隔离**:数据库层面模块独立,降低耦合
### 预计总耗时
- **PKB妯″潡杩佺Щ**锛?-8灏忔椂
- **RVW妯″潡杩佺Щ**锛?-9灏忔椂锛堝惈鏁版嵁杩佺Щ锛?
- **鎬昏<EFBFBD>**锛?3-17灏忔椂锛堢害2涓<32>伐浣滄棩锛?
- **PKB模块迁移**6-8小时
- **RVW模块迁移**7-9小时含数据迁移
- **总计**13-17小时约2个工作日
### 风险评估
- 鉁?**椋庨櫓浣?*锛氬姛鑳藉凡100%瀹屾垚锛屼唬鐮佽川閲忛珮
- 鉁?**娴嬭瘯瑕嗙洊**锛氭湁瀹屾暣鐨勬墜鍔ㄦ祴璇曟祦绋?
- 鉁?**鍚戝悗鍏煎<E98D8F>**锛氫繚鐣欐棫API璺<49>緞锛屼笉褰卞搷鐜版湁鍓嶇<E98D93>
- **风险低**功能已100%完成,代码质量高
- **测试覆盖**:有完整的手动测试流程
- **向后兼容**保留旧API路径不影响现有前端
---
**鏂囨。缁存姢鑰咃細** 鎶€鏈<E282AC>洟闃?
**文档维护者:** 技术团队
**最后更新:** 2025-12-28
**下一步:** 执行迁移任务按TODO清单逐项完成
@@ -939,6 +939,5 @@ CREATE INDEX idx_rvw_tasks_created_at ON rvw_schema.review_tasks(created_at);