fix(fulfillment): 抖音未命中皮肤映射时显式回落人工,避免静默漏单

原本未命中的抖音订单项只靠全局 `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)
This commit is contained in:
yml2213
2026-10-09 15:09:58 +08:00
parent f32e76f843
commit 56ad06239b
@@ -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: '接单平台/人工兜底',
},
],
})