From b9e0bc42bea9b73151208066266d642f4fa675e6 Mon Sep 17 00:00:00 2001 From: yeuimu <2197651308@qq.com> Date: Fri, 14 Aug 2026 15:44:18 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20SDS=20=E6=AC=BE=E5=8F=B7=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=E5=99=A8=E9=87=8D=E5=86=99(split('=EF=BC=88=EF=BC=89'?= =?UTF-8?q?)=20=E6=B0=B8=E4=B8=8D=E5=91=BD=E4=B8=AD=20bug)+RIIN=20style=5F?= =?UTF-8?q?code=20=E5=85=9C=E5=BA=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- flows/shared/mappers.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/flows/shared/mappers.py b/flows/shared/mappers.py index 0ef2e60..ec700d4 100644 --- a/flows/shared/mappers.py +++ b/flows/shared/mappers.py @@ -5,6 +5,7 @@ from __future__ import annotations +import re from datetime import datetime, timedelta, timezone from typing import Any @@ -238,6 +239,7 @@ def map_riin_order(raw: Any) -> OrderUpsertInput: def map_riin_goods(raw: Any, parent_order_no: str, parent_created_at: datetime) -> GoodsUpsertInput: product_code = raw.product_code item_name = product_code.split("-")[0] if product_code else None + style_no = raw.style_code or item_name return GoodsUpsertInput( orderNo=parent_order_no, productionNo=raw.id, @@ -246,7 +248,7 @@ def map_riin_goods(raw: Any, parent_order_no: str, parent_created_at: datetime) itemName=item_name, itemColor=raw.color_code, itemSize=raw.size_code, - itemStyleNo=item_name, + itemStyleNo=style_no, quantity=raw.num if raw.num is not None else 1, status=RIIN_GOODS_STATUS_MAP.get(raw.goods_status) if raw.goods_status else None, ) @@ -335,17 +337,19 @@ def map_sds_order(raw: Any, channel_type_map: dict[int, str | None], pre_courier ) +_STYLE_CODE_RE = re.compile(r"[A-Za-z]{1,6}\d{2,4}[A-Za-z]{0,2}|\d{2,6}[A-Za-z]{1,2}") + + def _parse_sds_style_no(name: str | None) -> str | None: + """从商品名提取款号,如 '英国(包邮)180g纯棉T恤-GBTM001-单面印花' → 'GBTM001'; + 裸码名(如 'DF009')直接返回本身。逐 '-' 段扫描,避免误中段外字符。""" if not name: return None - parts = name.split("()") - if len(parts) < 3: - return None - subs = parts[2].split("-") - if len(subs) == 2: - return subs[0] or None - if len(subs) >= 3: - return subs[1] or None + for seg in name.split("-"): + seg = seg.strip() + m = _STYLE_CODE_RE.fullmatch(seg) + if m: + return seg.upper() return None