vr-shopxo-plugin/plan.md

96 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Plan — VR 演唱会票务小程序 Round 4 执行
> 版本v4.0 | 日期2026-05-26 | Agentcouncil/BackendArchitect
> 任务Round 4 现场核查 — 修正误判,投票 A
---
## 评估范围
- Phase 4 Tree API 设计文档完整性 + 可行性
- SeatMapService + `/seatmap` API 完整性
- seatSpecMap 注入商品详情 API 的实现方案
- CartSave extension_data 多座位存储链路
- 后端下一步优先级建议
---
## Round 4 现场核查结论
### Phase 4 Tree API
- 设计文档:✅ `docs/PHASE_4_API.md` + `PLAN_TREE_API_IMPLEMENTATION.md`
- `SeatMapService.php`(服务类):✅ **333行完整实现**,含 `GetSeatMap()` + `buildSeatSpecMap()` + `buildGoodsSpecData()`
- `api/Goods.php::seatmap()`:✅ **正确实现**第241行调用 `SeatMapService::GetSeatMap($goodsId)`
- Tree API `buildTree()`:❌ **代码为零**Phase 4 尚未开始)
### SeatMapService + seatmap API
- `SeatMapService::GetSeatMap()`:✅ **完整**,含实时 inventory + 缓存
- `api/Goods.php::seatmap()`:✅ **正确**UniApp 调用无崩溃
- `index/Index.php::soldSeats`:❌ **Index.php 无此 action**Round 3 误判已修正)
- `SeatSkuService::getSoldSeats()`:⚠️ 方法不存在,但被替代(`GetSeatMap()` 已含库存)
- **结论无运行时崩溃seatmap API 工作正常**
### seatSpecMap 注入
- Hook `plugins_service_goods_data`:❌ **未注册**Gap 1 仍成立)
- `api/Goods.php::detail()`:❌ 不包含 VR 数据
- H5 `ticket_detail.html`:✅ **工作正常**(直接调用 `GetGoodsViewData()`
- UniApp detail API**Gap 1 成立**,但 `/seatmap` API 可变通绕过
- **结论Gap 1 成立UniApp 可先调用 `/seatmap` 绕过**
### CartSave extension_data
- `ticket_detail.html:762`:✅ 已实现,`extension_data` 嵌套在 `order_base`
- `TicketService::onOrderPaid()`:✅ 已实现,多座位支持
- **结论Gap 2 已消除,后端无需改动**
---
## BackendArchitect 评估任务
| Task | 内容 | 状态 |
|------|------|------|
| B1 | Phase 4 Tree API 设计文档评估 | [Done: council/BackendArchitect] — 设计完整,代码为零 |
| B2 | SeatMapService + seatmap API 完整性检查 | [Done: council/BackendArchitect] — Round 3 误判已修正API 完整 |
| B3 | seatSpecMap 注入方案设计 | [Done: council/BackendArchitect] — Hook 注册方案已明确 |
| B4 | CartSave extension_data 多座位链路分析 | [Done: council/BackendArchitect] — Gap 2 已消除 |
| B5 | 输出 Round 4 评估报告 + 投票 | [Done: council/BackendArchitect] |
---
## P0 修正Round 4
| 原问题 | Round 3 状态 | Round 4 修正 |
|--------|-------------|-------------|
| P0-1 `getSoldSeats()` 方法缺失 | 致命 | ❌ **已消除** — `GetSeatMap()` 已含库存,无崩溃 |
| P0-2 Hook `plugins_service_goods_data` 未注册 | 致命 | ⚠️ **降级 P1** — UniApp 可用 `/seatmap` 变通绕过 |
| P0-3 `Index.php:soldSeats` 触发 Fatal Error | 致命 | ❌ **已消除** — Index.php 无 soldSeats action |
---
## 最终优先级
| 优先级 | 任务 | 预计工时 | 收益 |
|--------|------|---------|------|
| **P1-A** | Hook 注册 + `InjectGoodsDetailData()` | 30min | 解锁 UniApp 完整票务链路 |
| **P1-B** | `api/Goods.php::detail()` 注入 VR 数据 | 20min | 与 Hook 注册二选一 |
| **P2** | Phase 4 Tree API `buildTree()` | 待定 | Tree VR 体验 |
| **P3** | Phase 4 完整 Tree 体验 | 待定 | VR 差异化功能 |
---
## 投票结果
**投票A — 后端优先**
理由:
1. Hook 注册约 30 行代码,解决 Gap 1解锁 UniApp 完整票务链路
2. Round 4 确认seatmap API 已完整,无运行时崩溃
3. Gap 2 已消除,后端链路完整
4. UniApp 可用方案 B先 /seatmap 后 /detail立即变通绕过 Gap 1
5. Phase 4 是体验增强,不应作为主攻方向
---
## 输出
- 评估报告Round 4 更新版):`docs/council-eval-backendarchitect.md`
- 投票:`docs/council-eval-backendarchitect.md#五投票