[ 已解决] Q2: spec_base_id_map → 共用座位图模板,按分类绑定 #2

Closed
opened 2026-04-14 08:55:12 +00:00 by sileya-ai · 1 comment

背景

用户确认"spec = 场次",每个 ShopXO spec 选项 = 一个演出场次。

但需要确认:spec_base_id_map(座位映射)的生成时机和粒度

问题

每个 spec(场次)有独立的座位配置,还是所有 spec 共用同一座位配置?

选项 A:每个 spec(场次)有独立的座位配置

  • 同一场馆不同日期的演出,每个场次有独立的座位布局
  • 每个 spec 对应独立的 spec_base_id_map(可能座位布局相同但库存独立)
  • 例如:
    • spec"2026-06-01 晚场"→ seat_map A + 座位库存 500
    • spec"2026-06-02 下午场"→ seat_map A + 座位库存 500(同一座位图,不同库存)

选项 B:所有 spec 共用同一座位配置

  • 不同日期的同一演出,共用同一个座位图
  • spec_base_id_map 在商品级别(venue_data 顶层),所有场次共用
  • 每个 spec(场次)的库存独立(ShopXO spec_base.inventory)
  • 用户的原话:"只要用户想要买某一个场馆的演唱会,他就在这一个商品里面操作就行"

分析

用户说"每一个商品就是一个物理意义上的电影院或者演出地址",倾向于:

  • 一个商品 = 一个场馆演出
  • 座位图是商品的属性(由分类继承)
  • 多个 spec = 多个日期(场次)
  • 座位是共用的(同一场馆的座位布局不会因日期改变)

但需要确认:是否有"同一场馆不同日期,座位布局不同"的场景?

待验证

  1. 是否存在同一场馆不同日期座位布局不同的情况?
  2. 如果布局相同,spec_base_id_map 是否只需要生成一次(商品级别)?
## 背景 用户确认"spec = 场次",每个 ShopXO spec 选项 = 一个演出场次。 但需要确认:**spec_base_id_map(座位映射)的生成时机和粒度**。 ## 问题 **每个 spec(场次)有独立的座位配置,还是所有 spec 共用同一座位配置?** ### 选项 A:每个 spec(场次)有独立的座位配置 - 同一场馆不同日期的演出,每个场次有独立的座位布局 - 每个 spec 对应独立的 spec_base_id_map(可能座位布局相同但库存独立) - 例如: - spec"2026-06-01 晚场"→ seat_map A + 座位库存 500 - spec"2026-06-02 下午场"→ seat_map A + 座位库存 500(同一座位图,不同库存) ### 选项 B:所有 spec 共用同一座位配置 - 不同日期的同一演出,共用同一个座位图 - spec_base_id_map 在商品级别(venue_data 顶层),所有场次共用 - 每个 spec(场次)的库存独立(ShopXO spec_base.inventory) - 用户的原话:"只要用户想要买某一个场馆的演唱会,他就在这一个商品里面操作就行" ## 分析 用户说"每一个商品就是一个物理意义上的电影院或者演出地址",倾向于: - 一个商品 = 一个场馆演出 - 座位图是商品的属性(由分类继承) - 多个 spec = 多个日期(场次) - 座位是共用的(同一场馆的座位布局不会因日期改变) 但需要确认:是否有"同一场馆不同日期,座位布局不同"的场景? ## 待验证 1. 是否存在同一场馆不同日期座位布局不同的情况? 2. 如果布局相同,spec_base_id_map 是否只需要生成一次(商品级别)?
Poster
Owner

已解决:共用座位图模板,按分类绑定

决策结论

采用 Option A(改进版):一个分类 = 一个完整场馆座位模板,所有 spec(共多场次)共用。

架构说明

座位模板绑定: vr_seat_templates.category_id UNIQUE 约束,一个分类对应一个座位模板。
同一分类下的所有 spec(共多场演出)使用同一套座位图(座位位置/颜色/行数相同)。

spec_base_id_map 用途: 将座位字符(A/B/C/_/-)映射到具体的 spec_base_id,实现分座位类型定价。
例如:

  • char "A" → spec_base_id = VIP区spec(¥1280)
  • char "B" → spec_base_id = 看台spec(¥680)
  • char "C" → spec_base_id = 普通spec(¥380)

同一场次不同座位字符 = 不同价格;不同场次(不同spec)= 不同价格;座位布局(map.map/seat颜色)共用。

实现方式

数据库层(vr_seat_templates.seat_map JSON):

{
  "map": ["AAAAAA", "BBBBBB", "CCCCCC"],
  "sections": [
    {"char": "A", "name": "VIP区", "color": "#e74c3c", "price": 1280},
    {"char": "B", "name": "看台区", "color": "#3498db", "price": 680},
    {"char": "C", "name": "普通区", "color": "#2ecc71", "price": 380}
  ],
  "row_labels": ["A", "B", "C"]
}

前端(ticket_detail.html renderSeatMap):

  • specBaseIdMap:{$vr_seat_template.spec_base_id_map|json_encode|raw},按 char 映射 spec_base_id
  • 用户点击座位时,根据 char 查 specBaseIdMap 得到对应 spec_base_id
  • 不同场次(sessionSpecId)切换时,spec_base_id_map 不变(共用座位图),但价格可能因 spec 不同而不同

Timeline

  • Q2 由 Architect Round 1(2026-04-14)确认为 Option A 改进版
  • Phase 1 Goods.php 修改中 category_id 绑定逻辑已实现
  • 座位模板已创建测试数据(Bird Nest - Zone A,category_id=911)
## ✅ 已解决:共用座位图模板,按分类绑定 ### 决策结论 **采用 Option A(改进版):一个分类 = 一个完整场馆座位模板,所有 spec(共多场次)共用。** ### 架构说明 **座位模板绑定:** `vr_seat_templates.category_id` UNIQUE 约束,一个分类对应一个座位模板。 同一分类下的所有 spec(共多场演出)使用同一套座位图(座位位置/颜色/行数相同)。 **spec_base_id_map 用途:** 将座位字符(A/B/C/_/-)映射到具体的 `spec_base_id`,实现分座位类型定价。 例如: - char "A" → spec_base_id = VIP区spec(¥1280) - char "B" → spec_base_id = 看台spec(¥680) - char "C" → spec_base_id = 普通spec(¥380) **同一场次不同座位字符 = 不同价格;不同场次(不同spec)= 不同价格;座位布局(map.map/seat颜色)共用。** ### 实现方式 **数据库层(vr_seat_templates.seat_map JSON):** ```json { "map": ["AAAAAA", "BBBBBB", "CCCCCC"], "sections": [ {"char": "A", "name": "VIP区", "color": "#e74c3c", "price": 1280}, {"char": "B", "name": "看台区", "color": "#3498db", "price": 680}, {"char": "C", "name": "普通区", "color": "#2ecc71", "price": 380} ], "row_labels": ["A", "B", "C"] } ``` **前端(ticket_detail.html renderSeatMap):** - `specBaseIdMap`:{$vr_seat_template.spec_base_id_map|json_encode|raw},按 char 映射 spec_base_id - 用户点击座位时,根据 char 查 specBaseIdMap 得到对应 spec_base_id - 不同场次(sessionSpecId)切换时,`spec_base_id_map` 不变(共用座位图),但价格可能因 spec 不同而不同 ### Timeline - Q2 由 Architect Round 1(2026-04-14)确认为 Option A 改进版 - Phase 1 Goods.php 修改中 `category_id` 绑定逻辑已实现 - 座位模板已创建测试数据(Bird Nest - Zone A,category_id=911)
sileya-ai changed title from [pending-council] Q2: spec_base_id_map 生成时机(每个 spec 独立座位 vs 共用座位) to [ 已解决] Q2: spec_base_id_map → 共用座位图模板,按分类绑定 2026-04-15 01:52:16 +00:00
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: sileya-ai/vr-shopxo-plugin#2
There is no content yet.