fix: 使用原始SKU辅助档口匹配 (#259)

This commit is contained in:
chengma
2026-08-18 15:25:58 +08:00
parent 103610a012
commit 4383bb87df
9 changed files with 237 additions and 33 deletions
+44
View File
@@ -179,6 +179,50 @@ func TestPlanInnerCodeRows_精确与标准化规格均受档口约束(t *testing
}
}
func TestPlanInnerCodeRows_原始SKU精确命中VariationSKU(t *testing.T) {
record := model.InnerCodeRecord{ID: 31, OrderNumber: "26081387A2EC2N",
Stall: "上寮-青春网购工厂店#8916", SourceSKURaw: "上寮-青春网购工厂店8916##(&9)",
SpecRaw: "紫色,XL", InnerCode: "DK-31", SourceDuplicateCount: 1}
item := innerCodeTestItem(310, "紫色,XL", map[string]any{"variationSku": "上寮-青春网购工厂店8916##(&9)"})
plans := planInnerCodeRows([]model.InnerCodeRecord{record},
map[string][]int64{record.OrderNumber: {300}}, map[int64]syb.StockDetail{300: {ID: 300, Details: []syb.DetailItem{item}}})
if len(plans) != 1 || plans[0].Status != model.InnerCodeReady || plans[0].DetailID != 310 {
t.Fatalf("原始 SKU 未生成可回写计划: %+v", plans)
}
}
func TestMatchInnerCodeItemsWithEvidence_原始SKU可命中SKU且保留旧规则兜底(t *testing.T) {
items := []syb.DetailItem{
innerCodeTestItem(1, "黑色,M", map[string]any{"sku": "源SKU-1"}),
innerCodeTestItem(2, "黑色,M", map[string]any{"sku": "B档#2"}),
}
matched, reason := matchInnerCodeItemsWithEvidence("不匹配#9", " 源SKU-1\n", items)
if reason != "" || len(matched) != 1 || matched[0].ID != 1 {
t.Fatalf("原始 SKU 精确命中失败 matched=%+v reason=%q", matched, reason)
}
matched, reason = matchInnerCodeItemsWithEvidence("B档#2", "不存在", items)
if reason != "" || len(matched) != 1 || matched[0].ID != 2 {
t.Fatalf("旧档口规则兜底失败 matched=%+v reason=%q", matched, reason)
}
}
func TestMatchInnerCodeItemsWithEvidence_重复和证据冲突均阻断(t *testing.T) {
duplicate := []syb.DetailItem{
innerCodeTestItem(1, "黑色,M", map[string]any{"sku": "同一SKU"}),
innerCodeTestItem(2, "黑色,M", map[string]any{"variationSku": "同一SKU"}),
}
if matched, reason := matchInnerCodeItemsWithEvidence("", "同一SKU", duplicate); len(matched) != 0 || reason != "原始 SKU 候选重复,不能自动选择" {
t.Fatalf("重复候选未阻断 matched=%+v reason=%q", matched, reason)
}
conflict := []syb.DetailItem{
innerCodeTestItem(1, "黑色,M", map[string]any{"sku": "源SKU"}),
innerCodeTestItem(2, "黑色,M", map[string]any{"sku": "B档#2"}),
}
if matched, reason := matchInnerCodeItemsWithEvidence("B档#2", "源SKU", conflict); len(matched) != 0 || reason != "原始 SKU 与档口货号冲突,不能自动选择" {
t.Fatalf("证据冲突未阻断 matched=%+v reason=%q", matched, reason)
}
}
func TestPlanInnerCodeRows_多件数量一致放行且其他异常继续阻断(t *testing.T) {
records := []model.InnerCodeRecord{
{ID: 1, OrderNumber: "DUP", SpecRaw: "黑色,M", InnerCode: "DK1,DK2", SourceDuplicateCount: 2},