Skip to content

序列图

来源:06-portal-order.md, 08-portal-aftersale.md, 13-admin-promotion.md, 18-admin-permission.md 适用:理解关键业务场景中各系统组件的交互时序


1. 用户登录序列图

展示前台会员和后台管理员的登录流程(共用模式)。

mermaid
sequenceDiagram
    actor User as 用户
    participant FE as 前端
    participant BE as 后端服务
    participant Redis as Redis
    participant DB as MySQL

    User->>FE: 打开登录页面
    FE->>BE: GET /auth/captcha
    BE->>Redis: 生成验证码并缓存
    BE-->>FE: 返回验证码图片
    FE-->>User: 展示登录表单

    User->>FE: 输入用户名+密码+验证码
    FE->>BE: POST /auth/login

    BE->>Redis: 校验验证码
    alt 验证码错误
        BE-->>FE: 400 验证码错误
        FE-->>User: 提示重新输入
    end

    BE->>DB: 查询用户/管理员记录
    alt 用户不存在
        BE-->>FE: 400 用户名或密码错误
    end

    BE->>BE: BCrypt 验证密码
    alt 密码错误
        BE-->>FE: 400 用户名或密码错误
    end

    BE->>BE: 生成 JWT Token
    BE->>Redis: 存储 Token 会话信息
    BE->>DB: 加载角色/菜单/资源权限
    BE-->>FE: { token, userInfo, menus }

    FE->>FE: 存储 Token 到 localStorage
    FE->>FE: 初始化 Pinia 状态
    FE-->>User: 跳转首页/仪表盘

用户登录序列图

前后台差异

维度前台会员后台管理员
登录接口POST /member/loginPOST /admin/login
服务mall-portal :8085mall-admin :8080
权限加载无菜单权限加载菜单树+资源列表
跳转目标/portal/home/admin/home

2. 下单支付序列图

展示从提交订单到支付成功的完整交互链路。

mermaid
sequenceDiagram
    actor Member as 会员
    participant FE as 前台前端
    participant Portal as mall-portal
    participant Redis as Redis
    participant DB as MySQL

    Member->>FE: 点击"提交订单"
    FE->>Portal: POST /order/createOrder

    Portal->>DB: 校验收货地址
    Portal->>Redis: 校验商品库存
    alt 库存不足
        Portal-->>FE: 400 XXX商品库存不足
        FE-->>Member: 提示库存不足
    end

    Portal->>Portal: 计算应付金额
    Note over Portal: 商品总额 - 促销优惠<br/>- 优惠券抵扣 - 积分抵扣<br/>+ 运费

    Portal->>DB: 创建 oms_order 记录
    Portal->>DB: 创建 oms_order_item 记录
    Portal->>DB: 扣减 SKU 库存
    Portal->>DB: 标记优惠券已使用
    Portal->>DB: 清除购物车已购商品
    Portal->>DB: 记录操作日志

    Portal->>Redis: 设置超时自动取消任务
    Portal-->>FE: { orderId, payAmount }
    FE-->>Member: 跳转支付页面

    Member->>FE: 选择支付方式, 点击"支付"
    FE->>Portal: POST /pay/simulatePay

    Portal->>DB: 更新订单状态→待发货
    Portal->>DB: 记录支付时间
    Portal->>DB: 记录操作日志
    Portal->>DB: 赠送积分和成长值
    Portal-->>FE: 支付成功
    FE-->>Member: 展示订单成功页

下单支付序列图

关键时序约束

  • 库存校验和扣减必须原子性完成(Redis 预扣 + MySQL 最终一致)
  • 优惠券标记和购物车清理在订单创建成功后执行
  • 超时任务在订单创建后立即注册

3. 秒杀抢购序列图

展示高并发场景下的秒杀购买链路,重点体现 Redis 的作用。

mermaid
sequenceDiagram
    actor Member as 会员
    participant FE as 前台前端
    participant Portal as mall-portal
    participant Redis as Redis
    participant DB as MySQL

    Note over Portal,DB: 活动开始前: 秒杀商品数据预热到 Redis

    Member->>FE: 进入秒杀页面
    FE->>Portal: GET /flash/current
    Portal->>Redis: 获取当前秒杀活动
    Redis-->>Portal: 活动信息+商品列表
    Portal-->>FE: 秒杀商品列表
    FE-->>Member: 展示秒杀商品

    Member->>FE: 点击"立即购买"
    FE->>Portal: POST /flashBuy/create

    Portal->>Redis: 校验当前时间是否在场次窗口内
    alt 不在时间窗口
        Portal-->>FE: 400 活动未开始或已结束
    end

    Portal->>Redis: 原子扣减秒杀库存 (DECR)
    alt 库存不足
        Portal-->>FE: 400 已售罄
    end

    Portal->>Redis: 校验每人限购 (GET + INCR)
    alt 超过限购
        Portal-->>FE: 400 已达限购上限
    end

    Portal->>DB: 创建订单(秒杀价)
    Portal->>DB: 扣减 MySQL 库存(最终一致)
    Portal->>Redis: 设置超时自动取消

    Portal-->>FE: { orderId, payAmount }
    FE-->>Member: 跳转支付页面

    Note over Member,DB: 后续支付流程与普通订单一致

秒杀抢购序列图

高并发设计要点

  • 秒杀库存预热到 Redis,使用 DECR 原子操作
  • 限购校验通过 Redis GET+INCR 实现
  • MySQL 仅做最终数据落盘,不承担并发压力
  • 超时未支付的秒杀订单释放 Redis 库存(INCR)

4. 售后退货序列图

展示会员、前台服务、后台管理之间的退货交互链路。

mermaid
sequenceDiagram
    actor Member as 会员
    participant PortalFE as 前台前端
    participant Portal as mall-portal
    participant AdminFE as 后台前端
    participant Admin as mall-admin
    participant DB as MySQL

    Member->>PortalFE: 点击"申请售后"
    PortalFE->>Portal: GET /returnApply/reasons
    Portal->>DB: 查询退货原因列表
    DB-->>Portal: 原因列表
    Portal-->>PortalFE: 退货原因选项
    PortalFE-->>Member: 展示申请表单

    Member->>PortalFE: 填写退货信息, 提交
    PortalFE->>Portal: POST /returnApply/create

    Portal->>DB: 校验: 订单状态=已完成
    Portal->>DB: 校验: 无待审核的重复申请
    Portal->>DB: 创建退货申请记录 (status=0)
    Portal-->>PortalFE: 申请成功
    PortalFE-->>Member: 跳转售后列表

    Note over AdminFE,DB: 管理员在后台处理退货申请

    Admin->>AdminFE: 查看退货申请列表
    AdminFE->>Admin: GET /returnApply/list
    Admin->>DB: 查询待审核退货申请
    DB-->>Admin: 申请列表
    Admin-->>AdminFE: 展示申请详情

    Admin->>AdminFE: 审核操作 (通过/拒绝)
    AdminFE->>Admin: POST /returnApply/update

    alt 审核通过
        Admin->>DB: 更新状态→退货中 (status=1)
        Admin->>DB: 记录处理人和备注
        Admin-->>AdminFE: 操作成功
    else 审核拒绝
        Admin->>DB: 更新状态→已拒绝 (status=3)
        Admin->>DB: 记录拒绝原因
        Admin-->>AdminFE: 操作成功
    end

    Note over Member,DB: 审核通过后用户寄回商品

    Member->>PortalFE: 填写退货物流单号
    PortalFE->>Portal: POST /returnApply/updateLogistics
    Portal->>DB: 更新物流信息

    Admin->>AdminFE: 确认收到退货
    AdminFE->>Admin: POST /returnApply/receive
    Admin->>DB: 更新状态→已完成 (status=2)
    Admin->>DB: 处理退款

    Portal-->>Member: 通知退款完成

售后退货序列图

跨服务交互说明

  • 退货申请由会员通过 mall-portal 提交,存储在 MySQL
  • 审核操作由管理员通过 mall-admin 执行
  • 两个后端服务共享同一数据库,通过数据状态协调
  • 退货物流信息由会员通过 mall-portal 更新

Mall 电商系统知识库