MQ、回调与补偿任务地图

本文整理 DGJ2.0 与订单中心、支付中心、OA、商品中心、调拨中心、SAAS、APP、渠道平台之间的异步消息。排查线上问题时,先确认“消息有没有到”,再确认“消费方法有没有把业务表推进到正确状态”。

业务目标

  • 知道每个 destination 和 routing key 大概对应哪个消费者。
  • 知道常见补偿任务在哪里。
  • 知道重复回调、延迟消息、失败重试时应该检查哪些幂等字段和业务表。

MQ 常量入口

  • 事件定义:application/KzData/Enums/MqEventEnums.php
  • MQ 生产者:application/Services/Mq/MqSer.php
  • 消息检查/处理:application/Services/MqMessage/MqCheckSer.phpMqEventHandleSer.php
  • 消费者目录:application/controllers/tasks

消费者地图

| destination / 来源 | 事件示例 | 消费入口 | 影响业务 | | --- | --- | --- | --- | | paycenter_notify | paycenter_pay_resultpaycenter_refund_resultpaycenter_pay_exception | tasks/PayCenterNotify.php | 在线支付、退款、白条还款、付款单 | | ordercenter_notify | ordercenter_order_auditordercenter_aftersale_auditordercenter_order_cancelordercenter_order_close | tasks/OrderCenterNotify.php | 采购审核、售后、关闭、自制订单 | | oa_notify | oa_audit | tasks/OaNotify.php | OA 审批回调,秒杀活动审批 | | oa_result_notify | oa_result_notify_sync | tasks/OaResultNotify.php | OA 结果同步 | | itemcenter_notify | itemcenter_sku_limit_purchase_configitemcenter_package_status_syncitemcenter_item_price_enable | tasks/ItemCenterNotify.php | 限购、套包、价格、敏感词 | | dispatchcenter_notify | dispatchcenter_delivery_stock_outdispatchcenter_logistice_info_notifydispatchcenter_self_pick_up_notify | tasks/DispatchCenterNotify.php | 采购出库、物流、自提、退货确认 | | dgj | inventory_eventpo_close_order_confirmdgj_po_in_storage | tasks/SaasOrderNotify.php 等 | 库存事件、采购关闭确认、入库通知 | | dgj_notify | 销售/出库同步事件 | Services/SyncOrder/SyncOrderSer.php 生产,下游消费 | APP/SAAS 同步 | | dgj_channel | channel_order_manual_createchannel_order_deliverychannel_refund_action | tasks/ChannelOrderNotify.php | 大客户渠道订单 | | qpaycenter_notify | 全车件支付/退款/提现 | tasks/QPayCenterNotify.php | 全车件结算 |

支付中心回调

入口:application/controllers/tasks/PayCenterNotify.php

重点事件:

  • TYPE_PAYCENTER_PAY_RESULT:支付结果。代码里通常要求支付状态为成功值后才推进业务。
  • TYPE_PAYCENTER_REFUND_RESULT:退款结果。
  • TYPE_PAYCENTER_PAY_EXCEPTION:支付异常,例如抵扣失败。
  • TYPE_PAYCENTER_BAITIAO_RETURN_PAY_RESULT:白条还款支付结果。

排查顺序:

  1. 用支付单号/业务单号查 MQ 消息体和消费日志。
  2. t_scm_paymentt_scm_payment_info 是否生成或更新。
  3. t_scm_po_order_payinfo 是否和采购单支付状态一致。
  4. 查采购单、退款单、还款单是否推进。
  5. 确认重复回调是否被幂等拦住,而不是误判为未处理。

订单中心回调

入口:application/controllers/tasks/OrderCenterNotify.php

重点事件:

  • ordercenter_order_audit:采购正向审核。
  • ordercenter_order_cancel:在线支付订单取消。
  • ordercenter_aftersale_audit/update/close:采购售后审核、更新、关闭。
  • ordercenter_order_sync_dgj:OPS 自制订单下发。
  • ordercenter_order_close:OPS 自制订单关闭行。

排查顺序:

  1. 确认订单中心单号和 DGJ 采购单号的映射字段。
  2. 查采购主单 billStatus、明细数量、关闭明细。
  3. 查是否已经有出库、入库、支付或退款记录,避免重复推进。
  4. 如果是活动/秒杀单,继续查活动订单关系和秒杀订单状态。

OA 审批回调

入口:

  • application/controllers/tasks/OaNotify.php
  • application/controllers/tasks/OaResultNotify.php
  • 秒杀活动回调处理:application/Services/Activity/FlashActivitySer.php

秒杀 OA 模板码在 FlashActivityEnums::OA_TEMPLATE_CODE,值为 callback_20260526。OA 通过后,秒杀活动通常从审批中推进到审批通过;驳回后活动不可启用。

排查要点:

  • 查活动主表审批状态、OA 状态、启用状态是否一致。
  • t_flash_activity_log 是否记录操作轨迹。
  • 查是否重复回调,重复回调不能重复启用或重复修改数量。

商品中心同步

入口:application/controllers/tasks/ItemCenterNotify.php

常见事件:

  • SKU 限购配置变更。
  • 套包状态同步。
  • 结算价生效/失效。
  • 销售限价数据同步。
  • 敏感词变更。

影响范围:商品搜索、采购可买、销售可卖、活动商品校验、物料缓存、ES 索引。商品中心消息处理后常常还要刷新缓存或索引。

调拨/配送中心同步

入口:application/controllers/tasks/DispatchCenterNotify.php

常见事件:

  • dispatchcenter_delivery_stock_out:配送出库。
  • dispatchcenter_logistice_info_notify:物流信息。
  • dispatchcenter_self_pick_up_notify:自提通知。
  • dispatchcenter_return_confirm:采购售后出库/退货确认。

排查重点:采购状态从待出库到配送中/完成,销售出库配送状态,库存流水是否已写,物流/签收状态是否同步。

秒杀补偿任务

入口:application/controllers/tasks/FlashSaleTask.php

常用方法:

  • expireWaitPayOrders:处理待支付超时。
  • refreshGoodsStatus:刷新秒杀商品状态。
  • refreshInvalidCarts:刷新失效购物车。
  • compensatePaidOrders:补偿已支付但后续未完成的订单。
  • compensateClosedOrders:补偿已关闭订单。
  • runCompensate:统一补偿入口。

补偿前后要查:t_flash_ordert_flash_order_detailt_flash_activity_goods.locked_qtyused_qty、关联采购单和支付明细。

DGJ 发给下游

生产者集中在 application/Services/Mq/MqSer.php,销售/出库同步构建在 application/Services/SyncOrder/SyncOrderBuilder.phpSyncOrderSer.php

常见方向:

  • 销售单创建/更新/关闭 -> APP/SAAS。
  • 销售出库创建/更新/取消 -> APP/SAAS。
  • 库存事件 -> 下游库存同步。
  • 采购关闭确认 -> 订单中心/SAAS。
  • 对账单创建、发送、收款状态同步 -> 对账相关消费者。

常用排查命令

rg -n "TYPE_PAYCENTER_PAY_RESULT|paycenterPayResult|refund" application/controllers/tasks/PayCenterNotify.php application/KzData/Enums/MqEventEnums.php
rg -n "TYPE_ORDERCENTER_ORDER_AUDIT|ordercenter_order_close|ordercenter_order_sync_dgj" application/controllers/tasks/OrderCenterNotify.php application/KzData/Enums/MqEventEnums.php
rg -n "OA_TEMPLATE_CODE|callback20260526|oa_audit" application/controllers/tasks application/Services/Activity application/KzData/Enums
rg -n "expireWaitPayOrders|compensatePaidOrders|runCompensate" application/controllers/tasks/FlashSaleTask.php application/Services/Activity/FlashSaleSer.php
rg -n "sendInventoryEvent|sendPoCloseOrderConfirm|sendSaOrderOutToMq" application/Services/Mq/MqSer.php

改动风险和回归清单

  • 改 MQ 常量:必须同时确认生产者、消费者、队列绑定、日志检索关键字。
  • 改消费者入参:必须兼容历史消息和重试消息。
  • 改支付回调:回归重复回调、失败回调、退款回调、白条还款。
  • 改订单中心回调:回归采购审核、关闭、售后、自制订单。
  • 改补偿任务:必须先在测试数据验证幂等,避免重复扣库存、重复释放库存、重复生成采购单。