Files
AIclinicalresearch/docs/00-系统总体设计/00-核心问题解答.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

18 KiB
Raw Permalink Blame History

核心问题解答

创建日期: 2025-11-06
文档目的: 回答用户提出的关键架构问题


📋 您提出的问题

您提出了非常核心的架构问题,这些问题直接影响了整个系统的设计。让我逐一深入解答:


1 文档系统重构

您的建议

1系统总体架构、总体需求PRD、系统总体设计、系统总体部署等应该是一个独立的文件夹
27个模块应该是独立的7个文件夹每个模块有项目概述、设计文档、业务规则、开发计划、每日进度、部署文档

我的回复

完全认同!这是非常正确的架构思路!

我已经创建了详细的文档重构方案:

新文档结构:

docs/
  ├── 00-系统总体设计/          # ✅ 总体独立
  │   ├── 01-系统架构分层设计.md
  │   ├── 02-文档体系重构方案.md
  │   ├── 03-总体需求文档(PRD).md
  │   ├── 04-技术架构白皮书.md
  │   └── 05-部署架构设计.md
  │
  ├── 01-平台基础层/           # 平台层(用户权限、存储、通知等)
  ├── 02-通用能力层/           # 通用能力LLM网关、文档处理、RAG等
  │
  └── 03-业务模块/             # ✅ 7个模块独立
      ├── AIA-AI智能问答/
      ├── ASL-AI智能文献/
      ├── PKB-个人知识库/
      ├── DC-数据清洗整理/
      ├── SSA-智能统计分析/
      ├── ST-统计分析工具/
      └── RVW-稿件审查系统/

每个模块的标准结构:

XXX-模块名称/
  ├── 00-项目概述/         # PRD、功能清单、用户故事
  ├── 01-设计文档/         # 技术架构、数据库、API、前端组件、UI原型
  ├── 02-业务规则/         # 业务规则、验证规则
  ├── 03-开发计划/         # 里程碑、任务分解
  ├── 04-测试文档/         # 测试计划、测试用例
  ├── 05-部署文档/         # 部署指南、配置说明
  ├── 06-开发进度/         # 每日/每周进度(可选)
  └── README.md           # 模块导航

核心优势:

  • 总体与模块分离
  • 层次清晰(平台层、通用能力层、业务模块层)
  • 支持模块独立销售(每个模块文档可独立打包)
  • 易于扩展(新增模块复制模板即可)

2 不考虑混合部署

您的决策

只考虑云端、本地化(私有化)、单机版,不考虑混合部署

我的回复

完全赞同!混合部署技术难度极高,需求不明确,应该暂缓。

调整后的部署模式:

部署模式 目标用户 技术难度 优先级
云端SaaS版 个人用户、小机构 中等 P0当前
私有化部署 医院、大机构 P1阶段二
单机版Electron 个人医生 很高 P2阶段二
混合部署 高级客户 极高 不考虑

简化后的好处:

  • 降低技术复杂度
  • 聚焦核心场景
  • 加快开发速度
  • 降低维护成本

阶段规划:

阶段一(当前-6个月云端SaaS版
- 专注云端部署
- 验证市场需求
- 快速迭代

阶段二6-18个月私有化部署
- 触发条件:有客户明确要求
- 引入K8s
- Docker一键部署

阶段三18个月+):单机版(可选)
- 触发条件:有大量单机版需求
- 开发Electron应用
- 本地化运行

3 审稿系统的独立性

您的计划

未来还会增加一个审稿系统的开发,目前已经有核心审稿功能了,可能需要独立成一个系统

我的回复

审稿系统非常适合独立!这是一个极具商业价值的决策!

为什么审稿系统适合独立?

1. 用户群完全不同

主平台用户:临床医生、研究者
审稿系统用户:期刊编辑部、出版社、学会

→ 两类用户没有交集,完全独立

2. 业务逻辑完全独立

主平台:科研全流程(统计分析、文献筛选、数据清洗)
审稿系统:稿件审查流程(投稿、审稿、修改、决策)

→ 业务逻辑无关联

3. 部署场景独立

主平台云端SaaS为主部分私有化
审稿系统:期刊编辑部独立部署

→ 部署需求不同

4. 商业模式独立

主平台:按版本订阅(基础版、高级版、旗舰版)
审稿系统:按期刊订阅,或按稿件数量计费

→ 商业模式完全不同

当前状态:

  • 核心功能已实现(文档提取、规范性评估、方法学评估)
  • 数据库表已独立review_tasks
  • ⚠️ 需要扩展(审稿人管理、审稿流程、多轮审稿)

建议:

短期(当前):
- 审稿系统作为主平台的一个模块
- 但在架构设计上保持独立独立Schema、独立API

中期6-12个月
- 开发完整审稿系统(审稿人、流程、多轮审稿)
- 验证市场需求

长期12个月+
- 完全独立为单独产品"AI辅助审稿系统"
- 独立部署、独立销售
- 目标客户:期刊编辑部、出版社

独立销售价值: 极高!

  • 市场空白国内缺乏AI审稿工具
  • 刚需:期刊编辑部审稿压力大
  • 付费能力强:期刊有预算

4 总体 vs 通用 vs 模块独立

您的核心问题

哪些是总体的?哪些是通用的技术能力?哪些是各模块独立的?
哪些能力是复用的?哪些技术架构可以复用?

我的回复

这是最核心的架构问题!我已经创建了详细的架构分层设计:

三层架构总览:

第一层平台基础层Platform Layer

定义: 所有业务模块的地基,提供通用的基础设施能力

包含模块:

  1. 用户与权限中心UAM - 用户认证、权限管理、Feature Flag
  2. 存储服务 - 文件上传下载、OSS/本地文件系统
  3. 通知服务 - 站内消息、邮件、WebSocket推送
  4. 监控与日志 - 操作日志、错误日志、审计日志
  5. 系统配置 - 系统级配置管理

特征:

  • 全局唯一(整个平台只有一套)
  • 业务无关(不涉及具体业务逻辑)
  • 强依赖性(所有业务模块都必须依赖)
  • 稳定性高(很少变动)

第二层通用能力层Capability Layer

定义: 跨业务模块共享的核心技术能力

包含能力:

1. LLM大模型网关 最核心

职责:

  • 统一管理所有LLM调用
  • 根据用户版本动态切换模型
  • 成本控制与限流
  • Token计数与计费

使用模块:

  • AIAAI智能问答
  • ASLAI智能文献
  • PKB个人知识库
  • DC数据清洗
  • RVW稿件审查

复用率: 5/7 = 71%

为什么是核心?

这是商业模式的技术保障:
- 基础版只能用DeepSeek-V3¥1/百万tokens
- 高级版可用DeepSeek + Qwen3
- 旗舰版可用DeepSeek + Qwen3 + Qwen-Long + Claude

成本控制:
- 统一监控所有LLM API调用
- 超出配额自动限流
- 按版本计费

当前状态: 未实现P0优先级


2. 文档处理引擎 最核心

职责:

  • 多格式文档提取PDF/Docx/Txt/Excel
  • 文本清洗与预处理
  • OCR处理
  • 表格提取

使用模块:

  • ASL文献PDF提取
  • PKB知识库文档
  • DCExcel/Docx导入
  • SSA数据导入
  • ST数据导入
  • RVW稿件提取

复用率: 6/7 = 86%

当前状态: 已实现Python微服务


3. RAG引擎 核心

职责:

  • 向量化存储Embedding
  • 语义检索Semantic Search
  • 检索增强生成RAG

使用模块:

  • PKB个人知识库问答
  • ASL文献内容检索
  • AIA@知识库问答)

复用率: 3/7 = 43%

当前状态: 已实现基于Dify


4. 数据ETL引擎 中等

职责:

  • Excel多表JOIN
  • 数据清洗
  • 数据转换

使用模块:

  • DC数据清洗
  • SSA统计分析数据预处理

复用率: 2/7 = 29%

当前状态: 未实现P2优先级


5. 医学NLP引擎 中等

职责:

  • 医学实体识别NER
  • 医学术语标准化

使用模块:

  • DC病例数据NER提取

复用率: 1/7 = 14%

当前状态: 未实现P2优先级


第三层业务模块层Product Layer

定义: 面向用户的产品功能,每个模块都是独立的产品单元

7个业务模块

模块 名称 商业价值 独立性 状态
AIA AI智能问答 已完成
ASL AI智能文献 下一步重点
PKB 个人知识库 已完成
DC 数据清洗整理 规划中
SSA 智能统计分析 规划中
ST 统计分析工具 规划中
RVW 稿件审查系统 独立系统

特征:

  • 独立部署:可以单独打包部署
  • 独立销售:可以单独售卖
  • 低耦合:模块间不直接依赖
  • 高内聚:模块内功能完整

可复用能力总结

能力 使用频率 复用模块数 优先级 状态
LLM网关 71% 5/7 P0 待实现
文档处理引擎 86% 6/7 P0 已实现
RAG引擎 43% 3/7 P1 已实现
ETL引擎 29% 2/7 P2 待实现
医学NLP 14% 1/7 P2 待实现

5 数据库架构

您的问题

设计多Schema架构是非常必要的。
目前当前系统的数据库似乎是DIFY的
目前我们有自己独立的数据库吗?

我的回复

我们有自己独立的PostgreSQL数据库不是Dify的

当前数据库情况:

// 数据源backend/prisma/schema.prisma
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

当前表结构:

当前数据库PostgreSQL独立于Dify
├── users                    # 用户表
├── projects                 # 项目表
├── conversations            # 对话表AI问答
├── messages                 # 消息表
├── knowledge_bases          # 知识库表
├── documents                # 文档表
├── admin_logs               # 管理员日志
├── general_conversations    # 通用对话
├── general_messages         # 通用消息
├── batch_tasks              # 批处理任务Phase 3
├── batch_results            # 批处理结果
├── task_templates           # 任务模板
└── review_tasks             # 稿件审查任务

Dify数据库完全独立
├── dify自己的表不在我们的数据库
└── 通过Dify API调用不直接访问

关键澄清:

  • 我们有自己的PostgreSQL数据库
  • Dify有自己的数据库我们不直接访问
  • 我们通过Dify API调用HTTP REST API
  • 两个数据库完全独立

但是存在的问题:

  • 所有表在同一Schemapublic
  • 未来微服务拆分困难
  • 不支持模块独立部署

Schema隔离方案

目标架构:

-- 平台层Schema
CREATE SCHEMA platform_schema;
  ├── users
  ├── roles
  ├── permissions
  ├── feature_flags
  ├── notifications
  └── admin_logs

-- 通用能力Schema
CREATE SCHEMA capability_schema;
  ├── llm_usage_logs
  ├── llm_quotas
  └── document_processing_logs

-- 业务模块Schema
CREATE SCHEMA aia_schema;        -- AI智能问答
  ├── aia_projects
  ├── aia_conversations
  └── aia_messages

CREATE SCHEMA asl_schema;        -- AI智能文献
  ├── asl_projects
  ├── asl_literature_items
  ├── asl_screening_results
  └── ...

CREATE SCHEMA pkb_schema;        -- 个人知识库
  ├── pkb_knowledge_bases
  └── pkb_documents

CREATE SCHEMA dc_schema;         -- 数据清洗
  ├── dc_projects
  ├── dc_raw_files
  └── dc_cleaned_data

CREATE SCHEMA ssa_schema;        -- 智能统计分析
  ├── ssa_projects
  └── ssa_analysis_tasks

CREATE SCHEMA st_schema;         -- 统计分析工具
  └── st_tool_usage

CREATE SCHEMA review_schema;     -- 稿件审查
  ├── review_tasks
  ├── review_journals
  ├── review_reviewers
  └── review_workflows

迁移策略

阶段一:逻辑隔离(当前阶段,立即实施)

目标在代码层面按Schema组织但数据库还是public
方式Prisma中使用@@map指定表名前缀

例如:
model AiaProject {
  id        String @id @default(uuid())
  // ...
  @@map("aia_projects")     // 表名前缀标识模块
}

model AslProject {
  id        String @id @default(uuid())
  // ...
  @@map("asl_projects")
}

model DcProject {
  id        String @id @default(uuid())
  // ...
  @@map("dc_projects")
}

好处:

  • 立即可实施,无需数据迁移
  • 为未来物理隔离打基础
  • 代码层面已经按模块组织

阶段二:物理隔离(微服务拆分时,阶段二)

目标真正创建独立Schema
时机:当需要拆分某个模块为独立微服务时

步骤:
1. CREATE SCHEMA xxx_schema;
2. CREATE TABLE xxx_schema.table_name ...
3. INSERT INTO xxx_schema.table SELECT * FROM public.old_table;
4. 更新Prisma Schema指定schema
5. 测试验证
6. 切换生产

6 下一步开发重点

您的决策

下一步着重开发的功能肯定是AI智能文献模块。
当然在总体架构讨论清楚前,我们先不开发。

我的回复

完全赞同AI智能文献是核心竞争力应该是下一步重点。

开发顺序建议:

第一步架构设计本周1-2天

P0文档必须完成
1. ✅ 系统架构分层设计(已完成)
2. ✅ 文档体系重构方案(已完成)
3. ⚠️ LLM大模型网关设计关键
4. ⚠️ 数据库Schema隔离方案关键

第二步文档整理本周1-2天

1. 调整ASL模块文档结构按新模板
2. 补充缺失的设计文档
3. 明确开发里程碑

第三步关键技术验证下周1-2天

1. ⚠️ R语言技术验证SSA模块需要可延后
2. ⚠️ LLM Gateway原型验证
3. ⚠️ Schema隔离迁移测试

第四步开始ASL模块开发下周开始

优先级:
- P0标题摘要初筛核心功能已有原型
- P1全文复筛核心功能已有原型
- P2全文解析与数据提取
- P3数据分析与报告生成

🎯 总体策略建议

核心原则

1. 架构先行,文档先行

✅ 先把总体架构讨论清楚
✅ 先把文档结构调整好
✅ 然后再开始开发

2. 聚焦核心,逐步扩展

阶段一(当前-6个月
- 云端SaaS版
- 核心模块ASL、DC、AIA优化
- 关键能力LLM网关、Schema隔离

阶段二6-18个月
- 私有化部署
- 扩展模块SSA、ST
- 独立系统RVW审稿系统

阶段三18个月+
- 单机版(可选)
- 全面微服务

3. 模块独立,能力复用

✅ 业务模块独立设计(低耦合)
✅ 通用能力统一提供(高复用)
✅ 支持模块独立销售

立即行动清单

本周行动P0

1. 架构设计1-2天

  • 系统架构分层设计
  • 文档体系重构方案
  • LLM大模型网关设计
  • 数据库Schema隔离方案

2. 文档迁移1-2天

  • 创建新文件夹结构
  • 迁移ASL模块文档
  • 调整文档结构(按新模板)

下周行动P1

3. 关键文档补充2-3天

  • ASL模块缺失文档
  • LLM网关详细设计
  • RVW独立系统规划

4. 开始ASL模块开发启动

  • 数据库表设计asl_schema
  • API设计
  • 前端组件设计

📊 总结

您的想法非常正确!

  1. 文档系统重构:总体独立,模块独立
  2. 不考虑混合部署:简化技术复杂度
  3. 审稿系统独立:极具商业价值
  4. 架构分层清晰:平台层、通用能力层、业务模块层
  5. Schema隔离必要:支持模块独立和微服务拆分
  6. ASL是下一步重点:核心竞争力

当前最关键的工作

P0本周

  1. 完成架构设计文档LLM网关、Schema隔离
  2. 调整文档结构迁移ASL模块

P1下周 3. 补充关键文档 4. 开始ASL模块开发

我们不着急,先把总体思路沟通清楚

完全认同您的想法!

架构设计是地基,地基不牢,后面开发会很痛苦。

我们先把架构和文档梳理清楚,再开始开发。


接下来您想讨论什么?

  1. LLM大模型网关的详细设计
  2. 数据库Schema隔离的具体实施
  3. ASL模块的开发计划
  4. 审稿系统的独立规划?
  5. 其他架构问题?