From 6f20c05b3f19044ecc493c023220d1a7aee5a337 Mon Sep 17 00:00:00 2001 From: chengma Date: Tue, 18 Aug 2026 17:22:36 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=98=BB=E6=96=AD=E8=A7=84=E6=A0=BC?= =?UTF-8?q?=E9=87=8D=E9=87=8F=E6=95=B0=E5=AD=97=E8=AF=AF=E5=BD=93=E8=B4=A7?= =?UTF-8?q?=E5=8F=B7=20(#273)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/service/inner_code_match.go | 18 ++++++++++++++++-- admin/service/inner_code_match_test.go | 8 ++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/admin/service/inner_code_match.go b/admin/service/inner_code_match.go index f496453..5d089b2 100644 --- a/admin/service/inner_code_match.go +++ b/admin/service/inner_code_match.go @@ -436,12 +436,12 @@ func innerCodeStallMatches(stall string, item syb.DetailItem) bool { } return innerCodeTextHasNumericArticle(sku, article) || innerCodeTextHasNumericArticle(variation, article) || - innerCodeTextHasNumericArticle(item.ProductSpec, article) + innerCodeProductSpecStartsWithArticle(item.ProductSpec, article, true) } return innerCodeTextHasExactArticle(sku, article) || innerCodeTextHasExactArticle(variation, article) || - innerCodeTextHasExactArticle(item.ProductSpec, article) + innerCodeProductSpecStartsWithArticle(item.ProductSpec, article, false) } // splitInnerCodeStall 从“档口名称#货号”取最后一个 #,避免档口名称本身含 # 时截错。 @@ -493,6 +493,20 @@ func innerCodeTextHasExactArticle(text, article string) bool { return false } +func innerCodeProductSpecStartsWithArticle(productSpec, article string, numeric bool) bool { + productSpec = strings.TrimSpace(productSpec) + separator := strings.IndexAny(productSpec, " ,,") + if separator <= 0 { + return false + } + prefix := strings.TrimSpace(productSpec[:separator]) + if numeric { + return isInnerCodeNumericArticle(prefix) && + normalizeInnerCodeNumericArticle(prefix) == normalizeInnerCodeNumericArticle(article) + } + return prefix == article +} + // innerCodeArticleTokens 只把连续字母或数字视为货号候选。 // `【】`、`#`、横线、空格等标点自然成为边界,因此能识别 `067【档口】`, // 又不会把 `PDD256437` 中间的数字误认为独立货号。 diff --git a/admin/service/inner_code_match_test.go b/admin/service/inner_code_match_test.go index 4c23402..96efc0f 100644 --- a/admin/service/inner_code_match_test.go +++ b/admin/service/inner_code_match_test.go @@ -254,6 +254,14 @@ func TestInnerCodeStallMatches_中文括号货号与数字前导零(t *testing.T }), want: false, }, + { + name: "规格重量数字不能冒充货号", + stall: "将客大码网批#067", + item: innerCodeTestItem(6, "黑色,2XL【建議67.5-82.5公斤】", map[string]any{ + "sku": "将客大码网批-黑色-2XL", + }), + want: false, + }, { name: "非数字货号不做类似转换", stall: "A档#A01",