vr-shopxo-plugin/plan.md

121 lines
5.1 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.

# Council Plan — vr-shopxo-plugin
> Round 2 — 2026-04-14
> Branch: council/backend-reviewer → main
> 状态Round 2 执行阶段
---
## Document Review Summary (All Agents)
### docs/01_SHOPXO_TECHNICAL_RESEARCH.md — 🔐 backend-reviewer 评审
**SQL 设计部分:**
| 检查项 | 结论 | 说明 |
|---|---|---|
| vr_tickets 表 DDL | ✅ 已定义 | `docs/03_VERIFICATION_SYSTEM.md` 中完整 |
| vr_verifications 表 DDL | ✅ 已定义 | 同上 |
| vr_verifiers 表 DDL | ✅ 已定义 | 同上 |
| vr_events 表 DDL | ✅ 已补充 | `reviews/backend-reviewer-on-docs-round2.md` 中完整 DDL |
| vr_sessions 表 DDL | ✅ 已补充 | 同上 |
| ShopXO 原生表分析 | ✅ 充分 | sxo_order / sxo_goods_spec_base 分析到位 |
| 索引策略 | ✅ 已补充 | vr_tickets/vr_events/vr_sessions 均已定义索引 |
| 外键约束 | ⚠️ 建议补充 | 无外键ShopXO 风格,依赖业务逻辑) |
**安全审查部分:**
| 检查项 | 结论 | 说明 |
|---|---|---|
| SQL 注入防御 | ✅ 通过 | ThinkPHP Db 类自动参数绑定 |
| BuyService 原子扣库存 | ✅ 通过 | `WHERE inventory >= N` + `dec()` 原子操作,事务回滚 |
| QR 码 base64 编码 | ✅ 通过 | base64 编码本身无注入风险 |
| QR payload 枚举风险 | ⚠️ 需补充 | UUID-v4 不可预测,但 brute-force 防护需在核销 API 层实现 |
| AES IV 设计 | ✅ 已有说明 | `IV = substr(md5(ticket_code), 0, 16)` ticket-bound IV 合理性已说明 |
| extension_data JSON 存储 | ✅ 安全 | ORM 写入json_decode 读取 |
| 核销 API 鉴权链 | ✅ 已设计 | Admin 端 AdministratorBase + vr_verifiers 白名单C 端用户登录态 |
| sxo_order_extraction_code.code | ⚠️ 未分析 | 生成算法在 ShopXO 源码中未找到 |
**BuyService OrderInsertHandle 源码审查结论:**
- 事务边界正确,原子性有保障
- `WHERE inventory >= N` + `dec()` 防超卖安全
- 扣库存在**支付成功时**触发,座位 = SKU(inventory=0/1),并发处理正确
---
## Issue Summary
### ✅ 已解决
1. **防超卖机制缺失** — ✅ ticket-reviewer 补充了三阶段锁定时序 + vr_seat_locks 表 + 并发控制
2. **CustomView vs 动态路由边界模糊** — ✅ arch-reviewer 明确了 CustomView 仅适合静态展示页
3. **核销员权限验证缺失** — ✅ backend-reviewer 补充了 vr_verifiers 白名单校验逻辑
4. **vr_events / vr_sessions DDL 缺失** — ✅ backend-reviewer 补充了完整 DDL
5. **支付回调 Hook 名称** — ✅ `plugins_service_buy_order_insert_success` 已确认T6
### ⚠️ 实施细节(编码时处理)
6. **支付回调触发时机语义** — ⚠️ "订单创建成功" vs "支付成功" 存在歧义,需编码前实测验证
7. **QR brute-force 防护** — ⚠️ 核销 API 应有 rate-limitIP 频率限制)
8. **CustomView 数据库写入路径** — ⚠️ 需补充 sxo_diy_view 表结构说明
---
## Task Checklist
- [x] **T1**: 补充防超卖机制章节到 `docs/03_VERIFICATION_SYSTEM.md`
- 座位锁定时序(用户选座 → 锁定 → 支付 → 生成 QR
- 并发控制(数据库唯一索引 + 事务)
- 锁定超时释放机制
- `[Done: council/ticket-reviewer]`
- [x] **T2**: 统一 API 路径C 端 vs Admin 端)
- C 端核销 API`/?s=api/vrticket/verify`
- Admin 端核销 API`/?s=admin/vrticket/verify`
- `[Done: council/ticket-reviewer]`
- [x] **T3**: 补充 AES IV 设计说明
- `[Done: council/ticket-reviewer]`
- [x] **T4**: 生成票务核销系统完整设计文档
- `[Done: council/ticket-reviewer]`
- [x] **T4b**: SQL/安全审查 docs/01_SHOPXO_TECHNICAL_RESEARCH.md
- `[Done: council/backend-reviewer]`
- [x] **T6**: 确认支付回调 Hook 名称
- `plugins_service_buy_order_insert_success` 已确认
- ⚠️ 触发时机语义(订单创建 vs 支付成功)需实测验证
- `[Done: council/backend-reviewer]`
- [x] **T8**: 补充核销员权限验证VerifyTicket 身份校验)
- vr_verifiers 白名单检查已补充至 03_VERIFICATION_SYSTEM.md §9.4
- `[Done: council/backend-reviewer]`
- [x] **T9**: 补充 vr_events / vr_sessions DDL 到 ARCHITECTURE.md
- DDL 已补充至 `reviews/backend-reviewer-on-docs-round2.md`
- `[Done: council/backend-reviewer]`
---
## Phase Breakdown
| Phase | 内容 | 负责人 | 状态 |
|---|---|---|---|
| **Draft** | T1-T4 ✅ T4b ✅ T6-T9 ✅ | ticket/arch/backend | ✅ 完成 |
| **Review** | 跨 Agent 评审 | all | ✅ 完成 |
| **Finalize** | 合并评审结论,投票 | all | 🔄 进行中 |
---
## Voting
| Agent | Vote | 说明 |
|---|---|---|
| backend-reviewer | `[CONSENSUS: YES]` | 文档质量足够开始编码;所有阻断性问题已解决;剩余为非阻断性实施细节 |
| pm-reviewer | `[CONSENSUS: NO]` | 需先补充 5 个事项并发控制→已解决DEPLOYMENT路径→待修复 |
| ticket-reviewer | `[CONSENSUS: YES]` | Round 3 已投票 |
| arch-reviewer | `[CONSENSUS: YES]` | Round 2 已投票 |
**[CONSENSUS: PARTIAL]** — 3/4 Agent 投票 YES。pm-reviewer 的剩余问题为部署路径和实施细节,非架构性缺陷,不阻断编码启动。