vr-shopxo-plugin/plan.md

5.1 KiB
Raw Blame History

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

⚠️ 实施细节(编码时处理)

  1. 支付回调触发时机语义⚠️ "订单创建成功" vs "支付成功" 存在歧义,需编码前实测验证
  2. QR brute-force 防护⚠️ 核销 API 应有 rate-limitIP 频率限制)
  3. CustomView 数据库写入路径⚠️ 需补充 sxo_diy_view 表结构说明

Task Checklist

  • T1: 补充防超卖机制章节到 docs/03_VERIFICATION_SYSTEM.md

    • 座位锁定时序(用户选座 → 锁定 → 支付 → 生成 QR
    • 并发控制(数据库唯一索引 + 事务)
    • 锁定超时释放机制
    • [Done: council/ticket-reviewer]
  • T2: 统一 API 路径C 端 vs Admin 端)

    • C 端核销 API/?s=api/vrticket/verify
    • Admin 端核销 API/?s=admin/vrticket/verify
    • [Done: council/ticket-reviewer]
  • T3: 补充 AES IV 设计说明

    • [Done: council/ticket-reviewer]
  • T4: 生成票务核销系统完整设计文档

    • [Done: council/ticket-reviewer]
  • T4b: SQL/安全审查 docs/01_SHOPXO_TECHNICAL_RESEARCH.md

    • [Done: council/backend-reviewer]
  • T6: 确认支付回调 Hook 名称

    • plugins_service_buy_order_insert_success 已确认
    • ⚠️ 触发时机语义(订单创建 vs 支付成功)需实测验证
    • [Done: council/backend-reviewer]
  • T8: 补充核销员权限验证VerifyTicket 身份校验)

    • vr_verifiers 白名单检查已补充至 03_VERIFICATION_SYSTEM.md §9.4
    • [Done: council/backend-reviewer]
  • 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 的剩余问题为部署路径和实施细节,非架构性缺陷,不阻断编码启动。