feat: 展示蝦皮主图和店铺 (#142)
This commit is contained in:
@@ -438,6 +438,12 @@ MySQL schema v8 将 `shopee_skus.sku_id` 保留为系统内部记录主键(兼
|
||||
来源表;`fill_missing` 补字段时分别登记,`overwrite_same_source` 只更新来源属于本次
|
||||
调用方且观测时间不旧的字段,避免不同脚本各补一部分后互相覆盖。
|
||||
|
||||
MySQL schema v9 为 `shopee_products` 增加 `image_url` 和 `shopee_shop_name`。两者分别
|
||||
使用 `image_source/image_observed_at/image_is_manual` 与
|
||||
`shop_name_source/shop_name_observed_at/shop_name_is_manual` 记录来源边界。目录接口只
|
||||
能补空或更新同来源的新观测,空值、跨来源、旧观测和人工字段均不覆盖。该图片是蝦皮
|
||||
商品主图,与 `syb_orders.image_url` 的历史货运单观测图片是两个独立概念。
|
||||
|
||||
蝦皮详情把 `syb_orders` 按 `(shopee_goods_id, spec_key)` 聚合为“顺运宝观测规格”:
|
||||
订单数按唯一 `syb_id` 行计数,累计数量求和,最近一行提供历史台币售价和图片。
|
||||
该读模型不写入 `shopee_skus`。只有同一商品下恰好一条正式 SKU 的 `spec_raw`
|
||||
|
||||
@@ -819,3 +819,9 @@ placeholder 写「任务编号 / 订单号 / 商品 ID」,**不要写全「PDD
|
||||
商品详情在正式 SKU 表之后显示“顺运宝观测规格”。该区域必须明确标注它不是正式
|
||||
蝦皮 SKU,价格是最近货运单台币售价、不是 PDD 人民币采购价;展示规格原文、订单
|
||||
数、累计数量、最近图片、最后出现时间及唯一正式 SKU 匹配结果,多条匹配交给人工。
|
||||
|
||||
蝦皮商品列表在商品 ID 后显示 32×32 懒加载主图,在标题后显示“蝦皮店铺”。主图可
|
||||
打开通用原图弹窗和新窗口,加载失败显示文字占位;无图不打开空弹窗。店铺列最大约
|
||||
150px并省略,完整值放在 `title` 和详情中。商品标题继续使用 `.col-title` 的 18%,
|
||||
不得因新增列再次缩窄;1366×768 下通过表格横向滚动保留可读性。详情同时显示图片、
|
||||
店铺、各自来源和观测时间,顺运宝观测图仍只出现在观测区域。
|
||||
|
||||
@@ -21,7 +21,7 @@ Token 通过 `CMAUTOBUY_CATALOG_TOKEN` 或未提交的 `config.yaml` 配置。
|
||||
"observed_at": "2026-08-11T10:00:00+08:00",
|
||||
"update_policy": "fill_missing",
|
||||
"shopee_products": [
|
||||
{"goods_id": "S-1", "title": "蝦皮上衣", "status": "NORMAL", "main_sku_code": "A01"}
|
||||
{"goods_id": "S-1", "title": "蝦皮上衣", "status": "NORMAL", "main_sku_code": "A01", "image_url": "https://img.example.com/S-1.jpg", "shop_name": "蝦皮示例店铺"}
|
||||
],
|
||||
"shopee_skus": [
|
||||
{"sku_id": null, "goods_id": "S-1", "spec_raw": "黑色,M", "color": "黑色", "size": "M", "parse_ok": true, "sku_code": "A01-B-M"}
|
||||
@@ -47,6 +47,10 @@ Token 通过 `CMAUTOBUY_CATALOG_TOKEN` 或未提交的 `config.yaml` 配置。
|
||||
不得自行生成。系统用内部主键和 `goods_id + spec_key` 保持记录身份,后续取得真实 ID
|
||||
会补到原记录,不会重复新增。
|
||||
|
||||
`image_url` 和 `shop_name` 可选。图片只接受不含用户信息和明显凭据参数的完整
|
||||
HTTP/HTTPS URL,最长 2048 字节;店铺名最长 500 个字符。Admin 只保存地址并由浏览器
|
||||
懒加载,不会在服务端下载或代理图片。
|
||||
|
||||
## 3. 写入与幂等规则
|
||||
|
||||
- 整个批次在一个事务中写入:实体、SKU、关联任一步失败就全部回滚。
|
||||
@@ -57,6 +61,8 @@ Token 通过 `CMAUTOBUY_CATALOG_TOKEN` 或未提交的 `config.yaml` 配置。
|
||||
- `overwrite_same_source`:只有来源相同且 `observed_at` 更新时才覆盖来源字段。
|
||||
- 较旧的 `observed_at` 不覆盖较新的接口数据,任何策略都不能覆盖 `is_manual=1`。
|
||||
- `spec_raw` 和由它生成的规格身份不被更新;同商品同规格出现不同真实 SKU ID 返回 409。
|
||||
- 蝦皮主图和店铺名也遵循本批次策略,但各自独立记录来源、观测时间和人工保护;
|
||||
空值永不清除现有值。顺运宝观测图片不参与蝦皮主图更新。
|
||||
- 蝦皮 upsert 不覆盖采购员维护的 PDD 链接;SKU 的 `is_manual` 不被接口改写。
|
||||
- 空关联可以建立、相同关联不重复写;已有不同 PDD 关联返回 409,绝不静默替换。
|
||||
- 批次缺少某条记录不表示删除,接口没有“全量覆盖”语义。
|
||||
@@ -83,7 +89,7 @@ Token 通过 `CMAUTOBUY_CATALOG_TOKEN` 或未提交的 `config.yaml` 配置。
|
||||
|
||||
## 5. schema v8 发布与回退
|
||||
|
||||
发布前先备份生产库,并在 MySQL 8.4、库名以 `_test` 结尾的测试库演练 v7→v8。
|
||||
发布前先备份生产库,并在 MySQL 8.4、库名以 `_test` 结尾的测试库演练 v7→v8→v9。
|
||||
迁移只增加列和唯一索引,既有 `sku_id` 继续作为内部主键,因此历史引用不变;若检测
|
||||
到同商品重复 `spec_key`,迁移会停止且不记录 v8,必须人工确认,不能自动合并。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user