Admin:导出第三方商品工作簿为规范 CSV #280

Open
opened 2026-08-24 11:29:14 +08:00 by ila · 1 comment
Owner

基本信息

  • 类型:单元任务
  • 父级大工单:#14
  • 所属 MVP/版本:#15(商品目录接入后续批量数据准备)
  • 阶段:第三方商品目录本地转换

要解决什么

D:\chengma\全部店铺拼多多商品 下的 20 个第三方 ERP 导出 XLSX 含蝦皮商品、SKU、店铺、图片和 PDD 来源链接。工作簿的工作表维度错误地标为 A1,现有 openpyxl 导入器无法正常读取。需要先将每个 XLSX 独立转换为后续商品目录入库可用的规范 CSV,供人工核对和下一步接口导入;本任务不提交接口、不写入线上或本地业务数据库。

做什么 / 不做什么

做:

  • 增加只读的第三方 XLSX → 规范 CSV 转换脚本;一个输入 XLSX 只生成一个同名 CSV,并保留原目录层级。
  • 直接流式读取 XLSX 内的 OOXML 工作表,忽略错误的工作表 dimension,支持大文件。
  • 导出蝦皮商品、蝦皮 SKU、店铺、图片、原始规格、解析后的颜色/尺码、PDD 商品 ID/规范链接及关联所需字段。
  • 对无效或缺失 PDD goods_id 的行保���蝦皮数据,留空 PDD/关联字段并写入校验码;不猜测规格。
  • 提供可重复执行的命令、自动化测试和运行汇总。

不做:

  • 不调用 /api/v1/integrations/catalog/batches,不导入任何 CSV。
  • 不写入 Admin 数据库、线上 MySQL 或修改既有商品数据。
  • 不将来源中的蝦皮价格/促销价当作 PDD 价格。
  • 不从不明确的变种属性推断颜色、尺码或 PDD 商品信息。

已确认实现方案

新增 tools/export_thirdparty_catalog_xlsx.py:使用 zipfile + lxml.etree.iterparse 流式读取 xl/worksheets/sheet*.xml,以首行标题映射字段;每个来源 SKU 行生成一行 UTF-8 BOM CSV。输出字段按后续商品目录入库需要组织:

  • 蝦皮:shopee_goods_id、shopee_title、shopee_shop_name、shopee_image_url、shopee_main_sku_code;
  • SKU:shopee_sku_id、shopee_sku_code、spec_raw、color、size、advice、parse_ok;
  • PDD/关联:pdd_goods_id、pdd_goods_url、association_shopee_goods_id、association_pdd_goods_id;
  • 审计:来源文件、源行号、原始 PDD URL、校验码。

仅当来源 URL 能提取到数字 goods_id 时生成规范 URL https://mobile.yangkeduo.com/goods.html?goods_id=<id> 和关联;不合格行写 validation_code。颜色/尺码仅根据明确的变种属性标题确定,无法判断时保持空值、parse_ok=false 且保留 spec_raw。

预计修改:

  • tools/export_thirdparty_catalog_xlsx.py
  • tools/requirements-thirdparty-catalog-export.txt
  • tools/tests/test_export_thirdparty_catalog_xlsx.py(或项目既有测试目录)
  • docs/task/<工单号>-第三方商品工作簿导出规范csv.md(完成后归档)

风险和回退

  • 源文件较大,转换需流式处理并按文件原子替换输出,避免内存耗尽或留下半个 CSV。
  • 输出目录只含派生文件;删除该输出目录即可回退,本任务不影响数据库。

验收标准

  • 给定目录下每个 XLSX 生成唯一同名 CSV,且保留 pinduoduo 域名 / yangkeduo 域名 子目录,不修改源 XLSX。
  • 能读取工作表 dimension 为 A1 但实际包含完整数据的 XLSX。
  • CSV 使用 UTF-8 BOM,包含已确认的蝦皮、SKU、PDD、关联和审计字段;行数与输入数据行数一致。
  • 能从 mobile.pinduoduo.com / mobile.yangkeduo.com 来源 URL 提取 PDD goods_id 并生成规范 URL。
  • 缺失或无效 PDD URL 时,仍导出蝦皮行但不生成关联,并有明确 validation_code。
  • 蝦皮价格、促销价不进入 PDD 价格字段;不明确规格不猜测。
  • 自动化测试覆盖错误 dimension、规格解析、PDD URL 规范化和无效 PDD URL。

验证方式

cd D:\chengma\cmautobuy
python -m unittest tools.tests.test_export_thirdparty_catalog_xlsx
python tools\export_thirdparty_catalog_xlsx.py "D:\chengma\全部店铺拼多多商品" --output-dir "D:\chengma\全部店铺拼多多商品\catalog_csv"

预期:测试通过;每个源工作簿输出一个同名 CSV,控制台输出每个文件行数和 PDD URL 校验统计;无任何 HTTP 提交或数据库写入。

## 基本信息 - 类型:单元任务 - 父级大工单:#14 - 所属 MVP/版本:#15(商品目录接入后续批量数据准备) - 阶段:第三方商品目录本地转换 ## 要解决什么 `D:\chengma\全部店铺拼多多商品` 下的 20 个第三方 ERP 导出 XLSX 含蝦皮商品、SKU、店铺、图片和 PDD 来源链接。工作簿的工作表维度错误地标为 `A1`,现有 `openpyxl` 导入器无法正常读取。需要先将每个 XLSX 独立转换为后续商品目录入库可用的规范 CSV,供人工核对和下一步接口导入;本任务不提交接口、不写入线上或本地业务数据库。 ## 做什么 / 不做什么 做: - 增加只读的第三方 XLSX → 规范 CSV 转换脚本;一个输入 XLSX 只生成一个同名 CSV,并保留原目录层级。 - 直接流式读取 XLSX 内的 OOXML 工作表,忽略错误的工作表 dimension,支持大文件。 - 导出蝦皮商品、蝦皮 SKU、店铺、图片、原始规格、解析后的颜色/尺码、PDD 商品 ID/规范链接及关联所需字段。 - 对无效或缺失 PDD `goods_id` 的行保���蝦皮数据,留空 PDD/关联字段并写入校验码;不猜测规格。 - 提供可重复执行的命令、自动化测试和运行汇总。 不做: - 不调用 `/api/v1/integrations/catalog/batches`,不导入任何 CSV。 - 不写入 Admin 数据库、线上 MySQL 或修改既有商品数据。 - 不将来源中的蝦皮价格/促销价当作 PDD 价格。 - 不从不明确的变种属性推断颜色、尺码或 PDD 商品信息。 ## 已确认实现方案 新增 `tools/export_thirdparty_catalog_xlsx.py`:使用 `zipfile + lxml.etree.iterparse` 流式读取 `xl/worksheets/sheet*.xml`,以首行标题映射字段;每个来源 SKU 行生成一行 UTF-8 BOM CSV。输出字段按后续商品目录入库需要组织: - 蝦皮:`shopee_goods_id`、`shopee_title`、`shopee_shop_name`、`shopee_image_url`、`shopee_main_sku_code`; - SKU:`shopee_sku_id`、`shopee_sku_code`、`spec_raw`、`color`、`size`、`advice`、`parse_ok`; - PDD/关联:`pdd_goods_id`、`pdd_goods_url`、`association_shopee_goods_id`、`association_pdd_goods_id`; - 审计:来源文件、源行号、原始 PDD URL、校验码。 仅当来源 URL 能提取到数字 `goods_id` 时生成规范 URL `https://mobile.yangkeduo.com/goods.html?goods_id=<id>` 和关联;不合格行写 `validation_code`。颜色/尺码仅根据明确的变种属性标题确定,无法判断时保持空值、`parse_ok=false` 且保留 `spec_raw`。 预计修改: - `tools/export_thirdparty_catalog_xlsx.py` - `tools/requirements-thirdparty-catalog-export.txt` - `tools/tests/test_export_thirdparty_catalog_xlsx.py`(或项目既有测试目录) - `docs/task/<工单号>-第三方商品工作簿导出规范csv.md`(完成后归档) ## 风险和回退 - 源文件较大,转换需流式处理并按文件原子替换输出,避免内存耗尽或留下半个 CSV。 - 输出目录只含派生文件;删除该输出目录即可回退,本任务不影响数据库。 ## 验收标准 - [ ] 给定目录下每个 XLSX 生成唯一同名 CSV,且保留 `pinduoduo 域名` / `yangkeduo 域名` 子目录,不修改源 XLSX。 - [ ] 能读取工作表 dimension 为 `A1` 但实际包含完整数据的 XLSX。 - [ ] CSV 使用 UTF-8 BOM,包含已确认的蝦皮、SKU、PDD、关联和审计字段;行数与输入数据行数一致。 - [ ] 能从 `mobile.pinduoduo.com` / `mobile.yangkeduo.com` 来源 URL 提取 PDD `goods_id` 并生成规范 URL。 - [ ] 缺失或无效 PDD URL 时,仍导出蝦皮行但不生成关联,并有明确 `validation_code`。 - [ ] 蝦皮价格、促销价不进入 PDD 价格字段;不明确规格不猜测。 - [ ] 自动化测试覆盖错误 dimension、规格解析、PDD URL 规范化和无效 PDD URL。 ## 验证方式 ```powershell cd D:\chengma\cmautobuy python -m unittest tools.tests.test_export_thirdparty_catalog_xlsx python tools\export_thirdparty_catalog_xlsx.py "D:\chengma\全部店铺拼多多商品" --output-dir "D:\chengma\全部店铺拼多多商品\catalog_csv" ``` 预期:测试通过;每个源工作簿输出一个同名 CSV,控制台输出每个文件行数和 PDD URL 校验统计;无任何 HTTP 提交或数据库写入。
Author
Owner

实施完成,待验收

  • 实现提交:71fabb1(转换器、依赖和自动化测试)
  • 归档提交:b8537fa(docs/task/280-第三方商品工作簿导出规范csv.md)
  • 实际输出:D:\chengma\全部店铺拼多多商品规范CSV,20 个 XLSX 对应 20 个 CSV,保留原子目录结构。
  • 二次读取核对:共 1,049,441 行;无缺失、无多余 CSV、无临时文件。
  • 其中 1,044,681 行提取到 PDD goods_id;4,730 行标记 PDD_GOODS_ID_MISSING,30 行标记 PDD_URL_HOST_INVALID。这些行仍保留蝦皮数据,但不生成 PDD 关联。
  • 已运行:python -m unittest tools.test_export_thirdparty_catalog_xlsx -v(3 项通过)、python -m py_compile tools\export_thirdparty_catalog_xlsx.py、实际转换和 CSV 二次核对。

本任务未调用商品目录接口,未写入本地或线上数据库,等待验收后再进行下一步导入工单。

## 实施完成,待验收 - 实现提交:`71fabb1`(转换器、依赖和自动化测试) - 归档提交:`b8537fa`(`docs/task/280-第三方商品工作簿导出规范csv.md`) - 实际输出:`D:\chengma\全部店铺拼多多商品规范CSV`,20 个 XLSX 对应 20 个 CSV,保留原子目录结构。 - 二次读取核对:共 1,049,441 行;无缺失、无多余 CSV、无临时文件。 - 其中 1,044,681 行提取到 PDD `goods_id`;4,730 行标记 `PDD_GOODS_ID_MISSING`,30 行标记 `PDD_URL_HOST_INVALID`。这些行仍保留蝦皮数据,但不生成 PDD 关联。 - 已运行:`python -m unittest tools.test_export_thirdparty_catalog_xlsx -v`(3 项通过)、`python -m py_compile tools\export_thirdparty_catalog_xlsx.py`、实际转换和 CSV 二次核对。 本任务未调用商品目录接口,未写入本地或线上数据库,等待验收后再进行下一步导入工单。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/cmautobuy#280