From a0d386b752dc6d104e645e717bed25770b9314b8 Mon Sep 17 00:00:00 2001 From: wangliang Date: Fri, 23 Oct 2026 15:19:07 +0800 Subject: [PATCH] =?UTF-8?q?fix(bridge):=20=E5=95=86=E5=93=81=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=E7=BB=93=E6=9E=9C=E6=8C=89=E5=BA=93=E5=AD=98=E4=BC=98?= =?UTF-8?q?=E5=85=88=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bridge/src/tools.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/bridge/src/tools.js b/bridge/src/tools.js index 719cd03..6759207 100644 --- a/bridge/src/tools.js +++ b/bridge/src/tools.js @@ -421,7 +421,8 @@ function createTools(cfg, deps = {}) { const cmd = { keyword: rpcQuery, page: 1, - pageSize: limit, + // 多取候选,下面按库存排序后再截断到 limit,避免缺货商品占满前几条 + pageSize: limit * 4, languageId: profile.languageId, tenantId: profile.tenantId, currencyCode: profile.currencyCode || '', @@ -439,7 +440,6 @@ function createTools(cfg, deps = {}) { const list = Array.isArray(paging) ? paging : (paging.data || paging.list || []); total = result.total != null ? result.total : (paging.total != null ? paging.total : null); items = (Array.isArray(list) ? list : []) - .slice(0, limit) .map((p) => { const name = p.spuName || p.name || p.title || null; const sku = p.sku || p.model || (Array.isArray(p.skus) && p.skus[0] ? p.skus[0].productId : null); @@ -458,7 +458,13 @@ function createTools(cfg, deps = {}) { mark_price: p.markPriceWithCurrency || null, }; }) - .filter((p) => p.name); + .filter((p) => p.name) + // 有库存优先:stock>0 → 0,未知 → 1,缺货 → 2;sort 稳定,保留 RPC 原顺序 + .sort((a, b) => { + const rank = (p) => (p.stock > 0 ? 0 : p.stock === null ? 1 : 2); + return rank(a) - rank(b); + }) + .slice(0, limit); } catch (err) { catalogError = err.message; }