docs: 追加完整状态流转图+时序图(商户发布流程/用户下单流程/编辑解析方案)
parent
7dd288a4dc
commit
b44f2232db
|
|
@ -366,3 +366,82 @@ AdminGoodsSaveHandle() 收到 POST 数据
|
|||
```
|
||||
|
||||
商户不需要知道 Spec,不需要碰规格管理,不需要理解 SKU。插件把这些全部封装成"选场馆、选分区"两个动作。
|
||||
|
||||
---
|
||||
|
||||
## 附录:完整状态流转图(Mermaid)
|
||||
|
||||
> 以下为系统完整状态流转,覆盖场馆配置 → 商品发布 → 用户下单全链路。
|
||||
|
||||
```mermaid
|
||||
stateDiagram-v2
|
||||
[*] --> 新建场馆: 管理员创建
|
||||
新建场馆 --> 新建分区: 绑定场馆
|
||||
新建分区 --> 绘制座位布局: 绑定分区
|
||||
绘制座位布局 --> 生成SeatMapJSON: 保存
|
||||
生成SeatMapJSON --> 发布票务商品: 选择模板
|
||||
发布票务商品 --> 选择场次: 注入表单
|
||||
选择场次 --> 批量生成Spec: 保存商品
|
||||
批量生成Spec --> 商品上架: Spec写入完成
|
||||
商品上架 --> 用户浏览: C端展示
|
||||
用户浏览 --> 用户选座下单: 选择座位
|
||||
用户选座下单 --> 订单生成: goodsParams提交
|
||||
```
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant 商户
|
||||
participant 商品发布页 as ShopXO商品发布页<br/>(注入后的表单)
|
||||
participant AdminGoodsSaveHook as AdminGoodsSave<br/>(钩子返回HTML)
|
||||
participant SaveHook as plugins_service_<br/>goods_save_handle
|
||||
participant BatchGen as SeatSkuService<br/>::BatchGenerate()
|
||||
participant DB as goods_spec_base<br/>goods_spec_value
|
||||
|
||||
商户->>商品发布页: 选择场馆 + 分区
|
||||
商户->>商品发布页: 点"发布商品"
|
||||
|
||||
商品发布页->>SaveHook: POST {venue_id, zones[]}
|
||||
SaveHook->>BatchGen: BatchGenerate(goods_id, template_id, zones[])
|
||||
|
||||
loop 每500条一批
|
||||
BatchGen->>DB: INSERT spec_base<br/>$vr-场馆 = "鸟巢"<br/>$vr-分区 = "VIP区A"<br/>$vr-时段 = "2026-06-01 19:00"<br/>$vr-座位号 = "A_1" ~ "A_500"
|
||||
end
|
||||
|
||||
BatchGen-->>SaveHook: 返回座位级spec_base_id_map
|
||||
SaveHook-->>商品发布页: 保存成功
|
||||
商品发布页-->>商户: 商品上架
|
||||
```
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph UserFlow["用户端"]
|
||||
U1["用户浏览商品详情页<br/>ticket_detail.html"]
|
||||
U2["看到:场次选择器<br/>座位可视化图(彩色热力图)"]
|
||||
U3["点击座位 A_1"]
|
||||
U4["goodsParams 自动组装<br/>goodsParamsList[0]:<br/>spec_ids: [场馆spec, 分区spec,<br/>时段spec, 座位spec]<br/>stock: 1<br/>spec_base_id: 座位spec的ID"]
|
||||
U5["提交订单"]
|
||||
end
|
||||
|
||||
subgraph Invisible["用户不可见的底层"]
|
||||
DB1["spec_base 表<br/>包含全部spec记录<br/>但用户端只展示座位图"]
|
||||
end
|
||||
|
||||
U1 --> U2 --> U3 --> U4 --> U5
|
||||
```
|
||||
|
||||
### 编辑商品时的 Spec 解析问题
|
||||
|
||||
> ⚠️ 如果不解析直接展示,spec_base 里几千条记录会把编辑页撑爆。
|
||||
|
||||
**解决方案**:商品表增加一个 `vr_ticket_config` 字段(JSON),只存「选择了什么」,编辑时从此 JSON 还原选择状态,而非从 spec_base 反推。
|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
A["编辑已有票务商品"]
|
||||
A --> B{是否有 vr_ticket_config?}
|
||||
B -->|无(存量数据)| C["显示空表单<br/>提示「请重新选择」"]
|
||||
B -->|有| D["解析 vr_ticket_config JSON"]
|
||||
D --> E["还原:场馆 → 分区 → 座位选择状态"]
|
||||
E --> F["管理员可修改选择<br/>重新生成 spec_base 映射"]
|
||||
F --> G["保存时:先删除旧spec<br/>再批量插入新spec"]
|
||||
```
|
||||
|
|
|
|||
Loading…
Reference in New Issue