Files
AIclinicalresearch/docs/08-项目管理/下一阶段行动计划-V2.1-务实版.md
HaHafeng 66255368b7 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
2026-01-16 13:42:10 +08:00

940 lines
28 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 下一阶段行动计划 V2.1 - 10个Schema完整版
> **计划周期:** 2025-11-07 至 2025-12-064周
> **核心目标:** 10个Schema隔离完整实施 + 代码分层 + ASL核心功能
> **制定时间:** 2025-11-07
> **版本:** V2.110个Schema完整版
> **最后更新:** 2025-11-09
---
## 💡 核心变化亮点
> **🎯 决定直接实施10个Schema不分阶段**
**为什么?**
- ✅ 额外成本仅6小时5个空Schema无数据迁移
- ✅ 现在是测试系统,最佳实施时机
- ✅ 架构一次到位,避免二次迁移
- ✅ Week 1有7天时间完全够用
**变化:**
- 从"5个核心+5个预留" → **10个全部实施**
- 从"分阶段迁移" → **一次性完成**
- 新增SSA智能统计分析和ST统计分析工具两个Schema
---
## 🎯 V2.1 vs V2.0 的关键调整
| 项目 | V2.0 | V2.1(完整版)| 原因 |
|------|------|--------------|------|
| Schema数量 | 8个全做 | ✅ **10个全部实施** ⭐ | 额外成本仅6小时一次到位 |
| 独立部署 | Week 2实施 | ❌ 暂不实施 | 当前重点是云端系统 |
| Docker化 | Week 2做 | ❌ 暂不做 | 不是当前重点 |
| Monorepo | 未提及 | ❌ 暂不采用 | 目录分层已够用 |
| 总时长 | 5周 | 4周 ⭐ | 去掉独立部署实施节省1周 |
---
## 📊 整体规划 - 四周四阶段
```
Week 1Schema基础 Week 2代码架构 Week 3-4ASL开发
10个Schema全部隔离 → 代码分层+LLM网关 → 标题摘要初筛+全文复筛
```
| 阶段 | 时间 | 核心任务 | 交付成果 | 优先级 |
|------|------|---------|---------|--------|
| **阶段1** | Week 1 | **10个Schema全部隔离** ⭐ | 10个Schema完成 | P0 ⭐⭐⭐ |
| **阶段2** | Week 2 | 代码分层+LLM网关 | 三层架构+LLM网关 | P0 ⭐⭐⭐ |
| **阶段3** | Week 3 | ASL标题摘要初筛 | 双模型筛选功能 | P0 ⭐⭐ |
| **阶段4** | Week 4 | ASL全文复筛+测试 | 完整筛选流程 | P0 ⭐⭐ |
---
## 🚀 阶段110个Schema完整隔离Week 1
> **时间:** 2025-11-07 至 2025-11-137天
> **目标:** 一次性完成10个Schema的完整隔离架构一步到位
### 核心原则:一次到位 ⭐⭐⭐
**全部创建的Schema10个**
### 详细设计+迁移3个⭐ Week 1重点
**1. platform_schema** - 平台基础
- 迁移现有的users表~10条数据
- 为平台基础服务预留
**2. aia_schema** - AI智能问答 ⭐ 现有功能
- 迁移5个表projects, conversations, messages, general_conversations, general_messages
- 数据量:~20个项目~50条对话~500条消息
**3. pkb_schema** - 个人知识库 ⭐ 现有功能
- 迁移2个表knowledge_bases, documents
- 数据量:~5个知识库~30个文档
---
### 只创建空Schema7个📋 命名空间预留
**4. asl_schema** - AI智能文献
- 📋 Week 3开发前再详细设计
- 避免现在过度设计,需求更明确时再做
**5. common_schema** - 通用能力
- 📋 需要时再创建表LLM使用记录、Feature Flags
**6. dc_schema** - 数据清洗
**7. rvw_schema** - 审稿系统
**8. admin_schema** - 运营管理
**9. ssa_schema** - 智能统计分析 ✨
**10. st_schema** - 统计分析工具 ✨
---
### 为什么采用"3详细+7空"策略?⭐⭐⭐
**核心原则:聚焦当前,架构预留**
**成本分析:**
- Week 1只处理3个Schema的迁移
- 其余7个只是`CREATE SCHEMA`(几秒钟)
- 总工作量从2天降低到**1.5天** ✅
**收益分析:**
1.**聚焦当前需求** - Week 1专注架构和迁移
2.**避免过度设计** - ASL等模块需求未最终确定
3.**Just-in-time设计** - 开发前再详细设计,更准确
4.**架构完整** - 10个命名空间已预留随时扩展
5.**降低返工风险** - Week 3需求可能调整
---
### Day 1-2Schema迁移准备聚焦3个
#### Day 1上午10个Schema架构规划
**任务规划完整的10个Schema架构**
- [ ] 绘制10个Schema的完整架构图架构层面
- [ ] 明确3个需要迁移的Schema
- [ ] 明确7个空Schema的用途
- [ ] 编写Schema架构文档
**输出文档:**
- `09-架构实施/01-Schema隔离架构设计10个.md`
**Schema依赖关系**
```
业务模块SchemaAIA/PKB/ASL/DC/RVW/ADMIN/SSA/ST
↓ 引用
Common Schema通用数据暂为空
↓ 引用
Platform Schema用户、权限
```
---
#### Day 1下午-Day 2上午3个Schema详细设计 ⭐ 核心工作
**只详细设计需要迁移的3个Schema**
**1. platform_schema平台基础**
```sql
CREATE SCHEMA platform_schema;
-- 用户表从public.users迁移
CREATE TABLE platform_schema.users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR(255) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
name VARCHAR(255),
avatar_url VARCHAR(500),
role VARCHAR(50) NOT NULL DEFAULT 'user',
status VARCHAR(50) DEFAULT 'active',
kb_quota INT DEFAULT 3, -- 知识库配额
kb_used INT DEFAULT 0, -- 已使用
trial_ends_at TIMESTAMP,
is_trial BOOLEAN DEFAULT true,
last_login_at TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
**说明:** 用户表是所有Schema的基础其他Schema的user_id都引用platform_schema.users。
---
**2. aia_schemaAI智能问答** ⭐ 现有功能迁移
```sql
CREATE SCHEMA aia_schema;
-- 项目管理从public.projects迁移
CREATE TABLE aia_schema.projects (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL, -- 引用platform_schema.users
name VARCHAR(255) NOT NULL,
background TEXT DEFAULT '',
research_type VARCHAR(50) DEFAULT 'observational',
conversation_count INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP
);
-- 对话从public.conversations迁移
CREATE TABLE aia_schema.conversations (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL,
project_id UUID REFERENCES aia_schema.projects(id) ON DELETE CASCADE,
agent_id VARCHAR(100) NOT NULL,
title VARCHAR(255) NOT NULL,
model_name VARCHAR(50) DEFAULT 'deepseek-v3',
message_count INT DEFAULT 0,
total_tokens INT DEFAULT 0,
metadata JSONB,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP
);
-- 消息从public.messages迁移
CREATE TABLE aia_schema.messages (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
conversation_id UUID REFERENCES aia_schema.conversations(id) ON DELETE CASCADE,
role VARCHAR(20) NOT NULL, -- user/assistant
content TEXT NOT NULL,
model VARCHAR(50),
metadata JSONB,
tokens INT,
is_pinned BOOLEAN DEFAULT false,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 通用对话从public.general_conversations迁移
CREATE TABLE aia_schema.general_conversations (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL,
title VARCHAR(255) NOT NULL,
model_name VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP
);
-- 通用消息从public.general_messages迁移
CREATE TABLE aia_schema.general_messages (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
conversation_id UUID REFERENCES aia_schema.general_conversations(id) ON DELETE CASCADE,
role VARCHAR(20) NOT NULL,
content TEXT NOT NULL,
model VARCHAR(50),
metadata JSONB,
tokens INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
**3. pkb_schema个人知识库** ⭐ 现有功能迁移
```sql
CREATE SCHEMA pkb_schema;
-- 知识库从public.knowledge_bases迁移
CREATE TABLE pkb_schema.knowledge_bases (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL, -- 引用platform_schema.users
name VARCHAR(255) NOT NULL,
description TEXT,
dify_dataset_id VARCHAR(255) NOT NULL, -- Dify知识库ID
file_count INT DEFAULT 0,
total_size_bytes BIGINT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 文档从public.documents迁移
CREATE TABLE pkb_schema.documents (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
kb_id UUID REFERENCES pkb_schema.knowledge_bases(id) ON DELETE CASCADE,
user_id UUID NOT NULL,
filename VARCHAR(255) NOT NULL,
file_type VARCHAR(50) NOT NULL,
file_size_bytes BIGINT NOT NULL,
file_url TEXT NOT NULL,
dify_document_id VARCHAR(255) NOT NULL, -- Dify文档ID
status VARCHAR(50) DEFAULT 'uploading', -- uploading/processing/completed/failed
progress INT DEFAULT 0,
error_message TEXT,
segments_count INT,
tokens_count INT,
-- Phase 2: 全文阅读模式字段
extraction_method VARCHAR(50), -- pymupdf/nougat/mammoth/direct
extraction_quality FLOAT, -- 0-1质量分数
char_count INT,
language VARCHAR(20), -- chinese/english
extracted_text TEXT,
uploaded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
processed_at TIMESTAMP
);
```
---
#### Day 2下午7个空Schema创建SQL 📋
**只需创建空Schema不设计表结构**
```sql
-- 创建7个空Schema命名空间预留
CREATE SCHEMA IF NOT EXISTS asl_schema; -- AI智能文献Week 3开发前再设计
CREATE SCHEMA IF NOT EXISTS common_schema; -- 通用能力,需要时再创建表
CREATE SCHEMA IF NOT EXISTS dc_schema; -- 数据清洗
CREATE SCHEMA IF NOT EXISTS rvw_schema; -- 审稿系统
CREATE SCHEMA IF NOT EXISTS admin_schema; -- 运营管理
CREATE SCHEMA IF NOT EXISTS ssa_schema; -- 智能统计分析
CREATE SCHEMA IF NOT EXISTS st_schema; -- 统计分析工具
```
**说明:**
- ✅ 只需几秒钟执行完成
- ✅ 命名空间已预留,不会冲突
- ✅ 需要时随时可以在对应Schema中创建表
- ✅ Prisma配置中可以先预留暂不定义模型
---
---
#### Day 2下午迁移脚本编写 ⭐
**任务:**
- [ ] 编写创建10个Schema的SQL脚本3个详细+7个空
- [ ] 编写3个Schema的数据迁移脚本
- [ ] 编写数据验证脚本
- [ ] 在本地测试环境验证
**迁移策略:**
1. 创建10个新Schema3个详细+7个空一次性
2. 在3个Schema中创建表结构并迁移数据
3. 验证数据完整性
4. 清理public schema旧表可选因为是测试系统
**输出脚本5个**
| 脚本 | 说明 | 工作量 |
|------|------|--------|
| `001-create-all-10-schemas.sql` | 创建10个Schema ⭐ | 5分钟 |
| `002-migrate-platform.sql` | 迁移users表到platform_schema | 15分钟 |
| `003-migrate-aia.sql` | 迁移5个表到aia_schema | 30分钟 |
| `004-migrate-pkb.sql` | 迁移2个表到pkb_schema | 20分钟 |
| `005-validate-all.sql` | 验证数据完整性 | 10分钟 |
**总工作量:** ~1.5小时 ✅
---
### Day 3执行3个Schema迁移 ⭐
**上午:执行迁移**
- [ ] 备份当前数据库(虽然是测试数据,但还是备份)
- [ ] 执行001脚本创建10个Schema3详细+7空
- [ ] 执行002-004脚本迁移3个Schema的数据platform/aia/pkb
- [ ] 执行005脚本验证数据完整性
**下午:验证现有功能**
- [ ] 测试AI智能问答功能使用aia_schema
- [ ] 测试知识库功能使用pkb_schema
- [ ] 验证10个Schema全部创建
- [ ] 修复发现的问题
**验收标准:**
- [ ] ✅ 10个Schema全部创建成功
- [ ] ✅ 7个空Schema验证通过ASL/Common/DC/RVW/ADMIN/SSA/ST
- [ ] ✅ 现有功能AIA、PKB正常运行
- [ ] ✅ 数据迁移100%成功(~10条用户 + 50+对话 + 30+文档)
**预计时间:** 2-3小时 ✅
---
### Day 4-5Prisma Schema更新 + 补充文档
#### Day 4上午Prisma多Schema配置3个详细+7个预留
**任务:**
- [ ] 更新Prisma配置支持10个Schema
- [ ] 为3个Schema创建完整的Prisma模型Platform/AIA/PKB
- [ ] 为7个空Schema预留配置只配置Schema名无模型
- [ ] 生成Prisma Client
- [ ] 单元测试
**Prisma配置示例**
```prisma
// schema.prisma
generator client {
provider = "prisma-client-js"
previewFeatures = ["multiSchema"]
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
schemas = [
"platform_schema", // ✅ 已迁移,有模型
"aia_schema", // ✅ 已迁移,有模型
"pkb_schema", // ✅ 已迁移,有模型
"asl_schema", // 📋 空SchemaWeek 3再定义模型
"common_schema", // 📋 空Schema需要时再定义
"dc_schema", // 📋 空Schema
"rvw_schema", // 📋 空Schema
"admin_schema", // 📋 空Schema
"ssa_schema", // 📋 空Schema
"st_schema" // 📋 空Schema
]
}
// ===== 1. Platform Schema平台基础=====
model User {
id String @id @default(uuid())
email String @unique
passwordHash String @map("password_hash")
name String?
avatarUrl String? @map("avatar_url")
role String @default("user")
status String @default("active")
kbQuota Int @default(3) @map("kb_quota")
kbUsed Int @default(0) @map("kb_used")
trialEndsAt DateTime? @map("trial_ends_at")
isTrial Boolean @default(true) @map("is_trial")
lastLoginAt DateTime? @map("last_login_at")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
@@map("users")
@@schema("platform_schema")
}
// ===== 2. AIA SchemaAI智能问答 - 迁移现有表)=====
model Project {
id String @id @default(uuid())
userId String @map("user_id")
name String
description String?
createdAt DateTime @default(now()) @map("created_at")
conversations Conversation[]
@@map("projects")
@@schema("aia_schema")
}
// ... 其他AIA模型
// ===== 3. PKB Schema个人知识库 - 迁移现有表)=====
model KnowledgeBase {
id String @id @default(uuid())
userId String @map("user_id")
name String
description String?
difyDatasetId String @map("dify_dataset_id")
fileCount Int @default(0) @map("file_count")
totalSizeBytes BigInt @default(0) @map("total_size_bytes")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
documents Document[]
@@map("knowledge_bases")
@@schema("pkb_schema")
}
model Document {
id String @id @default(uuid())
kbId String @map("kb_id")
userId String @map("user_id")
filename String
fileType String @map("file_type")
fileSizeBytes BigInt @map("file_size_bytes")
fileUrl String @map("file_url")
difyDocumentId String @map("dify_document_id")
status String @default("uploading")
progress Int @default(0)
errorMessage String? @map("error_message") @db.Text
segmentsCount Int? @map("segments_count")
tokensCount Int? @map("tokens_count")
// Phase 2: 全文阅读字段
extractionMethod String? @map("extraction_method")
extractionQuality Float? @map("extraction_quality")
charCount Int? @map("char_count")
language String?
extractedText String? @map("extracted_text") @db.Text
uploadedAt DateTime @default(now()) @map("uploaded_at")
processedAt DateTime? @map("processed_at")
knowledgeBase KnowledgeBase @relation(fields: [kbId], references: [id], onDelete: Cascade)
@@map("documents")
@@schema("pkb_schema")
}
```
**说明:**
- ✅ 只为3个已迁移的Schema定义模型
- 📋 7个空Schema已在schemas列表中但暂无模型
- 📋 ASL模型将在Week 3开发前定义
- 📋 Common模型需要时再添加
---
#### Day 4下午补充AIA和PKB设计文档 ⭐ 新增任务
**任务为已迁移的2个模块补充完整设计文档**
**1. 创建AIA数据库设计文档**
- [ ] 创建 `03-业务模块/AIA-AI智能问答/02-技术设计/01-数据库设计.md`
- [ ] 基于已迁移的5个表编写完整文档
- [ ] 包括:表结构、字段说明、索引设计、关系说明
**2. 创建PKB数据库设计文档**
- [ ] 创建 `03-业务模块/PKB-个人知识库/02-技术设计/01-数据库设计.md`
- [ ] 基于已迁移的2个表编写完整文档
- [ ] 重点说明Phase 2全文阅读相关字段
**工作量估算:** 各1小时共2小时 ✅
**为什么现在补充?**
- ✅ 趁着对表结构熟悉,立即文档化
- ✅ 为Week 2代码重构提供文档支持
- ✅ 与ASL保持一致的文档结构
---
#### Day 5上午代码适配 + API文档补充
**任务1更新代码以使用新Schema**
- [ ] 更新所有数据库查询代码
- [ ] 使用新的Prisma Client
- [ ] 更新API路由
- [ ] 运行集成测试
**任务2补充API设计文档**
- [ ] 创建 `03-业务模块/AIA-AI智能问答/02-技术设计/02-API设计规范.md`
- [ ] 创建 `03-业务模块/PKB-个人知识库/02-技术设计/02-API设计规范.md`
- [ ] 基于现有API routes整理文档
**验收标准:**
- [ ] ✅ 所有API正常工作
- [ ] ✅ 测试通过
- [ ] ✅ 现有功能无回归
- [ ] ✅ AIA和PKB模块文档完整数据库+API
---
#### Day 5下午Week 1总结 + Week 2准备
**任务:**
- [ ] 验证10个Schema全部创建
- [ ] 验证3个详细Schema数据迁移完整
- [ ] 更新文档:记录迁移过程和结果
- [ ] 编写Week 1总结报告
- [ ] 规划Week 2代码重构细节
**Week 1交付物检查清单**
- [ ] ✅ 10个Schema全部创建3详细+7空
- [ ] ✅ Platform/AIA/PKB数据100%迁移
- [ ] ✅ Prisma模型更新完成3个详细Schema
- [ ] ✅ 现有功能正常运行
- [ ] ✅ AIA和PKB完整文档数据库+API
- [ ] ✅ 迁移脚本文档化
---
## Week 2代码分层重构2025-11-14 至 2025-11-20
> **重点:** 建立清晰的代码分层架构,为模块化开发打好基础
### 目标
- 建立3层代码结构Platform/Common/Business
- 完成现有代码重构
- 建立代码规范和最佳实践
### Day 6-7Platform层和Common层重构
**任务:**
- [ ] 提取平台基础服务(认证、权限)
- [ ] 提取通用能力LLM调用、文件处理
- [ ] 建立统一的错误处理
- [ ] 建立统一的日志系统
**代码结构:**
```
backend/src/
├── platform/
│ ├── auth/ # 认证服务
│ ├── permissions/ # 权限管理
│ └── users/ # 用户管理
├── common/
│ ├── llm/ # LLM网关
│ ├── files/ # 文件处理
│ └── utils/ # 工具函数
└── modules/
├── aia/ # AI智能问答
├── pkb/ # 个人知识库
└── asl/ # AI智能文献准备
```
### Day 8-10Business模块重构
**任务:**
- [ ] 重构AIA模块代码
- [ ] 重构PKB模块代码
- [ ] 建立模块间调用规范
- [ ] 完善单元测试
**验收标准:**
- [ ] ✅ 代码分层清晰
- [ ] ✅ 模块边界明确
- [ ] ✅ 测试覆盖率 > 80%
- [ ] ✅ 现有功能无回归
---
## Week 3-4ASL模块开发2025-11-21 至 2025-12-04
> **重点:** 完成AI智能文献核心功能
### Week 3 Day 1-2ASL详细设计 ⭐ 此时再设计
**任务:**
- [ ] 详细设计asl_schema表结构
- [ ] 编写ASL数据库设计文档
- [ ] 编写ASL API设计文档
- [ ] 创建ASL表结构
- [ ] 更新Prisma模型添加ASL模型
**为什么Week 3再设计**
- ✅ Week 1-2架构已搭好有了清晰的参考
- ✅ 需求经过Week 1-2的思考更加明确
- ✅ 避免Week 1过度设计和返工
- ✅ Just-in-time设计更高效
### Week 3 Day 3-5ASL Phase 1核心功能
**功能1文献项目管理**
- [ ] 创建/编辑/删除项目
- [ ] PICO配置
- [ ] 项目列表展示
**功能2文献导入**
- [ ] CSV导入
- [ ] 批量导入
- [ ] 数据验证
**功能3AI双模型筛选**
- [ ] 集成2个大模型
- [ ] 并行筛选
- [ ] 结果对比
### Week 4ASL Phase 1完善
**功能4筛选结果管理**
- [ ] 结果展示
- [ ] 人工复核
- [ ] 导出功能
**功能5测试和优化**
- [ ] 完整功能测试
- [ ] 性能优化
- [ ] 用户体验优化
---
## Week 5-6DC和RVW模块规划2025-12-05 至 2025-12-18
> **重点:** 根据ASL开发经验规划后续模块
### 数据清洗模块DC设计
**此时根据需求再设计dc_schema**
- 清洗任务管理
- 规则引擎
- 清洗结果
### 审稿系统模块RVW设计
**此时根据需求再设计rvw_schema**
- 审稿项目管理
- 审稿任务分配
- 审稿意见管理
**说明:** 这两个模块的详细Schema设计推迟到开发前避免现在过度设计。
---
## 后续规划Week 7+
### ADMIN模块运营管理
- 设计admin_schema
- 组织管理
- 订阅管理
- 使用统计
### SSA和ST模块智能统计
- 根据需求设计ssa_schema和st_schema
- 统计分析引擎
- 分析工具集成
---
## 📊 工作量总结(务实版)
| 阶段 | 原计划 | 新计划 | 节省 |
|------|--------|--------|------|
| Week 1 Schema迁移 | 2天5个详细 | **1.5天3个详细** | ✅ 0.5天 |
| Week 1 文档补充 | 0 | **0.5天AIA/PKB文档** | 新增 |
| Prisma模型 | 5个详细 | **3个详细** | ✅ 简化 |
| ASL设计 | Week 1 | **Week 3**(推迟) | ✅ 避免返工 |
| 总Week 1工作量 | 2天 | **2天** | 相同,但更合理 |
**关键优势:**
1. ✅ Week 1聚焦架构和迁移不做新设计
2. ✅ ASL设计推迟到开发前需求更明确
3. ✅ AIA和PKB文档补充与ASL保持一致
4. ✅ 7个空Schema预留随时可扩展
5. ✅ 降低返工风险,提高开发效率
---
## 🎯 下一步行动
1. **立即开始Week 1 Day 1**规划10个Schema架构
2. **Day 1-2**编写3个Schema的详细设计和迁移脚本
3. **Day 3**:执行迁移,验证功能
4. **Day 4**更新Prisma补充AIA/PKB数据库文档
5. **Day 5**代码适配补充AIA/PKB API文档Week 1总结
**记住:架构预留 + Just-in-time设计 = 高效务实!** ⭐⭐⭐
---
## 附录Week 1详细交付物清单
**交付物:**
1. ✅ 10个Schema全部创建3详细+7空
2. ✅ 完整的Schema架构设计文档
3. ✅ Prisma Schema更新完成3个详细Schema模型
4. ✅ 现有功能AIA、PKB迁移完成7个表
5. ✅ AIA和PKB完整文档数据库+API
6. ✅ 7个空Schema创建完成ASL/Common/DC/RVW/ADMIN/SSA/ST
**验收标准:**
- [ ]**10个Schema全部创建成功**
- [ ] ✅ 数据迁移100%成功platform/aia/pkb三个Schema
- [ ] ✅ 现有功能正常运行AI智能问答、知识库
- [ ] ✅ Prisma Client正常工作支持10个Schema
- [ ] ✅ AIA和PKB文档完整
- [ ] ✅ 7个空Schema验证通过架构预留
---
## 🔧 阶段2代码分层 + LLM网关Week 2
> **时间:** 2025-11-14 至 2025-11-207天
> **目标:** 建立三层代码架构 + 实现LLM网关
### 务实策略:只做云端统一系统 ⭐
**做什么:**
- ✅ 三层目录结构platform/common/modules
- ✅ 代码迁移和重构
- ✅ LLM网关实现
- ✅ 模块化API路由
**暂不做:**
- ❌ 模块独立部署配置
- ❌ Docker文件
- ❌ 独立运行脚本
**原因:** 当前重点是云端系统开发独立部署在Week 7+再考虑
---
### Day 6-7三层目录重构
**任务:**
1. 创建三层目录结构
2. 迁移现有代码到新结构
3. 重构为清晰的分层
**目录结构:**
```
backend/src/
├── platform/ # L1平台基础层
│ ├── auth/ # 认证JWT、Session
│ ├── permissions/ # 权限管理RBAC
│ └── users/ # 用户服务
├── common/ # L2通用能力层
│ ├── llm/ # LLM网关
│ ├── files/ # 文件处理
│ └── utils/ # 工具函数
└── modules/ # L3业务模块层
├── aia/ # AI智能问答
├── pkb/ # 个人知识库
└── asl/ # AI智能文献准备
```
---
### Day 8-9LLM网关实现
**核心功能:**
1. **多模型支持**
- DeepSeek
- OpenAI
- Claude
- 统一接口
2. **Feature Flags**
- 模型开关
- 功能开关
- 配额管理
3. **使用记录**
- Token统计
- 费用计算
- 日志记录
**交付:**
- LLM网关核心代码
- 配置文件
- 使用文档
---
### Day 10Week 2验收
**验收标准:**
- [ ] ✅ 三层代码架构清晰
- [ ] ✅ LLM网关稳定可用
- [ ] ✅ API路由模块化
- [ ] ✅ ASL可以开始开发
---
## 🎯 阶段3-4ASL核心功能开发Week 3-4
> **时间:** 2025-11-21 至 2025-12-042周
> **目标:** 完成ASL Phase 1 - 文献初筛功能
### Week 3 Day 1-2ASL详细设计 ⭐
**任务:**
- [ ] 详细设计asl_schema表结构
- [ ] 编写ASL数据库设计文档
- [ ] 编写ASL API设计文档
- [ ] 创建ASL表结构
- [ ] 更新Prisma模型
**为什么Week 3再设计**
- Week 1-2架构已搭好
- 需求更加明确
- 避免过度设计
### Week 3 Day 3-5ASL Phase 1核心功能
**功能1文献项目管理**
- 创建/编辑/删除项目
- PICO配置
- 项目列表
**功能2文献导入**
- CSV导入
- 批量导入
- 数据验证
**功能3AI双模型筛选**
- 集成2个大模型
- 并行筛选
- 结果对比
### Week 4ASL Phase 1完善
**功能4筛选结果管理**
- 结果展示
- 人工复核
- 导出功能
**功能5测试和优化**
- 完整功能测试
- 性能优化
- 用户体验优化
---
## 📊 关键调整总结
**V2.1版3详细+7空vs V2.0版5详细+5空**
| 项目 | V2.0 | V2.1 | 变化 |
|------|------|------|------|
| 详细Schema | 5个 | **3个** | ✅ 聚焦现有 |
| 空Schema | 5个 | **7个** | ✅ 更完整预留 |
| Week 1工作量 | 2天 | **1.5天** | ✅ 降低 |
| ASL设计时机 | Week 1 | **Week 3** | ✅ 推迟 |
| 文档补充 | 无 | **AIA/PKB** | ✅ 新增 |
**核心策略:**
1. ✅ 聚焦当前(只迁移现有数据)
2. ✅ 架构预留10个命名空间
3. ✅ Just-in-time设计开发前再详细设计
4. ✅ 文档完整与ASL保持一致
---
## 🎯 成功标准
### Week 1成功标准
- [ ] ✅ 10个Schema全部创建3详细+7空
- [ ] ✅ Platform/AIA/PKB数据100%迁移
- [ ] ✅ Prisma模型更新3个详细
- [ ] ✅ 现有功能正常运行
- [ ] ✅ AIA和PKB文档完整
### Week 2成功标准
- [ ] ✅ 三层代码架构清晰
- [ ] ✅ LLM网关稳定可用
- [ ] ✅ API路由模块化
- [ ] ✅ ASL可以开始开发
### Week 3-4成功标准
- [ ] ✅ ASL标题摘要初筛完成
- [ ] ✅ ASL全文复筛完成
- [ ] ✅ 用户可以完整使用ASL功能
---
## 📝 关于Monorepo的决策
**决定暂不采用Monorepo**
**理由:**
1. 目录分层已经足够清晰platform/common/modules
2. Monorepo工具lerna、nx增加复杂度
3. 单人开发,收益不明显
4. 等未来真正需要独立部署时再考虑
---
**制定人:** AI助手
**版本:** V2.13详细+7空 - 务实版)
**最后更新:** 2025-11-09
**核心调整:**
- ✅ 3个Schema详细迁移Platform/AIA/PKB
- ✅ 7个空Schema预留ASL/Common/DC/RVW/ADMIN/SSA/ST
- ✅ ASL设计推迟到Week 3
- ✅ 补充AIA/PKB完整文档
- ✅ 架构预留 + Just-in-time设计 = 高效务实 ⭐