From 56ad06239bc71b71661a70776c6436fcf6c3ab0f Mon Sep 17 00:00:00 2001 From: yml2213 Date: Fri, 9 Oct 2026 15:09:58 +0800 Subject: [PATCH] =?UTF-8?q?fix(fulfillment):=20=E6=8A=96=E9=9F=B3=E6=9C=AA?= =?UTF-8?q?=E5=91=BD=E4=B8=AD=E7=9A=AE=E8=82=A4=E6=98=A0=E5=B0=84=E6=97=B6?= =?UTF-8?q?=E6=98=BE=E5=BC=8F=E5=9B=9E=E8=90=BD=E4=BA=BA=E5=B7=A5=EF=BC=8C?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E9=9D=99=E9=BB=98=E6=BC=8F=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原本未命中的抖音订单项只靠全局 `unmatchedExecutorKey` 兜底,而线上/联调环境该值 可能是空串(dev 库实测就是 `unmatchedExecutorKey=''`)——那种配置下未命中的抖音订单 既不建履约任务、也不进人工,等于**静默漏单**(需求要求的是「接单平台走人工」)。 改为在抖音分支里显式指定回落:命中权威映射 → `douyin_mashida_skin`; 未命中 → 直接以 `preferredExecutorKey=manual_dispatch` 选中人工通道,不依赖全局配置。 实测(dev 真实配置,`unmatchedExecutorKey` 为空串): 幸运币2个 / 套装-浪漫天命 → douyin_mashida_skin(isConfigured=true) 代练上分-星耀到王者(未命中)→ manual_dispatch(isConfigured=true) 空 SKU → manual_dispatch 对照 91卡券/快手 → 行为不变(未配映射仍 isConfigured=false) --- .../fulfillment/product-resolution-service.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/apps/backend/src/services/fulfillment/product-resolution-service.ts b/apps/backend/src/services/fulfillment/product-resolution-service.ts index cc91f5cd..11f4bd12 100644 --- a/apps/backend/src/services/fulfillment/product-resolution-service.ts +++ b/apps/backend/src/services/fulfillment/product-resolution-service.ts @@ -298,13 +298,23 @@ function resolveDouyinMashidaItemCandidate({ const fulfillmentRoute = resolveFulfillmentRoute({ productName: productTitle, internalSku, - preferredExecutorKey: douyinSkinMatch ? FULFILLMENT_EXECUTOR_KEYS.DOUYIN_MASHIDA_SKIN : '', + // 命中皮肤 → 皮肤自动发货;未命中 → **显式**回落人工(接单平台)。 + // 不依赖全局 `unmatchedExecutorKey`:线上/联调环境该值可能是空串(dev 库就是空串), + // 那样未命中的抖音订单会既不建任务、也不进人工,等于静默漏单。 + preferredExecutorKey: douyinSkinMatch + ? FULFILLMENT_EXECUTOR_KEYS.DOUYIN_MASHIDA_SKIN + : FULFILLMENT_EXECUTOR_KEYS.MANUAL_DISPATCH, candidates: [ { executorKey: FULFILLMENT_EXECUTOR_KEYS.DOUYIN_MASHIDA_SKIN, available: Boolean(douyinSkinMatch), reason: douyinSkinMatch ? '' : '内部 SKU 未命中皮肤商品映射', }, + { + executorKey: FULFILLMENT_EXECUTOR_KEYS.MANUAL_DISPATCH, + available: true, + reason: '接单平台/人工兜底', + }, ], })