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