vr-shopxo-plugin/plan.md

101 lines
4.3 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 3 执行
> 版本v3.0 | 日期2026-05-26 | Agentcouncil/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 APIRound 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_dataRound 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 商品详情 APIGap 1
3. Gap 2CartSave已消除后端无额外改动需求
4. Phase 4 不应前置,应在 P0/P1 稳定后作为独立任务启动
---
## 输出
- 评估报告(更新版):`docs/council-eval-backendarchitect.md`
- 投票:`docs/council-eval-backendarchitect.md#五投票`