定位:现有 Maven 工程 + 规划领域模块 + 依赖/调用关系总览。
风格:大厂技术培训 / 高密度 / 强层级 / 甲方快乐图。
flowchart TB
%% ========== Style ==========
classDef entry fill:#0b5cff,color:#fff,stroke:#073ea8,stroke-width:2px
classDef existing fill:#eaf3ff,color:#071d49,stroke:#6aa5ff,stroke-width:1.5px
classDef planned fill:#eefbf3,color:#083b1f,stroke:#45b36b,stroke-width:1.5px
classDef boundary fill:#fff7e6,color:#4a2a00,stroke:#f0a020,stroke-width:1.5px
classDef infra fill:#f3f4f6,color:#111827,stroke:#9ca3af,stroke-width:1.5px
classDef external fill:#f7efff,color:#2e1065,stroke:#9b5de5,stroke-width:1.5px
classDef data fill:#fff1f2,color:#4a0614,stroke:#fb7185,stroke-width:1.5px
classDef future fill:#ecfeff,color:#083344,stroke:#06b6d4,stroke-width:1.5px,stroke-dasharray: 5 4
%% ========== External Channels ==========
subgraph L0["L0 外部触点 / 客户侧入口"]
Patient["患者端<br/>小程序 / APP / 公众号"]:::external
Doctor["医护端<br/>医生站 / 护士站 / PDA"]:::external
Robot["机器人 / 自助机 / 床旁屏"]:::external
OpsUser["医院管理员 / 医梦运营 / 财务"]:::external
Device["IoMT 设备<br/>床垫 / 雷达 / 输液泵 / 体征"]:::external
VoiceGw["语音网关<br/>外呼 / 通话回调"]:::external
end
%% ========== Application Entrypoints ==========
subgraph L1["L1 应用入口层:当前已存在,建议保留少量启动应用"]
AdminApp["emoon-admin<br/>管理后台启动应用<br/>系统配置 / 合同账单 / 运营审计"]:::entry
OpenApp["emoon-openplatform<br/>对外开放平台<br/>签名鉴权 / Agent API / SSE / Card Action"]:::entry
SnailJob["emoon-extend/emoon-snailjob-server<br/>任务调度基础设施"]:::existing
Monitor["emoon-extend/emoon-monitor-admin<br/>监控后台"]:::existing
end
Patient --> OpenApp
Doctor --> OpenApp
Robot --> OpenApp
OpsUser --> AdminApp
Device -.设备事件.-> IoMTHub
VoiceGw -.通话回调.-> FollowupSvc
%% ========== Current Maven Foundation ==========
subgraph L2["L2 当前 Maven 基座:已有工程资产"]
Common["emoon-infra/emoon-common<br/>core / redis / mybatis / satoken / security / oss / job / idempotent"]:::infra
SystemApi0["emoon-modules-api/emoon-system-api<br/>系统 DO / Service API / Mapper"]:::existing
McpApi0["emoon-modules-api/emoon-mcp-api<br/>现有 AgentEngine / 会话 / 卡片 / MCP 混合 API"]:::existing
KnowledgeApi0["emoon-modules-api/emoon-knowledge-api<br/>知识库 / Agent 设计态 / 质控资产"]:::existing
SystemImpl0["emoon-modules/emoon-system<br/>系统管理 / 引擎配置 CRUD"]:::existing
McpImpl0["emoon-modules/emoon-mcp<br/>现有 MCP 雏形 / CRUD 模板"]:::existing
Tongue0["emoon-extend/emoon-tongue<br/>舌诊/面诊专精能力"]:::existing
Migration["emoon-extend/emoon-migration<br/>迁移工具"]:::existing
FileDownloader["emoon-extend/emoon-file-downloader<br/>文件下载工具"]:::existing
end
AdminApp --> Common
OpenApp --> Common
AdminApp --> SystemImpl0
SystemImpl0 --> SystemApi0
OpenApp --> SystemApi0
OpenApp --> McpApi0
OpenApp --> KnowledgeApi0
McpImpl0 --> McpApi0
Tongue0 --> Common
%% ========== Planned Domain Modules ==========
subgraph L3["L3 规划领域模块:模块化单体优先,按领域隔离"]
AiAgentApi["emoon-ai-agent-api<br/>AgentRequest / AgentResponse / Engine SPI"]:::planned
AiAgent["emoon-ai-agent<br/>DifyAgentEngine / DirectLLM / Mock<br/>会话编排 / Dify 输出归一"]:::planned
AiCardApi["emoon-ai-card-api<br/>CardDefinition / CardInstance / CardAction API"]:::planned
AiCard["emoon-ai-card<br/>卡片定义 / 实例 / 动作状态机 / 快照"]:::planned
AiMcpApi["emoon-ai-mcp-api<br/>ToolContract / ToolResult / HospitalAdapter SPI"]:::planned
AiMcp["emoon-ai-mcp<br/>MCP Tool Service / HIS Adapter / 工具审计"]:::planned
AiMeterApi["emoon-ai-meter-api<br/>MeterEvent / BillingEpisode / Outbox Contract"]:::planned
AiMeter["emoon-ai-meter<br/>Outbox / MeterEvent / BillingEpisode / 事件归并"]:::planned
AiBillingApi["emoon-ai-billing-api<br/>Contract / Pricing / Credit / Billing API"]:::planned
AiBilling["emoon-ai-billing<br/>合同 / 能力值账户 / 定价 / 账本 / 账单"]:::planned
AiKnowledgeApi["emoon-ai-knowledge-api<br/>Knowledge / Prompt / RAG / QC API"]:::planned
AiKnowledge["emoon-ai-knowledge<br/>知识资产 / Prompt 模板 / RAG / 质控规则"]:::planned
end
%% planned replacement/migration hints
McpApi0 -.拆分迁移.-> AiAgentApi
McpApi0 -.拆分迁移.-> AiCardApi
McpApi0 -.拆分迁移.-> AiMcpApi
KnowledgeApi0 -.收敛迁移.-> AiKnowledgeApi
SystemApi0 -.保留系统域.-> AiBillingApi
OpenApp --> AiAgentApi
OpenApp --> AiCardApi
OpenApp --> AiMeterApi
OpenApp --> AiBillingApi
OpenApp --> AiKnowledgeApi
AdminApp --> AiBillingApi
AdminApp --> AiCardApi
AdminApp --> AiMcpApi
AdminApp --> AiKnowledgeApi
AiAgent --> AiAgentApi
AiCard --> AiCardApi
AiMcp --> AiMcpApi
AiMeter --> AiMeterApi
AiBilling --> AiBillingApi
AiKnowledge --> AiKnowledgeApi
AiAgent --> AiKnowledgeApi
AiAgent --> AiCardApi
AiAgent --> AiMeterApi
AiCard --> AiMcpApi
AiCard --> AiMeterApi
AiMcp --> AiMeterApi
AiMeter --> AiBillingApi
AiBilling --> AiMeterApi
%% ========== Future Boundary Services ==========
subgraph L4["L4 可独立部署边界:先模块化实现,满足条件后拆服务"]
McpServer["MCP Tool Server<br/>独立院内部署候选<br/>HIS/EMR/LIS/PACS 唯一工具出口"]:::future
AudioGw["AudioStreamGateway<br/>WebSocket 音频流 / ASR 分钟计量"]:::future
IoMTHub["IoMTEventIngestion<br/>设备认证 / 护理预警事件接入"]:::future
FollowupSvc["OutboundFollowupService<br/>随访计划 / 语音外呼 / 风险升级"]:::future
FileWorker["File/OCR/ASR Worker<br/>报告解析 / 图片处理 / 长任务"]:::future
end
AiMcp -.后续独立.-> McpServer
AiAgent -.音频文本进入 Agent.-> AudioGw
AudioGw --> AiMeterApi
IoMTHub --> AiMeterApi
FollowupSvc --> AiMeterApi
FileWorker --> AiMeterApi
OpenApp --> AudioGw
SnailJob --> FollowupSvc
SnailJob --> AiMeter
SnailJob --> AiBilling
%% ========== External AI / Hospital Systems ==========
subgraph L5["L5 外部系统 / 院内系统 / AI 能力"]
Dify["Dify Platform<br/>Workflow / LLM 节点 / RAG / 工具调用"]:::external
DirectLLM["Direct LLM / Vision Model<br/>L1 主引擎 / 降级 / 专精模型"]:::external
HIS["HIS / EMR / LIS / PACS<br/>排班 / 号源 / 建档 / 住院 / 随访"]:::external
ASR["ASR / TTS Provider<br/>语音识别 / 合成"]:::external
OSS["Object Storage<br/>报告 / 图片 / 音频 / 脱敏附件"]:::external
end
AiAgent --> Dify
AiAgent --> DirectLLM
Dify --> AiMcp
AiMcp --> HIS
McpServer --> HIS
AudioGw --> ASR
FollowupSvc --> ASR
OpenApp --> OSS
FileWorker --> OSS
Tongue0 --> DirectLLM
%% ========== Data Layer ==========
subgraph L6["L6 数据与可靠性底座:先单库强一致,Outbox 异步扩展"]
MySQL["MySQL<br/>系统 / Agent / Card / Meter / Billing / Audit"]:::data
Redis["Redis<br/>缓存 / 限流 / 短锁 / SSE 状态"]:::data
Outbox["Outbox Table<br/>业务事实同事务落库"]:::data
Ledger["Credit Ledger<br/>grant / freeze / settle / release / reverse"]:::data
Audit["Audit / Trace<br/>traceId / 医疗确认 / 敏感访问"]:::data
end
SystemImpl0 --> MySQL
AiAgent --> MySQL
AiCard --> MySQL
AiMcp --> MySQL
AiMeter --> MySQL
AiBilling --> MySQL
AiKnowledge --> MySQL
AiMeter --> Outbox
AiBilling --> Ledger
OpenApp --> Redis
AiCard --> Redis
AiMcp --> Redis
AiMeter --> Audit
AiBilling --> Audit
AiMcp --> Audit
AiCard --> Audit
%% ========== Legend ==========
subgraph Legend["图例 / 拆分原则"]
LG1["蓝色:启动应用 / 入口"]:::entry
LG2["浅蓝:当前已有模块"]:::existing
LG3["绿色:建议规划领域模块"]:::planned
LG4["青色虚线:未来可拆服务"]:::future
LG5["红色:数据与账本事实"]:::data
LG6["紫色:外部系统"]:::external
end
emoon-mcp-api:它现在混了 Agent、Card、MCP 概念,建议拆成 emoon-ai-agent-api、emoon-ai-card-api、emoon-ai-mcp-api。