Teanary 多语言多货币外贸商城系统架构与数据流程图
项目地址:https://gitee.com/teanary/teanary_service
目录
系统整体架构
graph TB
subgraph Frontend["🌐 前端层 Frontend Layer"]
A[用户浏览器]
B[Livewire 组件]
C[Blade 模板]
D[Tailwind CSS]
A --> B
B --> C
C --> D
end
subgraph Application["⚙️ 应用层 Application Layer"]
E[Livewire 组件]
F[Service 层]
G[Model 层]
H[Observer 层]
E --> F
F --> G
G --> H
end
subgraph Services["🔧 业务服务层 Service Layer"]
direction TB
F1[ProductService<br/>商品服务]
F2[PromotionService<br/>促销服务]
F3[PaymentService<br/>支付服务]
F4[ShippingService<br/>物流服务]
F5[SyncService<br/>同步服务]
F6[MediaService<br/>媒体服务]
F7[CategoryService<br/>分类服务]
F8[CartService<br/>购物车服务]
F9[LocaleCurrencyService<br/>本地化服务]
end
subgraph Data["💾 数据层 Data Layer"]
I[(MySQL 数据库)]
J[(Redis 缓存)]
K[文件存储]
end
subgraph Admin["👤 后台管理 Admin Panel"]
L[Filament Manager<br/>管理员面板]
M[Filament User<br/>用户面板]
end
subgraph External["🌍 外部服务 External Services"]
N[PayPal 支付网关]
O[远程节点 API]
P[Ollama AI<br/>翻译服务]
end
subgraph Queue["📬 队列系统 Queue System"]
Q[队列任务]
R[SyncBatchDataJob<br/>批量同步任务]
S[ResizeUploadedImage<br/>图片处理任务]
T[BatchWriteTrafficStatsJob<br/>流量统计任务]
Q --> R
Q --> S
Q --> T
end
B --> E
F --> F1
F --> F2
F --> F3
F --> F4
F --> F5
F --> F6
F --> F7
F --> F8
F --> F9
G --> I
G --> J
G --> K
L --> F
M --> F
F3 --> N
F5 --> O
F9 --> P
H --> Q
style F fill:#e1f5ff
style G fill:#fff4e1
style I fill:#ffe1e1
style J fill:#ffe1e1
style Q fill:#e1ffe1
style Frontend fill:#f0f9ff
style Application fill:#fef3c7
style Services fill:#dbeafe
style Data fill:#fee2e2
style Admin fill:#e0e7ff
style External fill:#f3e8ff
style Queue fill:#d1fae5
数据流程图
订单处理流程
sequenceDiagram
participant User as 用户
participant Cart as 购物车
participant Checkout as 结算页面
participant OrderService as 订单服务
participant PromotionService as 促销服务
participant ShippingService as 物流服务
participant PaymentService as 支付服务
participant Order as 订单模型
participant Observer as 订单观察者
participant Notification as 通知系统
User->>Cart: 添加商品到购物车
Cart->>Cart: 计算小计
User->>Checkout: 进入结算页面
Checkout->>Checkout: 加载收货地址
Checkout->>ShippingService: 获取可用物流方式
ShippingService-->>Checkout: 返回物流选项
User->>Checkout: 选择物流方式
Checkout->>ShippingService: 计算物流费用
ShippingService-->>Checkout: 返回费用
Checkout->>PromotionService: 计算订单促销
PromotionService->>PromotionService: 检查促销规则
PromotionService-->>Checkout: 返回促销信息
Checkout->>Checkout: 计算订单总价
User->>Checkout: 提交订单
Checkout->>OrderService: 创建订单
OrderService->>Order: 保存订单数据
Order->>Observer: 触发 created 事件
Observer->>Notification: 发送订单创建通知
OrderService-->>Checkout: 返回订单ID
Checkout->>PaymentService: 创建支付
PaymentService->>PaymentService: 选择支付网关
PaymentService-->>Checkout: 返回支付URL
Checkout->>User: 跳转到支付页面
多节点数据同步流程
sequenceDiagram
participant Model as 数据模型
participant Observer as 模型观察者
participant Syncable as Syncable Trait
participant SyncService as 同步服务
participant SyncLog as 同步日志
participant Queue as 队列系统
participant SyncJob as 批量同步任务
participant RemoteNode as 远程节点
participant SyncController as 同步控制器
Note over Model,RemoteNode: 数据变更触发同步
Model->>Observer: 触发 created/updated/deleted
Observer->>Syncable: 检查是否可同步
Syncable->>SyncService: recordSync(模型, 操作, 节点)
SyncService->>SyncService: 生成同步哈希
SyncService->>SyncService: 准备同步数据
SyncService->>SyncLog: 创建同步日志记录
SyncLog->>SyncLog: 状态: pending
SyncService->>Queue: 分发批量同步任务
Queue->>SyncJob: 执行批量同步
SyncJob->>SyncJob: 批量获取待同步记录
SyncJob->>SyncJob: 按模型类型分组
SyncJob->>SyncJob: 打包批量数据
SyncJob->>RemoteNode: POST /api/sync/receive-batch
Note over RemoteNode: API Key 验证
RemoteNode->>SyncController: 接收批量数据
SyncController->>SyncController: 验证数据完整性
SyncController->>SyncController: 处理批量同步
loop 处理每条记录
SyncController->>SyncController: 检查是否跳过
SyncController->>SyncController: 执行创建/更新/删除
SyncController->>SyncController: 更新同步状态
end
SyncController-->>SyncJob: 返回同步结果
SyncJob->>SyncLog: 更新同步状态
SyncLog->>SyncLog: 状态: completed/failed
alt 同步失败
SyncJob->>SyncJob: 自动重试机制
end
商品创建流程
flowchart TD
A[Chrome 插件/API] --> B[ProductController]
B --> C{验证请求}
C -->|失败| D[返回错误]
C -->|成功| E[开始事务]
E --> F[ProductService.createProduct]
F --> G[创建 Product 模型]
G --> H[ProductObserver]
H --> I{需要同步?}
I -->|是| J[SyncService.recordSync]
I -->|否| K[继续处理]
F --> L[MediaService.handleMainImage]
L --> M[上传主图]
M --> N[创建 Media 记录]
N --> O[MediaObserver]
O --> P[SyncService.recordSync]
F --> Q[CategoryService.findOrCreateCategory]
Q --> R{分类存在?}
R -->|否| S[创建分类]
S --> T[CategoryObserver]
T --> U[SyncService.recordSync]
R -->|是| V[使用现有分类]
F --> W[创建 ProductTranslation]
W --> X[ProductTranslationObserver]
X --> Y[SyncService.recordSync]
F --> Z[创建 ProductVariant]
Z --> AA[创建规格关联]
F --> AB[提交事务]
AB --> AC[返回成功]
J --> AD[队列任务]
P --> AD
U --> AD
Y --> AD
AD --> AE[批量同步到远程节点]
style F fill:#e1f5ff
style J fill:#ffe1e1
style AD fill:#e1ffe1
支付处理流程
flowchart TD
Start([用户提交订单]) --> CreateOrder[创建订单]
CreateOrder --> OrderPending[订单状态: Pending]
OrderPending --> GoToPayment[跳转到支付页面]
GoToPayment --> CreatePayment[PaymentService.createPayment]
CreatePayment --> SelectGateway{选择支付网关}
SelectGateway -->|PayPal| PayPalGateway[PayPal 网关]
SelectGateway -->|其他| OtherGateway[其他支付网关]
PayPalGateway --> GenerateURL[生成支付 URL]
GenerateURL --> RedirectPayPal[跳转到 PayPal]
RedirectPayPal --> UserPay[用户在 PayPal 完成支付]
UserPay --> PaymentResult{支付结果}
PaymentResult -->|成功| WebhookSuccess[PayPal Webhook 回调]
PaymentResult -->|取消| PaymentCancel[用户取消支付]
PaymentResult -->|失败| PaymentFail[支付失败]
WebhookSuccess --> VerifyPayment[验证支付签名]
VerifyPayment --> UpdateOrder[更新订单状态: Paid]
UpdateOrder --> SendNotification[发送通知<br/>用户和管理员]
SendNotification --> EndSuccess([支付成功])
PaymentCancel --> OrderCancelled[订单状态: Cancelled]
OrderCancelled --> EndCancel([订单取消])
PaymentFail --> OrderFailed[订单状态: Failed]
OrderFailed --> EndFail([支付失败])
style CreateOrder fill:#e1f5ff
style UpdateOrder fill:#e1ffe1
style OrderCancelled fill:#ffe1e1
style OrderFailed fill:#ffe1e1
style EndSuccess fill:#e1ffe1
促销计算流程
flowchart TD
A[订单/商品] --> B[PromotionService]
B --> C[获取可用促销]
C --> D[从缓存获取所有促销]
D --> E{缓存存在?}
E -->|否| F[查询数据库]
F --> G[缓存结果]
G --> D
E -->|是| H[过滤可用促销]
H --> I[检查促销时间]
I --> J[检查用户组]
J --> K[检查商品关联]
K --> L[返回可用促销列表]
L --> M[遍历促销规则]
M --> N[检查条件类型]
N --> O{订单金额条件?}
O -->|是| P[比较订单总金额]
O -->|否| Q[比较订单数量]
P --> R{满足条件?}
Q --> R
R -->|否| S[跳过此规则]
R -->|是| T[计算折扣金额]
T --> U{折扣类型?}
U -->|固定金额| V[直接使用折扣值]
U -->|百分比| W[计算百分比折扣]
V --> X[应用折扣]
W --> X
X --> Y[比较最优折扣]
Y --> Z[返回最终价格和促销信息]
S --> AA{还有规则?}
AA -->|是| M
AA -->|否| Z
style B fill:#e1f5ff
style D fill:#fff4e1
style T fill:#ffe1e1
核心组件说明
1. Service 层架构
Services/
├── ProductService # 商品业务逻辑
├── PromotionService # 促销计算逻辑
├── PaymentService # 支付处理逻辑
├── ShippingService # 物流计算逻辑
├── SyncService # 数据同步逻辑
├── MediaService # 媒体文件处理
├── CategoryService # 分类管理
├── CartService # 购物车管理
├── LocaleCurrencyService # 本地化服务
└── Payments/
├── PaymentManager # 支付网关管理器
└── PaypalGateway # PayPal 支付实现
2. Model 层架构
Models/
├── 核心业务模型
│ ├── Product # 商品
│ ├── ProductVariant # 商品规格
│ ├── Order # 订单
│ ├── Cart # 购物车
│ └── Promotion # 促销
├── 关联模型
│ ├── ProductCategory # 商品分类关联
│ ├── ProductAttributeValue # 商品属性值
│ └── OrderItem # 订单项
├── 翻译模型
│ ├── ProductTranslation
│ ├── CategoryTranslation
│ └── PromotionTranslation
└── 系统模型
├── SyncLog # 同步日志
├── SyncStatus # 同步状态
└── TrafficStatistic # 流量统计
3. Observer 层架构
Observers/
├── ProductObserver # 商品变更监听
├── OrderObserver # 订单变更监听
├── PromotionObserver # 促销变更监听
├── CategoryObserver # 分类变更监听
├── MediaObserver # 媒体变更监听
└── [其他模型观察者]
4. 数据同步机制
- 触发机制: 通过 Observer 监听模型事件
- 同步方式: 批量异步同步,提升效率
- 冲突解决: 以最新数据为准(基于时间戳)
- 文件同步: 自动同步媒体文件和转换文件
- 重试机制: 失败自动重试,确保数据不丢失
技术栈说明
后端技术
- Laravel 12.x: Web 框架
- PHP 8.1+: 服务器语言
- MySQL 8.0+: 主数据库
- Redis: 缓存和会话存储
- Laravel Octane: 高性能应用服务器
前端技术
- Livewire 3.x: 全栈框架
- Tailwind CSS 3.x: CSS 框架
- Alpine.js: 轻量级 JS 框架
- Vite: 前端构建工具
管理后台
- Filament 3.x: Laravel 管理面板
数据流向总结
- 用户请求 → Livewire 组件 → Service 层 → Model 层 → 数据库
- 数据变更 → Observer → SyncService → 队列 → 远程节点
- 支付流程 → PaymentService → 支付网关 → Webhook → 订单更新
- 促销计算 → PromotionService → 缓存查询 → 规则匹配 → 折扣计算
文档版本: 1.0
最后更新: 2024
浙公网安备 33010602011771号