96 lines
4.0 KiB
Markdown
96 lines
4.0 KiB
Markdown
# Plan — VR 演唱会票务小程序 Round 4 执行
|
||
|
||
> 版本:v4.0 | 日期:2026-05-26 | Agent:council/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#五投票 |