Files
AIclinicalresearch/docs/08-项目管理/03-每周计划/2025-11-18-AI助手工作交接.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

560 lines
16 KiB
Markdown
Raw Permalink 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.
# AI助手工作交接文档
> **交接日期:** 2025-11-18
> **前任AI** Claude (Session 2025-11-17~11-18)
> **后任AI** 待接手
> **项目状态:** 平台基础设施完成ASL模块开发就绪
> **交接原因:** 上下文长度限制准备开始ASL模块开发
---
## 📋 项目概览10秒
**项目名称:** AIclinicalresearch - 医学科研AI平台
**当前任务:** 开发ASLAI智能文献模块
**第一功能:** 标题摘要初筛Excel导入 → AI双模型筛选 → 人工复核 → 导出)
**当前状态:** 所有依赖就绪,可立即开始开发 ✅
---
## ✅ 已完成的工作2025-11-17~11-18
### 2025-11-17平台基础设施实施
**完成内容:** 8个核心模块2,532行新代码22个新文件
| # | 模块 | 功能 | 测试状态 |
|---|------|------|---------|
| 1 | 存储服务 | 文件上传下载(本地/OSS切换 | ✅ 100% |
| 2 | 日志系统 | 结构化JSON日志 | ✅ 100% |
| 3 | 缓存服务 | 内存/Redis缓存 | ✅ 100% |
| 4 | 异步任务 | 长时间任务队列 | ✅ 100% |
| 5 | 健康检查 | SAE健康检查端点 | ✅ 100% |
| 6 | 监控指标 | 性能监控 | ✅ 100% |
| 7 | 数据库连接池 | Prisma连接池优化 | ✅ 100% |
| 8 | 环境配置 | 统一配置管理 | ✅ 100% |
**关键文件:**
- `backend/src/common/storage/` - 存储服务
- `backend/src/common/logging/` - 日志系统
- `backend/src/common/cache/` - 缓存服务
- `backend/src/common/jobs/` - 异步任务
- `backend/src/common/health/` - 健康检查
- `backend/src/common/monitoring/` - 监控指标
- `backend/src/config/database.ts` - 数据库配置
- `backend/src/config/env.ts` - 环境配置
**测试验证:**
- 测试脚本:`backend/src/scripts/test-platform-infrastructure.ts`
- 测试API`GET http://localhost:3001/test/platform`
- 测试结果ALL_PASSED100%
**文档输出:**
- `docs/09-架构实施/04-平台基础设施规划.md` - 详细设计方案
- `docs/08-项目管理/03-每周计划/2025-11-17-平台基础设施实施完成报告.md`
- `docs/08-项目管理/03-每周计划/2025-11-17-平台基础设施验证报告.md`
---
### 2025-11-18CloseAI集成与性能优化
**完成内容:** GPT-4o + Claude-4.5 集成性能优化25倍
| 工作项 | 状态 | 成果 |
|--------|------|------|
| 创建CloseAI核心适配器 | ✅ | `CloseAIAdapter.ts` |
| 创建GPT和Claude封装 | ✅ | `GPT5Adapter.ts` + `ClaudeAdapter.ts` |
| 更新类型定义和工厂类 | ✅ | `types.ts` + `LLMFactory.ts` |
| 创建测试脚本 | ✅ | `test-closeai.ts` |
| 性能优化 | ✅ | gpt-5-pro(50秒) → gpt-4o(1.5秒) |
| 测试验证 | ✅ | 所有测试通过4个测试 |
**性能提升:**
- GPT响应时间50秒 → 1.5秒(**25倍提升**)⭐
- 双模型筛选51秒 → 4.8秒(**10倍提升**)⭐
- 流式调用57秒 → 1.1秒(**52倍提升**)⭐
**可用的LLM模型5个**
| 模型 | 响应时间 | 成本 | 适用场景 |
|------|---------|------|---------|
| DeepSeek-V3 | 13秒 | 最低 | 快速初筛 |
| **GPT-4o** | **1.5秒** ⭐ | 适中 | 高质量筛选(推荐) |
| Claude-4.5 | 2.8秒 | 适中 | 第三方仲裁 |
| Qwen3-72B | 10秒 | 低 | 中文理解 |
| Qwen-Long | 15秒 | 低 | 超长上下文 |
**推荐筛选策略:**
```
DeepSeek经济+ GPT-4o质量→ 4.8秒 → 一致则采纳 → 不一致则复核
```
**关键文件:**
- `backend/src/common/llm/adapters/CloseAIAdapter.ts` - 核心适配器
- `backend/src/common/llm/adapters/GPT5Adapter.ts` - GPT-4o封装
- `backend/src/common/llm/adapters/ClaudeAdapter.ts` - Claude封装
- `backend/src/scripts/test-closeai.ts` - 测试脚本
**文档输出:**
- 更新 `docs/00-系统总体设计/00-系统当前状态与开发指南.md` - 添加LLM模型支持详情
---
### 2025-11-18文档体系完善
**完成内容:** 创建新的核心文档完善AI对接文档
| 文档 | 用途 | 状态 |
|------|------|------|
| **00-系统当前状态与开发指南.md** | 系统真实状态+核心规范 | ✅ 新建 |
| **START-HERE-FOR-NEW-AI.md** | 新AI 2分钟快速启动 | ✅ 新建 |
| **[AI对接] ASL模块快速上下文.md** | ASL开发快速上手 | ✅ 更新 |
---
## 🎯 下一步任务给新AI
### 任务开发ASL模块 - 标题摘要初筛功能
**开发周期:** 4周
**第一步:** 定义数据库Schema2小时
**交付目标:** Excel导入 → AI双模型筛选 → 人工复核 → 导出结果
**详细任务清单:** `docs/03-业务模块/ASL-AI智能文献/04-开发计划/03-任务分解.md`80+个任务)
---
## 📚 给新AI的必读清单按顺序
### 🔥 首次启动必读2分钟
**📄 `START-HERE-FOR-NEW-AI.md`**(项目根目录)
- 10秒速读项目概况
- 已完成工作总结
- 第一步操作指南
- 核心代码示例
- 禁止操作清单
### ⭐ 系统全貌20分钟
**📄 `docs/00-系统总体设计/00-系统当前状态与开发指南.md`**
- **Part 1.3:后端架构 - 平台基础设施**(必读)
- 8个模块的使用方法
- 详细代码示例
- **Part 2.3:云原生开发规范**(必须遵守)
- DO/DON'T清单
- 禁止操作列表
- **LLM模型支持**(必读)
- 5个模型的调用方式
- 性能测试结果
### ⭐ ASL开发指南15分钟
**📄 `docs/03-业务模块/ASL-AI智能文献/[AI对接] ASL模块快速上下文.md`**
- 💬 给新AI的一段话
- 当前状态详情
- 必读文档清单
- 快速问答
- 立即开始的步骤
### ⭐ 详细开发计划20分钟
**📄 `docs/03-业务模块/ASL-AI智能文献/04-开发计划/02-标题摘要初筛开发计划.md`**
- Week 1 Day 1完整的Prisma Schema代码可直接复制
- 每天的详细开发任务
- LLM筛选服务代码示例
### 📋 任务分解清单15分钟
**📄 `docs/03-业务模块/ASL-AI智能文献/04-开发计划/03-任务分解.md`**
- 80+个详细任务
- 每个任务的验收标准
- 第一个任务T1.1.1 设计Prisma Schema
---
## 🔑 关键信息速查
### 文件路径
```bash
# 项目根目录
D:\MyCursor\AIclinicalresearch\
# 核心文档
START-HERE-FOR-NEW-AI.md # 2分钟快速启动 ⭐
docs/00-系统总体设计/
└── 00-系统当前状态与开发指南.md # 系统全貌 ⭐⭐⭐
# ASL开发文档
docs/03-业务模块/ASL-AI智能文献/
├── [AI对接] ASL模块快速上下文.md # ASL快速上手 ⭐⭐
└── 04-开发计划/
├── 02-标题摘要初筛开发计划.md # 详细计划+代码 ⭐⭐⭐
└── 03-任务分解.md # 80+任务清单 ⭐⭐
# 平台基础设施
backend/src/common/ # 8个模块storage/logging/cache/jobs等
backend/src/common/llm/adapters/ # 5个LLM模型适配器
# ASL开发位置
backend/src/modules/asl/ # 后端代码(空目录,待开发)
frontend-v2/src/modules/asl/ # 前端代码(占位,待开发)
backend/prisma/schema.prisma # 数据库Schema待添加ASL表
```
### Git仓库
```bash
远程仓库https://gitee.com/hahafeng117/AIclinicalresearch.git
分支master
用户HaHafeng / gofeng117@163.com
```
### 服务地址
```bash
后端http://localhost:3001
前端http://localhost:5173
健康检查http://localhost:3001/health
测试APIhttp://localhost:3001/test/platform
```
---
## ⚠️ 重要提醒(必须遵守)
### 核心原则5条
1.**复用平台基础设施** - storage/logger/cache/jobQueue
2.**零代码环境切换** - 环境变量控制
3.**Schema隔离** - 所有表 `@@schema("asl_schema")`
4.**云原生优先** - 无状态、异步任务、内存解析
5.**批量Git提交** - 一天结束后统一提交
### 禁止的操作10条
1. ❌ 频繁Git提交
2. ❌ 本地文件存储(`fs.writeFileSync`
3. ❌ 重复实现平台服务
4. ❌ 同步处理长任务
5. ❌ 硬编码配置
6. ❌ 创建新Prisma实例
7. ❌ 使用any类型
8. ❌ 跨Schema查询
9. ❌ 提交未测试代码
10. ❌ 强制推送到master
**详细说明:** `docs/00-系统总体设计/00-系统当前状态与开发指南.md` Part 3
---
## 🚀 新AI启动流程3步
### Step 1: 阅读启动文档2分钟
```bash
打开START-HERE-FOR-NEW-AI.md
```
### Step 2: 阅读系统全貌20分钟⭐⭐⭐
```bash
打开docs/00-系统总体设计/00-系统当前状态与开发指南.md
重点阅读:
- Part 1.3:平台基础设施(必读)
- LLM模型支持章节必读
- Part 2.3:云原生开发规范(必须遵守)
- Part 3重要原则与禁忌必须遵守
```
### Step 3: 查看ASL开发计划15分钟⭐⭐
```bash
打开docs/03-业务模块/ASL-AI智能文献/04-开发计划/02-标题摘要初筛开发计划.md
重点查看:
- Week 1 Day 1Prisma Schema代码第299-402行
- 云原生开发注意事项第77-162行
```
### Step 4: 开始第一个任务2小时
```bash
任务IDT1.1.1 - 设计Prisma Schema
文件位置backend/prisma/schema.prisma
参考代码02-标题摘要初筛开发计划.md Week 1 Day 1
```
---
## 💻 平台基础设施使用指南(关键)
### 1. 存储服务(必须使用)
```typescript
import { storage } from '@/common/storage'
// 上传PDF文件
const url = await storage.upload('literature/123.pdf', buffer)
// 下载文件
const buffer = await storage.download('literature/123.pdf')
// 删除文件
await storage.delete('literature/123.pdf')
// 环境切换(零代码)
// 本地STORAGE_TYPE=local → 存储到 backend/uploads/
// 云端STORAGE_TYPE=oss → 存储到阿里云OSS
```
### 2. 日志系统(必须使用)
```typescript
import { logger } from '@/common/logging'
// 基础日志
logger.info('User logged in', { userId: 123 })
logger.error('Database error', { error: err.message })
// 带模块上下文
const aslLogger = logger.child({ module: 'ASL', projectId: 456 })
aslLogger.info('Screening started', { count: 100 })
// 输出格式:
// 本地:彩色可读格式
// 生产JSON格式阿里云SLS解析
```
### 3. 缓存服务(推荐使用)
```typescript
import { cache } from '@/common/cache'
// 缓存LLM响应减少成本
const cacheKey = `llm:${model}:${hash(prompt)}`
const cached = await cache.get(cacheKey)
if (!cached) {
const response = await llm.chat(prompt)
await cache.set(cacheKey, response, 60 * 60) // 1小时
return response
}
return cached
```
### 4. 异步任务(必须使用)
```typescript
import { jobQueue } from '@/common/jobs'
// 创建异步任务(立即返回,避免超时)
const job = await jobQueue.push('asl:screening', {
projectId: 123,
literatureIds: [1, 2, 3, ..., 1000] // 大量数据
})
// 返回任务ID给前端
res.send({ jobId: job.id, status: 'processing' })
// 前端轮询任务状态
const status = await jobQueue.getJob(job.id)
// { status: 'processing', progress: 45 }
```
### 5. LLM调用双模型筛选
```typescript
import { LLMFactory } from '@/common/llm/adapters'
// 并行调用两个模型4.8秒完成)
const [deepseekResult, gpt4oResult] = await Promise.all([
LLMFactory.getAdapter('deepseek-v3').chat(messages),
LLMFactory.getAdapter('gpt-5').chat(messages) // 实际使用 gpt-4o
])
// 判断一致性
if (deepseekResult.decision === gpt4oResult.decision) {
// 共识度高,直接采纳
return { decision: deepseekResult.decision, consensus: 'high' }
} else {
// 不一致启用Claude仲裁或人工复核
const claudeResult = await LLMFactory.getAdapter('claude-4.5').chat(messages)
return { decision: claudeResult.decision, consensus: 'medium', needReview: true }
}
```
---
## 📊 代码统计
**平台基础设施2025-11-17**
- 新增文件22个
- 新增代码2,532行
- 测试覆盖率100%
**CloseAI集成2025-11-18**
- 新增文件4个
- 新增代码:~500行
- 测试通过4/4
**总计(两天工作):**
- 新增文件26个
- 新增代码:~3,000行
- 测试状态:全部通过
---
## 🔄 Git提交记录
**最后一次提交:** 2025-11-18
**提交内容:** 平台基础设施实施完成
**提交类型:** feat(platform): 完成平台基础设施8个模块
**⚠️ 注意:**
- CloseAI集成代码尚未提交到Git
- 等ASL模块开发一起提交遵循批量提交原则
- 用户要求:一天工作结束后统一提交
---
## 🎯 新AI的第一个任务
### 任务IDT1.1.1 - 设计Prisma Schema
**任务描述:**`backend/prisma/schema.prisma` 中定义4个ASL模型
**所需时间:** 2小时
**参考代码:** `docs/03-业务模块/ASL-AI智能文献/04-开发计划/02-标题摘要初筛开发计划.md` 第299-402行
**验收标准:**
- [ ] 4个模型定义完成AslScreeningProject, AslLiterature, AslScreeningResult, AslScreeningTask
- [ ] 每个模型包含 `@@schema("asl_schema")`
- [ ] 与User模型的关联定义
- [ ] 包含OSS相关字段pdfUrl, pdfOssKey, pdfFileSize
- [ ] 迁移成功:`npx prisma migrate dev`
- [ ] 客户端生成:`npx prisma generate`
- [ ] 类型检查通过
**执行命令:**
```bash
cd backend
npx prisma migrate dev --name add_asl_screening_tables
npx prisma generate
```
---
## 💡 常见问题预判
**Q1前后端服务如何启动**
```bash
# 后端
cd backend
npm run dev # http://localhost:3001
# 前端
cd frontend-v2
npm run dev # http://localhost:5173
```
**Q2如何测试平台基础设施**
```bash
# 访问测试API
curl http://localhost:3001/test/platform
# 或运行测试脚本
cd backend
npx tsx src/scripts/test-platform-infrastructure.ts
```
**Q3如何测试CloseAI集成**
```bash
cd backend
npx tsx src/scripts/test-closeai.ts
# 预期4个测试全部通过总耗时<10秒
```
**Q4数据库如何连接**
```bash
# .env 文件已配置
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/ai_clinical
# Prisma Studio查看数据库
cd backend
npx prisma studio
```
**Q5如何查看日志**
```bash
# 后端控制台会输出结构化日志
# 本地:彩色可读格式
# 生产JSON格式
```
---
## 📌 开发注意事项
### 云原生开发要求(必须遵守)
1. ✅ Excel必须内存解析不落盘
```typescript
const workbook = xlsx.read(buffer, { type: 'buffer' })
```
2. ✅ LLM批量任务必须异步处理
```typescript
const job = await jobQueue.push('asl:screening', data)
```
3. ✅ 文件上传使用存储服务
```typescript
await storage.upload('literature/file.pdf', buffer)
```
4. ✅ 使用全局Prisma实例
```typescript
import { prisma } from '@/config/database'
```
5. ✅ 结构化日志输出
```typescript
logger.info('Operation', { userId, action })
```
### Git提交要求必须遵守
1. ✅ 一天工作结束后统一提交(不要频繁提交)
2. ✅ 必须测试验证后才能提交
3. ✅ Commit Message格式`feat(asl): 描述`
---
## 🎉 交接完成
**前任AI工作成果**
- ✅ 平台基础设施8个模块
- ✅ CloseAI集成GPT-4o + Claude
- ✅ 性能优化25倍提升
- ✅ 完整文档体系
**后任AI工作起点**
- 🚀 所有依赖就绪
- 🚀 5个LLM模型可用
- 🚀 平台服务完整
- 🚀 详细文档指导
- 🚀 第一个任务明确
**祝开发顺利!从 T1.1.1 开始吧!** 🚀
---
**文档路径:** `AIclinicalresearch/docs/08-项目管理/03-每周计划/2025-11-18-AI助手工作交接.md`
**最后更新:** 2025-11-18
**维护者:** AI助手