本文把“DGJ2 仓库之外的系统”统一登记为系统边界。每个边界说明:谁调用谁、走 HTTP 还是 MQ、关键业务键、状态落点、失败后谁补偿,以及哪些结论仍需环境确认。
文档只保留配置常量和接口路径,不记录域名值、密钥、Token、手机号、客户数据或内部 IP。

1. 业务目标

DGJ2 不是独立单体。采购、支付、配送、商品、SAAS、渠道、报表、IM、短信和文件都依赖外部系统。建立清单的目的有四个:

  1. 联调时知道应该找哪个系统和哪个入口。
  2. 故障时分清“本地未发送、消息在途、下游失败、回调未消费”。
  3. 改代码时知道契约、状态和补偿影响面。
  4. 交接时能用业务键从 DGJ 一直追到下游。

2. 适用场景

场景使用本文的方式
采购审核一直不回来查订单中心的生产消息、消费队列和采购单状态
已支付但订单未变化查支付中心业务单号、支付流水和 paycenter_notify
已发货但未出库查调拨中心与 TMS 两条不同链路
商品价格/限购未生效查商品中心消息、缓存和索引刷新
SAAS 看不到销售单查 dgj_notify、同步构建器和下游幂等
IM 消息已到但机器人不回复查 IM MQ、会话入库、同步结果回执和 AI/报价链
对账单未发出查账单任务、发送队列、文件生成、短信/机器人通道
报表没有当天数据查 DWD/Report Service/DataService,不先改业务库

3. 什么叫“外部系统”

本文同时登记三类边界:

边界类型示例特点
公司内部中心服务订单中心、支付中心、商品中心、调拨中心通常经 CENTER_API、专用服务常量或 MQ
同组织独立业务系统SAAS、OPS、全车件、CRM、报表服务有独立数据所有权和发布节奏
第三方平台Udesk、高德、腾讯 IM、OSS受第三方 SLA、配额和鉴权影响

“外部”是相对 DGJ2 代码与数据库而言,不代表一定在公网。

4. 总体系统图

flowchart TB
    DGJ[DGJ2]
    OC[订单中心]
    PAY[支付中心]
    DIS[调拨中心]
    TMS[TMS]
    ITEM[商品中心]
    INV[库存中心]
    OPS[OPS / OPS Manager]
    OA[OA]
    SAAS[SAAS / E站]
    QCJ[全车件 / QPay]
    IM[IM中心 / 腾讯IM]
    DATA[数据平台 / 报表中心]
    CRM[CRM / 风控]
    OUT[短信 / Udesk / 高德 / OSS]

    DGJ <--> OC
    DGJ <--> PAY
    DGJ <--> DIS
    DGJ <--> TMS
    DGJ <--> ITEM
    DGJ --> INV
    DGJ <--> OPS
    DGJ <--> OA
    DGJ <--> SAAS
    DGJ <--> QCJ
    DGJ <--> IM
    DGJ <--> DATA
    DGJ <--> CRM
    DGJ <--> OUT

5. 系统资产总表

#系统DGJ 角色主要协议核心业务
1订单中心双向HTTP + Topic MQ采购订单、售后、预订单
2支付中心双向HTTP/业务提交 + Topic MQ支付、退款、授信、提现
3调拨中心双向HTTP + Topic MQ发货、出库、自提、售后退回
4TMS双向HTTP + Topic MQ运单、箱号、预计到达、配送状态
5商品中心主要消费Topic MQ + HTTP限购、套包、结算价、限价、敏感词
6库存中心调用方HTTP可用库存、快速库存、仓库口径
7OPS Center双向HTTP + Topic MQ服务站、货主区域、品牌授权、虚拟站
8OPS Manager调用方HTTP金融、白条、退款、WMS、物料、返利
9OA双向HTTP + Topic MQ审批提交与审批结果
10SAAS / E站双向HTTP + Direct/Topic MQ销售、出库、报价、客户、盘点
11大客户渠道双向Topic MQ渠道订单、发货、售后、审核
12全车件 / QCJ双向HTTP + Topic MQ全车件订单、入库、账户开通
13QPay / 结算中心主要消费Topic MQ支付、退款、提现结果
14GPDA / WMS双向HTTP + Topic MQ盘点、扫码、关单、SKU 数量
15IM 中心双向HTTP + Topic MQUserSig、业务消息、同步回执
16腾讯 IM间接双向经 IM 中心 / SDKE站会话和机器人消息
17微信机器人双向HTTP Provider + 消息消费群聊询价、发消息、会话
18Udesk调用方/消费HTTP + Direct MQ客户创建和更新
19VIN / 国内数据平台双向HTTP + Topic MQVIN、分类别名、方位、OE、商品更新
20报表中心 / Hologres调用方HTTPDWD 查询
21Report Service / DataService / BI调用方HTTP销售、利润、客户、经营报表
22CRM调用方/消费HTTP + MQ签约单、经营任务
23风控中心调用方HTTP服务站信用健康、授信风险
24通知中心 / JPush调用方HTTP短信、验证码、推送
25文件服务 / OSS / 文档转换调用方HTTP上传、下载、对账单 PDF/PNG
26高德地图调用方HTTP地址正逆地理编码
27AI 中心 / 语音转文字调用方HTTPOCR、语音解析、机器人能力
28新采购/销售服务调用方HTTP拆服务后的采购、报价、售后能力

6. 集成方式分类

flowchart LR
    A[业务动作] --> B{需要同步结果吗}
    B -->|必须马上知道| C[同步 HTTP]
    B -->|可最终一致| D[MQ]
    B -->|多项可并行查询| E[异步 HTTP Promise]
    C --> F{HTTP 成功}
    F -->|是| G[继续本地流程]
    F -->|否| H[回滚或明确失败]
    D --> I[本地提交后生产消息]
    I --> J[下游消费与回调]
    E --> K[asyncWait 汇总结果]

选择协议不能只看性能:

  • 状态必须立即确认的提交用同步 HTTP。
  • 可以最终一致的通知用 MQ。
  • 并行查询适合异步 HTTP,但失败不能静默当成空数据。
  • 跨系统事务必须有幂等键和补偿,不存在真正的单库事务。

7. 公共 HTTP Provider 规则

7.1 BaseProvider

application/Providers/BaseProvider.php 基于 Guzzle,支持:

能力当前实现
表单类型form、JSON、body、query、multipart
同步默认超时Provider 基础值 2 秒;具体方法常传 5/8/10/15/20 秒
异步默认超时2 秒
结果格式尝试 XML,失败后 JSON
HTTP 成功判断状态码 200 后再由子 Provider 判断业务 code
文件下载识别 spreadsheet content-type 后直接输出
超时异常curl error 28 转为 RequestTimeoutException

7.2 响应契约并不统一

Provider 家族成功 code
通用 Provider::httpcode = 200
Report/Purchase/Sale Servicecode = 0,返回 data
Udeskcode = 1000
部分中心服务code = 0 或项目 Code::SUCCESS
某些接口无 code,直接返回业务数据

新增 Provider 时必须复用对应系统的父类,不能假定所有服务都用同一个成功码。

7.3 公共日志风险

BaseProvider 默认记录 URL、headers、data 和响应。以下字段必须在调用前后脱敏:

Authorization、Token、签名、密码、UserSig、手机号、身份证、银行卡、客户联系方式、文件临时地址

只调用 closeLogger() 会失去排查证据,优先实现结构化脱敏。

7.4 requestId 的边界

当前 Provider 内部 requestId 由请求体与当前时间计算,仅用于本地日志,没有确认会放到请求头传给下游。

因此跨系统追踪不能只依赖该值,建议统一透传:

trace_id + request_id + business_key + event_type

8. 公共 MQ 规则

核心枚举:application/KzData/Enums/MqEventEnums.php。

sequenceDiagram
    participant B as DGJ业务事务
    participant P as MqSer/Producer
    participant Q as RabbitMQ
    participant C as 外部系统或DGJ Consumer
    participant DB as 消费方数据库
    B->>B: 写本地业务状态
    B->>P: 组装 destination/routingKey/payload
    P->>Q: publish(messageId)
    Q->>C: deliver
    C->>DB: 幂等检查并落库
    alt 成功或不可重试业务错误
        C-->>Q: ACK
    else 临时系统错误
        C-->>Q: NACK / 重试
    end

8.1 MQ 必备字段

建议所有事件至少具备:

字段用途
messageId消息级去重
eventType / routing key事件语义
businessKey单号、活动 ID、客户 ID 等业务幂等键
occurredAt事件发生时间
version同业务键乱序判断
source生产系统
traceId跨系统日志串联
data版本化业务体

当前部分生产代码使用 uniqid() 作为消息 ID,不能证明跨进程、跨机器的严格唯一和业务幂等。消费方仍应按业务键防重。

9. 订单中心

9.1 责任边界

系统负责
DGJ服务站采购意图、采购主子单、站内库存和财务落账
订单中心平台订单编排、上游审核、售后流程、预订单外部状态

9.2 DGJ 主动调用 / 发送

方向能力入口
HTTP支付订单联合提交、取消、查询OrderCenter/Order4PayProvider.php
HTTP售后提交、关闭、取消配送、故障原因OrderCenter/AfterSaleProvider.php
HTTP预订单、自制单、大单OrderCenter/*Provider.php
MQ创建采购订单ordercenter.ordercenter_order_create
MQ采购关闭确认等MqSer::sendPoCloseOrderConfirm 等

9.3 DGJ 消费事件

队列前缀:ordercenter_notify;入口:tasks/OrderCenterNotify.php。

事件业务动作
ordercenter_order_audit正向采购审核
ordercenter_order_cancel在线支付采购取消
ordercenter_aftersale_audit售后审核
ordercenter_aftersale_update售后更新
ordercenter_aftersale_confirm_warehouse确认退货仓
ordercenter_aftersale_rollback_audit售后弃审
ordercenter_aftersale_close售后关闭
ordercenter_aftersale_refund_finish退款完成
ordercenter_self_change_direct自制单配送方向变更
ordercenter_order_sync_dgjOPS 自制订单下发
ordercenter_order_closeOPS 自制订单关闭行
ordercenter_preorderrefund_create/cancel预订单售后创建/取消
ordercenter_preorder_close预订单关闭
ordercenter_aftersale_return_quota_expire退货额度过期

9.4 核心幂等键

DGJ billNo / 外部 outOrderNo / orderCenterOrderNo / 售后单号 / sourceLineCode / 明细行 ID

9.5 主流程

sequenceDiagram
    participant D as DGJ
    participant O as 订单中心
    participant M as ordercenter_notify
    D->>O: 创建采购/售后(HTTP或MQ)
    O-->>D: 受理结果/外部单号
    O->>M: 审核、取消、关闭或退款事件
    M->>D: OrderCenterNotify 消费
    D->>D: 校验单号、类型、原状态和明细
    D->>D: 事务更新采购/售后/数量

9.6 失败边界

  • HTTP 超时不代表订单中心一定未受理,必须按外部单号查询。
  • MQ 重复可能表现为“原状态不允许”,要区分已处理与真实脏状态。
  • 明细行关闭必须以来源行号防重,不能只看主单。
  • 本地事务成功后下游副作用失败,需要单独补偿。

10. 支付中心

10.1 责任边界

系统负责
DGJ业务应付/应收、采购状态、本地 Payment/Account 记录
支付中心支付渠道、支付流水、退款执行、授信/分期结果

10.2 消费入口

队列:paycenter_notify;入口:tasks/PayCenterNotify.php。

事件本地影响
paycenter_pay_result采购/预订单支付成功落账与状态推进
paycenter_pay_exception抵扣失败等异常处理
paycenter_refund_result退款结果
paycenter_balance_adjust账户调整
paycenter_refund_account_withdraw_result提现结果
paycenter_baitiao_return_pay_result授信还款支付
paycenter_baitiao_offline_return线下授信还款
paycenter_baitiao_expire授信到期提醒
paycenter_installment_expire分期到期提醒
paycenter_baitiao_service_overdue_change逾期状态变化与锁站影响

10.3 支付结果示意

{
  "billNo": "业务单号",
  "payStatus": "02",
  "payOrderNo": "支付流水号",
  "payAmount": 10000,
  "payTime": "业务时间",
  "payItems": []
}

示意中的金额单位必须按接口合同确认。DGJ 支付链存在外部“分”和本地“元”的转换,不能仅按字段名判断。

10.4 幂等与补偿

flowchart TD
    A[收到支付结果] --> B{payStatus 是成功吗}
    B -->|否| C[记录或按事件类型处理]
    B -->|是| D[按业务单号查订单]
    D --> E{本地已落同一支付流水吗}
    E -->|是| F[ACK 幂等结束]
    E -->|否| G[事务写 Payment/PaymentInfo/PayInfo]
    G --> H[推进采购状态和活动库存]
    H --> I[发送后续事件]

支付回调最小幂等组合:支付中心流水号 + 业务单号 + 支付状态 + 金额。只用业务单状态会误伤混合支付或多次退款。

11. 调拨中心

11.1 HTTP 能力

application/Providers/DispatchCenter/OrderProvider.php:

能力用途
pause / pauseCancel配送暂停与取消暂停
warn特殊配送预警
lockTempGoodsStock / unlockTempGoodsStock临采库存锁定与回调
speedStatus时效能力校验
fhd2dh发货单转到货相关处理

11.2 MQ 消费

队列:dispatchcenter_notify;入口:tasks/DispatchCenterNotify.php。

事件动作
dispatchcenter_delivery_stock_out配送出库,推进采购数量/状态
dispatchcenter_logistice_info_notify物流信息
dispatchcenter_self_pick_up_notify自提通知
dispatchcenter_return_closeWMS/配送退货关单回传
dispatchcenter_order_tag_biz_change订单标签业务变化

部分配送出库失败会进入 20 秒延迟队列后再次投递。

11.3 关键业务键

采购主单号 + 子单号/发货单号 + 配送单号 + 明细行号 + 本次出库数量

不能只按采购主单幂等,因为一个采购单可以多次分批出库。

12. TMS

TMS 和调拨中心不是同一个边界。TMS 更关注运单与履约状态。

入口:tasks/ExpressNoSyncNotify.php,队列前缀 tmsprod_notify。

事件本地用途
tmsprod_out_expressno_relation出库单与第三方运单关系
tmsprod_waybill_prearrvied_time预计到达时间
tmsprod_express_split_carton_no拆箱/箱号关系
tmsprod_third_party_delivery_change_status第三方配送状态
tmsprod_third_pickup_order_status三方取件状态
tmsprod_self_transport_status自配送状态
flowchart LR
    A[DGJ销售/采购单] --> B[调拨中心配送单]
    B --> C[TMS运单]
    C --> D[运单号/箱号]
    C --> E[预计到达]
    C --> F[配送/取件状态]
    D --> G[DGJ履约展示]
    E --> G
    F --> G

排查“已出库无物流”时,先确认调拨中心是否已出库,再确认 TMS 是否已建运单;不要混成一个状态。

13. 商品中心

消费入口:tasks/ItemCenterNotify.php,队列 itemcenter_notify。

事件影响面
itemcenter_sku_limit_purchase_config采购限购和缓存
itemcenter_package_status_sync套包可用状态
itemcenter_item_price_enable结算价生效
itemcenter_item_price_disable结算价失效
itemcenter_guide_price_limit_change销售限价/指导价
itemcenter_sensitive_word_change商品/内容敏感词

HTTP Provider:application/Providers/ItemCenter/*,用于商品和物料查询。

13.1 消费后副作用

flowchart TD
    A[商品中心消息] --> B[校验事件和商品标识]
    B --> C[更新本地商品/价格配置]
    C --> D[刷新 Redis 集合或缓存时间]
    C --> E[触发 Mongo/ES 或前端数据更新]
    C --> F[影响采购、销售、活动可买性]

商品中心消息处理成功不能只看业务表,必须核对缓存和搜索层。

14. 库存中心

Provider:application/Providers/InventoryCenter/KzInventoryProvider.php。

主要能力:

方法用途
asyncGetInventoryBySkuIds按站点、SKU、订单类型、仓库查询库存
asyncGetSpeedInventoryBySkuIds查询时效/快速库存

调用常为异步 HTTP,依赖回调和最终 asyncWait()。

关键参数:

sid + skuIds + orderType + warehouseCode + extraQuery

库存中心返回的是可买库存口径,不等于 DGJ 本地实时库存表。秒杀、套包、指定仓和在途库存还会二次计算。

15. OPS Center

15.1 消费入口

tasks/OpsCenterNotify.php,队列 opscenter_notify。

事件业务影响
opscenter_shipper_region_config货主供货区域配置
opscenter_brand_license_create/update品牌授权书同步
opscenter_sitemgr_virtual虚拟站变化
opscenter_customer_enable_auto_update服务站启用状态自动更新

15.2 HTTP Provider

application/Providers/OpsCenter/* 覆盖:

  • 服务站与区域。
  • 供应商、银行、发票资料。
  • 品牌授权。
  • 第三方物流与 TMS。

OPS 是主数据所有者时,DGJ 只保存业务所需快照或缓存,不能反向直接覆盖主数据。

16. OPS Manager

application/Providers/OpsManager/* 是最大的外部 Provider 家族,覆盖:

领域Provider 目录
白条、分期、还款Baitiao/*
余额与资金Balance/*、Finance/*
银行和支付通道Financial/*
退款Refund/*
采购限量Purchase/*
返利Rebate/*
销售出库Sale/*
WMS 箱号、物流、签收Wms/*
物料分类Materiel/*

金融 Provider 只登记接口路径和配置 key,不把签名算法参数、密钥或银行资料写入文档。

17. OA

17.1 双向链路

方向入口用途
DGJ -> OAProviders/Oa/OaProvider.php、业务 Provider发起审批/同步状态
OA -> DGJtasks/OaNotify.phpoa_audit 审批回调
DGJ -> 结果队列MqSer::sendOAResult发送 OA 处理结果
结果同步消费tasks/OaResultNotify.phpoa_result_notify_sync

秒杀活动使用特定模板码分流到 FlashActivitySer::callback20260526。

sequenceDiagram
    participant D as DGJ业务
    participant O as OA
    participant Q as oa_notify
    D->>O: 提交审批,携带模板码和业务ID
    O-->>D: 审批实例信息
    O->>Q: oa_audit
    Q->>D: 模板码分流
    D->>D: 幂等更新审核状态
    D-->>O: 结果同步/处理回执

OA 幂等键至少包括模板码 + 审批实例号 + 业务 ID + 审批节点/结果。

18. SAAS / E站

18.1 DGJ 调用 SAAS

application/Providers/KzSaas/* 覆盖:

  • 销售订单与出库。
  • 客户、用户与门店。
  • 盘点。
  • 微仓库存。
  • 优惠券、信用、资质。
  • 微信和银联相关能力。

18.2 DGJ 发送 MQ

MqSer 和 SyncOrderBuilder/SyncOrderSer 发送:

事件族示例
维修厂销售单created、updated、cancelled、stopped、completed、expired
维修厂出库单created、updated、cancelled
老 APP 通知出库、配送状态、关闭、结单、退货审核/完成
新业务报价转询价、出库转 SAAS 订单、微信群下单
主数据新站、应用开通、客户同步、简码、关站
活动优惠券、活动开始/结束

18.3 DGJ 内部 Direct 消费

tasks/SaasOrderNotify.php 消费 dgj:库存事件、采购关闭确认、新站、应用开通、OPS 创建/关闭订单、配送出库等。它名字包含 SAAS,但不代表所有事件都来自 SAAS。

18.4 销售同步流程

sequenceDiagram
    participant S as DGJ销售事务
    participant B as SyncOrderBuilder
    participant M as dgj_notify
    participant A as SAAS
    S->>S: 提交销售单/出库单
    S->>B: 构建版本化事件
    B->>M: 发送业务单号、状态和明细
    M->>A: 下游消费
    A->>A: 按订单号+事件版本幂等

同一销售单可能连续产生 created、updated、completed。下游必须防乱序,不能只按最后到达时间覆盖。

19. 大客户渠道

队列:dgj_channel;入口:tasks/ChannelOrderNotify.php。

事件方向业务
channel_order_manual_create渠道 -> DGJ / OPS人工创建渠道订单
channel_order_delivery渠道 -> DGJ发货
channel_refund_action渠道 -> DGJ退货入库审核
channel_order_approve渠道 -> DGJ订单审核
渠道退款事件DGJ -> 渠道售后结果同步

核心表:t_channel_order、t_channel_order_info、t_channel_aftersale、t_channel_aftersale_info。

业务状态:created、wait_ship、part_ship、finish、cancel。

幂等必须落到平台订单号 + 平台明细行号 + 动作类型,分批发货不能按主单只处理一次。

20. 全车件、QCJ 与 QPay

20.1 HTTP 边界

Provider能力
AllCarPartService/AppProvider.php入库区域、入库单、入库商品
AllCarPartService/StorageProvider.php初始化服务站仓储
AllCarPartService/PosOrderProvider.php按销售单号查询采购关联
KzSaas/AllCarPartProvider.phpSAAS 侧全车件业务

20.2 MQ 边界

队列事件用途
qcj_notifyqcj_repair_factory_register_complete维修厂结算账户开通
qpaycenter_notify支付/退款/提现完成全车件结算结果

入口:tasks/QPayCenterNotify.php 及全车件相关 Controller。

全车件业务同时跨销售、采购、结算三条链,排查时必须保留平台订单号、DGJ 单号和结算流水三组映射。

21. GPDA / WMS

21.1 GPDA 事件

事件方向作用
stationprod_spdmgr_close_taskGPDA -> DGJ关闭盘点任务
dgj_pd_status_updateDGJ -> OPS/GPDA盘点状态
dgj_pd_sku_num_updateDGJ -> OPS/GPDASKU 盘点数量
gpda_send_sku_num_msg_to_opsDGJ -> OPSSKU 数量消息

tasks/GpdaNotify.php 按 taskNo 批量把未关闭盘点单更新为关闭状态,使用数据库事务,异常返回 NACK。

21.2 盘点幂等键

taskNo + skuId + 扫码批次/提交版本 + 状态

盘点关闭与盘点差异入账不是同一个动作,关闭回调不能重复生成库存流水。

22. IM 中心与腾讯 IM

22.1 HTTP 能力

application/Providers/ImCenter/ImCenterProvider.php:

方法用途
getUserSig获取腾讯 IM 登录签名
sendImMessage发送业务消息
getRepairShopUserByImGroupId群与维修厂员工映射
msgSyncResult通知消息同步处理结果

默认 HTTP 超时 5 秒,成功响应通常 code = 0。

22.2 MQ 消费

队列:imcenter_notify;事件:im_app_biz_message;入口:tasks/ImCenterNotify.php。

sequenceDiagram
    participant T as 腾讯IM
    participant I as IM中心
    participant Q as imcenter_notify
    participant D as DGJ机器人
    participant R as 会话/报价服务
    T->>I: 用户业务消息
    I->>Q: im_app_biz_message
    Q->>D: msgId + account + content
    D->>R: 保存会话并执行业务回复
    alt 处理成功
        D->>I: msgSyncResult(msgId)
        D-->>Q: ACK
    else 可重试系统异常
        D-->>Q: NACK
    else 参数/业务错误
        D-->>Q: ACK并记录
    end

22.3 风险

  • UserSig 属于敏感凭据,日志不得输出。
  • 当消息没有 msgId 时本地可能生成临时值,无法与上游严格对账。
  • 同步结果通知失败只记录 warning 时,IM 中心可能再次投递;本地会话入库必须幂等。

23. 微信机器人

Provider:application/Providers/WechatRobot/*;业务:application/Services/MoveMall/Robot*。

能力包括:

  • 接收群聊/私聊消息。
  • 识别联系人、车辆、VIN、关键词。
  • 查询商品、价格和库存。
  • 发送文本、图片和商品列表。
  • 将微信群订单同步到 SAAS。
flowchart TD
    A[微信消息] --> B[机器人接入]
    B --> C[会话与联系人识别]
    C --> D{VIN/车型/关键词是否完整}
    D -->|否| E[追问或预输入缓存]
    D -->|是| F[商品/价格/库存查询]
    F --> G[格式化回复]
    G --> H[微信机器人发送]
    G --> I[可选同步 SAAS 询价/订单]

机器人失败要分接入、消息队列、会话、识别、查询和发送六层,不要只看“没有回复”。

24. Udesk

24.1 接口方式

application/Providers/Udesk/* 使用第三方 HTTP API:

  • 客户创建。
  • 客户更新。
  • 请求携带账号标识、时间戳和签名。
  • 成功业务码为 1000。

签名使用本地配置中的凭据计算,文档与日志只允许记录“签名已生成”,不记录原值。

24.2 异步方式

队列/事件用途
dgj + udesk_customer_create新客户创建
dgj_udesk + udesk_customer_async客户编辑后异步更新

入口:tasks/SaasOrderNotify.php、tasks/UdeskNotify.php。

Udesk 失败不应回滚客户主数据,但必须进入可查询的同步失败记录或重试任务。

25. VIN 与国内数据平台

队列:vin;入口:tasks/VinAuditNotify.php。

事件用途
sync_product_code商品编码同步
sync_category_alias分类别名变化
position_change_event方位关键词变化
cxj_oe_changeOE 管理变化
vin_goods_updateDGJ 通知 VIN 侧商品更新

HTTP Provider:application/Providers/Vin/*、application/Providers/DevCenter/VinProvider.php。

分类别名、方位词、OE 变化会影响智能询价和搜索,不是只更新一个展示字段。

26. 报表中心、Report Service 与 DataService

系统调用方式用途
Hologres QueryCENTER_API/devcenter/report/hologres/query采购、库存等 DWD SQL
Report ServiceREPORT_SERVICE销售明细、客户/商品聚合、对账
DataServiceCENTER_API/devcenter/reports/*利润、客户、经营指标
BIBI 配置常量经营看板跳转/报表

这三类系统不共用同一响应码和同步时效。详细口径见《22_报表口径专题》。

26.1 异步查询风险

DataService 部分报表并行发请求,异步失败回调可能只收到空数组。业务层必须区分:

真实无数据 != 请求超时 != 下游返回错误 != 回调没有执行

27. CRM 与经营任务

Provider:application/Providers/Crm/*。

能力用途
联系人签约单查询、保存、作废、审核、模板和品牌分类
经营任务工单列表、详情和明细
MQ dgj_crm_work_order_update经营任务变化同步

CRM 是签约与经营任务的主系统,DGJ 负责业务入口和展示。保存后超时必须按业务单号查询,避免重复创建签约单。

28. 风控中心

Provider:application/Providers/RiskCenter/RiskCenterProvider.php。

能力:按服务站批量查询信用健康和风险信息。

关键原则:

  • 风控接口不可用时,涉及授信、放款或高风险资金动作不能默认放行。
  • 普通只读展示可以降级为空或提示,但必须明确与“无风险”不同。
  • 风险结果应带查询时间,避免使用过期缓存做资金决策。

29. 通知中心与 JPush

29.1 短信

application/Providers/NotifyCenter/Sms/SmsProvider.php:

能力场景
sendVerifier / match验证码发送与校验
baitiaoExpire授信到期提醒
installmentExpire分期到期提醒
accCheckBill对账单提醒
adminAccountOpen账号开通提醒
wechatDown微信机器人掉线提醒

短信通过 scenarioCode + args + receivers 调用通知中心。

29.2 推送

application/Providers/DataService/JpushProvider.php 处理移动推送,部分调用采用异步回调。

手机号、验证码、账号初始信息都属于敏感信息,Provider 公共日志必须脱敏。

30. 文件服务、OSS 与文档转换

能力入口
上传文件到 OSSProviders/File/FileProvider.php
从开发中心取 OSS 文件Providers/DevCenter/ExploitProvider.php
业务图片Providers/DevCenter/BizWebImageProvider.php
对账单 PDF/PNGServices/Statement/StatementExportService.php

文档转换服务地址按环境配置,禁止在知识库记录实际内部地址。

flowchart LR
    A[业务数据] --> B[HTML/模板]
    B --> C[文档转换服务]
    C --> D[PDF或PNG]
    D --> E[OSS]
    E --> F[短信/机器人/人工下载]

失败补偿需要区分:生成失败、上传失败、临时 URL 过期、发送失败。

31. 高德地图

Provider:application/Providers/Amap/AmapProvider.php。

方法用途
geo(address, cityCode)地址转经纬度
regeo(longitude, latitude)经纬度转地址

密钥来自配置,不能记录在日志或文档。地址属于个人/客户数据,日志只保留必要片段或哈希。

地图失败通常不应直接修改客户原始地址;可以标记待解析并补偿。

32. AI 中心与语音能力

application/Providers/AiCenter/AiCenterProvider.php 支持:

  • 语音解析和格式转换。
  • 图片配件 OCR。
  • 异步 OCR 回调上下文。
  • 业务消息发送。

application/Providers/DevCenter/Voice2TextProvider.php 还提供语音转文字 Token 能力。

32.1 超时和降级

AI 请求可使用较长超时。OCR/语音失败时应允许用户重新上传、手工输入或回到普通搜索,不应把空识别结果写成已确认车型/配件。

33. 新采购服务与销售服务

服务Provider当前能力
Purchase ServiceProviders/PurchaseService/*购物车、物流、退款等
Sale ServiceProviders/SaleService/*报价、快速报价等
DGJ ServiceProviders/DgjService/*订单、出库等拆分服务入口

这些 Provider 表明单体能力正在向独立服务迁移。改动前要确认流量开关和旧/新实现所有权:

flowchart TD
    A[DGJ Controller] --> B{服务化开关/路由}
    B -->|旧链路| C[本地 Service + 本地表]
    B -->|新链路| D[Purchase/Sale/DGJ Service]
    C --> E[统一响应]
    D --> E

不能只修改本地旧 Service 后就认为线上生效。

34. 鉴权清单

系统族仓库可见方式需要确认
多数内部中心服务部分 Provider 传空 header是否依赖内网、网关签名或服务身份
IM 中心JSON Header,UserSig 单独返回服务间鉴权是否由网关处理
Udesk时间戳 + 配置签名凭据轮换与时钟偏差
高德配置 key配额、白名单和轮换
文件/OSS文件服务或临时凭证URL 有效期和下载权限
KzMall / OpenAPIToken ProviderToken 缓存与刷新
银行/支付通道各金融 Provider 自有签名证书、密钥和回调验签

“Provider 中没有 header”不等于接口无鉴权,必须通过网关配置和部署环境确认。

35. 超时清单

类型常见值处理原则
基础同步 Provider2 秒默认只适合低延迟内部查询
常规中心调用5 秒超时后按业务键查询
订单/售后提交8-20 秒禁止盲目重复提交
报表/Hologres5 秒或服务自定义可以重查,不改业务状态
AI/OCR最长可到 20 秒级提供异步或手工降级
异步 Provider2 秒默认空回调必须标记失败而非无数据

每个接口都要定义:连接超时、总超时、最大重试、退避、可重试错误和最终补偿。

36. 幂等清单

业务推荐幂等键
采购订单外部订单号 + 明细行号 + 动作
售后外部售后单号 + 来源行号 + 节点
支付支付流水号 + 业务单号 + 状态
退款退款流水号 + 原支付流水 + 金额
配送出库配送单号 + 明细行 + 本次数量
TMS运单号 + 状态版本/发生时间
商品变更SKU + 配置类型 + 版本
SAAS 销售同步销售/出库单号 + 事件 + 版本
渠道订单平台单号 + 平台行号 + 动作
GPDAtaskNo + SKU + 提交版本
IM上游 msgId
OA模板码 + 实例号 + 业务 ID + 节点
对账单发送statementId + 接收人 + 发送方式 + 版本

37. 跨系统一致性模型

flowchart TD
    A[本地事务提交] --> B[写待发送/业务日志]
    B --> C[发送 HTTP 或 MQ]
    C --> D{外部确认}
    D -->|成功| E[记录外部单号/最终状态]
    D -->|明确失败| F[回滚可回滚动作或标记失败]
    D -->|超时未知| G[按幂等键主动查询]
    G -->|已受理| E
    G -->|未受理| H[安全重试]
    G -->|仍未知| I[人工待处理]

DGJ 当前并非所有链路都有 Outbox。高风险资金、库存、订单事件应逐步补齐“本地业务提交 + 待发送记录 + 重试 + 对账”闭环。

38. ACK / NACK 决策

异常类型例子建议
参数永久错误缺单号、非法枚举ACK + 失败记录,避免无限重试
数据暂未到前置单据还没同步NACK/延迟重试,有上限
数据库/网络临时错误超时、连接失败NACK
已处理重复消息同流水已落账ACK
原状态冲突可能重复,也可能乱序先查处理记录和版本再决策
下游副作用失败主事务已提交,通知失败ACK 主消息并创建补偿,或按契约重试

不能用一个通用 catch 对所有异常都 NACK,否则永久业务错误会形成重试风暴。

39. 联调前契约模板

每个新接口或事件必须明确:

系统名称:
系统 Owner / 值班群:
环境与配置常量:
协议:HTTP / Topic MQ / Direct MQ
方向:DGJ -> 对方 / 对方 -> DGJ
接口路径或 destination.routingKey:
鉴权方式:
请求字段与单位:
成功码:
业务幂等键:
超时与重试:
乱序规则:
回调/回执:
失败补偿:
日志 traceId:
上线开关:
监控与告警:

40. HTTP 请求示例

仅示意结构,不包含真实域名和凭据:

POST {CENTER_API}/imcenter/ext/zgj/user/sendimmessage
Content-Type: application/json
X-Trace-Id: trace_example

{
  "message": {
    "bizType": "业务类型",
    "bizContext": "{\"sid\":\"站点\"}",
    "bizData": "{\"businessNo\":\"业务单号\"}"
  }
}

响应需同时判断 HTTP 状态和业务 code。

41. MQ 消息示例

{
  "messageId": "稳定唯一消息标识",
  "eventType": "garage_repair_order_updated",
  "businessKey": "销售单号",
  "occurredAt": "2026-07-15T12:00:00+08:00",
  "version": 3,
  "source": "dgj",
  "traceId": "trace_example",
  "data": {
    "orderNo": "销售单号",
    "status": "业务状态",
    "items": []
  }
}

42. 一次完整联调流程

sequenceDiagram
    participant P as 产品/业务
    participant D as DGJ开发
    participant E as 外部系统开发
    participant T as 测试
    P->>D: 确认业务状态与失败处理
    D->>E: 确认契约、幂等、单位和超时
    D->>D: 记录请求/事件和本地状态
    D->>E: 发送一条唯一业务样本
    E-->>D: 返回外部单号或消费证据
    E->>D: 回调/反向事件
    D->>D: 核对本地状态、表和副作用
    T->>D: 重复、乱序、超时、缺字段测试
    D-->>P: 业务闭环验收

43. 故障定位总流程

flowchart TD
    A[拿到业务单号/消息ID] --> B{方向}
    B -->|DGJ发出| C[查本地事务与Producer日志]
    B -->|DGJ接收| D[查队列Consumer与routing key]
    C --> E{是否发送成功}
    E -->|否| F[本地重试/Outbox/补偿]
    E -->|是| G[查对方接收和业务结果]
    D --> H{是否收到}
    H -->|否| I[查binding、积压、消费者进程]
    H -->|是| J[查幂等、状态校验和事务]
    G --> K{是否有回调}
    K -->|无| L[查对方回调生产与本地队列]
    K -->|有| J

44. 常用日志关键字

系统关键字
订单中心OrderCenterNotify、外部/本地采购单号
支付中心PayCenterNotify、支付流水、业务单号
调拨中心DispatchCenterNotify、配送单/发货单
TMSExpressNoSyncNotify、运单号
商品中心ItemCenterNotify、SKU、事件类型
SAASSaasOrderNotify、SyncOrder、销售/出库单号
OAOaNotify、模板码、业务 ID
IMImCenterNotify、msgId、群 ID
GPDAGpdaNotify、taskNo
Udeskproviders/Udesk、客户业务标识

日志中查询手机号、银行卡、Token 等敏感信息时,应使用脱敏值或受控工具。

45. 常用代码检索

# 所有 destination 和 routing key
rg -n "const DEST_|const TYPE_|const .*NOTIFY" application/KzData/Enums/MqEventEnums.php

# 所有消费者注册
rg -n "create.*Consumer|registryCallback|startConsume" application/controllers/tasks

# 所有生产方法
rg -n "public function send|create.*Producer|publish" application/Services/Mq/MqSer.php application/Services/SyncOrder

# 外部 HTTP Provider
find application/Providers -type f -name '*.php' | sort
rg -n "requestSer|requestSerAsync|CENTER_API|REPORT_SERVICE" application/Providers

# 超时、异常和响应码
rg -n "timeout|code.*[!=]=|RequestTimeoutException|ProviderErrorException" application/Providers

46. 只读核对数据

跨系统故障至少收集以下证据,不直接修改数据:

1. 本地业务主单与明细状态。
2. 外部单号映射。
3. Producer/HTTP 请求时间、traceId、messageId。
4. 对方受理或消费证据。
5. 回调事件和 Consumer 结果。
6. 本地幂等记录或已落流水。
7. 后续库存、资金、报表和通知副作用。

47. 常见误判

误判正确判断
HTTP 超时就是对方没收到超时属于未知,先按业务键查询
MQ publish 没报错就是下游成功只说明生产调用未抛错,还需 broker confirm 和消费证据
队列为空就是消息消费成功可能进了死信、错误队列或被错误 ACK
状态相同就是重复消息也可能是乱序或漏中间事件
Provider 返回空数组就是无数据异步失败也可能降级为空
DGJ 表正确就结束还需核对外部状态和后续副作用
重发消息最安全没有业务幂等时重发可能重复扣款/扣库存

48. 高风险公共问题

等级问题影响
P0支付/库存/订单事件缺乏稳定业务幂等重复扣款、重复库存或重复单据
P0部分内部 Provider 未见显式鉴权依赖网关/内网配置,边界不清
P1BaseProvider 记录完整 headers/data/response敏感信息泄露风险
P1HTTP 超时后业务代码直接重试外部已受理时重复创建
P1uniqid() 作为 MQ messageId不能替代业务幂等
P1异步 HTTP 失败返回空数组把系统失败误判为无数据
P1ACK/NACK 对业务异常分类不统一重试风暴或丢失可恢复消息
P2各 Provider 成功码不同调错父类会把成功判失败或反之
P2旧链路与拆分服务并存修改未命中真实线上流量

49. 改动风险

  1. 修改 destination/routing key 会导致生产和消费解绑。
  2. 修改 payload 字段或类型会影响所有下游版本。
  3. 修改金额单位可能造成资金事故。
  4. 修改状态枚举可能让旧消息无法消费。
  5. 修改超时和重试可能放大下游压力。
  6. 修改 Provider 公共响应判断会影响多系统。
  7. 修改 MQ ACK/NACK 会改变积压和死信行为。
  8. 修改日志字段需要保证脱敏但仍可追踪。
  9. 修改旧/新服务路由必须确认流量开关。

50. 回归矩阵

维度必测场景
正常首次成功,状态与外部单号完整
重复相同 messageId、不同 messageId 但相同业务键
乱序完成先于创建、关闭先于更新
超时对方已受理、未受理和未知三种
缺字段缺业务键、金额、明细、版本
非法状态本地原状态不允许
部分成功主单成功、部分明细失败
下游失败本地已提交,通知/回调失败
进程重启消费中断后重新投递
多站点相同单号前缀但不同 sid 隔离
安全Token、UserSig、手机号和银行信息不进日志
兼容老消息无 version,新消息有 version

51. 发布前检查清单

  • [ ] 系统 Owner、值班群和升级路径已确认。
  • [ ] 开发、预发、生产配置常量已核对,未记录实际密钥。
  • [ ] HTTP 路径、方法、Content-Type 和成功码已确认。
  • [ ] MQ destination、routing key、exchange 类型和 binding 已确认。
  • [ ] 请求字段的必填、类型、金额单位和时间格式已确认。
  • [ ] 业务幂等键有数据库唯一约束或可靠处理记录。
  • [ ] 超时后不会盲目重复提交。
  • [ ] 重复、乱序、缺字段、部分成功已回归。
  • [ ] ACK/NACK、重试、死信和人工补偿已演练。
  • [ ] traceId、messageId、业务单号能跨系统串联。
  • [ ] 公共 Provider 日志已脱敏。
  • [ ] 旧链路和新服务化链路的真实流量已确认。
  • [ ] 监控覆盖请求失败率、超时、队列积压和死信。
  • [ ] 回滚不会破坏已被外部受理的业务。

52. 证据文件

主题代码证据
MQ destination 与事件application/KzData/Enums/MqEventEnums.php
MQ 生产application/Services/Mq/MqSer.php
销售同步application/Services/SyncOrder/*
公共 HTTP 行为application/Providers/BaseProvider.php
订单中心application/Providers/OrderCenter/*、tasks/OrderCenterNotify.php
支付中心tasks/PayCenterNotify.php
调拨与 TMSapplication/Providers/DispatchCenter/*、tasks/DispatchCenterNotify.php、tasks/ExpressNoSyncNotify.php
商品与库存中心application/Providers/ItemCenter/*、InventoryCenter/*、tasks/ItemCenterNotify.php
OPSapplication/Providers/OpsCenter/*、OpsManager/*、tasks/OpsCenterNotify.php
OAapplication/Providers/Oa/*、tasks/OaNotify.php、tasks/OaResultNotify.php
SAASapplication/Providers/KzSaas/*、tasks/SaasOrderNotify.php
渠道tasks/ChannelOrderNotify.php
全车件application/Providers/AllCarPartService/*、tasks/QPayCenterNotify.php
GPDAtasks/GpdaNotify.php、application/Services/Gpda/*
IMapplication/Providers/ImCenter/*、tasks/ImCenterNotify.php
Udeskapplication/Providers/Udesk/*、tasks/UdeskNotify.php
数据与报表application/Providers/DataService/*、ReportService/*
通知与文件application/Providers/NotifyCenter/*、File/*、Services/Statement/StatementExportService.php

53. 待环境确认

  1. 每个系统的生产 Owner、值班群和升级时限。
  2. 所有 HTTP 接口的网关鉴权、服务身份和凭据轮换。
  3. MQ exchange 类型、binding、prefetch、publisher confirm、重试和死信配置。
  4. 生产是否启用拆分后的 Purchase/Sale/DGJ Service 路由。
  5. 订单、支付、库存关键流水的数据库唯一约束。
  6. TMS 与调拨中心状态版本和乱序规则。
  7. Report Service、DataService 和 DWD 的 SLA。
  8. Udesk、高德、腾讯 IM、短信、OSS 的配额与告警。
  9. 对账单文档转换服务的高可用和失败重试。
  10. 公共 Provider 日志在生产的脱敏策略。

54. 维护规则

新增外部系统时,必须同步完成:

Provider/Consumer/Producer 代码
+ 配置 key(不含值)
+ 接口或事件契约
+ 幂等和补偿
+ 监控告警
+ 本文系统资产表
+ 对应业务专题
+ 可复用 Skill

废弃接口不能只删调用方,应确认队列 binding、定时任务、配置、告警和下游订阅均已清理,并在本文标记 deprecated 与下线日期。

55. 一句话记忆

每次跨系统排查都沿“本地业务提交 → 请求/消息发送 → 对方受理 → 回调消费 → 本地副作用”五段走,任何一段都要有业务键、状态证据和补偿责任人。

请求-日志-数据变更追踪卡

多入口请求链路

场景调用方与入口请求载荷/上下文Controller/ConsumerService/Provider汇合点最终业务事实
同步 HTTP 出站领域 Service业务对象、外部接口参数、超时调用方 Controller/TaskBaseProvider 及 Center/Item/Inventory/Ops/CRM 等 Provider本地单号 + 外部单号对方受理或返回业务结果
异步 MQ 出站订单/库存/财务 Servicedestination、routing key、快照领域 ServiceMqSer稳定业务键对方异步消费本地事实
HTTP 入站OpenAPI/Inner/回调 URL签名、外部单号、事件结果OpenAPI/Inner Controller适配 Service外部单号映射表创建本地单据或更新状态
MQ 入站支付/OA/订单/配送/商品中心message ID、事件、来源单tasks/*Notify领域 Service来源业务键外部结果回写本地

日志证据矩阵

| 链路段 | 日志来源 | 可检索锚点 | 成功信号 | 失败信号 | 与下一段关联方式 | | --- | --- | --- | --- | --- | --- | --- | | 本地发起 | 调用 Service | request_id、本地单号、Provider/route | 参数快照和调用开始可定位 | 未调用或参数构造失败 | 本地单号进入 Provider | | 网络/Provider | BaseProvider/子 Provider | URL 名称、外部 request ID、耗时、HTTP/业务码 | 对方明确受理 | timeout、HTTP 非 2xx、业务失败 | 外部 request/order ID 供对方检索 | | 对方处理 | 对方日志/工单证据 | 外部 request/order ID | 对方状态完成 | 对方未收到/处理中/失败 | 外部单号进入回调 | | 回调消费 | Inner/OpenAPI/Notify 日志 | message ID、外部单号、本地单号 | 幂等落库并 ACK | 映射缺失、重复/乱序、NACK | 关系表映射到本地主表 |

环节数据变更台账

步骤代码位置事务读取事实写入表/缓存/MQ字段或数量变化回查证据
本地提交领域 Service本地事务当前业务事实主明细/关系表status/qty/amount old -> new本地业务单号
构造出站Provider/MqSer本地事务外已提交快照HTTP/MQ本地 DB 不变;生成外部请求/消息键脱敏 payload、request ID
对方受理外部系统跨系统边界请求/消息对方数据本地通常不变;取得外部单号/受理码对方回执
回调落库Callback/Notify -> Service单回调事务当前状态、外部最终结果、幂等键本地主表/关系/流水状态单向推进;相同键副作用一次影响行数、ACK、关系表
补偿领域补偿入口小批幂等事务双方最终事实必要本地更新或重发只补失败段,不重做已成功段前后快照、重放零重复

子模块追踪:ext-order-center 订单中心

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
出站/受理采购、售后等提交订单中心本地/来源单号、request ID、动作application/Services/Mq/MqSer.php本地已提交订单快照、来源关系本地事务外发送 ODC 消息/请求,核心 DB 不变local/source billNo + routing key + external request ID超时先向 ODC 查来源单是否受理,禁止重复建单
回调/补偿审核、关闭、取消、售后结果message ID、外部/本地单号、状态application/controllers/tasks/OrderCenterNotify.php当前本地状态、ODC 最终态、幂等关系单回调本地事务 status old -> new;ACK 在 commit 后message ID + event + both billNos乱序不回退;本地成功仅补后置消息,未落库才重放回调

子模块追踪:ext-pay-center 支付中心

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
发起支付采购/预订单/财务提交支付payOrderNo、sourceOrderNo、amountapplication/Providers/BaseProvider.php本地待支付关系、金额单位和账户组合Provider 调用在本地事务外;本地受理态与外部订单分界request ID + payOrderNo + HTTP/business codetimeout 不等于失败;先查支付中心最终态再决定重试
结果落账DEST_PAYCENTER_NOTIFY 回调message ID、payOrderNo、payStatusapplication/controllers/tasks/PayCenterNotify.php外部成功、已有 Payment/Info、来源业务状态回调本地事务首次落账 pending -> paid,重复 0 增量message ID + pay/source orderNo迟到/退款按原支付关系补偿;外部合同待环境验证

子模块追踪:ext-transfer-dispatch 调拨中心与 TMS

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
创建调拨配送采购/销售出库后提交本地单、dispatch/deliveryNo、地址/仓位application/Providers/DispatchCenter/OrderProvider.php本地出库态、关系和承运参数本地关系事务后调用外部;外部单号 none -> acceptedrequest ID + local/external orderNo + response code请求超时按本地单查询外部,避免重复调拨/配送
状态回调出库、物流、自提、签收、退货关闭message ID、event、两端单号application/controllers/tasks/DispatchCenterNotify.php当前配送/库存/来源状态单回调本地事务单向 old -> new;库存副作用按领域事务message ID + event + both orderNos旧消息不回退签收;只补缺失关系、状态或库存段

子模块追踪:ext-item-inventory 商品中心与库存中心

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
商品同步SKU、价格、状态、套包事件message ID、event、SKU/invId、versionapplication/controllers/tasks/ItemCenterNotify.php本地物料映射、版本和影响范围单消息本地事务 item old -> new;缓存索引异步刷新message ID + event + SKU/version旧版本不覆盖新值;部分派生失败只补失败层
库存查询供给库存/仓库能力 HTTPsid、SKU、warehouseCode、request IDapplication/Providers/InventoryCenter/KzInventoryProvider.php本地请求上下文和外部返回口径查询事务外且本地 DB 不写;响应作为业务校验输入request ID + SKU/warehouse + HTTP/business codetimeout 时不得凭缓存伪造成功;目标库存口径需联调确认

子模块追踪:ext-ops OPS Center 与 OPS Manager

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
OPS 调用站点、菜单、运营配置查询/更新sid、config/rule code、operatorapplication/Providers/BaseProvider.php本地站点、配置版本和鉴权上下文外部 HTTP 在本地事务外;受理结果再驱动本地配置 old -> newrequest ID + sid + endpoint/business code外部 200 仍判断业务码;超时按配置键回查
OPS 事件OPS Center 配置/任务通知message ID、event、sid/业务键application/Services/Mq/MqSer.php本地当前配置和事件版本单消息本地事务 upsert;ACK 在 commit 后message ID + event + sid/config key重复事件零增量;Manager 页面结果需目标环境验证

子模块追踪:ext-oa OA

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
提交审批活动/业务提交 OAbusiness ID、templateCode、processNoapplication/Services/Mq/MqSer.php本地可提交态、申请人和业务快照本地先写 draft -> pending;OA 发送在事务外request ID + business ID + template/processNotimeout 查 OA 是否建流程;禁止重复流程
回调/回传OA 审批结果与本地结果返回message ID、processNo、resultapplication/controllers/tasks/OaNotify.php、application/controllers/tasks/OaResultNotify.php模板映射、当前申请态和 OA 最终态回调本地事务 pending -> approved/rejected;结果 MQ commit 后发送message ID + processNo + business ID乱序不回退;本地已处理只补结果回传

子模块追踪:ext-saas SAAS 与 E站

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
出站同步销售/出库/库存 commit 后local/source billNo、event、sidapplication/Services/Mq/MqSer.php已提交本地快照和目标系统本地事务外发送 App/SAAS MQ,核心 DB 不变billNo + event/routing key + message ID发送失败只补消息,不重做业务单/库存
入站动作DEST_DGJ inventory/close 等message ID、event、业务键application/controllers/tasks/SaasOrderNotify.php当前本地状态、幂等和来源关系单消息本地事务 old -> new 或已完成零写入message ID + event + billNo/SKU未知事件不强推;下游消费事实需环境确认

子模块追踪:ext-channel 大客户渠道

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
渠道入站创建、审核、发货、售后事件channelOrderNo/aftersaleNo、message IDapplication/controllers/tasks/ChannelOrderNotify.php来源唯一性、当前订单/售后态、库存资金事实单消息本地事务 insert/update old -> newmessage ID + event + channel/local billNo重复来源不重复建单;完成后取消走售后,不回退正向态
渠道回传本地履约/退款结果通知渠道local/channel billNo、status、qty/amountapplication/Services/Mq/MqSer.php已提交本地终态和已发送事实commit 后事务外发送渠道消息both billNos + routing key + result渠道未收到只补消息;先确认其是否已处理

子模块追踪:ext-allcarpart 全车件、QCJ 与 QPay

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
HTTP 代理全车件/QCJ 询价、订单、状态请求external request/orderNo、VIN/SKUapplication/Providers/BaseProvider.php路由、鉴权、来源映射和脱敏参数外部调用事务外;需要落单时领域本地事务建来源关系request ID + external/local orderNo + codestimeout 按外部单回查;外部合同需联调验证
QPay 结果支付/退款异步结果pay/refundNo、message ID、amountapplication/controllers/tasks/QPayCenterNotify.php原支付关系、当前资金态和通道终态回调本地事务 pending -> paid/refunded,重复零增量message ID + pay/refundNo + source billNo不以 HTTP 受理当资金成功;按原支付键补偿

子模块追踪:ext-gpda GPDA 与 WMS

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
仓储动作GPDA/WMS 扫码出入库、盘点device/request ID、billNo、SKU、locationapplication/Services/Gpda/TakeStockSer.php单据状态、仓库货位、可收/可出量和幂等键仓储本地事务写过程单与库存 qty old -> old +/- nrequest ID + billNo + SKU/location + transType网络重试前查业务单与库存流水,避免重复加扣
结果同步WMS 状态/数量回传external/local billNo、event、message IDapplication/Services/Mq/MqSer.php本地过程事实、外部最终态和已处理事件单回调本地事务单向推进;ACK 在 commit 后message ID + both billNos + qty外部数量不符先对账,不直接覆盖本地库存

子模块追踪:ext-im IM 中心与腾讯 IM

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
IM 调用会话、账号、群组或消息请求local user/conversation ID、request IDapplication/Providers/ImCenter/ImCenterProvider.php本地用户映射、会话和脱敏消息外部 HTTP 事务外;本地仅保存映射/发送态 pending -> acceptedrequest ID + conversation/external ID + code200 仍判断业务码;超时按会话业务键查送达状态
IM 事件消息/账号状态回调message ID、conversation ID、eventapplication/Services/Mq/MqSer.php当前会话、事件版本和幂等键单消息本地事务 append/update;重复事件不重复消息message ID + conversation/event ID腾讯 IM 日志与最终送达需环境确认;只补失败段

子模块追踪:ext-wechat-udesk 微信机器人与 Udesk

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
对话转发微信机器人消息进入询价/客服conversation/message ID、user/openIdapplication/Providers/BaseProvider.php用户会话、消息去重、机器人/人工路由本地会话事务写消息 none -> received;Udesk/机器人调用事务外request ID + conversation/message ID + provider code外部 timeout 先查会话记录,禁止重复触发下单动作
异步结果机器人答案、Udesk 工单/回调external ticket/message ID、conversation IDapplication/Services/Mq/MqSer.php原请求、当前会话态和回调版本单回调本地事务 pending -> answered/transferredmessage ID + external/local IDs无法静态证明外部送达;环境日志标待验证,按消息键补偿

子模块追踪:ext-vin VIN 与国内数据平台

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
VIN 查询车型/配件识别请求request ID、脱敏 VIN、query typeapplication/Providers/DevCenter/VinProvider.php本地查询上下文、缓存和外部合同字段外部查询事务外,本地业务 DB 不写;可缓存结果 old -> latestrequest ID + VIN hash + HTTP/business codetimeout/无结果允许明确降级,不伪造车型
数据回查国内平台结果异常external request ID、VIN hashapplication/Providers/BaseProvider.php原请求、外部响应版本和缓存时间查询只读 不写;必要时失效错误缓存external request ID + provider + latency数据准确性由外部负责;反馈保留请求 ID,不存完整敏感 VIN

子模块追踪:ext-report 报表中心、Report Service 与 DataService

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
报表查询页面/导出调用离线服务query ID、sid、report code、filtersapplication/Providers/DataService/ReportProvider.php权限、请求口径、离线最大时间外部查询只读,本地业务 DB 不写request/query ID + report + row/max timetimeout/空值先查离线水位,不回写 OLTP
销售服务销售报表/异步任务query/export ID、business keysapplication/Providers/ReportService/SaleProvider.php本地筛选与外部响应/任务状态文件任务可 pending -> success/failed;业务事实不变query/export ID + provider code部分结果只补查询/导出;SLA 和数据源需环境确认

子模块追踪:ext-crm-risk CRM 与风控中心

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
CRM 同步客户/经营任务查询或同步customer/station ID、task IDapplication/Providers/BaseProvider.php本地客户映射、任务状态、请求版本外部 HTTP 事务外;受理后本地关系 old -> acceptedrequest ID + customer/task ID + codetimeout 按稳定客户/任务键回查,禁止重复任务
风控判定下单/支付前调用风险中心sid/customer/orderNo、sceneapplication/Providers/RiskCenter/RiskCenterProvider.php业务上下文、风险请求和本地白名单风控查询不写业务表;deny 时业务零写入,allow 后领域事务继续request ID + scene + business key + decision风控不可用的 fail-open/close 规则需环境确认并显式记录

子模块追踪:ext-notify 通知中心、JPush 与短信

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
发送通知业务 commit 后短信/推送notification ID、template、recipient hashapplication/Providers/NotifyCenter/Sms/SmsProvider.php、application/Providers/DataService/JpushProvider.php已提交业务、模板参数、去重键和接收方外部调用事务外;本地发送态 pending -> accepted/failedrequest ID + notification/template ID + provider code发送失败不回滚主业务;按通知业务键重试
送达回查用户未收到或供应商回执external message ID、notification IDapplication/Providers/BaseProvider.php受理记录、通道回执和重试次数回查只读;确认失败才 accepted -> failed/retryboth message IDs + channel status受理不等于送达;敏感接收方只记录脱敏值

子模块追踪:ext-file-map 文件服务、OSS 与高德地图

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
文件服务上传、下载、文档转换file/task ID、owner/sid、object keyapplication/Providers/BaseProvider.php文件归属、状态、类型和 URL 有效期外部存储事务外;元数据 pending -> ready/failed,业务表通常不变request ID + file/task ID + storage code上传超时按 object key 查存在性;只补元数据或文件段
地图服务地址解析、距离/路线查询request ID、address hash/coordinatesapplication/Providers/Amap/AmapProvider.php脱敏地址、坐标、缓存和业务场景外部查询不写业务 DB;可缓存 old -> latestrequest ID + address hash + provider code无结果明确返回;密钥、配额与坐标系需环境验证

子模块追踪:ext-ai-new-trade AI 中心、新采购与新销售服务

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
AI 请求询价、语音或推荐调用conversation/request ID、脱敏文本application/Providers/AiCenter/AiCenterProvider.php、application/Providers/DevCenter/Voice2TextProvider.php会话、输入版本、超时/降级策略外部调用事务外;本地会话 pending -> answered/failedrequest ID + conversation ID + provider codetimeout 降级但不得伪造下单成功;响应需业务二次校验
新交易服务新采购/新销售服务创建或同步sourceOrderNo、service request ID、eventapplication/Services/Mq/MqSer.php本地来源关系、责任归属、当前状态本地事务外 HTTP/MQ;回调本地事务单向 old -> newboth request/order IDs + event新旧服务责任边界需环境确认;只补失败系统,避免双写重复单