# 系统架构 ## 整体架构 ```mermaid graph TB subgraph 客户端 U[患者小程序
xk-client-wx] D[医生小程序
xk-doctor-wx] A[管理后台
xk-admin] S[数据大屏
xk-data] end subgraph API层 API[xk-api
Laravel 12] YII[xk-api-yii
Yii2 遗留] end subgraph 数据层 DB1[(z_xk
新库)] DB2[(z_o_xk
旧库)] RD[(Redis)] MQ[(RabbitMQ)] OSS[(阿里云 OSS)] end subgraph 外部集成 PAY1[微信支付] PAY2[易票联支付] SMS[短信服务] HY[xk-hy-forward-go
Go 转发] GOV[浙江省政务云
监管平台] MES[和利康 MES
中药智造] ERP[ERP 系统] KUAI100[快递100] end U --> API D --> API A --> API S --> API API --> DB1 API --> DB2 API --> RD API --> MQ API --> OSS API --> PAY1 API --> PAY2 API --> SMS API --> HY API --> MES API --> ERP API --> KUAI100 HY --> GOV ``` ## 双数据库策略 系统同时连接两个 MySQL 数据库: ```mermaid graph LR subgraph z_xk 新库 67张表 A1[管理后台 xk_admin] A2[财务 xk_account_*] A3[销售 xk_salesperson_*] A4[处方 xk_special_prescription*] A5[监管 xk_hy_transit_*] A6[系统配置 xk_system_config] end subgraph z_o_xk 旧库 约100张表 B1[药品 yii_drug] B2[订单 yii_product_order] B3[处方 yii_prescription] B4[用户 yii_user] B5[门店 yii_store] B6[医生 yii_doctor_info] B7[挂号 yii_register] end API[xk-api] -->|读写| A1 API -->|读写| A2 API -->|读写| A3 API -->|读写| B1 API -->|读写| B2 API -->|读写| B3 ``` ::: warning 跨库注意事项 - 新库和旧库之间**不允许 JOIN 查询** - 跨库关联需要在应用层做两步查询 - 定时任务 `app:accrue-salesperson-commission` 需要同时查两个库 ::: ## API 路由架构 xk-api 通过路由文件划分不同端的接口: | 路由文件 | 前缀 | 用途 | 认证方式 | |----------|------|------|----------| | `admin.php` | `/api/admin` | 管理后台 API | JWT (AdminAuthMiddleware) | | `mobile.php` | `/api/mobile` | 患者小程序 API | JWT (MobileAuthMiddleware) | | `doctor.php` | `/api/doctor` | 医生端小程序 API | 多种角色中间件 | | `hy.php` | `/api/hy` | 互联网医院监管 API | HyTransitApiMiddleware | | `callback.php` | `/api/callback` | 支付回调 | 签名验证 | | `open-api.php` | `/api/open` | 开放 API | 无/简单认证 | ## 中间件链 ```mermaid graph LR REQ[请求] --> CORS[CORS] CORS --> THROTTLE[限流] THROTTLE --> AUTH{认证中间件} AUTH -->|Admin| JWT[JWT验证] AUTH -->|Mobile| MJWT[Mobile JWT] AUTH -->|Doctor| DROLE[角色验证] AUTH -->|Hy| HTOKEN[Hy Transit Token] JWT --> LOG[操作日志] MJWT --> LOG DROLE --> LOG HTOKEN --> LOG LOG --> CTRL[Controller] ``` ## 消息队列架构 ```mermaid graph TB subgraph 生产者 P1[订单支付回调] P2[挂号支付回调] P3[退款回调] P4[定时任务] end subgraph RabbitMQ Q1[default 队列] Q2[failed_jobs] end subgraph 消费者 Job J1[ProductOrderPaidJob
分账结算] J2[RegisterPaidJob
挂号分账] J3[ProductOrderRefundJob
退款处理] J4[SalespersonCommissionRefundJob
佣金冲销] J5[AutoConfirmReceiptOrderJob
自动确认收货] J6[AutomaticallyCancelTheOrderJob
自动取消订单] J7[AutoExpirePrescriptionHandlerJob
处方过期处理] J8[SyncDrugPriceBySubscribeJob
药品价格同步] end P1 --> Q1 P2 --> Q1 P3 --> Q1 P4 --> Q1 Q1 --> J1 Q1 --> J2 Q1 --> J3 Q1 --> J4 Q1 --> J5 Q1 --> J6 Q1 --> J7 Q1 --> J8 ``` ## 监管数据流转 ```mermaid sequenceDiagram participant API as xk-api participant GO as xk-hy-forward-go participant GOV as 浙江省政务云 Note over API: 定时触发 / 手动拉取 API->>API: 1. 创建批次 (batch/create) API->>API: 2. 拉取数据 (supervise/consult, /recipe, ...) API->>API: 3. 加密打包数据 API->>GO: 4. 转发加密数据 GO->>GOV: 5. 透传至政务云 GOV-->>GO: 6. 返回处理结果 GO-->>API: 7. 回调结果 API->>API: 8. 更新批次状态 ``` ## 部署架构 | 服务 | 部署方式 | 说明 | |------|----------|------| | xk-api | 服务器 + LaravelS | PHP-FPM + LaravelS 常驻进程 | | xk-admin | CDN / Nginx | 静态资源部署 | | xk-client-wx | 微信小程序平台 | HBuilderX 上传 | | xk-doctor-wx | 微信小程序平台 | HBuilderX 上传 | | xk-data | 服务器 / CDN | 静态页面 | | xk-hy-forward-go | 内网服务器 | Windows 部署,run.bat 启动 | | MySQL | 服务器 | 双库部署 | | Redis | 服务器 | 缓存 / 队列 | | RabbitMQ | 服务器 | 消息队列 |