101 lines
4.3 KiB
Markdown
101 lines
4.3 KiB
Markdown
# Plan — VR 演唱会票务小程序 Round 3 执行
|
||
|
||
> 版本:v3.0 | 日期:2026-05-26 | Agent:council/BackendArchitect
|
||
> 任务:Round 3 评估更新 — 现场代码核查,修正 P0 优先级,投票 A
|
||
|
||
---
|
||
|
||
## 评估范围
|
||
|
||
- Phase 4 Tree API 设计文档完整性 + 可行性
|
||
- SeatMapService + `/seatmap` API 完整性
|
||
- seatSpecMap 注入商品详情 API 的实现方案(Round 3 修正)
|
||
- CartSave extension_data 多座位存储链路(Round 3 修正)
|
||
- 后端下一步优先级建议
|
||
|
||
---
|
||
|
||
## 现状快照(Round 3 现场核查)
|
||
|
||
### Phase 4 Tree API
|
||
- 设计文档:✅ `docs/PHASE_4_API.md` + `PLAN_TREE_API_IMPLEMENTATION.md`(父仓库 commit `40a9b0ad1`)
|
||
- `SeatSkuService.php`(实际名):✅ 存在,含 `GetGoodsViewData()` + `buildSeatSpecMap()`
|
||
- `SeatMapService.php`(设计名):❌ 不存在(命名混淆)
|
||
- `api/` 目录(Worktree):❌ 未纳入 Git 追踪(父仓库有 `Goods.php`)
|
||
- 状态:**设计完整,代码仅部分复用逻辑,命名混淆 + api 目录未追踪**
|
||
|
||
### SeatMapService + seatmap API(Round 3 修正)
|
||
- `index/Index.php::soldSeats` — ✅ 存在,路由正常
|
||
- `SeatSkuService::getSoldSeats()` — ❌ **方法完全缺失(致命)**
|
||
- **关键修正**:`Index.php:43` 调用不存在的方法,**所有直接调用 soldSeats API 的客户端都会触发 PHP Fatal Error**
|
||
- H5 绕过正确(不走 API),但 UniApp/第三方 调用会崩溃
|
||
- `api/Goods.php::seatmap()`(父仓库):⚠️ 引用不存在的 `SeatMapService::GetSeatMap()`
|
||
- 命名混淆:设计文档说 `SeatMapService`,实际类名是 `SeatSkuService`
|
||
|
||
### seatSpecMap 注入商品详情(Round 3 一致)
|
||
- Goods.php 硬编码调用 — ✅ **H5 已工作**(直接调用 `GetGoodsViewData()`)
|
||
- Hook `plugins_service_goods_data` — ❌ **未在 Hook.php 中注册**
|
||
- UniApp 调用 `api/goods/detail` API — ❌ **Gap 1 仍成立**
|
||
- 结论:Gap 1 **致命且成立**
|
||
|
||
### CartSave extension_data(Round 3 修正)
|
||
- H5 链路 `ticket_detail.html:762` — ✅ 已实现(`extension_data` 嵌套在 `order_base`)
|
||
- `TicketService::onOrderPaid()` — ✅ 逐行生成票(多座位已支持)
|
||
- 结论:**Gap 2 已消除**,UniApp 只需复刻 H5 的 JSON 格式,后端无需额外改动
|
||
|
||
---
|
||
|
||
## BackendArchitect 评估任务
|
||
|
||
| Task | 内容 | 状态 |
|
||
|------|------|------|
|
||
| B1 | Phase 4 Tree API 设计文档评估 | [Done: council/BackendArchitect] |
|
||
| B2 | SeatMapService + seatmap API 完整性检查 | [Done: council/BackendArchitect] — P0 崩溃发现 |
|
||
| B3 | seatSpecMap 注入方案设计 | [Done: council/BackendArchitect] — Hook 注册即可 |
|
||
| B4 | CartSave extension_data 多座位链路分析 | [Done: council/BackendArchitect] — Gap 2 已消除 |
|
||
| B5 | 输出 Round 3 评估报告 + 投票 | [Done: council/BackendArchitect] |
|
||
|
||
---
|
||
|
||
## 待执行任务(Round 3 更新 — P0 → P1 → P2 排序)
|
||
|
||
### P0 — 立即修复(2h 内完成)
|
||
|
||
| Task | 内容 | 依赖 | 状态 |
|
||
|------|------|------|------|
|
||
| P0-1 | 实现 `SeatSkuService::getSoldSeats()` | 无 | [To Claim: council/BackendArchitect] |
|
||
| P0-2 | 注册 `plugins_service_goods_data` Hook + `InjectGoodsDetailData()` | 无 | [To Claim: council/BackendArchitect] |
|
||
|
||
### P1 — 短期完善
|
||
|
||
| Task | 内容 | 依赖 | 状态 |
|
||
|------|------|------|------|
|
||
| P1-1 | `api/` 目录纳入 Git 追踪 + 修复 `SeatMapService` 命名混淆 | P0-2 | [To Claim] |
|
||
| P1-2 | 统一 `SeatMapService` / `SeatSkuService` 命名 | P1-1 | [To Claim] |
|
||
| P1-3 | 完善 Phase 4 Tree API 文档(API 契约) | 无 | [To Claim] |
|
||
|
||
### P2 — 可延后
|
||
|
||
| Task | 内容 | 依赖 | 状态 |
|
||
|------|------|------|------|
|
||
| P2-1 | Phase 4 Tree API 实现(`buildTree()`) | P1-1 | [To Claim] |
|
||
| P2-2 | 实时座位锁定机制(SKIP LOCKED) | P0-1 | [To Claim] |
|
||
|
||
---
|
||
|
||
## 投票结果
|
||
|
||
**投票:A — 后端优先**
|
||
|
||
理由:
|
||
1. `getSoldSeats()` 实现(30 行)修复运行时崩溃,解锁 UniApp soldSeats API
|
||
2. Hook 注册(10 行)解锁 UniApp 商品详情 API(Gap 1)
|
||
3. Gap 2(CartSave)已消除,后端无额外改动需求
|
||
4. Phase 4 不应前置,应在 P0/P1 稳定后作为独立任务启动
|
||
|
||
---
|
||
|
||
## 输出
|
||
|
||
- 评估报告(更新版):`docs/council-eval-backendarchitect.md`
|
||
- 投票:`docs/council-eval-backendarchitect.md#五投票` |