Files
hms/wiki/erp-server.md
iven ca50d32f6e
Some checks failed
CI / rust-check (push) Has been cancelled
CI / rust-test (push) Has been cancelled
CI / frontend-build (push) Has been cancelled
CI / security-audit (push) Has been cancelled
feat(health): 添加 erp-health 健康管理模块骨架
新建 erp-health 原生 Rust crate,覆盖设计规格中定义的 5 大业务域:

- 16 个 SeaORM Entity(患者/家属/标签/医生/健康档案/体征/化验单/预约/排班/随访/咨询等)
- 16 表数据库迁移(含索引、外键、默认值、可回滚)
- 40+ API 路由骨架(患者管理/健康数据/预约排班/随访/咨询/医生管理)
- 12 个权限声明(health.patient/health-data/appointment/follow-up/consultation/doctor 各 .list/.manage)
- DTO / Service / Handler / Event 四层架构,Service 使用 todo!() 占位
- erp-server 集成:模块注册 + AppState FromRef 桥接 + 路由挂载

同步更新 CLAUDE.md 项目进度、wiki 知识库、设计规格文档。
2026-04-23 19:59:22 +08:00

3.4 KiB

title, updated, status, tags
title updated status tags
erp-server 2026-04-23 stable
server
axum
assembly
entry-point

erp-server

index 导航。关联: erp-core infrastructure database frontend

1. 设计决策

  • 唯一组装点 — 不含业务逻辑,只负责把所有模块组装成可运行服务
  • 配置优先config crate 从 TOML + 环境变量加载,ERP__ 前缀覆盖
  • 严格启动序列 — 每步失败即终止,不做部分启动
  • 安全检查 — 拒绝默认 JWT 密钥 / 数据库 URL

2. 关键文件 + 数据流

核心文件

文件 职责
crates/erp-server/src/main.rs 服务启动入口
crates/erp-server/src/state.rs AppState 定义
crates/erp-server/src/config.rs 5 个配置 struct + 加载逻辑
crates/erp-server/src/db.rs SeaORM 连接池配置
crates/erp-server/config/default.toml 默认配置(密钥为占位符)

启动流程

AppConfig::load() → 安全检查 → init_tracing → db::connect → Migrator::up
  → 种子数据(默认租户+管理员) → Redis客户端 → EventBus(容量1024)
  → 注册5个模块 → 初始化插件引擎+恢复插件 → 4个后台任务
  → 构建Router → bind + serve → 优雅关闭(CTRL+C/SIGTERM)

注册的 5 个模块

AuthModule → ConfigModule → WorkflowModule → MessageModule → PluginModule

AppState

AppState {
  db: DatabaseConnection,
  config: AppConfig,
  event_bus: EventBus,
  module_registry: ModuleRegistry,
  redis: redis::Client,
  default_tenant_id: Uuid,
  plugin_engine: PluginEngine,
  plugin_entity_cache: moka::Cache (1000容量, 5分钟TTL),
}

集成契约

方向 模块 接口 触发时机
组装 → erp-auth AuthModule 启动时注册
组装 → erp-config ConfigModule 启动时注册
组装 → erp-workflow WorkflowModule 启动时注册
组装 → erp-message MessageModule 启动时注册
组装 → erp-plugin PluginModule 启动时注册
依赖 ← erp-core ErpModule trait, EventBus 所有模块
依赖 ← infrastructure PostgreSQL, Redis 连接

后台任务

  1. 消息监听器 — EventBus → MessageModule
  2. 插件通知 — EventBus → PluginModule
  3. Outbox relay — domain_events → 外部
  4. 超时检查器 — 工作流任务超时处理

3. 代码逻辑

中间件栈

CORS(可配置 origins) → IP限流(公开路由) → 用户限流(受保护路由) → JWT认证

配置结构

AppConfig
├── server: { host: "0.0.0.0", port: 3000 }
├── database: { url, max_connections: 20, min_connections: 5 }
├── redis: { url }
├── jwt: { secret, access_token_ttl: 15min, refresh_token_ttl: 7d }
└── log: { level: "info" }

不变量: 4 个环境变量在 default.toml 中都是 __MUST_SET_VIA_ENV__ 占位符,必须通过环境变量设置

不变量: 启动顺序不可变更 — 数据库必须先于迁移,迁移必须先于模块注册

4. 活跃问题 + 陷阱

⚠️ 后端必须从 crates/erp-server/ 目录启动(或通过环境变量覆盖所有配置) ⚠️ 种子数据自动创建默认租户和管理员,重复启动幂等

5. 变更记录

日期 变更
2026-04-23 重构为 5 节结构,更新为当前集成状态