Files
AIclinicalresearch/docs/07-运维文档/10-Postgres-Only改造进度追踪表.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

19 KiB
Raw Permalink Blame History

Postgres-Only 架构改造进度追踪表

开始日期: 2025年12月7日
预计完成: 2025年12月16日9天
实际完成: 2025年12月13日Phase 1-7 完成) 🎉
负责人: 开发团队
当前Phase Phase 7 已完成Phase 8 待进行


📊 总体进度概览

指标 目标 当前 进度
总任务数 45个 完成 31个 69%
总工作量 9天 已用 6.5天 72%
代码行数 ~1900行 已写 ~1750行 92%
测试通过 100% 100% 100%

当前状态: 🟢 Phase 1-7 已完成Platform-Only 架构重构完成!


📅 Phase进度总览

Phase 名称 任务数 工作量 状态 开始日期 完成日期 备注
Phase 1 环境准备 4 0.5天 12-07 12-07 完成
Phase 2 PostgresCacheAdapter 5 0.5天 12-08 12-08 完成
Phase 3 PgBossQueue 5 2天 12-09 12-10 完成
Phase 4 任务拆分机制 4 1天 12-11 12-11 完成
Phase 5 断点续传机制 4 1天 12-12 12-12 完成
Phase 6 ASL筛选改造 4 1.5天 12-13 12-13 完成+重构
🏆 重构 Platform-Only架构 3 1天 12-13 12-13 架构创新
Phase 7 DC提取改造 5 0.5天 12-13 12-13 完成
Phase 8 全面测试验证 7 1.5天 _____ _____ 待进行
Phase 9 SAE部署上线 5 0.5天 _____ _____ 待进行

图例: 待开始 | 🟡 进行中 | 已完成 | 失败 | ⏸️ 暂停


📋 详细任务清单

Phase 1环境准备0.5天)

# 任务 优先级 状态 开始时间 完成时间 耗时 负责人 备注
1.1 安装pg-boss依赖 P0 12-07 10:00 12-07 10:05 5min 团队 完成
1.2 更新Prisma Schema P0 12-07 10:05 12-07 10:30 25min 团队 添加AppCache模型
1.3 执行数据库迁移 P0 12-07 10:30 12-07 11:00 30min 团队 手动SQL迁移
1.4 更新env.ts配置 P0 12-07 11:00 12-07 11:15 15min 团队 完成

验收标准:

  • npm list pg-boss 显示版本号
  • platform_schema.app_cache 表已创建
  • 本地环境启动无错误

遇到的问题:

问题1
描述:
解决方案:
解决时间:

问题2
描述:
解决方案:
解决时间:

Phase 2实现PostgresCacheAdapter0.5天)

# 任务 优先级 状态 开始时间 完成时间 耗时 负责人 备注
2.1 创建PostgresCacheAdapter.ts P0 _____ _____ _____ _____ get/set/delete方法
2.2 实现缓存清理函数 P0 _____ _____ _____ _____ startCacheCleanupTask
2.3 更新CacheFactory P0 _____ _____ _____ _____ 支持postgres选项
2.4 更新cache/index.ts导出 P0 _____ _____ _____ _____ 导出新类和函数
2.5 编写PostgresCache单元测试 P0 _____ _____ _____ _____ 测试覆盖率>80%

验收标准:

  • 所有单元测试通过(npm test
  • 缓存读写功能正常
  • 过期清理功能正常每分钟1000条
  • 本地环境CACHE_TYPE=postgres正常运行

代码位置:

  • backend/src/common/cache/PostgresCacheAdapter.ts (~300行)
  • backend/src/common/cache/CacheFactory.ts (+10行)
  • backend/tests/common/cache/PostgresCacheAdapter.test.ts (新建)

遇到的问题:

问题1
描述:
解决方案:
解决时间:

Phase 3实现PgBossQueue2天

# 任务 优先级 状态 开始时间 完成时间 耗时 负责人 备注
3.1 创建PgBossQueue.ts P0 _____ _____ _____ _____ push/process/getJob方法
3.2 实现任务状态映射和错误处理 P0 _____ _____ _____ _____ mapState + 重试逻辑
3.3 更新JobFactory P0 _____ _____ _____ _____ 支持pgboss选项
3.4 更新jobs/index.ts导出 P0 _____ _____ _____ _____ 导出新类
3.5 编写PgBossQueue单元测试 P0 _____ _____ _____ _____ 测试覆盖率>80%

验收标准:

  • 所有单元测试通过
  • 任务入队功能正常
  • Worker注册功能正常
  • 任务重试功能正常失败3次
  • 本地环境QUEUE_TYPE=pgboss正常运行
  • pg-boss自动创建表platform_schema.job等

代码位置:

  • backend/src/common/jobs/PgBossQueue.ts (~400行)
  • backend/src/common/jobs/JobFactory.ts (+10行)
  • backend/tests/common/jobs/PgBossQueue.test.ts (新建)

遇到的问题:

问题1
描述:
解决方案:
解决时间:

Phase 4实现任务拆分机制1天

# 任务 优先级 状态 开始时间 完成时间 耗时 负责人 备注
4.1 创建jobs/utils.ts P0 _____ _____ _____ _____ 拆分工具函数
4.2 实现splitIntoChunks和recommendChunkSize P0 _____ _____ _____ _____ 核心拆分逻辑
4.3 定义CHUNK_STRATEGIES配置 P0 _____ _____ _____ _____ ASL/DC/SSA策略
4.4 编写任务拆分单元测试 P0 _____ _____ _____ _____ 测试覆盖率>90%

验收标准:

  • 所有单元测试通过
  • splitIntoChunks功能正确
  • recommendChunkSize计算准确
  • CHUNK_STRATEGIES配置合理

代码位置:

  • backend/src/common/jobs/utils.ts (~200行)
  • backend/tests/common/jobs/utils.test.ts (新建)

测试案例:

// 测试拆分
splitIntoChunks([1..100], 30)  [[1..30], [31..60], [61..90], [91..100]]

// 测试推荐
recommendChunkSize(1000, 7.2, 900)  125

遇到的问题:

问题1
描述:
解决方案:
解决时间:

Phase 5实现断点续传机制1天

# 任务 优先级 状态 开始时间 完成时间 耗时 负责人 备注
5.1 更新AslScreeningTask Schema P0 _____ _____ _____ _____ 新增6个断点字段
5.2 执行数据库迁移 P0 _____ _____ _____ _____ npx prisma migrate dev
5.3 创建CheckpointService.ts P0 _____ _____ _____ _____ 保存/读取/恢复断点
5.4 编写断点续传单元测试 P0 _____ _____ _____ _____ 测试覆盖率>80%

验收标准:

  • 数据库字段新增成功
  • 所有单元测试通过
  • saveCheckpoint功能正常
  • loadCheckpoint功能正常
  • updateProgress功能正常

代码位置:

  • backend/prisma/schema.prisma (+40行)
  • backend/src/common/jobs/CheckpointService.ts (~150行)
  • backend/tests/common/jobs/CheckpointService.test.ts (新建)

新增字段:

totalBatches      Int
processedBatches  Int
currentBatchIndex Int
currentIndex      Int
lastCheckpoint    DateTime?
checkpointData    Json?

遇到的问题:

问题1
描述:
解决方案:
解决时间:

Phase 6改造ASL筛选服务1.5天)

# 任务 优先级 状态 开始时间 完成时间 耗时 负责人 备注
6.1 改造startScreeningTask P0 _____ _____ _____ _____ 使用任务拆分
6.2 实现批次Worker P0 _____ _____ _____ _____ 带断点续传
6.3 更新index.ts注册Workers P0 _____ _____ _____ _____ 启动时注册
6.4 本地测试100篇文献筛选 P0 _____ _____ _____ _____ 验证完整流程

验收标准:

  • 100篇文献筛选成功拆分成2批
  • 批次任务入队正常
  • Worker处理批次正常
  • 进度更新正常每10篇
  • 断点保存正常

代码位置:

  • backend/src/modules/asl/services/screeningService.ts (~200行改动)
  • backend/src/index.ts (+20行)

测试流程:

1. 准备100篇测试文献
2. 提交筛选任务
3. 观察日志应该看到2批任务
4. 验证数据库totalBatches=2
5. 等待完成processedBatches=2
6. 验证结果100篇都有结果

遇到的问题:

问题1
描述:
解决方案:
解决时间:

Phase 7改造DC提取服务可选

# 任务 优先级 状态 开始时间 完成时间 耗时 负责人 备注
7.1 参考ASL改造DC服务 P1 _____ _____ _____ _____ 按需实施

说明: 此Phase可根据实际需求决定是否实施。建议先完成ASL改造并验证稳定后再考虑。


Phase 8全面测试验证1.5天)

# 任务 优先级 状态 开始时间 完成时间 耗时 负责人 备注
8.1 功能测试:缓存读写和过期清理 P0 _____ _____ _____ _____ 基础功能验证
8.2 任务拆分测试:验证批次正确性 P0 _____ _____ _____ _____ 1000篇→10批
8.3 断点续传测试:中断恢复验证 P0 _____ _____ _____ _____ Ctrl+C后恢复
8.4 长任务测试1000篇文献完整流程 P0 _____ _____ _____ _____ 2小时任务
8.5 实例重启测试:关键恢复测试 P0 _____ _____ _____ _____ 50%中断恢复
8.6 并发测试多Worker并行处理 P0 _____ _____ _____ _____ 3个实例测试
8.7 性能测试:缓存和队列延迟 P1 _____ _____ _____ _____ P99延迟

验收标准:

  • 所有功能测试通过
  • 1000篇文献筛选成功率 > 99%
  • 实例重启恢复成功至少3次
  • 断点续传不重复处理
  • 缓存命中率 > 60%
  • 队列吞吐量 > 100任务/小时

测试记录:

测试11000篇文献筛选

  • 开始时间_____
  • 结束时间_____
  • 总耗时_____
  • 成功率_____%
  • 批次数_____
  • 失败批次_____

测试2实例重启恢复

  • 测试次数_____
  • 成功次数_____
  • 成功率_____%
  • 断点恢复位置_____
  • 是否重复处理:是 / 否

测试3并发处理

  • Worker数量_____
  • 总任务数_____
  • 总耗时_____
  • 理论耗时_____
  • 加速比_____

遇到的问题:

问题1
描述:
解决方案:
解决时间:

Phase 9SAE部署上线0.5天)

# 任务 优先级 状态 开始时间 完成时间 耗时 负责人 备注
9.1 配置SAE环境变量 P0 _____ _____ _____ _____ CACHE_TYPE=postgres等
9.2 配置SAE弹性伸缩 P0 _____ _____ _____ _____ 1-5实例
9.3 灰度发布 P0 _____ _____ _____ _____ 1个实例观察24小时
9.4 全量发布 P0 _____ _____ _____ _____ 扩容到2-3实例
9.5 生产验证 P0 _____ _____ _____ _____ 监控48小时无错误

验收标准:

  • 环境变量配置正确
  • 弹性伸缩配置正确
  • 灰度发布24小时无错误
  • 全量发布48小时无错误
  • 至少3个真实用户任务成功
  • 至少1次实例重启恢复成功
  • 无用户投诉

环境变量清单:

CACHE_TYPE=postgres
QUEUE_TYPE=pgboss
DATABASE_URL=postgresql://...
NODE_ENV=production

SAE配置

replicas:
  min: 1
  max: 5
autoScaling:
  enable: true
  cpu: 70%
  memory: 70%

生产监控48小时

  • 缓存命中率_____%
  • LLM API调用量_____ (下降___%)
  • 任务成功率_____%
  • 平均响应时间_____ms
  • 错误数_____
  • 实例重启次数_____
  • 任务恢复成功率_____%

遇到的问题:

问题1
描述:
解决方案:
解决时间:

🎯 关键里程碑

# 里程碑 目标日期 实际日期 状态 备注
M1 环境准备完成 Day 1 _____ pg-boss安装数据库迁移
M2 缓存系统完成 Day 1 _____ PostgresCacheAdapter测试通过
M3 队列系统完成 Day 3 _____ PgBossQueue测试通过
M4 高级特性完成 Day 5 _____ 拆分+断点机制完成
M5 业务集成完成 Day 7 _____ ASL改造完成100篇测试通过
M6 全面测试完成 Day 8 _____ 1000篇测试通过
M7 生产上线完成 Day 9 _____ 48小时验证通过

📈 每日进度记录

Day 1月___日

计划任务:

  • Phase 1: 环境准备
  • Phase 2: PostgresCacheAdapter

实际完成:

工作时长: ___小时

完成质量: 🟢 优秀 / 🟡 良好 / 🔴 需改进

遇到的主要问题: 1.

学到的经验: 1.

明天计划:


Day 2月___日

计划任务:

  • Phase 3: PgBossQueue开始

实际完成:

工作时长: ___小时

完成质量: 🟢 优秀 / 🟡 良好 / 🔴 需改进

遇到的主要问题: 1.

学到的经验: 1.

明天计划:


Day 3月___日

计划任务:

  • Phase 3: PgBossQueue完成
  • 测试验证Phase 2-3

实际完成:

工作时长: ___小时

完成质量: 🟢 优秀 / 🟡 良好 / 🔴 需改进

遇到的主要问题: 1.

学到的经验: 1.

明天计划:


Day 4月___日

计划任务:

  • Phase 4: 任务拆分机制

实际完成:

工作时长: ___小时

完成质量: 🟢 优秀 / 🟡 良好 / 🔴 需改进

遇到的主要问题: 1.

学到的经验: 1.

明天计划:


Day 5月___日

计划任务:

  • Phase 5: 断点续传机制

实际完成:

工作时长: ___小时

完成质量: 🟢 优秀 / 🟡 良好 / 🔴 需改进

遇到的主要问题: 1.

学到的经验: 1.

明天计划:


Day 6月___日

计划任务:

  • Phase 6: ASL筛选改造开始

实际完成:

工作时长: ___小时

完成质量: 🟢 优秀 / 🟡 良好 / 🔴 需改进

遇到的主要问题: 1.

学到的经验: 1.

明天计划:


Day 7月___日

计划任务:

  • Phase 6: ASL筛选改造完成
  • Phase 7: DC提取改造可选

实际完成:

工作时长: ___小时

完成质量: 🟢 优秀 / 🟡 良好 / 🔴 需改进

遇到的主要问题: 1.

学到的经验: 1.

明天计划:


Day 8月___日

计划任务:

  • Phase 8: 全面测试验证

实际完成:

工作时长: ___小时

完成质量: 🟢 优秀 / 🟡 良好 / 🔴 需改进

遇到的主要问题: 1.

学到的经验: 1.

明天计划:


Day 9月___日

计划任务:

  • Phase 9: SAE部署上线

实际完成:

工作时长: ___小时

完成质量: 🟢 优秀 / 🟡 良好 / 🔴 需改进

遇到的主要问题: 1.

学到的经验: 1.

后续计划:


📝 问题与解决方案汇总

问题列表

# 发现日期 Phase 问题描述 严重程度 状态 解决方案 解决日期
1 _____ Phase ___ 🔴高/🟡中/🟢 未解决/已解决 _____
2 _____ Phase ___ 🔴高/🟡中/🟢 未解决/已解决 _____
3 _____ Phase ___ 🔴高/🟡中/🟢 未解决/已解决 _____

重要问题详细记录

问题1

  • 发现时间:
  • 问题描述:
  • 影响范围:
  • 根本原因:
  • 解决方案:
  • 预防措施:
  • 解决时间:

📚 学习笔记与最佳实践

pg-boss 使用心得

1. 
2. 
3. 

Prisma 迁移注意事项

1. 
2. 
3. 

测试技巧

1. 
2. 
3. 

调试经验

1. 
2. 
3. 

🎉 项目总结

最终成果

代码统计:

  • 新增代码_____ 行
  • 修改代码_____ 行
  • 测试代码_____ 行
  • 总代码量_____ 行

测试结果:

  • 单元测试_____ / _____ 通过
  • 集成测试_____ / _____ 通过
  • 功能测试_____ / _____ 通过
  • 性能测试_____ / _____ 通过

性能指标:

  • 缓存命中率_____%(目标 > 60%
  • LLM API调用量下降_____%(目标 > 40%
  • 长任务成功率_____%(目标 > 99%
  • 实例重启恢复_____%(目标 100%

项目亮点

待改进事项

后续优化计划


🔗 相关文档链接


🎉 Phase 1-7 完成总结2025-12-13

完成情况

完成项 数量 说明
完成阶段 7个 Phase 1-7 全部完成
完成任务 31个 总任务数45个完成69%
代码量 ~1750行 新增核心代码
测试 10个 全部通过
文档 4个 全部更新

🏆 核心成果

  1. Platform-Only 架构重构

    • 统一使用 platform_schema.job.data 存储任务管理信息
    • 业务表保持简洁,只存储业务信息
    • CheckpointService 所有模块通用
    • 符合 3 层架构原则
  2. 智能双模式处理

    • 小任务(<50条直接处理快速响应
    • 大任务≥50条队列处理可靠性高
    • 性能与可靠性的完美平衡
  3. 零额外成本

    • 使用 Postgres不需要 Redis
    • 年省 ¥8400
    • 运维成本零增加

📊 工作量统计

实际用时6.5天
预计用时9天
提前完成2.5天 ✅

代码量:~1750行目标~1900行
测试覆盖100%
Linter错误0个

🎯 下一步

  • Phase 8全面测试验证预计5天
  • Phase 9SAE部署上线预计5.5天)

版本历史:

  • V1.02025-12-07初始版本
  • V1.12025-12-13Phase 1-7 完成,添加 Platform-Only 架构重构记录