121 lines
5.1 KiB
Markdown
121 lines
5.1 KiB
Markdown
# 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-limit(IP 频率限制)
|
||
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 的剩余问题为部署路径和实施细节,非架构性缺陷,不阻断编码启动。
|