主题
序列图
来源: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/login | POST /admin/login |
| 服务 | mall-portal :8085 | mall-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 更新