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.php、MqEventHandleSer.php - 消费者目录:
application/controllers/tasks
消费者地图
| destination / 来源 | 事件示例 | 消费入口 | 影响业务 | | --- | --- | --- | --- | | paycenter_notify | paycenter_pay_result、paycenter_refund_result、paycenter_pay_exception | tasks/PayCenterNotify.php | 在线支付、退款、白条还款、付款单 | | ordercenter_notify | ordercenter_order_audit、ordercenter_aftersale_audit、ordercenter_order_cancel、ordercenter_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_config、itemcenter_package_status_sync、itemcenter_item_price_enable | tasks/ItemCenterNotify.php | 限购、套包、价格、敏感词 | | dispatchcenter_notify | dispatchcenter_delivery_stock_out、dispatchcenter_logistice_info_notify、dispatchcenter_self_pick_up_notify | tasks/DispatchCenterNotify.php | 采购出库、物流、自提、退货确认 | | dgj | inventory_event、po_close_order_confirm、dgj_po_in_storage | tasks/SaasOrderNotify.php 等 | 库存事件、采购关闭确认、入库通知 | | dgj_notify | 销售/出库同步事件 | Services/SyncOrder/SyncOrderSer.php 生产,下游消费 | APP/SAAS 同步 | | dgj_channel | channel_order_manual_create、channel_order_delivery、channel_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:白条还款支付结果。
排查顺序:
- 用支付单号/业务单号查 MQ 消息体和消费日志。
- 查
t_scm_payment、t_scm_payment_info是否生成或更新。 - 查
t_scm_po_order_payinfo是否和采购单支付状态一致。 - 查采购单、退款单、还款单是否推进。
- 确认重复回调是否被幂等拦住,而不是误判为未处理。
订单中心回调
入口: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 自制订单关闭行。
排查顺序:
- 确认订单中心单号和 DGJ 采购单号的映射字段。
- 查采购主单
billStatus、明细数量、关闭明细。 - 查是否已经有出库、入库、支付或退款记录,避免重复推进。
- 如果是活动/秒杀单,继续查活动订单关系和秒杀订单状态。
OA 审批回调
入口:
application/controllers/tasks/OaNotify.phpapplication/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_order、t_flash_order_detail、t_flash_activity_goods.locked_qty、used_qty、关联采购单和支付明细。
DGJ 发给下游
生产者集中在 application/Services/Mq/MqSer.php,销售/出库同步构建在 application/Services/SyncOrder/SyncOrderBuilder.php 和 SyncOrderSer.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 常量:必须同时确认生产者、消费者、队列绑定、日志检索关键字。
- 改消费者入参:必须兼容历史消息和重试消息。
- 改支付回调:回归重复回调、失败回调、退款回调、白条还款。
- 改订单中心回调:回归采购审核、关闭、售后、自制订单。
- 改补偿任务:必须先在测试数据验证幂等,避免重复扣库存、重复释放库存、重复生成采购单。