[Teanary]多语言多货币外贸商城系统架构与数据流程图

AI摘要
这是一个基于Laravel框架构建的电商系统技术架构文档,属于【知识分享】。文档详细阐述了系统的分层架构(前端、应用、业务服务、数据层)、核心业务流程(订单处理、支付、促销计算、多节点数据同步)以及采用的技术栈(Laravel, Livewire, MySQL, Redis等),重点说明了通过观察者模式实现的数据异步同步机制。

项目地址: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 管理面板

数据流向总结

  1. 用户请求 → Livewire 组件 → Service 层 → Model 层 → 数据库
  2. 数据变更 → Observer → SyncService → 队列 → 远程节点
  3. 支付流程 → PaymentService → 支付网关 → Webhook → 订单更新
  4. 促销计算 → PromotionService → 缓存查询 → 规则匹配 → 折扣计算

文档版本: 1.0
最后更新: 2024

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!