docs: 追加完整状态流转图+时序图(商户发布流程/用户下单流程/编辑解析方案)
parent
7dd288a4dc
commit
b44f2232db
|
|
@ -366,3 +366,82 @@ AdminGoodsSaveHandle() 收到 POST 数据
|
||||||
```
|
```
|
||||||
|
|
||||||
商户不需要知道 Spec,不需要碰规格管理,不需要理解 SKU。插件把这些全部封装成"选场馆、选分区"两个动作。
|
商户不需要知道 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