2026-04-20 15:02:17 +08:00
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
|
|
from dataclasses import dataclass
|
2026-04-22 17:12:37 +08:00
|
|
|
from datetime import date
|
2026-04-20 15:02:17 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
PRIMARY_FIELD_NAME = "货品编码"
|
|
|
|
|
PRIMARY_FIELD_SOURCE = "统一规格编码"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
|
|
|
class BrandSyncTarget:
|
|
|
|
|
brand_name: str
|
|
|
|
|
table_name: str
|
2026-04-23 16:40:45 +08:00
|
|
|
warehouse_keys: tuple[int, ...]
|
2026-04-20 15:02:17 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
|
|
|
class FieldSpec:
|
|
|
|
|
feishu_name: str
|
|
|
|
|
source_name: str
|
|
|
|
|
field_type: int
|
|
|
|
|
formatter: str | None = None
|
|
|
|
|
scale: int | None = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BRAND_SYNC_TARGETS = [
|
2026-04-23 16:40:45 +08:00
|
|
|
BrandSyncTarget(brand_name="羽心堂", table_name="羽心堂", warehouse_keys=(2, 3, 7, 13)),
|
2026-04-20 15:02:17 +08:00
|
|
|
]
|
|
|
|
|
|
2026-04-22 17:12:37 +08:00
|
|
|
|
|
|
|
|
def month_sales_field_name(month_offset: int, today: date | None = None) -> str:
|
|
|
|
|
current = today or date.today()
|
|
|
|
|
month_index = current.year * 12 + current.month - 1 - month_offset
|
|
|
|
|
year = month_index // 12
|
|
|
|
|
month = month_index % 12 + 1
|
|
|
|
|
return f"{year}{month:02d}销售数量"
|
|
|
|
|
|
|
|
|
|
|
2026-04-20 15:02:17 +08:00
|
|
|
FIELD_SPECS = [
|
|
|
|
|
FieldSpec("货品名称", "商品名称", 1),
|
2026-04-22 17:12:37 +08:00
|
|
|
FieldSpec("分类", "一级分类", 1),
|
2026-04-20 15:02:17 +08:00
|
|
|
FieldSpec("条形码", "条形码", 1),
|
|
|
|
|
FieldSpec("零售价", "零售价", 2, "0.00", 2),
|
|
|
|
|
FieldSpec("店铺名称", "店铺名称", 1),
|
|
|
|
|
FieldSpec("店铺可用库存", "店铺挂单量", 2, "0", 0),
|
|
|
|
|
FieldSpec("总库存", "总库存", 2, "0", 0),
|
2026-04-22 17:12:37 +08:00
|
|
|
FieldSpec(month_sales_field_name(0), "本月销售数量", 2, "0", 0),
|
|
|
|
|
FieldSpec(month_sales_field_name(1), "上月销售数量", 2, "0", 0),
|
|
|
|
|
FieldSpec(month_sales_field_name(2), "上上月销售数量", 2, "0", 0),
|
|
|
|
|
FieldSpec("品牌", "品牌名称", 1),
|
|
|
|
|
FieldSpec("产品类别", "货品简称", 1),
|
2026-04-20 15:02:17 +08:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
LEGACY_NAME_MAP = {
|
|
|
|
|
"品牌名称": "品牌",
|
|
|
|
|
"一级分类": "分类",
|
|
|
|
|
"货品简称": "产品类别",
|
|
|
|
|
"商品名称": "货品名称",
|
|
|
|
|
"店铺挂单量": "店铺可用库存",
|
2026-04-22 17:12:37 +08:00
|
|
|
"本月销售数量": month_sales_field_name(0),
|
|
|
|
|
"上月销售数量": month_sales_field_name(1),
|
|
|
|
|
"上上月销售数量": month_sales_field_name(2),
|
2026-04-20 15:02:17 +08:00
|
|
|
"统一规格编码": PRIMARY_FIELD_NAME,
|
|
|
|
|
}
|