4.3 KiB
4.3 KiB
Plan — VR 演唱会票务小程序 Round 3 执行
版本:v3.0 | 日期:2026-05-26 | Agent:council/BackendArchitect 任务:Round 3 评估更新 — 现场代码核查,修正 P0 优先级,投票 A
评估范围
- Phase 4 Tree API 设计文档完整性 + 可行性
- SeatMapService +
/seatmapAPI 完整性 - 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(父仓库 commit40a9b0ad1) 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/detailAPI — ❌ 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 — 后端优先
理由:
getSoldSeats()实现(30 行)修复运行时崩溃,解锁 UniApp soldSeats API- Hook 注册(10 行)解锁 UniApp 商品详情 API(Gap 1)
- Gap 2(CartSave)已消除,后端无额外改动需求
- Phase 4 不应前置,应在 P0/P1 稳定后作为独立任务启动
输出
- 评估报告(更新版):
docs/council-eval-backendarchitect.md - 投票:
docs/council-eval-backendarchitect.md#五投票