秒杀活动专项手册

本文覆盖 DGJ2.0 秒杀活动从 OPS 创建、OA 审批、启用,到服务站列表、加购、下单、支付、转采购、补偿的完整链路。适用于秒杀联调和线上排查。

适用场景

  • OPS 创建/导入活动商品失败。
  • OA 审批通过后活动未启用或服务站不可见。
  • 服务站列表显示有库存,但加购/下单失败。
  • 秒杀订单待支付、支付超时、取消、关闭后数量未回滚。
  • 支付成功但采购单未生成或状态不一致。
  • locked_qtyused_qty、活动总量异常。

入口文件

  • OPS/内部活动:application/controllers/inner/activity/FlashActivity.php
  • PC 服务站入口:application/controllers/scm/FlashSale.php
  • 移动商城入口:application/controllers/inner/moveMall/FlashSale.php
  • 活动管理服务:application/Services/Activity/FlashActivitySer.php
  • 服务站购买服务:application/Services/Activity/FlashSaleSer.php
  • 秒杀枚举:application/KzData/Enums/FlashActivityEnums.php
  • 秒杀补偿任务:application/controllers/tasks/FlashSaleTask.php
  • OA 回调:application/controllers/tasks/OaNotify.php

核心表

  • 活动主表:t_flash_activity
  • 活动商品:t_flash_activity_goods
  • 服务站范围:t_flash_activity_station_scope
  • 秒杀购物车:t_flash_cart
  • 秒杀订单主表:t_flash_order
  • 秒杀订单明细:t_flash_order_detail
  • 活动日志:t_flash_activity_log
  • 关联采购单:t_scm_po_ordert_scm_po_order_info
  • 支付明细:t_scm_po_order_payinfot_scm_payment

状态和枚举

  • 活动类型:单品售卖、套包售卖。
  • 库存范围:服务站对应仓、指定仓、全局预留。
  • 审批状态:草稿、审批中、审批通过、审批驳回。
  • 启用状态:草稿、启用、提前结束。
  • 页面状态:未开始、进行中、已结束。
  • 商品状态:待开始、进行中、已结束、已失效。
  • 秒杀订单:已创建、待支付、已支付、已取消、已关闭。
  • 秒杀采购单:PoOrderEnums::ORDERTYPE_FLASH_ORDER = 30-Cxx-77SRC_ORDER_TYPE_FLASH_ACTIVITY = 13

主流程

flowchart TD
  A["OPS 创建活动"] --> B["配置活动商品、库存、范围"]
  B --> C["提交 OA 审批"]
  C --> D{"审批结果"}
  D -->|通过| E["启用活动"]
  D -->|驳回| F["活动不可售"]
  E --> G["服务站列表/详情"]
  G --> H["加购或立即购买"]
  H --> I["创建秒杀订单并锁定数量"]
  I --> J["确认页/支付"]
  J -->|支付成功| K["生成或推进采购单"]
  J -->|超时/取消| L["释放锁定数量"]
  K --> M["采购后续出库/入库/关闭"]

列表和加购排查

  1. 查活动是否审批通过、启用、当前时间在活动窗口内。
  2. 查服务站是否被黑名单排除或未命中白名单。
  3. 查活动商品状态是否进行中,商品是否启用。
  4. 查库存范围:
  • 服务站对应仓:按当前服务站仓库查库存。
  • 指定仓:按活动配置仓库查库存。
  • 全局预留:按活动总量、锁定量、已用量判断。
  1. 查限购:单品限购、套包限购、服务站已购数量。
  2. 查购物车:t_flash_cart 是否有效,活动或商品失效后购物车应失效。

下单和支付排查

  1. t_flash_order 状态。
  2. t_flash_order_detail 的商品、数量、活动商品 id。
  3. t_flash_activity_goods.locked_qty 是否增加。
  4. 在线支付查 t_scm_po_order_payinfot_scm_payment
  5. 支付成功后查采购单:
  • orderType = 30-Cxx-77
  • srcOrderType = 13
  • 来源单号能关联秒杀订单。
  1. 如果支付成功但采购单未生成,查 FlashSaleSer 补偿和支付回调日志。

超时、取消和关闭

  • 待支付超时:FlashSaleTask::expireWaitPayOrders
  • 主动取消:秒杀订单变取消,释放锁定量。
  • 采购关闭:要确认秒杀订单和活动商品数量是否同步回滚。
  • 已支付补偿:compensatePaidOrders
  • 已关闭补偿:compensateClosedOrders

常用 SQL 模板

-- 活动和活动商品
select * from t_flash_activity where id = :activity_id;
select * from t_flash_activity_goods where activity_id = :activity_id;
select * from t_flash_activity_station_scope where activity_id = :activity_id;

-- 购物车和秒杀订单
select * from t_flash_cart where sid = :sid and activity_id = :activity_id;
select * from t_flash_order where sid = :sid and order_no = :flash_order_no;
select * from t_flash_order_detail where flash_order_id = :flash_order_id;

-- 秒杀转采购
select * from t_scm_po_order
where sid = :sid and orderType = '30-Cxx-77' and srcOrderType = 13;

常用 rg 命令

rg -n "class FlashSale|FlashSaleSer|FlashActivitySer" application/controllers application/Services
rg -n "locked_qty|used_qty|ORDER_STATUS_WAIT_PAY|ORDERTYPE_FLASH_ORDER" application/Services application/KzData/Enums
rg -n "expireWaitPayOrders|refreshInvalidCarts|compensatePaidOrders|compensateClosedOrders" application/controllers/tasks/FlashSaleTask.php
rg -n "OA_TEMPLATE_CODE|callback20260526" application/controllers/tasks application/Services/Activity application/KzData/Enums

改动风险和回归清单

  • OPS 创建、编辑、导入、导出、提交审批。
  • OA 审批通过、驳回、重复回调。
  • 服务站列表、详情、黑白名单、库存范围。
  • 加购、购物车失效、确认页、提交订单。
  • 支付成功、支付超时、主动取消、采购关闭。
  • 补偿任务幂等,重点防止重复生成采购单或重复释放库存。