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:
@@ -1,10 +1,12 @@
|
||||
# RVW蝔蹂辣摰⊥䰻璅∪<EFBFBD> - 敶枏<E695B6><E69E8F>嗆<EFBFBD><E59786><EFBFBD>撘<EFBFBD><E69298>烐<EFBFBD><E78390>?
|
||||
> **<2A><>﹝<EFBFBD><EFB99D>𧋦嚗?* v3.2
|
||||
> **<EFBFBD>𥕦遣<EFBFBD>交<EFBFBD>嚗?* 2026-01-07
|
||||
# RVW稿件审查模块 - 当前状态与开发指南
|
||||
|
||||
> **文档版本:** v3.2
|
||||
> **创建日期:** 2026-01-07
|
||||
> **最后更新:** 2026-01-10
|
||||
> **蝏湔擪<EFBFBD><EFBFBD><EFBFBD>** 撘<><E69298>穃𣪧<E7A983>?
|
||||
> **敶枏<EFBFBD><EFBFBD>嗆<EFBFBD><EFBFBD><EFBFBD>** <EFBFBD>?**Phase 1-6 摰峕<EFBFBD>嚗玺chema<EFBFBD>𠉛氖摰峕<EFBFBD>嚗峕芋<EFBFBD>?5%<25>舐鍂**
|
||||
> **<EFBFBD><EFBFBD>﹝<EFBFBD>桃<EFBFBD>嚗?* 敹恍<E695B9>煺<EFBFBD>閫ΟVW璅∪<E79285><E288AA>嗆<EFBFBD><E59786><EFBFBD>銝箸鰵AI<41>拇<EFBFBD><E68B87>𣂷<EFBFBD>銝𠹺<E98A9D><F0A0B9BA>?
|
||||
> **维护者:** 开发团队
|
||||
> **当前状态:** ✅ **Phase 1-6 完成,Schema隔离完成,模块95%可用**
|
||||
> **文档目的:** 快速了解RVW模块状态,为新AI助手提供上下文
|
||||
|
||||
---
|
||||
|
||||
## 📊 模块概览
|
||||
@@ -15,171 +17,219 @@
|
||||
|------|------|
|
||||
| **模块名称** | RVW - 稿件审查系统 (Review) |
|
||||
| **模块定位** | 智能期刊审稿辅助系统(可独立销售) |
|
||||
| **<EFBFBD><EFBFBD><EFBFBD>隞瑕<EFBFBD>?* | 潃鐥<E6BD83>潃鐥<E6BD83>潃?<3F><><EFBFBD> |
|
||||
| **<EFBFBD>祉<EFBFBD><EFBFBD>?* | 潃鐥<E6BD83>潃鐥<E6BD83>潃?<3F><><EFBFBD>嚗<EFBFBD>鍂<EFBFBD>瑞黎摰<E9BB8E><E691B0>銝滚<E98A9D>嚗?|
|
||||
| **商业价值** | ⭐⭐⭐⭐⭐ 极高 |
|
||||
| **独立性** | ⭐⭐⭐⭐⭐ 极高(用户群完全不同) |
|
||||
| **目标用户** | 期刊初审编辑 |
|
||||
| **撘<EFBFBD><EFBFBD>𤑳𠶖<EFBFBD>?* | <20>?**<EFBFBD>詨<EFBFBD><EFBFBD>蠘<EFBFBD>100%摰峕<E691B0>嚗峕𣈲<E5B395><F0A388B2>ord撖澆枂嚗<E69E82>歇<EFBFBD><E6AD87><EFBFBD><EFBFBD>?frontend-v2** |
|
||||
| **开发状态** | ✅ **核心功能100%完成,支持Word导出,已集成到 frontend-v2** |
|
||||
|
||||
### 核心目标
|
||||
|
||||
> <EFBFBD>㯄<EFBFBD>牐<EFBFBD>銝?*"撘<>蝞勗朖<E58B97>?**<2A><>惣<EFBFBD>賢恣蝔踹極<E8B8B9>瑯<EFBFBD><E791AF><EFBFBD>颲睲<E9A2B2>隡删阮隞塚<E99A9E>蝟餌<E89D9F><E9A48C>芸𢆡餈鞱<E9A488><E99EB1>屸<EFBFBD>璉<EFBFBD><E79289>伐<EFBFBD>閫<EFBFBD><E996AB><EFBFBD>?<3F>寞<EFBFBD>摮佗<E691AE>嚗諹<E59A97><E8ABB9>箏虾靘𥕦<E99D98><F0A595A6><EFBFBD><EFBFBD>摰∠阮<E288A0>亙<EFBFBD><E4BA99>?>
|
||||
> **<2A>詨<EFBFBD><E8A9A8><EFBFBD><EFBFBD>**嚗帋<E59A97>隡惩<E99AA1><E683A9>箸𥁒<E7AEB8>?< 2<><32><EFBFBD>嚗𥡝<E59A97><F0A5A19D><EFBFBD><EFBFBD>折䔮憸䀹<E686B8><E480B9>箇<EFBFBD> > 80%
|
||||
> 打造一个**"开箱即用"**的智能审稿工具。编辑上传稿件,系统自动运行双重检查(规范性+方法学),输出可供参考的审稿报告。
|
||||
>
|
||||
> **核心指标**:上传到出报告 < 2分钟;规范性问题检出率 > 80%
|
||||
|
||||
### 功能规格
|
||||
|
||||
#### 核心AI能力(已完成 ✅)
|
||||
|
||||
1. **蝔輻漲閫<EFBFBD><EFBFBD><EFBFBD>扯<EFBFBD>隡?*嚗?1憿寞<E686BF><E5AF9E><EFBFBD><EFBFBD>
|
||||
- <EFBFBD><EFBFBD><EFBFBD>摮埈㺭<EFBFBD><EFBFBD><EFBFBD>閬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>柴<EFBFBD><EFBFBD>㦛<EFBFBD>䕸PI蝑? - <20>箔<EFBFBD><E7AE94>𠹺葉<F0A0B9BA>𤾸龫摮西<E691AE>憯唳<E686AF>敹𨰜<E695B9>讠阮蝥行<E89DA5><E8A18C>?
|
||||
2. **<EFBFBD>寞<EFBFBD>摮西<EFBFBD>隡?*嚗?<3F>典<EFBFBD>嚗?0銝芣<E98A9D><E88AA3>亦<EFBFBD>嚗? - 蝘𤑳<E89D98>霈曇恣霂<E681A3>摯嚗?銝芣<E98A9D><E88AA3>亦<EFBFBD>嚗? - 蝏蠘恣摮行䲮瘜閙<E7989C>餈啗<E9A488>隡堆<E99AA1>5銝芣<E98A9D><E88AA3>亦<EFBFBD>嚗? - 蝏蠘恣<E8A098><E681A3><EFBFBD>霂<EFBFBD>摯嚗?銝芣<E98A9D><E88AA3>亦<EFBFBD>嚗?
|
||||
1. **稿约规范性评估**(11项标准)
|
||||
- 文题字数、摘要结构、参考文献、图片DPI等
|
||||
- 基于《中华医学超声杂志》稿约标准
|
||||
|
||||
2. **方法学评估**(3部分,20个检查点)
|
||||
- 科研设计评估(9个检查点)
|
||||
- 统计学方法描述评估(5个检查点)
|
||||
- 统计分析评估(6个检查点)
|
||||
|
||||
3. **综合评分 + PICO提取**
|
||||
- 閫<EFBFBD><EFBFBD><EFBFBD>批<EFBFBD><EFBFBD>堆<EFBFBD>0-100嚗? - <20>寞<EFBFBD>摮衣𠶖<E8A1A3><F0A0B696><EFBFBD><EFBFBD>𣞁<EFBFBD>躰秤 <20>椬摮条<E691AE> <20>叚<EFBFBD>朞<EFBFBD>嚗? - PICO蝏𤘪<E89D8F><F0A498AA>𡝗<EFBFBD><F0A19D97>吔<EFBFBD>P/I/C/O嚗?
|
||||
- 规范性分数(0-100)
|
||||
- 方法学状态(🔴错误 🟡存疑 🟢通过)
|
||||
- PICO结构化提取(P/I/C/O)
|
||||
|
||||
#### 交互功能(✅ 已完成)
|
||||
|
||||
| <EFBFBD>蠘<EFBFBD> | <20>抒<EFBFBD><E68A92>?| <20>啁<EFBFBD><E59581>?| <20>嗆<EFBFBD>?|
|
||||
| 功能 | 旧版本 | 新版本 | 状态 |
|
||||
|------|--------|--------|------|
|
||||
| <EFBFBD>閙<EFBFBD>隞嗡<EFBFBD>隡?| <20>?| <20>?| <20>?撌脣<E6928C><E884A3>?|
|
||||
| <EFBFBD>寥<EFBFBD>銝𠹺<EFBFBD> | <20>?| <20>?| <20>?撌脣<E6928C><E884A3>?|
|
||||
| 摰∠阮撌乩<EFBFBD><EFBFBD>堆<EFBFBD>摰質”嚗?| <20>?| <20>?| <20>?撌脣<E6928C><E884A3>?|
|
||||
| <EFBFBD>箄<EFBFBD>雿㯄<EFBFBD>㗇𥋘 | <20>芸𢆡 | <20>冽<EFBFBD><E586BD>舫<EFBFBD>?| <20>?撌脣<E6928C><E884A3>?|
|
||||
| <EFBFBD>寥<EFBFBD><EFBFBD>滢<EFBFBD> | <20>?| <20>?| <20>?撌脣<E6928C><E884A3>?|
|
||||
| <EFBFBD>嗆<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?| <20>?| <20>?| <20>?撌脣<E6928C><E884A3>?|
|
||||
| <EFBFBD><EFBFBD>蟮敶埝﹝ | <20>?| <20>?| <20>賂<EFBFBD> <20>唳旿摨枏歇<E69E8F>舀<EFBFBD>嚗𪄇I<F0AA8487><49><EFBFBD> |
|
||||
| 蝟餌<EFBFBD>霈曄蔭 | <20>?| <20>?| <20>賂<EFBFBD> <20><><EFBFBD>撘<EFBFBD><E69298>?|
|
||||
| <EFBFBD>餃<EFBFBD>憿菟𢒰 | <20>?| <20>賂<EFBFBD> | <20>賂<EFBFBD> 憭滨鍂撟喳蝱<E596B3>餃<EFBFBD> |
|
||||
| PICO<EFBFBD>∠<EFBFBD> | <20>?| <20>?| <20>賂<EFBFBD> <20>唳旿摨枏歇<E69E8F>舀<EFBFBD>嚗𪄇I<F0AA8487><49><EFBFBD> |
|
||||
| 单文件上传 | ✅ | ✅ | ✅ 已完成 |
|
||||
| 批量上传 | ❌ | ✅ | ✅ 已完成 |
|
||||
| 审稿工作台(宽表) | ❌ | ✅ | ✅ 已完成 |
|
||||
| 智能体选择 | 自动 | 用户可选 | ✅ 已完成 |
|
||||
| 批量操作 | ❌ | ✅ | ✅ 已完成 |
|
||||
| 状态筛选 | ❌ | ✅ | ✅ 已完成 |
|
||||
| 历史归档 | ❌ | ✅ | ⏸️ 数据库已支持,UI暂缓 |
|
||||
| 系统设置 | ❌ | ✅ | ⏸️ 暂不开发 |
|
||||
| 登录页面 | ❌ | ⏸️ | ⏸️ 复用平台登录 |
|
||||
| PICO卡片 | ❌ | ✅ | ⏸️ 数据库已支持,UI暂缓 |
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD><EFBFBD>儭?<3F>嗆<EFBFBD><E59786>嗆<EFBFBD>?
|
||||
### <20>?撌脣<E6928C><E884A3>鞱<EFBFBD>蝘鳴<E89D98>Modules嚗?
|
||||
## 🏗️ 架构状态
|
||||
|
||||
### ✅ 已完成迁移(Modules)
|
||||
|
||||
```
|
||||
<EFBFBD>𡒊垢嚗<EFBFBD><EFBFBD> 撌脣<E6928C><E884A3>琜<EFBFBD>嚗?backend/src/modules/rvw/
|
||||
<EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> routes/index.ts # v2 API頝舐眏嚗?api/v2/rvw嚗?<3F>鎿<EFBFBD><E98EBF><EFBFBD> controllers/reviewController.ts # <20>批<EFBFBD><E689B9>剁<EFBFBD><E58981>急鸌<E680A5>𤩺<EFBFBD>雿栶<E99BBF><E6A0B6>惣<EFBFBD>賭<EFBFBD><E8B3AD>㗇𥋘嚗?<3F>鎿<EFBFBD><E98EBF><EFBFBD> services/
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> reviewService.ts # <20>詨<EFBFBD><E8A9A8>滚𦛚嚗<F0A69B9A>遙<EFBFBD>∪<EFBFBD>撱箝<E692B1><E7AE9D><EFBFBD>銵䕘<E98AB5>
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> editorialService.ts # 蝔輻漲閫<E6BCB2><E996AB><EFBFBD>扯<EFBFBD>隡?<3F>? <20>鎿<EFBFBD><E98EBF><EFBFBD> methodologyService.ts # <20>寞<EFBFBD>摮西<E691AE>隡?<3F>? <20>婙<EFBFBD><E5A999><EFBFBD> utils.ts # 撌亙<E6928C><E4BA99>賣㺭
|
||||
后端(✅ 已完成):
|
||||
backend/src/modules/rvw/
|
||||
├── routes/index.ts # v2 API路由(/api/v2/rvw)
|
||||
├── controllers/reviewController.ts # 控制器(含批量操作、智能体选择)
|
||||
├── services/
|
||||
│ ├── reviewService.ts # 核心服务(任务创建、执行)
|
||||
│ ├── editorialService.ts # 稿约规范性评估
|
||||
│ ├── methodologyService.ts # 方法学评估
|
||||
│ └── utils.ts # 工具函数
|
||||
├── workers/
|
||||
<EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> reviewWorker.ts # pg-boss撘<EFBFBD>郊隞餃𦛚憭<EFBFBD><EFBFBD>
|
||||
│ └── reviewWorker.ts # pg-boss异步任务处理
|
||||
├── types/index.ts # TypeScript类型定义
|
||||
└── __tests__/ # API测试脚本
|
||||
|
||||
<EFBFBD>滨垢嚗<EFBFBD><EFBFBD> 撌脣<E6928C><E884A3>琜<EFBFBD>嚗?frontend-v2/src/modules/rvw/
|
||||
前端(✅ 已完成):
|
||||
frontend-v2/src/modules/rvw/
|
||||
├── index.tsx # 模块入口
|
||||
├── api/index.ts # API接口
|
||||
├── types/index.ts # 类型定义
|
||||
├── styles/index.css # 样式文件
|
||||
├── pages/
|
||||
<EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> Dashboard.tsx # 摰∠阮撌乩<EFBFBD><EFBFBD>堆<EFBFBD>隞餃𦛚<EFBFBD>𡑒”<EFBFBD><EFBFBD><EFBFBD><EFBFBD>㚁<EFBFBD>
|
||||
│ └── Dashboard.tsx # 审稿工作台(任务列表、筛选)
|
||||
└── components/
|
||||
├── Header.tsx # 页头(上传按钮)
|
||||
<EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> Sidebar.tsx # 靘扯器<EFBFBD>誩紡<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> TaskTable.tsx # 隞餃𦛚<E9A483>𡑒”銵冽聢
|
||||
<EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> TaskDetail.tsx # 隞餃𦛚霂行<E99C82>嚗<EFBFBD><E59A97>摨行辺+<2B>亙<EFBFBD>+Word撖澆枂嚗? <20>鎿<EFBFBD><E98EBF><EFBFBD> EditorialReport.tsx # 蝔輻漲閫<E6BCB2><E996AB><EFBFBD>扳𥁒<E689B3>? <20>鎿<EFBFBD><E98EBF><EFBFBD> MethodologyReport.tsx # <20>寞<EFBFBD>摮西<E691AE>隡唳𥁒<E594B3>? <20>鎿<EFBFBD><E98EBF><EFBFBD> AgentModal.tsx # <20>箄<EFBFBD>雿㯄<E99BBF>㗇𥋘撘寧<E69298>
|
||||
<EFBFBD>婙<EFBFBD><EFBFBD><EFBFBD> ScoreRing.tsx # 霂<EFBFBD><EFBFBD><EFBFBD>舐<EFBFBD>隞?
|
||||
├── Sidebar.tsx # 侧边栏导航
|
||||
├── TaskTable.tsx # 任务列表表格
|
||||
├── TaskDetail.tsx # 任务详情(进度条+报告+Word导出)
|
||||
├── EditorialReport.tsx # 稿约规范性报告
|
||||
├── MethodologyReport.tsx # 方法学评估报告
|
||||
├── AgentModal.tsx # 智能体选择弹窗
|
||||
└── ScoreRing.tsx # 评分环组件
|
||||
|
||||
旧版本(保留兼容):
|
||||
backend/src/legacy/
|
||||
├── routes/reviewRoutes.ts # v1 API路由(保留)
|
||||
├── controllers/reviewController.ts
|
||||
└── services/reviewService.ts
|
||||
|
||||
Prompt嚗<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>矋<EFBFBD>嚗?backend/prompts/
|
||||
<EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> review_editorial_system.txt # 蝔輻漲霂<E6BCB2>摯嚗?66銵䕘<E98AB5>
|
||||
Prompt(保持不变):
|
||||
backend/prompts/
|
||||
├── review_editorial_system.txt # 稿约评估(266行)
|
||||
└── review_methodology_system.txt # 方法学评估(257行)
|
||||
|
||||
<EFBFBD>唳旿摨橒<EFBFBD><EFBFBD>?撌脣<E6928C><E884A3>琜<EFBFBD>嚗?- ReviewTask銵典歇瘛餃<E7989B><E9A483>啣<EFBFBD>畾蛛<E795BE>selectedAgents, editorialScore, methodologyScore, methodologyStatus, picoExtract, isArchived, archivedAt
|
||||
- <EFBFBD>?Schema撌脰<E6928C>蝘餃<E89D98> rvw_schema嚗?026-01-10摰峕<E691B0>嚗?```
|
||||
数据库(✅ 已完成):
|
||||
- ReviewTask表已添加新字段:selectedAgents, editorialScore, methodologyScore, methodologyStatus, picoExtract, isArchived, archivedAt
|
||||
- ✅ Schema已迁移到 rvw_schema(2026-01-10完成)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD><EFBFBD> 撘<><E69298>𤏸<EFBFBD>摨?
|
||||
| Phase | 隞餃𦛚 | <20>嗆<EFBFBD>?| 摰峕<E691B0><E5B395>交<EFBFBD> |
|
||||
## 📋 开发进度
|
||||
|
||||
| Phase | 任务 | 状态 | 完成日期 |
|
||||
|-------|------|------|---------|
|
||||
| Phase 1 | <EFBFBD>𡒊垢璅∪<EFBFBD>餈<EFBFBD>宏銝擧<EFBFBD>撅?| <20>?撌脣<E6928C><E884A3>?| 2026-01-07 |
|
||||
| Phase 2 | <EFBFBD>唳旿摨枏<EFBFBD>畾菜<EFBFBD>撅?| <20>?撌脣<E6928C><E884A3>?| 2026-01-07 |
|
||||
| Phase 3 | <EFBFBD>滨垢<EFBFBD>齿<EFBFBD>嚗Êrontend-v2嚗?| <20>?撌脣<E6928C><E884A3>?| 2026-01-07 |
|
||||
| Phase 4 | <EFBFBD><EFBFBD><EFBFBD>瘚贝<EFBFBD>銝𦻓ug靽桀<EFBFBD> | <20>?撌脣<E6928C><E884A3>?| 2026-01-10 |
|
||||
| Phase 5 | <EFBFBD>亙<EFBFBD>撖澆枂嚗Áord嚗?| <20>?撌脣<E6928C><E884A3>?| 2026-01-10 |
|
||||
| Phase 6 | Schema<EFBFBD>𠉛氖餈<EFBFBD>宏 | <20>?撌脣<E6928C><E884A3>?| 2026-01-10 |
|
||||
| Phase 7 | 蝟餌<EFBFBD>霈曄蔭銝𤾸<EFBFBD>獢?| <20>賂<EFBFBD> <20><><EFBFBD> | - |
|
||||
| Phase 1 | 后端模块迁移与扩展 | ✅ 已完成 | 2026-01-07 |
|
||||
| Phase 2 | 数据库字段扩展 | ✅ 已完成 | 2026-01-07 |
|
||||
| Phase 3 | 前端重构(frontend-v2) | ✅ 已完成 | 2026-01-07 |
|
||||
| Phase 4 | 集成测试与Bug修复 | ✅ 已完成 | 2026-01-10 |
|
||||
| Phase 5 | 报告导出(Word) | ✅ 已完成 | 2026-01-10 |
|
||||
| Phase 6 | Schema隔离迁移 | ✅ 已完成 | 2026-01-10 |
|
||||
| Phase 7 | 系统设置与归档 | ⏸️ 暂缓 | - |
|
||||
| **总计** | - | **95%** | - |
|
||||
|
||||
### Phase 1-5 完成内容
|
||||
|
||||
**后端(Phase 1):**
|
||||
- <20>?<3F>𥕦遣 `backend/src/modules/rvw/` 璅∪<E79285>蝏𤘪<E89D8F>
|
||||
- <20>?餈<>宏撟嗡<E6929F><E597A1>?reviewService<EFBFBD><EFBFBD>ditorialService<EFBFBD><EFBFBD>ethodologyService
|
||||
- <20>?摰䂿緵<E482BF>箄<EFBFBD>雿㯄<E99BBF>㗇𥋘嚗ìelectedAgents嚗塄ditorial/methodology/both嚗?- <20>?摰䂿緵<E482BF>寥<EFBFBD>餈鞱<E9A488>API嚗Ê̄atchRunReviewTasks嚗?- <20>?<3F>踵揢 console.log 銝?logger <20>滚𦛚
|
||||
- <20>?瘜典<E7989C> v2 API頝舐眏嚗?api/v2/rvw嚗?- <20>?摰䂿緵 pg-boss 撘<>郊隞餃𦛚憭<F0A69B9A><E686AD>嚗ǐeviewWorker嚗?
|
||||
- ✅ 创建 `backend/src/modules/rvw/` 模块结构
|
||||
- ✅ 迁移并优化 reviewService、editorialService、methodologyService
|
||||
- ✅ 实现智能体选择(selectedAgents:editorial/methodology/both)
|
||||
- ✅ 实现批量运行API(batchRunReviewTasks)
|
||||
- ✅ 替换 console.log 为 logger 服务
|
||||
- ✅ 注册 v2 API路由(/api/v2/rvw)
|
||||
- ✅ 实现 pg-boss 异步任务处理(reviewWorker)
|
||||
|
||||
**数据库(Phase 2):**
|
||||
- <20>?瘛餃<E7989B> selectedAgents 摮埈挾嚗𠄎tring[]嚗?- <20>?瘛餃<E7989B> editorialScore 摮埈挾嚗㇅loat?嚗?- <20>?瘛餃<E7989B> methodologyScore 摮埈挾嚗㇅loat?嚗? 2026-01-10<31>啣<EFBFBD>
|
||||
- <20>?瘛餃<E7989B> methodologyStatus 摮埈挾嚗𠄎tring?嚗?- <20>?瘛餃<E7989B> picoExtract 摮埈挾嚗㇇son?嚗?- <20>?瘛餃<E7989B> isArchived<65><64>rchivedAt 摮埈挾嚗<E68CBE><E59A97>獢<EFBFBD>𣈲<EFBFBD><F0A388B2><EFBFBD>
|
||||
- <20>?雿輻鍂 prisma db push <20>峕郊<E5B395>唳㺭<E594B3>桀<EFBFBD>
|
||||
- ✅ 添加 selectedAgents 字段(String[])
|
||||
- ✅ 添加 editorialScore 字段(Float?)
|
||||
- ✅ 添加 methodologyScore 字段(Float?)- 2026-01-10新增
|
||||
- ✅ 添加 methodologyStatus 字段(String?)
|
||||
- ✅ 添加 picoExtract 字段(Json?)
|
||||
- ✅ 添加 isArchived、archivedAt 字段(归档支持)
|
||||
- ✅ 使用 prisma db push 同步到数据库
|
||||
|
||||
**前端(Phase 3):**
|
||||
- <20>?<3F>𥕦遣 `frontend-v2/src/modules/rvw/` 璅∪<E79285><E288AA>桀<EFBFBD>蝏𤘪<E89D8F>
|
||||
- <20>?摰䂿緵 Dashboard 憿菟𢒰嚗<EFBFBD>遙<EFBFBD>∪<EFBFBD>銵具<EFBFBD><EFBFBD><EFBFBD><EFBFBD>剹<EFBFBD><EFBFBD>鸌<EFBFBD>𤩺<EFBFBD>雿頣<EFBFBD>
|
||||
- <20>?摰䂿緵 TaskDetail 蝏<EFBFBD>辣嚗<EFBFBD>恣蝔輯<EFBFBD>摨行辺<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嗥𠶖<EFBFBD><EFBFBD>蔭霂g<EFBFBD>
|
||||
- <20>?摰䂿緵 EditorialReport 蝏<EFBFBD>辣嚗<EFBFBD>阮蝥西<EFBFBD><EFBFBD><EFBFBD><EFBFBD>扯<EFBFBD>隡唳𥁒<EFBFBD>𠺪<EFBFBD>
|
||||
- <20>?摰䂿緵 MethodologyReport 蝏<EFBFBD>辣嚗<EFBFBD>䲮瘜訫郎霂<EFBFBD>摯<EFBFBD>亙<EFBFBD>嚗?- <20>?摰䂿緵 AgentModal 蝏<>辣嚗<E8BEA3>惣<EFBFBD>賭<EFBFBD><E8B3AD>㗇𥋘撘寧<E69298>嚗?- <20>?瘜典<E7989C><E585B8>?moduleRegistry.ts
|
||||
- ✅ 创建 `frontend-v2/src/modules/rvw/` 模块目录结构
|
||||
- ✅ 实现 Dashboard 页面(任务列表、筛选、批量操作)
|
||||
- ✅ 实现 TaskDetail 组件(审稿进度条、实时状态轮询)
|
||||
- ✅ 实现 EditorialReport 组件(稿约规范性评估报告)
|
||||
- ✅ 实现 MethodologyReport 组件(方法学评估报告)
|
||||
- ✅ 实现 AgentModal 组件(智能体选择弹窗)
|
||||
- ✅ 注册到 moduleRegistry.ts
|
||||
|
||||
**集成测试与Bug修复(Phase 4):**
|
||||
- <20>?靽桀<E99DBD><E6A180>寞<EFBFBD>摮血<E691AE><E8A180>唬<EFBFBD><E594AC>曄內<E69B84>桅<EFBFBD>嚗<EFBFBD><E59A97>銵券△<E588B8>曄內"warn"<22>䔶<EFBFBD><E494B6>臬<EFBFBD><E887AC>堆<EFBFBD>
|
||||
- <20>?靽桀<E99DBD><E6A180>芷<EFBFBD>㗇䲮瘜訫郎<E8A8AB>嗉祕<E59789><E7A595>△銝齿遬蝷箸𥁒<E7AEB8>𢠃䔮憸?- <20>?靽桀<E99DBD> activeTab 暺䁅恕<E48185>澆紡<E6BE86>渡<EFBFBD><E6B8A1>曄內<E69B84>桅<EFBFBD>
|
||||
- <20>?摰峕㟲瘚贝<E7989A><E8B49D>閙惣<E99699>賭<EFBFBD><E8B3AD><EFBFBD><EFBFBD><EFBFBD>箄<EFBFBD>雿枏恣蝔踵<E89D94>蝔?
|
||||
**<2A>亙<EFBFBD>撖澆枂嚗㇊hase 5嚗㚁<E59A97>**
|
||||
- <20>?摰㕑<E691B0> docx <20>?file-saver 摨?- <20>?摰䂿緵 Word <20><>﹝撖澆枂<E6BE86>蠘<EFBFBD>
|
||||
- <20>?<3F>舀<EFBFBD>蝏𤘪<E89D8F><F0A498AA>𡝗𥁒<F0A19D97>𠺪<EFBFBD><F0A0BAAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>抅<EFBFBD>砌縑<E7A08C>航”<E888AA>潦<EFBFBD><E6BDA6>阮蝥西<E89DA5><E8A5BF><EFBFBD><EFBFBD>扼<EFBFBD><E689BC>䲮瘜訫郎霂<E9838E>摯嚗?- <20>?<3F>桅<EFBFBD><E6A185><EFBFBD>遣霈桐蝙<E6A190>其<EFBFBD><E585B6>屸<EFBFBD><E5B1B8>脫<EFBFBD>霈?
|
||||
**Schema<6D>𠉛氖餈<E6B096>宏嚗㇊hase 6嚗㚁<E59A97>**
|
||||
- <20>?撠?review_tasks 銵其<E98AB5> public 餈<>宏<EFBFBD>?rvw_schema
|
||||
- <20>?<3F>湔鰵 Prisma schema 銝剔<E98A9D> @@schema <20><>誘
|
||||
- <20>?<3F>齿鰵<E9BDBF><E9B0B5><EFBFBD> Prisma Client
|
||||
- <20>?撉諹<E69289><E8ABB9><EFBFBD><EFBFBD>㗇䰻霂W<E99C82><EFBCB7>唾<EFBFBD>甇<EFBFBD>虜撌乩<E6928C>
|
||||
- ✅ 修复方法学分数不显示问题(列表页显示"warn"而不是分数)
|
||||
- ✅ 修复只选方法学时详情页不显示报告问题
|
||||
- ✅ 修复 activeTab 默认值导致的显示问题
|
||||
- ✅ 完整测试单智能体和双智能体审稿流程
|
||||
|
||||
霂衣<EFBFBD>隞餃𦛚皜<EFBFBD><EFBFBD>閫<EFBFBD><EFBFBD>[RVW璅∪<E79285>餈<EFBFBD>宏霈∪<E99C88>](./04-撘<><E69298>𤏸恣<F0A48FB8>?RVW璅∪<E79285>餈<EFBFBD>宏霈∪<E99C88>.md)
|
||||
**报告导出(Phase 5):**
|
||||
- ✅ 安装 docx 和 file-saver 库
|
||||
- ✅ 实现 Word 文档导出功能
|
||||
- ✅ 支持结构化报告(标题、基本信息表格、稿约规范性、方法学评估)
|
||||
- ✅ 问题和建议使用不同颜色标记
|
||||
|
||||
**Schema隔离迁移(Phase 6):**
|
||||
- ✅ 将 review_tasks 表从 public 迁移到 rvw_schema
|
||||
- ✅ 更新 Prisma schema 中的 @@schema 指令
|
||||
- ✅ 重新生成 Prisma Client
|
||||
- ✅ 验证所有查询和关联正常工作
|
||||
|
||||
详细任务清单见:[RVW模块迁移计划](./04-开发计划/RVW模块迁移计划.md)
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD>圲 <20><><EFBFBD>臭<EFBFBD>韏?
|
||||
### 憭滨鍂<E6BBA8><E98D82>像<EFBFBD>啗<EFBFBD><E59597>?
|
||||
| <20>賢<EFBFBD> | 雿滨蔭 | <20>券<EFBFBD>?|
|
||||
## 🔧 技术依赖
|
||||
|
||||
### 复用的平台能力
|
||||
|
||||
| 能力 | 位置 | 用途 |
|
||||
|------|------|------|
|
||||
| **LLM网关** | `@/common/llm/LLMFactory` | AI评估 |
|
||||
| **文档处理** | `ExtractionClient` | Word/PDF文本提取 |
|
||||
| **存储** | `@/common/storage` | 文件存储 |
|
||||
| **<EFBFBD>亙<EFBFBD>** | `@/common/logging` | 蝏𤘪<EFBFBD><EFBFBD>𡝗𠯫敹?|
|
||||
| **日志** | `@/common/logging` | 结构化日志 |
|
||||
| **任务队列** | `jobQueue` | 异步任务处理 |
|
||||
|
||||
### LLM模型
|
||||
|
||||
| 璅∪<EFBFBD> | <20>券<EFBFBD>?| 霂湔<E99C82> |
|
||||
| 模型 | 用途 | 说明 |
|
||||
|------|------|------|
|
||||
| DeepSeek-V3 | 默认 | 性价比高,推理能力强 |
|
||||
| DeepSeek-R1 | 憭<EFBFBD><EFBFBD>?| 瘛勗漲<E58B97>函<EFBFBD> |
|
||||
| Qwen3-72B | 憭<EFBFBD><EFBFBD>?| 銝剜<E98A9D><E5899C><EFBFBD>圾憟?|
|
||||
| DeepSeek-R1 | 备选 | 深度推理 |
|
||||
| Qwen3-72B | 备选 | 中文理解好 |
|
||||
|
||||
---
|
||||
|
||||
## 📚 相关文档
|
||||
|
||||
### <EFBFBD><EFBFBD>瘙<EFBFBD><EFBFBD>獢?
|
||||
- [<5B>箄<EFBFBD><E7AE84>笔<EFBFBD>摰∠阮蝟餌<E89D9F>MVP PRD](./01-<2D><>瘙<EFBFBD><E79899><EFBFBD>?<3F>箄<EFBFBD><E7AE84>笔<EFBFBD>摰∠阮蝟餌<E89D9F>%20MVP%20鈭批<E988AD><E689B9><EFBFBD>瘙<EFBFBD><E79899>獢?md)
|
||||
- [<5B>箄<EFBFBD>摰∠阮V7<56>笔<EFBFBD>](./01-<2D><>瘙<EFBFBD><E79899><EFBFBD>?<3F>箄<EFBFBD>摰∠阮V7.html) - <20>舐凒<E88890>交<EFBFBD>閫<EFBFBD>膥<EFBFBD>枏<EFBFBD>
|
||||
### 需求文档
|
||||
|
||||
### 撘<><E69298>烐<EFBFBD>獢?
|
||||
- [餈<>宏霈∪<E99C88>嚗ǒ2.0<EFBFBD>游<EFBFBD><EFBFBD><EFBFBD><EFBFBD>](./04-撘<><E69298>𤏸恣<F0A48FB8>?RVW璅∪<E79285>餈<EFBFBD>宏霈∪<E99C88>.md) 漎<><E6BC8E> **銝餉<E98A9D>撘<EFBFBD><E69298>烐<EFBFBD>獢?*
|
||||
- [智能期刊审稿系统MVP PRD](./01-需求分析/智能期刊审稿系统%20MVP%20产品需求文档.md)
|
||||
- [智能审稿V7原型](./01-需求分析/智能审稿V7.html) - 可直接浏览器打开
|
||||
|
||||
### <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>獢?
|
||||
- [<5B>唳<EFBFBD>蝟餌<E89D9F><E9A48C><EFBFBD><EFBFBD>舀𨰫摨閙𥁒<E99699>𠺖(../../00-憿寧𤌍璁<F0A48C8D>膩/<2F>唳<EFBFBD>蝟餌<E89D9F><E9A48C><EFBFBD><EFBFBD>舀𨰫摨閙𥁒<E99699>?md) - Line 578-748
|
||||
- [鈭穃<E988AD><E7A983>笔<EFBFBD><E7AC94>𤏸<EFBFBD><F0A48FB8><EFBFBD>(../../04-撘<><E69298>𤏸<EFBFBD><F0A48FB8>?08-鈭穃<E988AD><E7A983>笔<EFBFBD><E7AC94>𤏸<EFBFBD><F0A48FB8>?md)
|
||||
### 开发文档
|
||||
|
||||
- [迁移计划(v2.0整合版)](./04-开发计划/RVW模块迁移计划.md) ⬅️ **主要开发文档**
|
||||
|
||||
### 参考文档
|
||||
|
||||
- [现有系统技术摸底报告](../../00-项目概述/现有系统技术摸底报告.md) - Line 578-748
|
||||
- [云原生开发规范](../../04-开发规范/08-云原生开发规范.md)
|
||||
- [系统架构分层设计](../../00-系统总体设计/01-系统架构分层设计.md)
|
||||
|
||||
### Prompt文件
|
||||
|
||||
- [蝔輻漲閫<E6BCB2><E996AB><EFBFBD>扯<EFBFBD>隡唳<E99AA1><E594B3><EFBFBD>(./蝔輻漲閫<E6BCB2><E996AB><EFBFBD>扯<EFBFBD>隡唳<E99AA1><E594B3>?txt)
|
||||
- [蝔蹂辣<E8B982>寞<EFBFBD>摮西<E691AE>隡唳<E99AA1><E594B3><EFBFBD>(./蝔蹂辣<E8B982>寞<EFBFBD>摮西<E691AE>隡唳<E99AA1><E594B3>?txt)
|
||||
- [稿约规范性评估标准](./稿约规范性评估标准.txt)
|
||||
- [稿件方法学评估标准](./稿件方法学评估标准.txt)
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD>㴓 敹恍<E695B9>笔<EFBFBD>憪?
|
||||
## 🎯 快速开始
|
||||
|
||||
### 访问审稿模块
|
||||
|
||||
1. **启动后端**
|
||||
@@ -188,7 +238,7 @@ Prompt(保持不变)
|
||||
npm run dev
|
||||
```
|
||||
|
||||
2. **<EFBFBD>臬𢆡<EFBFBD>滨垢嚗<EFBFBD>鰵<EFBFBD>?frontend-v2嚗?*
|
||||
2. **启动前端(新版 frontend-v2)**
|
||||
```bash
|
||||
cd frontend-v2
|
||||
npm run dev
|
||||
@@ -196,49 +246,54 @@ Prompt(保持不变)
|
||||
|
||||
3. **访问审稿页面**
|
||||
- 打开 `http://localhost:3000`
|
||||
- <EFBFBD>孵稬憿園<EFBFBD>撖潸⏛<EFBFBD>讐<EFBFBD> **"憸<>恣蝔?** <20><>倌
|
||||
- <EFBFBD>𣇉凒<EFBFBD>亥挪<EFBFBD>?`http://localhost:3000/rvw`
|
||||
- 点击顶部导航栏的 **"预审稿"** 标签
|
||||
- 或直接访问 `http://localhost:3000/rvw`
|
||||
|
||||
4. **测试流程**
|
||||
- 点击"上传稿件"按钮
|
||||
- <EFBFBD>㗇𥋘Word/PDF<EFBFBD><EFBFBD>﹝嚗<EFBFBD>楆5MB嚗? - <20>㗇𥋘<E39787>箄<EFBFBD>雿橒<E99BBF>蝔輻漲閫<E6BCB2><E996AB><EFBFBD>?<3F>寞<EFBFBD>摮?銝方<E98A9D><E696B9><EFBFBD><EFBFBD>㚁<EFBFBD>
|
||||
- 选择Word/PDF文档(≤5MB)
|
||||
- 选择智能体(稿约规范性/方法学/两者都选)
|
||||
- 点击"运行"按钮
|
||||
- 蝑匧<EFBFBD>AI霂<EFBFBD>摯摰峕<EFBFBD>嚗<EFBFBD>漲1-2<><32><EFBFBD>嚗? - <20>亦<EFBFBD>霂<EFBFBD>摯<EFBFBD>亙<EFBFBD>
|
||||
- 等待AI评估完成(约1-2分钟)
|
||||
- 查看评估报告
|
||||
|
||||
### API测试(新版 v2 API)
|
||||
|
||||
### API瘚贝<E7989A>嚗<EFBFBD>鰵<EFBFBD>?v2 API嚗?
|
||||
```http
|
||||
### 获取任务列表
|
||||
GET http://localhost:3001/api/v1/rvw/tasks
|
||||
GET http://localhost:3001/api/v2/rvw/tasks
|
||||
|
||||
### <EFBFBD>厩𠶖<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?GET http://localhost:3001/api/v1/rvw/tasks?status=pending
|
||||
### 按状态筛选
|
||||
GET http://localhost:3001/api/v2/rvw/tasks?status=pending
|
||||
|
||||
### 上传稿件
|
||||
POST http://localhost:3001/api/v1/rvw/tasks
|
||||
POST http://localhost:3001/api/v2/rvw/tasks
|
||||
Content-Type: multipart/form-data
|
||||
# file: 文件
|
||||
# selectedAgents: ["editorial", "methodology"]
|
||||
|
||||
### 运行单个任务
|
||||
POST http://localhost:3001/api/v1/rvw/tasks/{{taskId}}/run
|
||||
POST http://localhost:3001/api/v2/rvw/tasks/{{taskId}}/run
|
||||
Content-Type: application/json
|
||||
{"selectedAgents": ["editorial", "methodology"]}
|
||||
|
||||
### 批量运行任务
|
||||
POST http://localhost:3001/api/v1/rvw/tasks/batch-run
|
||||
POST http://localhost:3001/api/v2/rvw/tasks/batch-run
|
||||
Content-Type: application/json
|
||||
{"taskIds": ["id1", "id2"], "selectedAgents": ["editorial"]}
|
||||
|
||||
### 获取任务详情
|
||||
GET http://localhost:3001/api/v1/rvw/tasks/{{taskId}}
|
||||
GET http://localhost:3001/api/v2/rvw/tasks/{{taskId}}
|
||||
|
||||
### 获取报告
|
||||
GET http://localhost:3001/api/v1/rvw/tasks/{{taskId}}/report
|
||||
GET http://localhost:3001/api/v2/rvw/tasks/{{taskId}}/report
|
||||
```
|
||||
|
||||
### 旧版API(保持兼容)
|
||||
|
||||
```http
|
||||
### 銝𠹺<EFBFBD>蝔蹂辣嚗<EFBFBD>唂API嚗?POST http://localhost:3001/api/v1/review/upload
|
||||
### 上传稿件(旧API)
|
||||
POST http://localhost:3001/api/v1/review/upload
|
||||
Content-Type: multipart/form-data
|
||||
```
|
||||
|
||||
@@ -248,25 +303,28 @@ Content-Type: multipart/form-data
|
||||
|
||||
### 对新AI助手
|
||||
|
||||
1. <EFBFBD>?**<2A>詨<EFBFBD><E8A9A8>蠘<EFBFBD>撌脣<E6928C><E884A3>?*嚗𡁜<E59A97><F0A1819C>𡒊垢撌脰<E6928C>蝘餃<E89D98><E9A483>唳沲<E594B3><E6B2B2><EFBFBD><EFBFBD>舀迤撣訾蝙<E8A8BE>?2. <20>?**撌脤<E6928C><E884A4>𣂼<EFBFBD> frontend-v2**嚗𡁻<E59A97>朞<EFBFBD>憿園<E686BF>撖潸⏛<E6BDB8>?憸<>恣蝔?餈𥕦<E9A488>
|
||||
3. <EFBFBD>?**v2 API 撌脣停蝏?*嚗?api/v2/rvw/* 頝舐眏<E88890>舐鍂
|
||||
4. <EFBFBD>?**<2A>萄儐鈭穃<E988AD><E7A983>蠘<EFBFBD><E8A098>?*嚗帋蝙<E5B88B>?logger <20>滚𦛚<E6BB9A>蹂誨 console.log
|
||||
1. ✅ **核心功能已完成**:前后端已迁移到新架构,可正常使用
|
||||
2. ✅ **已集成到 frontend-v2**:通过顶部导航栏"预审稿"进入
|
||||
3. ✅ **v2 API 已就绪**:/api/v2/rvw/* 路由可用
|
||||
4. ✅ **遵循云原生规范**:使用 logger 服务替代 console.log
|
||||
5. ⚠️ **保留旧API**:v1路由保持兼容,支持旧前端
|
||||
|
||||
### 撌脣<EFBFBD><EFBFBD>鞉㺿<EFBFBD>?
|
||||
| <20>桅<EFBFBD> | <20>寥<EFBFBD>惩<EFBFBD> | <20>寥<EFBFBD>惩<EFBFBD> | <20>嗆<EFBFBD>?|
|
||||
|------|--------|--------|------|
|
||||
| <20>亙<EFBFBD> | console.log | logger<65>滚𦛚 | <20>?撌脣<E6928C><E884A3>?|
|
||||
| <20>冽<EFBFBD>霈方<E99C88> | Mock<63>冽<EFBFBD>ID | getUserId(request) | <20>?撌脣<E6928C><E884A3>?|
|
||||
| <20>箄<EFBFBD>雿㯄<E99BBF>㗇𥋘 | <20>芸𢆡 | <20>冽<EFBFBD><E586BD>舫<EFBFBD>?| <20>?撌脣<E6928C><E884A3>?|
|
||||
| <20>寥<EFBFBD><E5AFA5>滢<EFBFBD> | <20>?| batchRunReviewTasks | <20>?撌脣<E6928C><E884A3>?|
|
||||
### 已完成改造
|
||||
|
||||
### 敺<><E695BA>蝏剜㺿<E5899C>?
|
||||
| <20>桅<EFBFBD> | 敶枏<E695B6> | <20>格<EFBFBD> | 隡睃<E99AA1>蝥?|
|
||||
| 问题 | 改造前 | 改造后 | 状态 |
|
||||
|------|--------|--------|------|
|
||||
| 日志 | console.log | logger服务 | ✅ 已完成 |
|
||||
| 用户认证 | Mock用户ID | getUserId(request) | ✅ 已完成 |
|
||||
| 智能体选择 | 自动 | 用户可选 | ✅ 已完成 |
|
||||
| 批量操作 | 无 | batchRunReviewTasks | ✅ 已完成 |
|
||||
|
||||
### 待后续改造
|
||||
|
||||
| 问题 | 当前 | 目标 | 优先级 |
|
||||
|------|------|------|--------|
|
||||
| Schema雿滨蔭 | <EFBFBD>?rvw_schema | - | <EFBFBD>?撌脣<E6928C><E884A3>?|
|
||||
| 隞餃𦛚憭<EFBFBD><EFBFBD> | <EFBFBD>?pg-boss | - | <EFBFBD>?撌脣<E6928C><E884A3>?|
|
||||
| <EFBFBD>亙<EFBFBD>撖澆枂 | <EFBFBD>?Word (.docx) | PDF隡睃<EFBFBD> | P3 |
|
||||
| Schema位置 | ✅ rvw_schema | - | ✅ 已完成 |
|
||||
| 任务处理 | ✅ pg-boss | - | ✅ 已完成 |
|
||||
| 报告导出 | ✅ Word (.docx) | PDF优化 | P3 |
|
||||
|
||||
---
|
||||
|
||||
@@ -274,31 +332,46 @@ Content-Type: multipart/form-data
|
||||
|
||||
根据MVP PRD,验收标准如下:
|
||||
|
||||
1. **瘚<EFBFBD><EFBFBD><EFBFBD>?*嚗𡁶鍂<F0A181B6>瑁<EFBFBD><E79181>𣂼<EFBFBD>銝𠹺<E98A9D>5銝枉DF嚗<46>㗲<EFBFBD>匧<EFBFBD>璅∪<E79285>餈鞱<E9A488>嚗𣬚<E59A97>敺?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嗆<EFBFBD><E59786><EFBFBD><EFBFBD>典<EFBFBD>銝?撌脣<E6928C><E884A3>?
|
||||
1. **流程通**:用户能成功上传5个PDF,勾选双模型运行,等待3分钟内,状态全部变为"已完成"
|
||||
|
||||
2. **<EFBFBD>亙<EFBFBD><EFBFBD>?*嚗? - 銝𠹺<E98A9D>銝<EFBFBD>蝭<EFBFBD><E89DAD><EFBFBD>誩<EFBFBD><E8AAA9>?<3F>䁅<EFBFBD>蝏栞捏"<22><>阮隞塚<E99A9E>閫<EFBFBD><E996AB><EFBFBD>扳惣<E689B3>賭<EFBFBD>敹<EFBFBD>◆<EFBFBD>仿<EFBFBD>
|
||||
- 銝𠹺<EFBFBD>銝<EFBFBD>蝭<EFBFBD><EFBFBD><EFBFBD>𤩺毽瘛?t璉<74>撉?<3F>?<3F>⊥䲮璉<E4B2AE>撉?<3F><>阮隞塚<E99A9E><E5A19A>寞<EFBFBD>摮行惣<E8A18C>賭<EFBFBD>敹<EFBFBD>◆<EFBFBD>?摮条<E691AE>"<22>?<3F>躰秤"
|
||||
2. **报告准**:
|
||||
- 上传一篇故意删掉"摘要结论"的稿件,规范性智能体必须报错
|
||||
- 上传一篇故意混淆"t检验"和"卡方检验"的稿件,方法学智能体必须报"存疑"或"错误"
|
||||
|
||||
3. **无崩溃**:连续上传20个文件,系统不卡死,不白屏
|
||||
|
||||
3. **<EFBFBD>惩援皞?*嚗朞<E59A97>蝏凋<E89D8F>隡?0銝芣<E98A9D>隞塚<E99A9E>蝟餌<E89D9F>銝滚㨃甇鳴<E79487>銝滨蒾撅?
|
||||
---
|
||||
|
||||
## 🚀 未来规划
|
||||
|
||||
### <EFBFBD>?撌脣<E6928C><E884A3>琜<EFBFBD>2026-01-07 ~ 2026-01-10嚗?
|
||||
- [x] <20>嗆<EFBFBD>餈<EFBFBD>宏<EFBFBD>?modules/rvw嚗<77><E59A97>蝡荔<E89DA1>
|
||||
- [x] <EFBFBD>嗆<EFBFBD>餈<EFBFBD>宏<EFBFBD>?modules/rvw嚗<EFBFBD><EFBFBD>蝡?frontend-v2嚗?- [x] <20>游<EFBFBD>MVP<56>啣<EFBFBD><E595A3>踝<EFBFBD><E8B89D>寥<EFBFBD>銝𠹺<E98A9D><F0A0B9BA><EFBFBD>極雿𨅯蝱<F0A885AF><E89DB1>惣<EFBFBD>賭<EFBFBD><E8B3AD>㗇𥋘嚗?- [x] 鈭穃<E988AD><E7A983><EFBFBD>㺿<EFBFBD>𩤃<EFBFBD>logger<65>滚𦛚嚗?- [x] v2 API 頝舐眏瘜典<E7989C>
|
||||
- [x] <EFBFBD>唳旿摨枏<EFBFBD>畾菜<EFBFBD>撅?- [x] pg-boss撘<73>郊隞餃𦛚憭<F0A69B9A><E686AD>嚗?026-01-10嚗?- [x] Word<72>亙<EFBFBD>撖澆枂嚗?026-01-10嚗?- [x] <20>寞<EFBFBD>摮血<E691AE><E8A180>唳遬蝷箔耨憭㵪<E686AD>2026-01-10嚗?- [x] <20>閙惣<E99699>賭<EFBFBD>摰∠阮<E288A0>曄內靽桀<E99DBD>嚗?026-01-10嚗?- [x] Schema餈<61>宏<EFBFBD>?rvw_schema嚗?026-01-10嚗?
|
||||
### ✅ 已完成(2026-01-07 ~ 2026-01-10)
|
||||
|
||||
- [x] 架构迁移到 modules/rvw(后端)
|
||||
- [x] 架构迁移到 modules/rvw(前端 frontend-v2)
|
||||
- [x] 整合MVP新功能(批量上传、工作台、智能体选择)
|
||||
- [x] 云原生改造(logger服务)
|
||||
- [x] v2 API 路由注册
|
||||
- [x] 数据库字段扩展
|
||||
- [x] pg-boss异步任务处理(2026-01-10)
|
||||
- [x] Word报告导出(2026-01-10)
|
||||
- [x] 方法学分数显示修复(2026-01-10)
|
||||
- [x] 单智能体审稿显示修复(2026-01-10)
|
||||
- [x] Schema迁移到 rvw_schema(2026-01-10)
|
||||
|
||||
### 后续版本
|
||||
|
||||
- [ ] PDF报告导出优化
|
||||
- [ ] PICO卡片UI实现
|
||||
- [ ] 历史归档UI实现
|
||||
- [ ] <EFBFBD>餃<EFBFBD>憿菟𢒰嚗<EFBFBD>𡠺蝡衤漣<EFBFBD><EFBFBD>𧒄嚗?- [ ] 摰∠阮鈭箇恣<E7AE87><E681A3>頂蝏?- [ ] 憭朞蔭摰∠阮瘚<E998AE><E7989A>
|
||||
- [ ] <EFBFBD>笔<EFBFBD>摨梶恣<EFBFBD>?- [ ] <20>祉<EFBFBD>鈭批<E988AD><E689B9>枏<EFBFBD>
|
||||
- [ ] 登录页面(独立产品时)
|
||||
- [ ] 审稿人管理系统
|
||||
- [ ] 多轮审稿流程
|
||||
- [ ] 期刊库管理
|
||||
- [ ] 独立产品打包
|
||||
|
||||
---
|
||||
|
||||
**<EFBFBD><EFBFBD>﹝<EFBFBD><EFBFBD>𧋦嚗?* v3.2
|
||||
**文档版本:** v3.2
|
||||
**最后更新:** 2026-01-10
|
||||
**敶枏<EFBFBD><EFBFBD>嗆<EFBFBD><EFBFBD><EFBFBD>** <EFBFBD>?Phase 1-6 摰峕<EFBFBD>嚗峕芋<EFBFBD>?5%<25>舐鍂嚗玺chema撌脤<E6928C>蝳?
|
||||
**当前状态:** ✅ Phase 1-6 完成,模块95%可用,Schema已隔离
|
||||
**下一步:** 生产环境部署测试
|
||||
|
||||
@@ -1,123 +1,135 @@
|
||||
# **<EFBFBD>箄<EFBFBD><EFBFBD>笔<EFBFBD>摰∠阮蝟餌<EFBFBD> MVP 鈭批<E988AD><E689B9><EFBFBD>瘙<EFBFBD><E79899>獢?*
|
||||
# **智能期刊审稿系统 MVP 产品需求文档**
|
||||
|
||||
| 憿寧𤌍撅墧<EFBFBD>?| <20><>捆 |
|
||||
| 项目属性 | 内容 |
|
||||
| :---- | :---- |
|
||||
| **项目名称** | 智能期刊审稿辅助系统 (SmartReview MVP) |
|
||||
| **文档版本** | V1.0 (MVP) |
|
||||
| **隡睃<EFBFBD>蝥?* | P0 (<28>詨<EFBFBD><E8A9A8>蠘<EFBFBD><E8A098>剔㴓) |
|
||||
| **优先级** | P0 (核心功能闭环) |
|
||||
| **目标用户** | 期刊初审编辑 |
|
||||
|
||||
## **1\. 产品目标 (Product Goal)**
|
||||
|
||||
<EFBFBD>㯄<EFBFBD>牐<EFBFBD>銝歿*\*<2A>𨅯<EFBFBD>蝞勗朖<E58B97>兩<EFBFBD>𩄼*\*<2A><>惣<EFBFBD>賢恣蝔踹極<E8B8B9>瑯<EFBFBD><E791AF><EFBFBD>颲睲<E9A2B2>隡删阮隞塚<E99A9E>蝟餌<E89D9F><E9A48C>芸𢆡餈鞱<E9A488><E99EB1>屸<EFBFBD>璉<EFBFBD><E79289>伐<EFBFBD>閫<EFBFBD><E996AB><EFBFBD>?<3F>寞<EFBFBD>摮佗<E691AE>嚗諹<E59A97><E8ABB9>箏虾靘𥕦<E99D98><F0A595A6><EFBFBD><EFBFBD>摰∠阮<E288A0>亙<EFBFBD><E4BA99>?
|
||||
<EFBFBD>詨<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗帋<EFBFBD>隡惩<EFBFBD><EFBFBD>箸𥁒<EFBFBD>?\< 2<><32><EFBFBD>嚗𥡝<E59A97><F0A5A19D><EFBFBD><EFBFBD>折䔮憸䀹<E686B8><E480B9>箇<EFBFBD> \> 80%<EFBFBD>?
|
||||
打造一个\*\*“开箱即用”\*\*的智能审稿工具。编辑上传稿件,系统自动运行双重检查(规范性+方法学),输出可供参考的审稿报告。
|
||||
核心指标:上传到出报告 \< 2分钟;规范性问题检出率 \> 80%。
|
||||
|
||||
## **2\. 功能范围 (Scope)**
|
||||
|
||||
### **<EFBFBD>?MVP <EFBFBD><EFBFBD>鉄 (In Scope)**
|
||||
### **✅ MVP 包含 (In Scope)**
|
||||
|
||||
1. **韐行<EFBFBD>雿梶頂**嚗𡁶<E59A97><F0A181B6>閧<EFBFBD>韐血噡<E8A180>餃<EFBFBD>嚗峕𣈲<E5B395><F0A388B2><EFBFBD><EFBFBD>?Logo 摰𡁜<E691B0><F0A1819C>?
|
||||
2. **<EFBFBD><EFBFBD>辣憭<EFBFBD><EFBFBD>**嚗𡁏鸌<F0A1818F>譍<EFBFBD>隡?Word/PDF嚗<46><E59A97>銵典<E98AB5>蝷箇𠶖<E7AE87><F0A0B696><EFBFBD>?
|
||||
3. **摰⊥䰻瘚<EFBFBD><EFBFBD>**嚗𡁶鍂<F0A181B6>瑟<EFBFBD><E7919F>券<EFBFBD>㗇𥋘<E39787>箄<EFBFBD>雿枏<E99BBF>韏瑕恣<E79195>伐<EFBFBD><E4BC90>𤾸蝱撘<E89DB1>郊餈鞱<E9A488><E99EB1>?
|
||||
4. **閫<EFBFBD><EFBFBD><EFBFBD>批恣<EFBFBD>?*嚗朞<E59A97><E69C9E>硋<EFBFBD><E7A18B>啜<EFBFBD><E5959C><EFBFBD>閬<EFBFBD><E996AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>柴<EFBFBD><E69FB4>㦛<EFBFBD>䕸PI蝑厩′<E58EA9><E280B2><EFBFBD><EFBFBD>?
|
||||
5. **<EFBFBD>寞<EFBFBD>摮血恣<EFBFBD>?*嚗䥪ICO <20>𣂼<EFBFBD><F0A382BC><EFBFBD><EFBFBD>蝛嗥掩<E597A5>贝<EFBFBD><E8B49D>怒<EFBFBD><E68092>抅蝖<E68A85>蝏蠘恣<E8A098>餉<EFBFBD><E9A489>⊿<EFBFBD><E28ABF>?
|
||||
6. **<EFBFBD>亙<EFBFBD>銝𤾸紡<EFBFBD>?*嚗𡁜<E59A97>閫<EFBFBD>㦛<EFBFBD>亙<EFBFBD>撅閧內嚗峕𣈲<E5B395>?PDF 撖澆枂<E6BE86>?
|
||||
### **<2A>?MVP 銝滚<E98A9D><E6BB9A>?(Out of Scope)**
|
||||
1. **账户体系**:简单的账号登录,支持期刊 Logo 定制。
|
||||
2. **文件处理**:批量上传 Word/PDF,列表展示状态。
|
||||
3. **审查流程**:用户手动选择智能体发起审查,后台异步运行。
|
||||
4. **规范性审查**:覆盖字数、摘要结构、参考文献、图片DPI等硬指标。
|
||||
5. **方法学审查**:PICO 提取、研究类型识别、基础统计逻辑校验。
|
||||
6. **报告与导出**:双视图报告展示,支持 PDF 导出。
|
||||
|
||||
1. <20>函瑪<E587BD><E791AA>﹝蝻𤥁<E89DBB><F0A4A581>?(Web Office)<29>?
|
||||
2. 憭齿<E686AD><E9BDBF><EFBFBD><EFBFBD><EFBFBD>脫<EFBFBD><E884AB>鞟恣<E99E9F><E681A3>頂蝏麄<E89D8F>?
|
||||
3. <20>桐辣<E6A190>芸𢆡<E88AB8>煾<EFBFBD><E785BE><EFBFBD><EFBFBD>賬<EFBFBD>?
|
||||
4. 擃条漣<E69DA1><E6BCA3>蟮敶埝﹝銝擧<E98A9D>蝝Y頂蝏麄<E89D8F>?
|
||||
5. <20>滨垢<E6BBA8>航<EFBFBD><E888AA>𣇉<EFBFBD> Prompt <20>滨蔭<E6BBA8>𤾸蝱<F0A4BEB8>?
|
||||
## **3\. 霂衣<E99C82><E8A1A3>蠘<EFBFBD><E8A098><EFBFBD>瘙?(Requirements)**
|
||||
### **❌ MVP 不包含 (Out of Scope)**
|
||||
|
||||
### **3.1 <20>餃<EFBFBD>憿?(Login)**
|
||||
1. 在线文档编辑器 (Web Office)。
|
||||
2. 复杂的角色权限管理系统。
|
||||
3. 邮件自动发送功能。
|
||||
4. 高级历史归档与检索系统。
|
||||
5. 前端可视化的 Prompt 配置后台。
|
||||
|
||||
* **<2A>蠘<EFBFBD>**嚗朞揭<E69C9E>瑕<EFBFBD><E79195><EFBFBD><EFBFBD>霂<EFBFBD><E99C82>?
|
||||
* **UI**嚗?
|
||||
* 撌?銝𠹺儒撅閧內<E996A7>笔<EFBFBD> Logo 銝𤾸<E98A9D>蝘堆<E89D98><E5A086>舀<EFBFBD><E88880>滨蔭嚗剹<E59A97>?
|
||||
* 颲枏<E9A2B2>獢<EFBFBD><E78DA2>韐血噡<E8A180><E599A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||||
* <20>餃<EFBFBD><E9A483>厰僼嚗𡁶<E59A97><F0A181B6>餅嵗撉䕘<E69289>憭梯揖<E6A2AF>鞟內<E99E9F>𡏭揭<F0A18FAD>瑟<EFBFBD>撖<EFBFBD><E69296><EFBFBD>躰秤<E8BAB0>腈<EFBFBD>?
|
||||
* **<2A>餉<EFBFBD>**嚗锭ession 靽脲<E99DBD> 24 撠𤩺𧒄嚗屸<E59A97><E5B1B8>漤<EFBFBD>蝜<EFBFBD>蒈敶𨰻<E695B6>?
|
||||
### **3.2 摰∠阮撌乩<E6928C><E4B9A9>?(Dashboard)**
|
||||
## **3\. 详细功能需求 (Requirements)**
|
||||
|
||||
餈蹱糓蝟餌<EFBFBD><EFBFBD><EFBFBD>蜓<EFBFBD>屸𢒰嚗屸<EFBFBD><EFBFBD>沔*\*<2A>𨅯捐銵兩<E98AB5>𩄼*\*撣<><E692A3><EFBFBD>?
|
||||
#### **3.2.1 憿園<E686BF><E59C92>滢<EFBFBD><E6BBA2>?*
|
||||
### **3.1 登录页 (Login)**
|
||||
|
||||
* **功能**:账号密码验证。
|
||||
* **UI**:
|
||||
* 左/上侧展示期刊 Logo 与名称(支持配置)。
|
||||
* 输入框:账号、密码。
|
||||
* 登录按钮:点击校验,失败提示“账号或密码错误”。
|
||||
* **逻辑**:Session 保持 24 小时,避免频繁登录。
|
||||
|
||||
### **3.2 审稿工作台 (Dashboard)**
|
||||
|
||||
这是系统的主界面,采用\*\*“宽表”\*\*布局。
|
||||
|
||||
#### **3.2.1 顶部操作区**
|
||||
|
||||
* **品牌区**:展示“XX杂志社智能审稿系统”。
|
||||
* **筛选栏**:
|
||||
* 状态 (全部/待处理/已完成)。
|
||||
* 时间 (今天/近7天)。
|
||||
* **上传按钮**:
|
||||
* 点击触发文件选择器。
|
||||
* 支持多选。
|
||||
* 支持扩展名:.docx, .pdf。
|
||||
* 限制:单文件 \< 50MB。
|
||||
|
||||
* **<2A><><EFBFBD><EFBFBD>?*嚗𡁜<E59A97>蝷算<E89DB7>𤤴X<F0A4A4B4><58><EFBFBD>蝷暹惣<E69AB9>賢恣蝔輻頂蝏麨<E89D8F>腈<EFBFBD>?
|
||||
* **蝑偦<E89D91>㗇<EFBFBD>**嚗?
|
||||
* <20>嗆<EFBFBD>?(<28>券<EFBFBD>/敺<><E695BA><EFBFBD>?撌脣<E6928C><E884A3>?<3F>?
|
||||
* <20>園𡢿 (隞𠰴予/餈?憭?<3F>?
|
||||
* **銝𠹺<E98A9D><F0A0B9BA>厰僼**嚗?
|
||||
* <20>孵稬閫血<E996AB><E8A180><EFBFBD>辣<EFBFBD>㗇𥋘<E39787>具<EFBFBD>?
|
||||
* <20>舀<EFBFBD>憭𡁻<E686AD>剹<EFBFBD>?
|
||||
* <20>舀<EFBFBD><E88880>拙<EFBFBD><E68B99>㵪<EFBFBD>.docx, .pdf<64>?
|
||||
* <20>𣂼<EFBFBD>嚗𡁜<E59A97><F0A1819C><EFBFBD>辣 \< 50MB<4D>?
|
||||
#### **3.2.2 稿件列表**
|
||||
|
||||
列表包含以下列:
|
||||
|
||||
* 憭漤<EFBFBD>㗇<EFBFBD>嚗𡁶鍂鈭擧鸌<EFBFBD>𤩺<EFBFBD>雿栶<EFBFBD>?
|
||||
* <EFBFBD><EFBFBD>辣靽⊥<EFBFBD>嚗𡁏<EFBFBD>隞嗅<EFBFBD>嚗<EFBFBD><EFBFBD><EFBFBD>餉<EFBFBD><EFBFBD>亥祕<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>之撠譌<EFBFBD><EFBFBD><EFBFBD>隡䭾𧒄<EFBFBD>氬<EFBFBD>?
|
||||
* 摰∠阮蝏游漲嚗𡁜<EFBFBD>蝷?Tags嚗<73><E59A97><EFBFBD><EFBFBD><EFBFBD>扼<EFBFBD><E689BC>䲮瘜訫郎嚗剹<E59A97>?
|
||||
* 复选框:用于批量操作。
|
||||
* 文件信息:文件名(点击进入详情)、大小、上传时间。
|
||||
* 审稿维度:展示 Tags(规范性、方法学)。
|
||||
* 状态:
|
||||
* **敺<EFBFBD><EFBFBD><EFBFBD>?*嚗𡁜<E59A97>銝𠹺<E98A9D>嚗峕𧊋餈鞱<E9A488><E99EB1>?
|
||||
* **餈鞱<EFBFBD>銝?*嚗𡁜<E59A97>蝷箏𢆡<E7AE8F>?Loading <EFBFBD>暹<EFBFBD><EFBFBD>?
|
||||
* **撌脣<EFBFBD><EFBFBD>?*嚗?
|
||||
* <EFBFBD>亥<EFBFBD>鈭<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>改<EFBFBD><EFBFBD>曄內<EFBFBD><EFBFBD>㺭嚗<EFBFBD><EFBFBD>嚗𡁶遛<EFBFBD>?"90<39>?嚗剹<E59A97>?
|
||||
* <EFBFBD>亥<EFBFBD>鈭<EFBFBD>䲮瘜訫郎嚗峕遬蝷箇<EFBFBD>霈綽<EFBFBD>憒<EFBFBD><EFBFBD>暺<EFBFBD>𠧧 "摮条<E691AE>"嚗剹<E59A97>?
|
||||
* **待处理**:刚上传,未运行。
|
||||
* **运行中**:展示动态 Loading 图标。
|
||||
* **已完成**:
|
||||
* 若跑了规范性,显示分数(如:绿色 "90分")。
|
||||
* 若跑了方法学,显示结论(如:黄色 "存疑")。
|
||||
* 操作列:
|
||||
* \[撘<EFBFBD>憪见恣<EFBFBD>功]嚗𡁻<E59A97>撖孵<E69296>憭<EFBFBD><E686AD><EFBFBD>嗆<EFBFBD><E59786><EFBFBD>?
|
||||
* \[<EFBFBD>亦<EFBFBD><EFBFBD>亙<EFBFBD>\]嚗𡁻<E59A97>撖孵歇摰峕<E691B0><E5B395>嗆<EFBFBD><E59786><EFBFBD>?
|
||||
* \[开始审查\]:针对待处理状态。
|
||||
* \[查看报告\]:针对已完成状态。
|
||||
|
||||
#### **3.2.3 任务发起弹窗 (The Launcher)**
|
||||
|
||||
* **閫血<EFBFBD>**嚗𡁶<E59A97><F0A181B6>餃<EFBFBD>銵其葉<E585B6><E89189><EFBFBD>𨅯<EFBFBD>憪见恣<E8A781>乒<EFBFBD>脲<EFBFBD>摨閖<E691A8><E99696>寥<EFBFBD><E5AFA5>滢<EFBFBD><E6BBA2>讐<EFBFBD><E8AE90>𡏭<EFBFBD>銵𢞖<E98AB5>腈<EFBFBD>?
|
||||
* **<EFBFBD><EFBFBD>捆**嚗?
|
||||
* <EFBFBD><EFBFBD><EFBFBD>嚗尠<EFBFBD>𨅯<EFBFBD>韏瑟惣<EFBFBD>賢恣<EFBFBD>乒<EFBFBD>腈<EFBFBD>?
|
||||
* **触发**:点击列表中的“开始审查”或底部批量操作栏的“运行”。
|
||||
* **内容**:
|
||||
* 标题:“发起智能审查”。
|
||||
* 复选框组:
|
||||
* \[x\] 蝔輻漲閫<EFBFBD><EFBFBD><EFBFBD>扳惣<EFBFBD>賭<EFBFBD> (暺䁅恕<E48185>劐葉)<29>?
|
||||
* \[ \] <EFBFBD>寞<EFBFBD>摮衣<EFBFBD>霈⊥惣<EFBFBD>賭<EFBFBD><EFBFBD>?
|
||||
* **<EFBFBD>餉<EFBFBD>**嚗𡁶<E59A97><F0A181B6>餌&摰𡁜<E691B0>嚗<EFBFBD><E59A97>蝡臬<E89DA1>撱箔遙<E7AE94>∴<EFBFBD><E288B4>𡑒”<F0A19192>嗆<EFBFBD><E59786><EFBFBD>銝算<E98A9D>𡏭<EFBFBD>銵䔶葉<E494B6>腈<EFBFBD>?
|
||||
### **3.3 摰∠阮霂行<E99C82>憿?(Report Detail)**
|
||||
* \[x\] 稿约规范性智能体 (默认选中)。
|
||||
* \[ \] 方法学统计智能体。
|
||||
* **逻辑**:点击确定后,后端创建任务,列表状态变为“运行中”。
|
||||
|
||||
### **3.3 审稿详情页 (Report Detail)**
|
||||
|
||||
#### **3.3.1 头部信息**
|
||||
|
||||
* 撅閧內<EFBFBD><EFBFBD>辣<EFBFBD>溻<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>亥<EFBFBD><EFBFBD>𣂼<EFBFBD>嚗剹<EFBFBD><EFBFBD><EFBFBD><EFBFBD>祆<EFBFBD>蝑橘<EFBFBD>MVP<EFBFBD>舀<EFBFBD>銝齿遬蝷綽<EFBFBD><EFBFBD>?
|
||||
* <EFBFBD>厰僼嚗䨵[銝贝蝸<E8B49D>毺阮\]<5D><>[撖澆枂<E6BE86>亙<EFBFBD>PDF\]<EFBFBD>?
|
||||
#### **3.3.2 閫<>㦛 A嚗𡁶阮蝥西<E89DA5><E8A5BF><EFBFBD><EFBFBD>扳𥁒<E689B3>?*
|
||||
* 展示文件名、作者(若能提取)、版本标签(MVP可暂不显示)。
|
||||
* 按钮:\[下载原稿\]、\[导出报告PDF\]。
|
||||
|
||||
#### **3.3.2 视图 A:稿约规范性报告**
|
||||
|
||||
* **总评卡片**:展示总分 (0-100) 和 结论 (Pass/Fail)。
|
||||
* **检查项列表**:
|
||||
* **文题字数**:提取字数,对比标准(如 \<20字)。
|
||||
* **摘要结构**:正则匹配“目的/方法/结果/结论”关键词。
|
||||
* **参考文献**:识别引用格式错误。
|
||||
* **图片质量**:显示低分辨率图片的页码和 DPI 值。
|
||||
* **交互**:每个报错项下方提供“建议修改意见”,支持点击复制。
|
||||
|
||||
* **<2A>餉<EFBFBD><E9A489>∠<EFBFBD>**嚗𡁜<E59A97>蝷箸<E89DB7>餃<EFBFBD> (0-100) <20>?蝏栞捏 (Pass/Fail)<29>?
|
||||
* **璉<><E79289>仿★<E4BBBF>𡑒”**嚗?
|
||||
* **<2A><><EFBFBD>摮埈㺭**嚗𡁏<E59A97><F0A1818F>硋<EFBFBD><E7A18B>堆<EFBFBD>撖寞<E69296><E5AF9E><EFBFBD><EFBFBD>嚗<EFBFBD><E59A97> \<20摮梹<E691AE><E6A2B9>?
|
||||
* **<2A>䁅<EFBFBD>蝏𤘪<E89D8F>**嚗𡁏迤<F0A1818F>坔龪<E59D94>𨧀<EFBFBD>𦦵𤌍<F0A6A6B5>?<3F>寞<EFBFBD>/蝏𤘪<E89D8F>/蝏栞捏<E6A09E>嘥<EFBFBD><E598A5>株<EFBFBD><E6A0AA>?
|
||||
* **<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?*嚗朞<E59A97><E69C9E>怠<EFBFBD><E680A0>冽聢撘誯<E69298>霂胯<E99C82>?
|
||||
* **<2A>曄<EFBFBD>韐券<E99F90>**嚗𡁏遬蝷箔<E89DB7><E7AE94><EFBFBD>儘<EFBFBD><E58498>㦛<EFBFBD><E3A69B><EFBFBD>憿萇<E686BF><E89087>?DPI <20>潦<EFBFBD>?
|
||||
* **鈭支<E988AD>**嚗𡁏<E59A97>銝芣𥁒<E88AA3>䠷★銝𧢲䲮<F0A7A2B2>𣂷<EFBFBD><F0A382B7>𨅯遣霈桐耨<E6A190>寞<EFBFBD>閫<EFBFBD><E996AB>嘅<EFBFBD><E59885>舀<EFBFBD><E88880>孵稬憭滚<E686AD><E6BB9A>?
|
||||
#### **3.3.3 视图 B:方法学评估报告**
|
||||
|
||||
* **PICO <EFBFBD>∠<EFBFBD>**嚗𡁶<E59A97><F0A181B6><EFBFBD><EFBFBD>撅閧內<E996A7>𣂼<EFBFBD><F0A382BC>箇<EFBFBD> P/I/C/O <EFBFBD><EFBFBD>捆<EFBFBD>?
|
||||
* **<EFBFBD>餉<EFBFBD><EFBFBD>函<EFBFBD><EFBFBD>?*嚗?
|
||||
* 撅閧內璅∪<EFBFBD>撖嫖<EFBFBD>𦦵<EFBFBD>蝛嗥掩<EFBFBD>𦥑<EFBFBD>萘<EFBFBD><EFBFBD>斗鱏嚗<EFBFBD><EFBFBD>嚗𡁜<EFBFBD>憿暹<EFBFBD>折<EFBFBD><EFBFBD>㛖<EFBFBD>蝛塚<EFBFBD><EFBFBD>?
|
||||
* 撅閧內<EFBFBD>𦦵<EFBFBD>霈⊥䲮瘜𨰝<EFBFBD>萘<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>批<EFBFBD><EFBFBD>琜<EFBFBD>憒<EFBFBD><EFBFBD><EFBFBD>𤑳緵憭𡁶<EFBFBD>瘥磰<EFBFBD><EFBFBD>芰鍂 ANOVA嚗剹<EFBFBD>?
|
||||
* **蝥Y遛<EFBFBD>?*嚗?
|
||||
* <EFBFBD>𣞁 **<EFBFBD>躰秤**嚗𡁏<E59A97>蝖桃<E89D96><E6A183>餉<EFBFBD>蝖砌慾<E7A08C>?
|
||||
* <EFBFBD>椬 **摮条<E691AE>**嚗𡁏芋<F0A1818F>衤<EFBFBD>蝖桀<E89D96>嚗屸<E59A97>鈭箏極憭齿瓲<E9BDBF>?
|
||||
* <EFBFBD>叚 **<EFBFBD>朞<EFBFBD>**嚗𡁻<E59A97>餉<EFBFBD><E9A489>芣晾<E88AA3>?
|
||||
* **PICO 卡片**:结构化展示提取出的 P/I/C/O 内容。
|
||||
* **逻辑推理区**:
|
||||
* 展示模型对“研究类型”的判断(如:回顾性队列研究)。
|
||||
* 展示“统计方法”的合理性分析(如:发现多组比较未用 ANOVA)。
|
||||
* **红绿灯**:
|
||||
* 🔴 **错误**:明确的逻辑硬伤。
|
||||
* 🟡 **存疑**:模型不确定,需人工复核。
|
||||
* 🟢 **通过**:逻辑自洽。
|
||||
|
||||
## **4\. 技术与性能要求 (Non-functional)**
|
||||
|
||||
1. **<EFBFBD>滚<EFBFBD><EFBFBD>笔漲**嚗?
|
||||
* <EFBFBD>𡑒”<EFBFBD>㰘蝸 \< 1蝘鉝<EFBFBD>?
|
||||
* <EFBFBD><EFBFBD>辣銝𠹺<EFBFBD><EFBFBD>笔漲<EFBFBD>硋<EFBFBD>鈭𤾸蒂摰踝<EFBFBD><EFBFBD><EFBFBD><EFBFBD>㕑<EFBFBD>摨血<EFBFBD>擐<EFBFBD><EFBFBD>?
|
||||
2. **撟嗅<EFBFBD>憭<EFBFBD><EFBFBD>**嚗?
|
||||
* <EFBFBD>舀<EFBFBD><EFBFBD>喳<EFBFBD> 5 銝芯遙<E88AAF>∪僎<E288AA>𤏸<EFBFBD>銵䕘<E98AB5>銝漤<E98A9D>閬<EFBFBD><E996AC><EFBFBD>笔云銋<E4BA91><E98A8B><EFBFBD>?
|
||||
3. **<EFBFBD>澆捆<EFBFBD>?*嚗?
|
||||
* 隡睃<EFBFBD><EFBFBD>舀<EFBFBD> Chrome / Edge 瘚讛<EFBFBD><EFBFBD>具<EFBFBD>?
|
||||
4. **<EFBFBD>唳旿摰匧<EFBFBD>**嚗?
|
||||
* 蝔蹂辣<EFBFBD><EFBFBD>辣摮睃<EFBFBD><EFBFBD><EFBFBD><EFBFBD>惩<EFBFBD><EFBFBD>㚚<EFBFBD>蝳颯<EFBFBD>?
|
||||
* 摰∠阮<EFBFBD>亙<EFBFBD>隞<EFBFBD><EFBFBD><EFBFBD><EFBFBD>揭<EFBFBD>瑕虾閫<EFBFBD><EFBFBD>?
|
||||
1. **响应速度**:
|
||||
* 列表加载 \< 1秒。
|
||||
* 文件上传速度取决于带宽,需有进度反馈。
|
||||
2. **并发处理**:
|
||||
* 支持至少 5 个任务并发运行(不需要排队太久)。
|
||||
3. **兼容性**:
|
||||
* 优先支持 Chrome / Edge 浏览器。
|
||||
4. **数据安全**:
|
||||
* 稿件文件存储需加密或隔离。
|
||||
* 审稿报告仅授权账号可见。
|
||||
|
||||
## **5\. 验收标准 (Acceptance Criteria)**
|
||||
|
||||
1. **瘚<EFBFBD><EFBFBD><EFBFBD>?*嚗𡁶鍂<F0A181B6>瑁<EFBFBD><E79181>𣂼<EFBFBD>銝𠹺<E98A9D> 5 銝?PDF嚗<EFBFBD>㗲<EFBFBD>匧<EFBFBD>璅∪<EFBFBD>餈鞱<EFBFBD>嚗𣬚<EFBFBD>敺?3 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嗆<EFBFBD><E59786><EFBFBD><EFBFBD>典<EFBFBD>銝算<E98A9D>𨅯歇摰峕<E691B0><E5B395>腈<EFBFBD>?
|
||||
2. **<EFBFBD>亙<EFBFBD><EFBFBD>?*嚗?
|
||||
* 銝𠹺<EFBFBD>銝<EFBFBD>蝭<EFBFBD><EFBFBD><EFBFBD>誩<EFBFBD><EFBFBD>争<EFBFBD>𨀣<EFBFBD>閬<EFBFBD><EFBFBD>霈算<EFBFBD>萘<EFBFBD>蝔蹂辣嚗諹<EFBFBD><EFBFBD><EFBFBD><EFBFBD>扳惣<EFBFBD>賭<EFBFBD>敹<EFBFBD>◆<EFBFBD>仿<EFBFBD><EFBFBD>?
|
||||
* 銝𠹺<EFBFBD>銝<EFBFBD>蝭<EFBFBD><EFBFBD><EFBFBD>𤩺毽瘛<EFBFBD><EFBFBD>𦭛璉<EFBFBD>撉𢞖<EFBFBD>嘥<EFBFBD><EFBFBD>𨅯㨃<EFBFBD>寞<EFBFBD>撉𢞖<EFBFBD>萘<EFBFBD>蝔蹂辣嚗峕䲮瘜訫郎<EFBFBD>箄<EFBFBD>雿枏<EFBFBD>憿餅𥁒<EFBFBD>𨅯<EFBFBD><EFBFBD>爗<EFBFBD>脲<EFBFBD><EFBFBD>𣈯<EFBFBD>霂胼<EFBFBD>腈<EFBFBD>?
|
||||
3. **<EFBFBD>惩援皞?*嚗朞<E59A97>蝏凋<E89D8F>隡?20 銝芣<E98A9D>隞塚<E99A9E>蝟餌<E89D9F>銝滚㨃甇鳴<E79487>銝滨蒾撅譌<E69285>
|
||||
1. **流程通**:用户能成功上传 5 个 PDF,勾选双模型运行,等待 3 分钟内,状态全部变为“已完成”。
|
||||
2. **报告准**:
|
||||
* 上传一篇故意删掉“摘要结论”的稿件,规范性智能体必须报错。
|
||||
* 上传一篇故意混淆“t检验”和“卡方检验”的稿件,方法学智能体必须报“存疑”或“错误”。
|
||||
3. **无崩溃**:连续上传 20 个文件,系统不卡死,不白屏。
|
||||
@@ -1,57 +1,62 @@
|
||||
# RVW稿件审查模块迁移计划(v2.1 - 稳定迁移版)
|
||||
|
||||
> **鏂囨。鐗堟湰锛?* v2.1
|
||||
> **鍒涘缓鏃ユ湡锛?* 2026-01-07
|
||||
> **文档版本:** v2.1
|
||||
> **创建日期:** 2026-01-07
|
||||
> **最后更新:** 2026-01-07
|
||||
> **缁存姢鑰咃細** 寮€鍙戝洟闃?
|
||||
> **鏂囨。鐩<EFBFBD>殑锛?* 灏嗙ǹ浠跺<E6B5A0>鏌ュ姛鑳戒粠鏃ф灦鏋勫畨鍏ㄨ縼绉诲埌鏂版灦鏋勶紝鍚屾椂鏁村悎MVP鏍稿績闇€姹?
|
||||
> **维护者:** 开发团队
|
||||
> **文档目的:** 将稿件审查功能从旧架构安全迁移到新架构,同时整合MVP核心需求
|
||||
|
||||
---
|
||||
|
||||
## 📋 项目概述
|
||||
|
||||
### 1. 背景
|
||||
|
||||
绋夸欢瀹℃煡鍔熻兘鏄?025-10-30锛圖ay 30锛夌嫭绔嬪紑鍙戠殑鍔熻兘妯″潡锛岀洰鍓嶄綅浜?`backend/src/legacy/` 鍜?`frontend/` 鐩<EFBFBD>綍涓<EFBFBD>€傜幇闇€瑕侊細
|
||||
稿件审查功能是2025-10-30(Day 30)独立开发的功能模块,目前位于 `backend/src/legacy/` 和 `frontend/` 目录中。现需要:
|
||||
|
||||
1. **鏋舵瀯杩佺Щ**锛氳縼绉诲埌鏍囧噯鐨勬ā鍧楃洰褰曠粨鏋勶紙`modules/rvw`锛?2. **鍔熻兘鍗囩骇**锛氭暣鍚堛€婃櫤鑳芥湡鍒婂<E98D92>绋跨郴缁烳VP浜у搧闇€姹傛枃妗c€嬬殑鏍稿績鍔熻兘
|
||||
1. **架构迁移**:迁移到标准的模块目录结构(`modules/rvw`)
|
||||
2. **功能升级**:整合《智能期刊审稿系统MVP产品需求文档》的核心功能
|
||||
|
||||
### 2. 迁移原则
|
||||
|
||||
| 原则 | 说明 |
|
||||
|------|------|
|
||||
| **稳定优先** | 每个Phase完成后必须通过测试验证 |
|
||||
| **瀹夊叏鍙<EFBFBD>潬** | 鏁版嵁搴撹縼绉诲墠蹇呴』澶囦唤锛屾敮鎸佸洖婊?|
|
||||
| **安全可靠** | 数据库迁移前必须备份,支持回滚 |
|
||||
| **阶段验证** | 每个Phase有明确的验收标准 |
|
||||
| **鍚戝悗鍏煎<EFBFBD>** | 淇濈暀鏃<EFBFBD>PI杩囨浮鏈燂紝涓嶅奖鍝嶇幇鏈夊姛鑳?|
|
||||
| **娓愯繘寮?* | 鍏堟牳蹇冨悗鎵╁睍锛屽厛鍚庣<E98D9A>鍚庡墠绔?|
|
||||
| **向后兼容** | 保留旧API过渡期,不影响现有功能 |
|
||||
| **渐进式** | 先核心后扩展,先后端后前端 |
|
||||
|
||||
### 3. 功能范围
|
||||
|
||||
| 鍔熻兘 | 鏈<><E98F88>寮€鍙?| 鏁版嵁搴撴敮鎾?| 璇存槑 |
|
||||
| 功能 | 本次开发 | 数据库支撑 | 说明 |
|
||||
|------|:--------:|:----------:|------|
|
||||
| **鏍稿績AI璇勪及** | 鉁?| 鉁?| 绋跨害瑙勮寖鎬?鏂规硶瀛?|
|
||||
| **鎵归噺涓婁紶** | 鉁?| 鉁?| 澶氭枃浠朵笂浼?|
|
||||
| **瀹$ǹ宸ヤ綔鍙?* | 鉁?| 鉁?| 瀹借〃甯冨眬+绛涢€?|
|
||||
| **鏅鸿兘浣撻€夋嫨** | 鉁?| 鉁?| 鍙<>€?涓<>垨2涓?|
|
||||
| **鎵归噺鎿嶄綔** | 鉁?| 鉁?| 鎵归噺杩愯<E69DA9>瀹℃煡 |
|
||||
| **鐘舵€佺瓫閫?* | 鉁?| 鉁?| 鍏ㄩ儴/寰呭<E5AFB0>鐞?宸插畬鎴?|
|
||||
| PDF鎶ュ憡瀵煎嚭 | 鉁?| 鉁?| 浼樺寲鐜版湁鍔熻兘 |
|
||||
| PICO鍗$墖 | 鈴革笍 | 鉁?| **鏆備笉寮€鍙戯紝鏁版嵁搴撻<EFBFBD>鐣?* |
|
||||
| 绯荤粺璁剧疆 | 鈴革笍 | 鉁?| **鏆備笉寮€鍙戯紝鏁版嵁搴撻<EFBFBD>鐣?* |
|
||||
| 鍘嗗彶褰掓。 | 鈴革笍 | 鉁?| **鏆備笉寮€鍙戯紝鏁版嵁搴撻<EFBFBD>鐣?* |
|
||||
| 鐧诲綍椤甸潰 | 鈴革笍 | - | 鏆備笉寮€鍙?|
|
||||
| **核心AI评估** | ✅ | ✅ | 稿约规范性+方法学 |
|
||||
| **批量上传** | ✅ | ✅ | 多文件上传 |
|
||||
| **审稿工作台** | ✅ | ✅ | 宽表布局+筛选 |
|
||||
| **智能体选择** | ✅ | ✅ | 可选1个或2个 |
|
||||
| **批量操作** | ✅ | ✅ | 批量运行审查 |
|
||||
| **状态筛选** | ✅ | ✅ | 全部/待处理/已完成 |
|
||||
| PDF报告导出 | ✅ | ✅ | 优化现有功能 |
|
||||
| PICO卡片 | ⏸️ | ✅ | **暂不开发,数据库预留** |
|
||||
| 系统设置 | ⏸️ | ✅ | **暂不开发,数据库预留** |
|
||||
| 历史归档 | ⏸️ | ✅ | **暂不开发,数据库预留** |
|
||||
| 登录页面 | ⏸️ | - | 暂不开发 |
|
||||
|
||||
### 4. 智能体选择说明
|
||||
|
||||
鐢ㄦ埛鍙<EFBFBD>互鐏垫椿閫夋嫨杩愯<EFBFBD>鐨勬櫤鑳戒綋锛?
|
||||
用户可以灵活选择运行的智能体:
|
||||
|
||||
```
|
||||
閫夐」 A: 鍙<EFBFBD>€夋嫨銆岀ǹ绾﹁<EFBFBD>鑼冩€ф櫤鑳戒綋銆? 鈫?鍙<>繍琛岃<E7909B>鑼冩€ц瘎浼?閫夐」 B: 鍙<>€夋嫨銆屾柟娉曞<E5A889>缁熻<E7BC81>鏅鸿兘浣撱€? 鈫?鍙<>繍琛屾柟娉曞<E5A889>璇勪及
|
||||
閫夐」 C: 鍚屾椂閫夋嫨涓や釜鏅鸿兘浣? 鈫?鍚屾椂杩愯<E69DA9>涓ら」璇勪及锛堥粯璁わ級
|
||||
选项 A: 只选择「稿约规范性智能体」 → 只运行规范性评估
|
||||
选项 B: 只选择「方法学统计智能体」 → 只运行方法学评估
|
||||
选项 C: 同时选择两个智能体 → 同时运行两项评估(默认)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 馃搳 鏁版嵁搴撹<E690B4>璁★紙瀹屾暣鐗堬紝鏀<E7B49D>拺鏈<E68BBA>潵鎵╁睍锛?
|
||||
## 📊 数据库设计(完整版,支撑未来扩展)
|
||||
|
||||
### 1. 期刊配置表(预留,暂不使用)
|
||||
|
||||
```prisma
|
||||
@@ -79,16 +84,20 @@ model JournalConfig {
|
||||
model ReviewTask {
|
||||
id String @id @default(uuid())
|
||||
userId String @map("user_id")
|
||||
journalId String? @map("journal_id") // 棰勭暀锛氭湡鍒婂叧鑱?
|
||||
journalId String? @map("journal_id") // 预留:期刊关联
|
||||
|
||||
// 文件信息
|
||||
fileName String @map("file_name")
|
||||
fileSize Int @map("file_size")
|
||||
filePath String? @map("file_path")
|
||||
extractedText String @map("extracted_text")
|
||||
wordCount Int? @map("word_count")
|
||||
authorName String? @map("author_name") // 棰勭暀锛氫綔鑰呮彁鍙?
|
||||
// 鐘舵€佺<E282AC>鐞? status String @default("pending")
|
||||
// 鉁?鏅鸿兘浣撻€夋嫨锛氬彲閫?涓<>垨2涓? selectedAgents String[] @default(["editorial", "methodology"]) @map("selected_agents")
|
||||
authorName String? @map("author_name") // 预留:作者提取
|
||||
|
||||
// 状态管理
|
||||
status String @default("pending")
|
||||
// ✅ 智能体选择:可选1个或2个
|
||||
selectedAgents String[] @default(["editorial", "methodology"]) @map("selected_agents")
|
||||
|
||||
// 评估结果
|
||||
editorialReview Json? @map("editorial_review")
|
||||
@@ -102,13 +111,15 @@ model ReviewTask {
|
||||
// 预留:PICO提取(暂不使用)
|
||||
picoExtract Json? @map("pico_extract")
|
||||
|
||||
// 鍏冩暟鎹? modelUsed String? @map("model_used")
|
||||
// 元数据
|
||||
modelUsed String? @map("model_used")
|
||||
startedAt DateTime? @map("started_at")
|
||||
completedAt DateTime? @map("completed_at")
|
||||
durationSeconds Int? @map("duration_seconds")
|
||||
errorMessage String? @map("error_message")
|
||||
|
||||
// 棰勭暀锛氬綊妗e姛鑳斤紙鏆備笉浣跨敤锛? isArchived Boolean @default(false) @map("is_archived")
|
||||
// 预留:归档功能(暂不使用)
|
||||
isArchived Boolean @default(false) @map("is_archived")
|
||||
archivedAt DateTime? @map("archived_at")
|
||||
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
@@ -130,26 +141,29 @@ model ReviewTask {
|
||||
|
||||
### 3. 字段说明
|
||||
|
||||
| 瀛楁<EFBFBD> | 鏈<><E98F88>浣跨敤 | 棰勭暀鐢ㄩ€?|
|
||||
| 字段 | 本次使用 | 预留用途 |
|
||||
|------|:--------:|---------|
|
||||
| `journalId` | 鉂?| 绯荤粺璁剧疆锛氭湡鍒婂叧鑱?|
|
||||
| `authorName` | 鉂?| 鑷<>姩鎻愬彇浣滆€呭悕 |
|
||||
| `selectedAgents` | 鉁?| 鐢ㄦ埛閫夋嫨鐨勬櫤鑳戒綋 |
|
||||
| `editorialScore` | 鉁?| 鍒楄〃鏄剧ず瑙勮寖鎬у垎鏁?|
|
||||
| `methodologyStatus` | 鉁?| 鍒楄〃鏄剧ず鏂规硶瀛︾姸鎬?|
|
||||
| `picoExtract` | 鉂?| PICO鍗$墖鏁版嵁 |
|
||||
| `isArchived` | 鉂?| 鍘嗗彶褰掓。鍔熻兘 |
|
||||
| `archivedAt` | 鉂?| 褰掓。鏃堕棿 |
|
||||
| `journalId` | ❌ | 系统设置:期刊关联 |
|
||||
| `authorName` | ❌ | 自动提取作者名 |
|
||||
| `selectedAgents` | ✅ | 用户选择的智能体 |
|
||||
| `editorialScore` | ✅ | 列表显示规范性分数 |
|
||||
| `methodologyStatus` | ✅ | 列表显示方法学状态 |
|
||||
| `picoExtract` | ❌ | PICO卡片数据 |
|
||||
| `isArchived` | ❌ | 历史归档功能 |
|
||||
| `archivedAt` | ❌ | 归档时间 |
|
||||
|
||||
---
|
||||
|
||||
## 📋 安全迁移策略
|
||||
|
||||
### 1. 杩佺Щ鍓嶅噯澶?
|
||||
```bash
|
||||
# 1. 澶囦唤鏁版嵁搴?pg_dump -h localhost -U postgres -d airesearch -F c -f backup_before_rvw_migration.dump
|
||||
### 1. 迁移前准备
|
||||
|
||||
# 2. 璁板綍褰撳墠鏁版嵁閲?SELECT COUNT(*) FROM public.review_tasks;
|
||||
```bash
|
||||
# 1. 备份数据库
|
||||
pg_dump -h localhost -U postgres -d airesearch -F c -f backup_before_rvw_migration.dump
|
||||
|
||||
# 2. 记录当前数据量
|
||||
SELECT COUNT(*) FROM public.review_tasks;
|
||||
|
||||
# 3. 导出关键数据(可选)
|
||||
COPY public.review_tasks TO '/tmp/review_tasks_backup.csv' WITH CSV HEADER;
|
||||
@@ -166,49 +180,55 @@ ALTER TABLE review_schema.review_tasks SET SCHEMA public;
|
||||
DROP SCHEMA review_schema;
|
||||
```
|
||||
|
||||
### 3. 闃舵<EFBFBD>鎬ч獙璇?
|
||||
姣忎釜Phase瀹屾垚鍚庡繀椤婚€氳繃浠ヤ笅楠岃瘉锛?
|
||||
### 3. 阶段性验证
|
||||
|
||||
每个Phase完成后必须通过以下验证:
|
||||
|
||||
| Phase | 验证内容 | 验收标准 |
|
||||
|-------|---------|---------|
|
||||
| Phase 1 | 后端API测试 | 所有API返回正确,日志无ERROR |
|
||||
| Phase 2 | 鏁版嵁搴撹縼绉?| 鏁版嵁瀹屾暣锛屾煡璇㈡<E79287>甯革紝绱㈠紩鏈夋晥 |
|
||||
| Phase 2 | 数据库迁移 | 数据完整,查询正常,索引有效 |
|
||||
| Phase 3 | 前端功能测试 | 核心流程通顺,无白屏/报错 |
|
||||
| Phase 4 | 闆嗘垚娴嬭瘯 | 绔<>埌绔<E59F8C>祦绋嬫<E7BB8B>甯?|
|
||||
| Phase 4 | 集成测试 | 端到端流程正常 |
|
||||
| Phase 5 | 验收测试 | 符合MVP验收标准 |
|
||||
|
||||
---
|
||||
|
||||
## 馃搵 寮€鍙戜换鍔℃竻鍗?
|
||||
## 📋 开发任务清单
|
||||
|
||||
### Phase 1:后端模块迁移(2天)
|
||||
|
||||
#### Day 1 涓婂崍锛氬垱寤烘ā鍧楃粨鏋?+ 澶嶇敤鏍稿績浠g爜
|
||||
#### Day 1 上午:创建模块结构 + 复用核心代码
|
||||
|
||||
**1.1 创建目录结构**
|
||||
|
||||
```
|
||||
backend/src/modules/rvw/
|
||||
├── routes/
|
||||
鈹? 鈹斺攢鈹€ index.ts # 璺<EFBFBD>敱瀹氫箟
|
||||
│ └── index.ts # 路由定义
|
||||
├── controllers/
|
||||
鈹? 鈹斺攢鈹€ reviewController.ts # 鎺у埗鍣?鈹溾攢鈹€ services/
|
||||
鈹? 鈹溾攢鈹€ reviewService.ts # 涓绘湇鍔★紙澶嶇敤+鎵╁睍锛?鈹? 鈹溾攢鈹€ editorialService.ts # 绋跨害璇勪及锛堝<E9949B>鐢<EFBFBD>級
|
||||
鈹? 鈹斺攢鈹€ methodologyService.ts # 鏂规硶瀛﹁瘎浼帮紙澶嶇敤锛?鈹溾攢鈹€ types/
|
||||
鈹? 鈹斺攢鈹€ index.ts # 绫诲瀷瀹氫箟
|
||||
│ └── reviewController.ts # 控制器
|
||||
├── services/
|
||||
│ ├── reviewService.ts # 主服务(复用+扩展)
|
||||
│ ├── editorialService.ts # 稿约评估(复用)
|
||||
│ └── methodologyService.ts # 方法学评估(复用)
|
||||
├── types/
|
||||
│ └── index.ts # 类型定义
|
||||
├── prompts/
|
||||
鈹? 鈹溾攢鈹€ editorial_system.txt # 绋跨害Prompt
|
||||
鈹? 鈹斺攢鈹€ methodology_system.txt # 鏂规硶瀛<EFBFBD>rompt
|
||||
│ ├── editorial_system.txt # 稿约Prompt
|
||||
│ └── methodology_system.txt # 方法学Prompt
|
||||
└── index.ts # 模块入口
|
||||
```
|
||||
|
||||
- [ ] **1.1.1** 创建目录结构
|
||||
- [ ] **1.1.2** 澶嶅埗 `reviewEditorialStandards()` 鈫?`editorialService.ts`
|
||||
- [ ] **1.1.3** 澶嶅埗 `reviewMethodology()` 鈫?`methodologyService.ts`
|
||||
- [ ] **1.1.4** 澶嶅埗 `parseJSONFromLLMResponse()` 鈫?`utils.ts`
|
||||
- [ ] **1.1.2** 复制 `reviewEditorialStandards()` → `editorialService.ts`
|
||||
- [ ] **1.1.3** 复制 `reviewMethodology()` → `methodologyService.ts`
|
||||
- [ ] **1.1.4** 复制 `parseJSONFromLLMResponse()` → `utils.ts`
|
||||
- [ ] **1.1.5** 复制 Prompt 文件到模块内
|
||||
|
||||
**1.2 浜戝師鐢熸敼閫?*
|
||||
**1.2 云原生改造**
|
||||
|
||||
- [ ] **1.2.1** 鏇挎崲 `console.log` 鈫?`logger`
|
||||
- [ ] **1.2.1** 替换 `console.log` → `logger`
|
||||
- [ ] **1.2.2** 移除 Mock用户ID,集成JWT认证
|
||||
- [ ] **1.2.3** 使用 `process.env` 配置
|
||||
|
||||
@@ -222,7 +242,8 @@ export type AgentType = 'editorial' | 'methodology';
|
||||
|
||||
export interface RunReviewParams {
|
||||
taskId: string;
|
||||
agents: AgentType[]; // 鍙<EFBFBD>€?涓<>垨2涓?}
|
||||
agents: AgentType[]; // 可选1个或2个
|
||||
}
|
||||
|
||||
// services/reviewService.ts
|
||||
async function runReview(params: RunReviewParams) {
|
||||
@@ -233,7 +254,8 @@ async function runReview(params: RunReviewParams) {
|
||||
throw new Error('请至少选择一个智能体');
|
||||
}
|
||||
|
||||
// 鏇存柊浠诲姟鐘舵€? await prisma.reviewTask.update({
|
||||
// 更新任务状态
|
||||
await prisma.reviewTask.update({
|
||||
where: { id: taskId },
|
||||
data: {
|
||||
status: 'reviewing',
|
||||
@@ -279,7 +301,8 @@ function calculateOverallScore(editorial: any, methodology: any, agents: AgentTy
|
||||
// 两个都选:40% + 60%
|
||||
return editorial.overall_score * 0.4 + methodology.overall_score * 0.6;
|
||||
} else if (agents.includes('editorial') && editorial) {
|
||||
// 鍙<EFBFBD>€夎<EFBFBD>鑼冩€? return editorial.overall_score;
|
||||
// 只选规范性
|
||||
return editorial.overall_score;
|
||||
} else if (agents.includes('methodology') && methodology) {
|
||||
// 只选方法学
|
||||
return methodology.overall_score;
|
||||
@@ -291,8 +314,9 @@ function calculateOverallScore(editorial: any, methodology: any, agents: AgentTy
|
||||
- [ ] **1.3.1** 实现智能体选择类型定义
|
||||
- [ ] **1.3.2** 实现 `runReview()` 函数
|
||||
- [ ] **1.3.3** 实现综合分数计算逻辑
|
||||
- [ ] **1.3.4** 瀹炵幇鏂规硶瀛︾姸鎬佸垽鏂<EFBFBD>紙pass/warn/fail锛?
|
||||
#### Day 2 涓婂崍锛氭壒閲忔搷浣?+ API鎵╁睍
|
||||
- [ ] **1.3.4** 实现方法学状态判断(pass/warn/fail)
|
||||
|
||||
#### Day 2 上午:批量操作 + API扩展
|
||||
|
||||
**1.4 批量运行实现**
|
||||
|
||||
@@ -301,7 +325,8 @@ function calculateOverallScore(editorial: any, methodology: any, agents: AgentTy
|
||||
async function batchRunReview(params: BatchRunParams) {
|
||||
const { taskIds, agents } = params;
|
||||
|
||||
// 闄愬埗骞跺彂鏁? const MAX_CONCURRENT = 5;
|
||||
// 限制并发数
|
||||
const MAX_CONCURRENT = 5;
|
||||
const results = [];
|
||||
|
||||
for (let i = 0; i < taskIds.length; i += MAX_CONCURRENT) {
|
||||
@@ -317,8 +342,9 @@ async function batchRunReview(params: BatchRunParams) {
|
||||
```
|
||||
|
||||
- [ ] **1.4.1** 实现批量运行接口
|
||||
- [ ] **1.4.2** 瀹炵幇骞跺彂鎺у埗锛堟渶澶?涓<>級
|
||||
- [ ] **1.4.3** 瀹炵幇閿欒<EFBFBD>澶勭悊锛堝崟涓<EFBFBD>け璐ヤ笉褰卞搷鍏朵粬锛?
|
||||
- [ ] **1.4.2** 实现并发控制(最多5个)
|
||||
- [ ] **1.4.3** 实现错误处理(单个失败不影响其他)
|
||||
|
||||
**1.5 API路由定义**
|
||||
|
||||
```typescript
|
||||
@@ -338,52 +364,58 @@ export default async function rvwRoutes(fastify: FastifyInstance) {
|
||||
```
|
||||
|
||||
- [ ] **1.5.1** 实现路由定义
|
||||
- [ ] **1.5.2** 瀹炵幇鎺у埗鍣ㄦ柟娉?- [ ] **1.5.3** 娣诲姞璇锋眰楠岃瘉
|
||||
- [ ] **1.5.2** 实现控制器方法
|
||||
- [ ] **1.5.3** 添加请求验证
|
||||
|
||||
#### Day 2 涓嬪崍锛氭敞鍐岃矾鐢?+ Phase 1 楠岃瘉
|
||||
#### Day 2 下午:注册路由 + Phase 1 验证
|
||||
|
||||
**1.6 娉ㄥ唽鏂拌矾鐢?*
|
||||
**1.6 注册新路由**
|
||||
|
||||
```typescript
|
||||
// backend/src/index.ts
|
||||
import rvwRoutes from './modules/rvw/routes/index.js';
|
||||
|
||||
// 娉ㄥ唽鏂拌矾鐢憋紙v2锛?await fastify.register(rvwRoutes, { prefix: '/api/v1/rvw' });
|
||||
logger.info('鉁?RVW绋夸欢瀹℃煡璺<E785A1>敱宸叉敞鍐? /api/v1/rvw');
|
||||
// 注册新路由(v2)
|
||||
await fastify.register(rvwRoutes, { prefix: '/api/v2/rvw' });
|
||||
logger.info('✅ RVW稿件审查路由已注册: /api/v2/rvw');
|
||||
|
||||
// 淇濈暀鏃ц矾鐢憋紙鍏煎<EFBFBD>锛?await fastify.register(reviewRoutes, { prefix: '/api/v1' });
|
||||
logger.info('鉁?Legacy瀹$ǹ璺<C7B9>敱淇濈暀: /api/v1/review');
|
||||
// 保留旧路由(兼容)
|
||||
await fastify.register(reviewRoutes, { prefix: '/api/v1' });
|
||||
logger.info('✅ Legacy审稿路由保留: /api/v1/review');
|
||||
```
|
||||
|
||||
- [ ] **1.6.1** 娉ㄥ唽鏂拌矾鐢?- [ ] **1.6.2** 淇濈暀鏃ц矾鐢卞吋瀹?
|
||||
- [ ] **1.6.1** 注册新路由
|
||||
- [ ] **1.6.2** 保留旧路由兼容
|
||||
|
||||
**1.7 Phase 1 验证测试**
|
||||
|
||||
```http
|
||||
### 1. 创建任务
|
||||
POST {{baseUrl}}/api/v1/rvw/tasks
|
||||
POST {{baseUrl}}/api/v2/rvw/tasks
|
||||
Content-Type: multipart/form-data
|
||||
|
||||
# file: test.docx
|
||||
|
||||
### 2. 运行审查(只选规范性)
|
||||
POST {{baseUrl}}/api/v1/rvw/tasks/{{taskId}}/run
|
||||
POST {{baseUrl}}/api/v2/rvw/tasks/{{taskId}}/run
|
||||
Content-Type: application/json
|
||||
|
||||
{ "agents": ["editorial"] }
|
||||
|
||||
### 3. 杩愯<EFBFBD>瀹℃煡锛堝彧閫夋柟娉曞<EFBFBD>锛?POST {{baseUrl}}/api/v1/rvw/tasks/{{taskId}}/run
|
||||
### 3. 运行审查(只选方法学)
|
||||
POST {{baseUrl}}/api/v2/rvw/tasks/{{taskId}}/run
|
||||
Content-Type: application/json
|
||||
|
||||
{ "agents": ["methodology"] }
|
||||
|
||||
### 4. 运行审查(两个都选)
|
||||
POST {{baseUrl}}/api/v1/rvw/tasks/{{taskId}}/run
|
||||
POST {{baseUrl}}/api/v2/rvw/tasks/{{taskId}}/run
|
||||
Content-Type: application/json
|
||||
|
||||
{ "agents": ["editorial", "methodology"] }
|
||||
|
||||
### 5. 批量运行
|
||||
POST {{baseUrl}}/api/v1/rvw/tasks/batch/run
|
||||
POST {{baseUrl}}/api/v2/rvw/tasks/batch/run
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
@@ -392,22 +424,22 @@ Content-Type: application/json
|
||||
}
|
||||
|
||||
### 6. 获取任务列表
|
||||
GET {{baseUrl}}/api/v1/rvw/tasks?status=pending&limit=10
|
||||
GET {{baseUrl}}/api/v2/rvw/tasks?status=pending&limit=10
|
||||
|
||||
### 7. 获取报告
|
||||
GET {{baseUrl}}/api/v1/rvw/tasks/{{taskId}}/report
|
||||
GET {{baseUrl}}/api/v2/rvw/tasks/{{taskId}}/report
|
||||
```
|
||||
|
||||
**Phase 1 楠屾敹鏍囧噯锛?*
|
||||
**Phase 1 验收标准:**
|
||||
|
||||
| 娴嬭瘯椤?| 棰勬湡缁撴灉 | 閫氳繃 |
|
||||
| 测试项 | 预期结果 | 通过 |
|
||||
|--------|---------|:----:|
|
||||
| 鍒涘缓浠诲姟 | 杩斿洖taskId锛岀姸鎬乸ending | 猬?|
|
||||
| 鍙<EFBFBD>€夎<EFBFBD>鑼冩€?| 鍙<>湁editorialReview鏈夊€?| 猬?|
|
||||
| 鍙<EFBFBD>€夋柟娉曞<EFBFBD> | 鍙<>湁methodologyReview鏈夊€?| 猬?|
|
||||
| 涓や釜閮介€?| 涓や釜Review閮芥湁鍊?| 猬?|
|
||||
| 鎵归噺杩愯<EFBFBD> | 澶氫釜浠诲姟閮藉畬鎴?| 猬?|
|
||||
| 鏃<EFBFBD>PI鍏煎<EFBFBD> | `/api/v1/review/*` 姝e父 | 猬?|
|
||||
| 创建任务 | 返回taskId,状态pending | ⬜ |
|
||||
| 只选规范性 | 只有editorialReview有值 | ⬜ |
|
||||
| 只选方法学 | 只有methodologyReview有值 | ⬜ |
|
||||
| 两个都选 | 两个Review都有值 | ⬜ |
|
||||
| 批量运行 | 多个任务都完成 | ⬜ |
|
||||
| 旧API兼容 | `/api/v1/review/*` 正常 | ⬜ |
|
||||
|
||||
- [ ] **1.7.1** 编写测试用例
|
||||
- [ ] **1.7.2** 执行测试
|
||||
@@ -416,11 +448,12 @@ GET {{baseUrl}}/api/v1/rvw/tasks/{{taskId}}/report
|
||||
|
||||
---
|
||||
|
||||
### Phase 2锛氭暟鎹<EFBFBD>簱Schema杩佺Щ锛?.5澶╋級
|
||||
### Phase 2:数据库Schema迁移(0.5天)
|
||||
|
||||
#### 迁移前:备份
|
||||
|
||||
- [ ] **2.1** 澶囦唤鏁版嵁搴? ```bash
|
||||
- [ ] **2.1** 备份数据库
|
||||
```bash
|
||||
pg_dump -h localhost -U postgres -d airesearch -F c -f backup_phase2.dump
|
||||
```
|
||||
|
||||
@@ -436,7 +469,8 @@ GET {{baseUrl}}/api/v1/rvw/tasks/{{taskId}}/report
|
||||
-- 1. 创建新Schema
|
||||
CREATE SCHEMA IF NOT EXISTS review_schema;
|
||||
|
||||
-- 2. 鍒涘缓鏈熷垔閰嶇疆琛<EFBFBD>紙棰勭暀锛? CREATE TABLE review_schema.journal_configs (
|
||||
-- 2. 创建期刊配置表(预留)
|
||||
CREATE TABLE review_schema.journal_configs (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
name VARCHAR(255) NOT NULL,
|
||||
logo_url TEXT,
|
||||
@@ -449,7 +483,8 @@ GET {{baseUrl}}/api/v1/rvw/tasks/{{taskId}}/report
|
||||
-- 3. 迁移review_tasks表到新Schema
|
||||
ALTER TABLE public.review_tasks SET SCHEMA review_schema;
|
||||
|
||||
-- 4. 娣诲姞鏂板瓧娈碉紙鏀<EFBFBD>寔鏈<EFBFBD>潵鎵╁睍锛? ALTER TABLE review_schema.review_tasks
|
||||
-- 4. 添加新字段(支持未来扩展)
|
||||
ALTER TABLE review_schema.review_tasks
|
||||
ADD COLUMN IF NOT EXISTS journal_id UUID REFERENCES review_schema.journal_configs(id),
|
||||
ADD COLUMN IF NOT EXISTS author_name VARCHAR(255),
|
||||
ADD COLUMN IF NOT EXISTS selected_agents TEXT[] DEFAULT ARRAY['editorial', 'methodology'],
|
||||
@@ -470,7 +505,8 @@ GET {{baseUrl}}/api/v1/rvw/tasks/{{taskId}}/report
|
||||
|
||||
- [ ] **2.4** 更新Prisma Schema
|
||||
- 修改 `@@schema("review_schema")`
|
||||
- 娣诲姞鏂板瓧娈?
|
||||
- 添加新字段
|
||||
|
||||
- [ ] **2.5** 执行迁移
|
||||
```bash
|
||||
npx prisma migrate dev --name rvw_schema_migration
|
||||
@@ -478,8 +514,10 @@ GET {{baseUrl}}/api/v1/rvw/tasks/{{taskId}}/report
|
||||
|
||||
#### Phase 2 验证
|
||||
|
||||
- [ ] **2.6** 楠岃瘉鏁版嵁瀹屾暣鎬? ```sql
|
||||
-- 纭<><E7BAAD>鏁版嵁閲忎竴鑷? SELECT COUNT(*) FROM review_schema.review_tasks;
|
||||
- [ ] **2.6** 验证数据完整性
|
||||
```sql
|
||||
-- 确认数据量一致
|
||||
SELECT COUNT(*) FROM review_schema.review_tasks;
|
||||
|
||||
-- 确认字段可用
|
||||
SELECT id, selected_agents, editorial_score FROM review_schema.review_tasks LIMIT 5;
|
||||
@@ -491,15 +529,15 @@ GET {{baseUrl}}/api/v1/rvw/tasks/{{taskId}}/report
|
||||
LIMIT 5;
|
||||
```
|
||||
|
||||
**Phase 2 楠屾敹鏍囧噯锛?*
|
||||
**Phase 2 验收标准:**
|
||||
|
||||
| 娴嬭瘯椤?| 棰勬湡缁撴灉 | 閫氳繃 |
|
||||
| 测试项 | 预期结果 | 通过 |
|
||||
|--------|---------|:----:|
|
||||
| 鏁版嵁杩佺Щ | 鏁版嵁閲忎竴鑷?| 猬?|
|
||||
| 鏂板瓧娈?| 瀛楁<E7809B>瀛樺湪涓斿彲鐢?| 猬?|
|
||||
| 澶栭敭鍏崇郴 | 鍏宠仈姝e父 | 猬?|
|
||||
| 绱㈠紩鏈夋晥 | 鏌ヨ<E98F8C>鎬ц兘姝e父 | 猬?|
|
||||
| API姝e父 | 鍚庣<E98D9A>API浠嶅彲鐢?| 猬?|
|
||||
| 数据迁移 | 数据量一致 | ⬜ |
|
||||
| 新字段 | 字段存在且可用 | ⬜ |
|
||||
| 外键关系 | 关联正常 | ⬜ |
|
||||
| 索引有效 | 查询性能正常 | ⬜ |
|
||||
| API正常 | 后端API仍可用 | ⬜ |
|
||||
|
||||
- [ ] **2.7** 确认Phase 2通过
|
||||
|
||||
@@ -507,33 +545,38 @@ GET {{baseUrl}}/api/v1/rvw/tasks/{{taskId}}/report
|
||||
|
||||
### Phase 3:前端重构(3天)
|
||||
|
||||
#### Day 3锛氭ā鍧楃粨鏋?+ API灞?
|
||||
#### Day 3:模块结构 + API层
|
||||
|
||||
**3.1 创建模块结构**
|
||||
|
||||
```
|
||||
frontend-v2/src/modules/rvw/
|
||||
├── api/
|
||||
鈹? 鈹斺攢鈹€ reviewApi.ts # API灏佽<EFBFBD>
|
||||
│ └── reviewApi.ts # API封装
|
||||
├── components/
|
||||
鈹? 鈹溾攢鈹€ ScoreCard.tsx # 澶嶇敤
|
||||
鈹? 鈹溾攢鈹€ EditorialReview.tsx # 澶嶇敤
|
||||
鈹? 鈹溾攢鈹€ MethodologyReview.tsx # 澶嶇敤
|
||||
鈹? 鈹溾攢鈹€ AgentSelector.tsx # 馃啎 鏅鸿兘浣撻€夋嫨寮圭獥
|
||||
鈹? 鈹溾攢鈹€ BatchToolbar.tsx # 馃啎 鎵归噺鎿嶄綔鏍?鈹? 鈹溾攢鈹€ TaskTable.tsx # 馃啎 浠诲姟鍒楄〃琛ㄦ牸
|
||||
鈹? 鈹斺攢鈹€ StatusFilter.tsx # 馃啎 鐘舵€佺瓫閫?鈹溾攢鈹€ pages/
|
||||
鈹? 鈹溾攢鈹€ ReviewDashboard.tsx # 馃啎 瀹$ǹ宸ヤ綔鍙?鈹? 鈹斺攢鈹€ ReviewDetail.tsx # 鎶ュ憡璇︽儏锛堜紭鍖栵級
|
||||
│ ├── ScoreCard.tsx # 复用
|
||||
│ ├── EditorialReview.tsx # 复用
|
||||
│ ├── MethodologyReview.tsx # 复用
|
||||
│ ├── AgentSelector.tsx # 🆕 智能体选择弹窗
|
||||
│ ├── BatchToolbar.tsx # 🆕 批量操作栏
|
||||
│ ├── TaskTable.tsx # 🆕 任务列表表格
|
||||
│ └── StatusFilter.tsx # 🆕 状态筛选
|
||||
├── pages/
|
||||
│ ├── ReviewDashboard.tsx # 🆕 审稿工作台
|
||||
│ └── ReviewDetail.tsx # 报告详情(优化)
|
||||
├── hooks/
|
||||
鈹? 鈹溾攢鈹€ useReviewTask.ts
|
||||
鈹? 鈹斺攢鈹€ useBatchOperation.ts
|
||||
│ ├── useReviewTask.ts
|
||||
│ └── useBatchOperation.ts
|
||||
├── stores/
|
||||
鈹? 鈹斺攢鈹€ useReviewStore.ts
|
||||
│ └── useReviewStore.ts
|
||||
├── types/
|
||||
鈹? 鈹斺攢鈹€ index.ts
|
||||
│ └── index.ts
|
||||
└── index.tsx
|
||||
```
|
||||
|
||||
- [ ] **3.1.1** 创建目录结构
|
||||
- [ ] **3.1.2** 澶嶇敤鐜版湁缁勪欢锛圫coreCard銆丒ditorialReview銆丮ethodologyReview锛?
|
||||
- [ ] **3.1.2** 复用现有组件(ScoreCard、EditorialReview、MethodologyReview)
|
||||
|
||||
**3.2 API封装**
|
||||
|
||||
```typescript
|
||||
@@ -542,12 +585,12 @@ export type AgentType = 'editorial' | 'methodology';
|
||||
|
||||
// 运行审查(支持选择智能体)
|
||||
export async function runReview(taskId: string, agents: AgentType[]): Promise<void> {
|
||||
return axios.post(`/api/v1/rvw/tasks/${taskId}/run`, { agents });
|
||||
return axios.post(`/api/v2/rvw/tasks/${taskId}/run`, { agents });
|
||||
}
|
||||
|
||||
// 批量运行
|
||||
export async function batchRunReview(taskIds: string[], agents: AgentType[]): Promise<void> {
|
||||
return axios.post('/api/v1/rvw/tasks/batch/run', { taskIds, agents });
|
||||
return axios.post('/api/v2/rvw/tasks/batch/run', { taskIds, agents });
|
||||
}
|
||||
|
||||
// 获取任务列表(带筛选)
|
||||
@@ -558,25 +601,30 @@ export interface TaskListParams {
|
||||
}
|
||||
|
||||
export async function getTaskList(params: TaskListParams): Promise<TaskListResponse> {
|
||||
return axios.get('/api/v1/rvw/tasks', { params });
|
||||
return axios.get('/api/v2/rvw/tasks', { params });
|
||||
}
|
||||
```
|
||||
|
||||
- [ ] **3.2.1** 实现API封装
|
||||
- [ ] **3.2.2** 实现类型定义
|
||||
|
||||
#### Day 4锛氭牳蹇冮〉闈㈠紑鍙?
|
||||
#### Day 4:核心页面开发
|
||||
|
||||
**3.3 智能体选择弹窗**
|
||||
|
||||
```tsx
|
||||
// components/AgentSelector.tsx
|
||||
interface AgentSelectorProps {
|
||||
visible: boolean;
|
||||
taskIds: string[]; // 鏀<EFBFBD>寔鍗曚釜鎴栧<EFBFBD>涓? onConfirm: (agents: AgentType[]) => void;
|
||||
taskIds: string[]; // 支持单个或多个
|
||||
onConfirm: (agents: AgentType[]) => void;
|
||||
onCancel: () => void;
|
||||
}
|
||||
|
||||
// 寮圭獥鍐呭<EFBFBD>锛?// 鉁?绋跨害瑙勮寖鎬ф櫤鑳戒綋锛堥粯璁ら€変腑锛?// 鏍煎紡銆佸弬鑰冩枃鐚<E69E83>€佸浘鐗囨<E99097>鏌?// 鈽?鏂规硶瀛︾粺璁℃櫤鑳戒綋
|
||||
// 弹窗内容:
|
||||
// ✅ 稿约规范性智能体(默认选中)
|
||||
// 格式、参考文献、图片检查
|
||||
// ☐ 方法学统计智能体
|
||||
// DeepSeek 深度逻辑推理
|
||||
//
|
||||
// 提示:可选择1个或同时选择2个智能体
|
||||
@@ -585,21 +633,37 @@ interface AgentSelectorProps {
|
||||
```
|
||||
|
||||
- [ ] **3.3.1** 实现智能体选择弹窗
|
||||
- [ ] **3.3.2** 鏀<EFBFBD>寔鍗曢€夊拰澶氶€?- [ ] **3.3.3** 榛樿<E6A69B>閫変腑瑙勮寖鎬ф櫤鑳戒綋
|
||||
- [ ] **3.3.2** 支持单选和多选
|
||||
- [ ] **3.3.3** 默认选中规范性智能体
|
||||
|
||||
**3.4 瀹$ǹ宸ヤ綔鍙?*
|
||||
**3.4 审稿工作台**
|
||||
|
||||
```
|
||||
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹? Header: [Logo] 鏅鸿兘瀹$ǹ绯荤粺 [涓婁紶鏂扮ǹ浠禲 鈹?鈹溾攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹? Filter: [鍏ㄩ儴|寰呭<E5AFB0>鐞唡宸插畬鎴怾 鈹?鈹溾攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹? 鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹?鈹? 鈹? 鈽? 鏂囦欢鍚嶇О/淇℃伅 涓婁紶鏃堕棿 瀹$ǹ缁村害 缁撴灉鎽樿<E98EBD> 鎿嶄綔 鈹? 鈹?鈹? 鈹? 鈽? 鏇块浄鍒╃彔鍗曟姉...pdf 10:30 [瑙勮寖][鏂规硶] 92鍒? [鏌ョ湅] 鈹?鈹? 鈹? 鈽? 楂樿<E6A582>鍘嬭嵂鐗?..docx 鍒氬垰 [鏈<>繍琛宂 绛夊緟... [寮€濮媇 鈹?鈹? 鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹?鈹溾攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹? [Batch Toolbar: 3涓<33>枃浠跺凡閫変腑 | 杩愯<E69DA9>鏅鸿兘瀹$ǹ | 鉁昡 鈹?鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?```
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ Header: [Logo] 智能审稿系统 [上传新稿件] │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ Filter: [全部|待处理|已完成] │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ ┌───────────────────────────────────────────────────────────┐ │
|
||||
│ │ ☐ 文件名称/信息 上传时间 审稿维度 结果摘要 操作 │ │
|
||||
│ │ ☐ 替雷利珠单抗...pdf 10:30 [规范][方法] 92分 [查看] │
|
||||
│ │ ☐ 高血压药物...docx 刚刚 [未运行] 等待... [开始] │
|
||||
│ └───────────────────────────────────────────────────────────┘ │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ [Batch Toolbar: 3个文件已选中 | 运行智能审稿 | ✕] │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
- [ ] **3.4.1** 实现页面布局
|
||||
- [ ] **3.4.2** 实现任务列表表格
|
||||
- [ ] **3.4.3** 瀹炵幇鐘舵€佺瓫閫?- [ ] **3.4.4** 瀹炵幇鎵归噺鎿嶄綔鏍?
|
||||
#### Day 5锛氭姤鍛婅<E98D9B>鎯?+ Phase 3 楠岃瘉
|
||||
- [ ] **3.4.3** 实现状态筛选
|
||||
- [ ] **3.4.4** 实现批量操作栏
|
||||
|
||||
**3.5 鎶ュ憡璇︽儏椤?*
|
||||
#### Day 5:报告详情 + Phase 3 验证
|
||||
|
||||
- [ ] **3.5.1** 瀹炵幇Tab鍒囨崲锛堣<E9949B>鑼冩€?鏂规硶瀛︼級
|
||||
**3.5 报告详情页**
|
||||
|
||||
- [ ] **3.5.1** 实现Tab切换(规范性/方法学)
|
||||
- [ ] **3.5.2** 复用评估详情组件
|
||||
- [ ] **3.5.3** 根据选择的智能体显示对应Tab
|
||||
- [ ] **3.5.4** 实现导出报告按钮
|
||||
@@ -622,14 +686,14 @@ interface AgentSelectorProps {
|
||||
|
||||
**Phase 3 验证测试**
|
||||
|
||||
| 娴嬭瘯椤?| 棰勬湡缁撴灉 | 閫氳繃 |
|
||||
| 测试项 | 预期结果 | 通过 |
|
||||
|--------|---------|:----:|
|
||||
| 椤甸潰鍔犺浇 | 宸ヤ綔鍙版<E98D99>甯告樉绀?| 猬?|
|
||||
| 鏂囦欢涓婁紶 | 鏀<>寔澶氭枃浠?| 猬?|
|
||||
| 鏅鸿兘浣撻€夋嫨 | 鍙<>€?涓<>垨2涓?| 猬?|
|
||||
| 鎵归噺鎿嶄綔 | 鎵归噺杩愯<E69DA9>鎴愬姛 | 猬?|
|
||||
| 鐘舵€佺瓫閫?| 绛涢€夌粨鏋滄<E98F8B>纭?| 猬?|
|
||||
| 鎶ュ憡鏌ョ湅 | 鏄剧ず瀵瑰簲璇勪及缁撴灉 | 猬?|
|
||||
| 页面加载 | 工作台正常显示 | ⬜ |
|
||||
| 文件上传 | 支持多文件 | ⬜ |
|
||||
| 智能体选择 | 可选1个或2个 | ⬜ |
|
||||
| 批量操作 | 批量运行成功 | ⬜ |
|
||||
| 状态筛选 | 筛选结果正确 | ⬜ |
|
||||
| 报告查看 | 显示对应评估结果 | ⬜ |
|
||||
|
||||
- [ ] **3.7** 确认Phase 3通过
|
||||
|
||||
@@ -637,41 +701,46 @@ interface AgentSelectorProps {
|
||||
|
||||
### Phase 4:集成测试(1天)
|
||||
|
||||
**4.1 绔<EFBFBD>埌绔<EFBFBD>祴璇?*
|
||||
**4.1 端到端测试**
|
||||
|
||||
| 测试场景 | 步骤 | 预期结果 |
|
||||
|---------|------|---------|
|
||||
| 鍗曟枃浠?鍗曟櫤鑳戒綋 | 涓婁紶鈫掗€夎<E282AC>鑼冩€р啋鏌ョ湅 | 鍙<>樉绀鸿<E7BB80>鑼冩€ф姤鍛?|
|
||||
| 鍗曟枃浠?鍙屾櫤鑳戒綋 | 涓婁紶鈫掗€変袱涓<E8A2B1>啋鏌ョ湅 | 鏄剧ず涓や釜鎶ュ憡Tab |
|
||||
| 单文件+单智能体 | 上传→选规范性→查看 | 只显示规范性报告 |
|
||||
| 单文件+双智能体 | 上传→选两个→查看 | 显示两个报告Tab |
|
||||
| 批量+双智能体 | 上传3个→批量运行 | 3个都完成 |
|
||||
| 鐘舵€佺瓫閫?| 涓婁紶鈫掔瓫閫夊緟澶勭悊 | 姝g‘杩囨护 |
|
||||
| 状态筛选 | 上传→筛选待处理 | 正确过滤 |
|
||||
|
||||
- [ ] **4.1.1** 执行端到端测试
|
||||
- [ ] **4.1.2** 修复发现的问题
|
||||
|
||||
- [ ] **4.1.1** 鎵ц<E98EB5>绔<EFBFBD>埌绔<E59F8C>祴璇?- [ ] **4.1.2** 淇<><E6B787>鍙戠幇鐨勯棶棰?
|
||||
**4.2 性能测试**
|
||||
|
||||
| 指标 | 目标 | 实际 |
|
||||
|------|------|------|
|
||||
| 鍒楄〃鍔犺浇 | < 1绉?| 猬?|
|
||||
| 鍗曟枃浠跺<EFBFBD>鏌?| < 2鍒嗛挓 | 猬?|
|
||||
| 5鏂囦欢骞跺彂 | < 5鍒嗛挓 | 猬?|
|
||||
| 列表加载 | < 1秒 | ⬜ |
|
||||
| 单文件审查 | < 2分钟 | ⬜ |
|
||||
| 5文件并发 | < 5分钟 | ⬜ |
|
||||
|
||||
- [ ] **4.2.1** 执行性能测试
|
||||
|
||||
**4.3 鍏煎<EFBFBD>鎬ф祴璇?*
|
||||
**4.3 兼容性测试**
|
||||
|
||||
- [ ] **4.3.1** Chrome浏览器测试
|
||||
- [ ] **4.3.2** Edge浏览器测试
|
||||
- [ ] **4.3.3** 旧API兼容性确认
|
||||
|
||||
- [ ] **4.3.1** Chrome娴忚<E5A8B4>鍣ㄦ祴璇?- [ ] **4.3.2** Edge娴忚<E5A8B4>鍣ㄦ祴璇?- [ ] **4.3.3** 鏃<>PI鍏煎<E98D8F>鎬х‘璁?
|
||||
---
|
||||
|
||||
### Phase 5锛氶獙鏀朵笌涓婄嚎锛?.5澶╋級
|
||||
### Phase 5:验收与上线(0.5天)
|
||||
|
||||
**5.1 MVP验收标准**
|
||||
|
||||
| 楠屾敹椤?| 棰勬湡缁撴灉 | 閫氳繃 |
|
||||
| 验收项 | 预期结果 | 通过 |
|
||||
|--------|---------|:----:|
|
||||
| 娴佺▼閫?| 5涓狿DF锛?鍒嗛挓鍐呭叏閮ㄥ畬鎴?| 猬?|
|
||||
| 瑙勮寖鎬у噯纭?| 鍒犳帀鎽樿<E98EBD>缁撹<E7BC81>蹇呴』鎶ラ敊 | 猬?|
|
||||
| 鏂规硶瀛﹀噯纭?| 娣锋穯缁熻<E7BC81>鏂规硶蹇呴』鎶ュ瓨鐤?| 猬?|
|
||||
| 鏃犲穿婧?| 杩炵画涓婁紶20涓<30>笉鍗℃<E98D97> | 猬?|
|
||||
| 流程通 | 5个PDF,3分钟内全部完成 | ⬜ |
|
||||
| 规范性准确 | 删掉摘要结论必须报错 | ⬜ |
|
||||
| 方法学准确 | 混淆统计方法必须报存疑 | ⬜ |
|
||||
| 无崩溃 | 连续上传20个不卡死 | ⬜ |
|
||||
|
||||
- [ ] **5.1.1** 执行验收测试
|
||||
- [ ] **5.1.2** 编写验收报告
|
||||
@@ -680,19 +749,20 @@ interface AgentSelectorProps {
|
||||
|
||||
- [ ] **5.2.1** 更新文档
|
||||
- [ ] **5.2.2** 通知相关人员
|
||||
- [ ] **5.2.3** 鐩戞帶涓婄嚎鍚庣姸鎬?
|
||||
- [ ] **5.2.3** 监控上线后状态
|
||||
|
||||
---
|
||||
|
||||
## 📅 时间估算
|
||||
|
||||
| Phase | 浠诲姟 | 棰勪及宸ユ椂 | 楠岃瘉鐐?|
|
||||
| Phase | 任务 | 预估工时 | 验证点 |
|
||||
|-------|------|---------|--------|
|
||||
| **Phase 1** | 鍚庣<EFBFBD>妯″潡杩佺Щ | 2澶?| 鉁?API娴嬭瘯閫氳繃 |
|
||||
| **Phase 2** | 鏁版嵁搴撹縼绉?| 0.5澶?| 鉁?鏁版嵁瀹屾暣鎬ч獙璇?|
|
||||
| **Phase 3** | 鍓嶇<EFBFBD>閲嶆瀯 | 3澶?| 鉁?鍔熻兘娴嬭瘯閫氳繃 |
|
||||
| **Phase 4** | 闆嗘垚娴嬭瘯 | 1澶?| 鉁?绔<>埌绔<E59F8C>祴璇曢€氳繃 |
|
||||
| **Phase 5** | 楠屾敹涓婄嚎 | 0.5澶?| 鉁?MVP楠屾敹閫氳繃 |
|
||||
| **鎬昏<EFBFBD>** | - | **7澶?* | - |
|
||||
| **Phase 1** | 后端模块迁移 | 2天 | ✓ API测试通过 |
|
||||
| **Phase 2** | 数据库迁移 | 0.5天 | ✓ 数据完整性验证 |
|
||||
| **Phase 3** | 前端重构 | 3天 | ✓ 功能测试通过 |
|
||||
| **Phase 4** | 集成测试 | 1天 | ✓ 端到端测试通过 |
|
||||
| **Phase 5** | 验收上线 | 0.5天 | ✓ MVP验收通过 |
|
||||
| **总计** | - | **7天** | - |
|
||||
|
||||
---
|
||||
|
||||
@@ -700,38 +770,41 @@ interface AgentSelectorProps {
|
||||
|
||||
| 功能 | 预留字段 | 后续计划 |
|
||||
|------|---------|---------|
|
||||
| **PICO鍗$墖** | `pico_extract` | 鏂规硶瀛﹁瘎浼版墿灞?|
|
||||
| **绯荤粺璁剧疆** | `JournalConfig`琛?| 鏈熷垔Logo/妯″瀷閰嶇疆 |
|
||||
| **PICO卡片** | `pico_extract` | 方法学评估扩展 |
|
||||
| **系统设置** | `JournalConfig`表 | 期刊Logo/模型配置 |
|
||||
| **历史归档** | `is_archived`, `archived_at` | 自动归档7天前数据 |
|
||||
| **鐧诲綍椤甸潰** | - | 鐙<EFBFBD>珛浜у搧鏃跺紑鍙?|
|
||||
| **登录页面** | - | 独立产品时开发 |
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 风险控制
|
||||
|
||||
### 1. 鏁版嵁搴撹縼绉婚<EFBFBD>闄?
|
||||
### 1. 数据库迁移风险
|
||||
|
||||
| 风险 | 概率 | 影响 | 控制措施 |
|
||||
|------|------|------|---------|
|
||||
| 鏁版嵁涓㈠け | 浣?| 楂?| 杩佺Щ鍓嶅<E98D93>浠?|
|
||||
| 杩佺Щ澶辫触 | 涓?| 涓?| 鍑嗗<E98D91>鍥炴粴SQL |
|
||||
| 鎬ц兘涓嬮檷 | 浣?| 涓?| 楠岃瘉绱㈠紩鏈夋晥鎬?|
|
||||
| 数据丢失 | 低 | 高 | 迁移前备份 |
|
||||
| 迁移失败 | 中 | 中 | 准备回滚SQL |
|
||||
| 性能下降 | 低 | 中 | 验证索引有效性 |
|
||||
|
||||
### 2. 功能回归风险
|
||||
|
||||
| 风险 | 概率 | 影响 | 控制措施 |
|
||||
|------|------|------|---------|
|
||||
| 鏃<EFBFBD>PI涓<EFBFBD>柇 | 浣?| 楂?| 淇濈暀v1璺<31>敱 |
|
||||
| 璇勪及缁撴灉寮傚父 | 浣?| 楂?| 瀵规瘮娴嬭瘯缁撴灉 |
|
||||
| 鍓嶇<EFBFBD>鐧藉睆 | 涓?| 涓?| 闃舵<E99783>鎬ф祴璇?|
|
||||
| 旧API中断 | 低 | 高 | 保留v1路由 |
|
||||
| 评估结果异常 | 低 | 高 | 对比测试结果 |
|
||||
| 前端白屏 | 中 | 中 | 阶段性测试 |
|
||||
|
||||
### 3. 回滚计划
|
||||
|
||||
```bash
|
||||
# 濡傛灉闇€瑕佸洖婊氬埌杩佺Щ鍓嶇姸鎬?
|
||||
# 如果需要回滚到迁移前状态
|
||||
|
||||
# 1. 停止服务
|
||||
pm2 stop all
|
||||
|
||||
# 2. 鍥炴粴鏁版嵁搴?pg_restore -h localhost -U postgres -d airesearch -c backup_phase2.dump
|
||||
# 2. 回滚数据库
|
||||
pg_restore -h localhost -U postgres -d airesearch -c backup_phase2.dump
|
||||
|
||||
# 3. 切换到旧代码分支
|
||||
git checkout main
|
||||
@@ -742,14 +815,15 @@ pm2 start all
|
||||
|
||||
---
|
||||
|
||||
## 馃摎 鍙傝€冩枃妗?
|
||||
- [鏅鸿兘鏈熷垔瀹$ǹ绯荤粺MVP PRD](../01-闇€姹傚垎鏋?鏅鸿兘鏈熷垔瀹$ǹ绯荤粺%20MVP%20浜у搧闇€姹傛枃妗?md)
|
||||
- [鏅鸿兘瀹$ǹV7鍘熷瀷](../01-闇€姹傚垎鏋?鏅鸿兘瀹$ǹV7.html)
|
||||
- [浜戝師鐢熷紑鍙戣<EFBFBD>鑼僝(../../04-寮€鍙戣<E98D99>鑼?08-浜戝師鐢熷紑鍙戣<E98D99>鑼?md)
|
||||
- [鐜版湁绯荤粺鎶€鏈<EFBFBD>懜搴曟姤鍛奭(../../00-椤圭洰姒傝堪/鐜版湁绯荤粺鎶€鏈<E282AC>懜搴曟姤鍛?md)
|
||||
## 📚 参考文档
|
||||
|
||||
- [智能期刊审稿系统MVP PRD](../01-需求分析/智能期刊审稿系统%20MVP%20产品需求文档.md)
|
||||
- [智能审稿V7原型](../01-需求分析/智能审稿V7.html)
|
||||
- [云原生开发规范](../../04-开发规范/08-云原生开发规范.md)
|
||||
- [现有系统技术摸底报告](../../00-项目概述/现有系统技术摸底报告.md)
|
||||
|
||||
---
|
||||
|
||||
**鏂囨。鐗堟湰锛?* v2.1
|
||||
**文档版本:** v2.1
|
||||
**最后更新:** 2026-01-07
|
||||
**下一步:** 确认后开始Phase 1
|
||||
|
||||
@@ -1,37 +1,37 @@
|
||||
# RVW - 稿件审查系统
|
||||
|
||||
> **妯″潡浠e彿锛?* RVW (Review)
|
||||
> **寮€鍙戠姸鎬侊細** 鈿?鏍稿績鍔熻兘宸插畬鎴愶紝寰呮墿灞?
|
||||
> **鍟嗕笟浠峰€硷細** 猸愨瓙猸愨瓙猸?鍙<>嫭绔嬪敭鍗?
|
||||
> **鐙<EFBFBD>珛鎬э細** 猸愨瓙猸愨瓙猸?鏋侀珮
|
||||
> **模块代号:** RVW (Review)
|
||||
> **开发状态:** ⚡ 核心功能已完成,待扩展
|
||||
> **商业价值:** ⭐⭐⭐⭐⭐ 可独立售卖
|
||||
> **独立性:** ⭐⭐⭐⭐⭐ 极高
|
||||
> **优先级:** P1
|
||||
|
||||
---
|
||||
|
||||
## 📋 模块概述
|
||||
|
||||
绋夸欢瀹℃煡绯荤粺鎻愪緵AI杈呭姪鐨勭ǹ浠舵櫤鑳藉<EFBFBD>鏌ュ姛鑳姐€?
|
||||
稿件审查系统提供AI辅助的稿件智能审查功能。
|
||||
|
||||
**鏍稿績浠峰€硷細** 瀹屽叏鐙<E58F8F>珛鐨勪骇鍝侊紝鍙<E7B49D>嫭绔嬪敭鍗栫粰鏈熷垔缂栬緫閮?
|
||||
**核心价值:** 完全独立的产品,可独立售卖给期刊编辑部
|
||||
|
||||
---
|
||||
|
||||
## 🎯 核心功能
|
||||
|
||||
### 宸插畬鎴愬姛鑳?
|
||||
1. 鉁?**鏂囨。涓婁紶** - Word绋夸欢涓婁紶
|
||||
2. 鉁?**鏂囨湰鎻愬彇** - 璋冪敤鏂囨。澶勭悊寮曟搸
|
||||
3. 鉁?**绋跨害瑙勮寖鎬ц瘎浼?* - 11椤硅瘎浼帮紙editorial_review锛?
|
||||
4. 鉁?**鏂规硶瀛﹁瘎浼?* - 3閮ㄥ垎璇勪及锛坢ethodology_review锛?
|
||||
5. 鉁?**缁煎悎璇勫垎** - 鍙岀淮搴﹁瘎鍒?
|
||||
6. 鉁?**PDF瀵煎嚭** - 璇勪及鎶ュ憡瀵煎嚭
|
||||
### 已完成功能
|
||||
1. ✅ **文档上传** - Word稿件上传
|
||||
2. ✅ **文本提取** - 调用文档处理引擎
|
||||
3. ✅ **稿约规范性评估** - 11项评估(editorial_review)
|
||||
4. ✅ **方法学评估** - 3部分评估(methodology_review)
|
||||
5. ✅ **综合评分** - 双维度评分
|
||||
6. ✅ **PDF导出** - 评估报告导出
|
||||
|
||||
### 未来扩展
|
||||
- 鈴?瀹$ǹ浜虹<E6B59C>鐞?
|
||||
- 鈴?瀹$ǹ娴佺▼绠$悊
|
||||
- 鈴?澶氳疆瀹$ǹ
|
||||
- 鈴?瀹$ǹ鎰忚<E98EB0>妯℃澘
|
||||
- 鈴?鏈熷垔搴撶<E690B4>鐞?
|
||||
- ⏳ 审稿人管理
|
||||
- ⏳ 审稿流程管理
|
||||
- ⏳ 多轮审稿
|
||||
- ⏳ 审稿意见模板
|
||||
- ⏳ 期刊库管理
|
||||
|
||||
---
|
||||
|
||||
@@ -39,16 +39,16 @@
|
||||
|
||||
```
|
||||
RVW-稿件审查系统/
|
||||
鈹溾攢鈹€ [AI瀵规帴] RVW蹇<EFBFBD>€熶笂涓嬫枃.md # 鈴?寰呭垱寤?
|
||||
├── [AI对接] RVW快速上下文.md # ⏳ 待创建
|
||||
├── 00-项目概述/
|
||||
鈹? 鈹溾攢鈹€ 01-浜у搧闇€姹傛枃妗?PRD).md # 鈴?寰呭垱寤?
|
||||
鈹? 鈹溾攢鈹€ 02-鐙<>珛绯荤粺瑙勫垝.md # 鈴?寰呭垱寤?
|
||||
鈹? 鈹斺攢鈹€ 03-鍟嗕笟妯″紡璁捐<E79281>.md # 鈴?寰呭垱寤?
|
||||
│ ├── 01-产品需求文档(PRD).md # ⏳ 待创建
|
||||
│ ├── 02-独立系统规划.md # ⏳ 待创建
|
||||
│ └── 03-商业模式设计.md # ⏳ 待创建
|
||||
├── 01-设计文档/
|
||||
├── 02-业务规则/
|
||||
鈹? 鈹溾攢鈹€ 01-鏂规硶瀛﹁瘎浼版爣鍑?md # 鈴?寰呰縼绉?
|
||||
鈹? 鈹斺攢鈹€ 02-绋跨害瑙勮寖鎬ц瘎浼版爣鍑?md # 鈴?寰呰縼绉?
|
||||
鈹斺攢鈹€ README.md # 鉁?褰撳墠鏂囨。
|
||||
│ ├── 01-方法学评估标准.md # ⏳ 待迁移
|
||||
│ └── 02-稿约规范性评估标准.md # ⏳ 待迁移
|
||||
└── README.md # ✅ 当前文档
|
||||
```
|
||||
|
||||
---
|
||||
@@ -62,18 +62,18 @@ RVW-稿件审查系统/
|
||||
|
||||
## 🎯 商业模式
|
||||
|
||||
**鐩<EFBFBD>爣瀹㈡埛锛?* 鏈熷垔缂栬緫閮ㄣ€佸嚭鐗堢ぞ銆佸<E98A86>浼?
|
||||
**鍞<EFBFBD>崠鏂瑰紡锛?* 瀹屽叏鐙<E58F8F>珛浜у搧
|
||||
**瀹氫环绛栫暐锛?* 鎸夋湡鍒婅<E98D92>闃?鎴?鎸夌ǹ浠舵暟閲忚<E996B2>璐?
|
||||
**目标客户:** 期刊编辑部、出版社、学会
|
||||
**售卖方式:** 完全独立产品
|
||||
**定价策略:** 按期刊订阅 或 按稿件数量计费
|
||||
|
||||
---
|
||||
|
||||
## 猸?涓轰粈涔堥€傚悎鐙<E6828E>珛锛?
|
||||
## ⭐ 为什么适合独立?
|
||||
|
||||
1. 鉁?**鐢ㄦ埛缇ょ嫭绔?* - 鏈熷垔缂栬緫閮?vs 涓村簥鍖荤敓锛堝畬鍏ㄤ笉鍚岋級
|
||||
2. 鉁?**涓氬姟閫昏緫鐙<E7B7AB>珛** - 涓庡叾浠栨ā鍧楁棤鍏宠仈
|
||||
3. 鉁?**閮ㄧ讲鍦烘櫙鐙<E6AB99>珛** - 鏈熷垔缂栬緫閮ㄦ湁鑷<EFBFBD>繁鐨勯儴缃查渶姹?
|
||||
4. 鉁?**鍟嗕笟妯″紡鐙<E7B4A1>珛** - 鍙<EFBFBD>互鎸夋湡鍒婅<EFBFBD>闃?
|
||||
1. ✅ **用户群独立** - 期刊编辑部 vs 临床医生(完全不同)
|
||||
2. ✅ **业务逻辑独立** - 与其他模块无关联
|
||||
3. ✅ **部署场景独立** - 期刊编辑部有自己的部署需求
|
||||
4. ✅ **商业模式独立** - 可以按期刊订阅
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user