diff --git a/apps/backend/src/services/fulfillment/routing-config-service.test.ts b/apps/backend/src/services/fulfillment/routing-config-service.test.ts index 1cc2a4f1..c83c1a4b 100644 --- a/apps/backend/src/services/fulfillment/routing-config-service.test.ts +++ b/apps/backend/src/services/fulfillment/routing-config-service.test.ts @@ -6,6 +6,22 @@ import { resolveFulfillmentRoute, } from './routing-config-service.js' +test('resolveFulfillmentRoute 总开关关闭后不再回退默认配置,返回未选中', () => { + const result = resolveFulfillmentRoute({ + productName: '测试商品', + candidates: [ + { executorKey: 'kuaishou_ct_assisted', available: true }, + { executorKey: 'kuaishou_feifei', available: true }, + ], + config: normalizeFulfillmentRoutingConfig({ + enabled: false, + }), + }) + + assert.equal(result.selectedExecutorKey, '') + assert.equal(result.reason, '履约路由未启用,自动发货已停止') +}) + test('resolveFulfillmentRoute 默认保持 kuaishou-lewan 优先', () => { const result = resolveFulfillmentRoute({ productName: '测试商品', diff --git a/apps/backend/src/services/fulfillment/routing-config-service.ts b/apps/backend/src/services/fulfillment/routing-config-service.ts index 8bd220a0..c6cedde2 100644 --- a/apps/backend/src/services/fulfillment/routing-config-service.ts +++ b/apps/backend/src/services/fulfillment/routing-config-service.ts @@ -149,12 +149,9 @@ export function resolveFulfillmentRoute({ const skipped: FulfillmentRouteResult['skipped'] = [] if (normalizedConfig.enabled === false) { - return resolveByExecutorPriority({ - priority: DEFAULT_EXECUTOR_PRIORITY, - candidates: normalizedCandidates, - config: createDefaultFulfillmentRoutingConfig(), - skipped, - reasonPrefix: '履约路由未启用,使用历史顺序', + // 总开关关闭 = 停止自动履约:不再回退默认配置,订单进入待补全队列(isConfigured=false) + return createEmptyRouteResult(normalizedCandidates, skipped, { + reason: '履约路由未启用,自动发货已停止', }) } @@ -355,11 +352,12 @@ function createSelectedRouteResult({ function createEmptyRouteResult( candidates: FulfillmentRoutingCandidate[], skipped: FulfillmentRouteResult['skipped'], + options: { reason?: string } = {}, ): FulfillmentRouteResult { return { selectedExecutorKey: '', selectedRuleId: '', - reason: '', + reason: options.reason || '', matchedRule: null, candidates, skipped,