feat: 方案设计、数据库和接口设计基本完成
This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
# 采集箱与在线商品需求
|
||||
|
||||
> 状态:已确认核心规则,待补充具体 PostgreSQL 表和 API 契约。采集插件入口和来源多 SKU 规则见 [`collector-browser-extension.md`](./collector-browser-extension.md)。
|
||||
|
||||
## 1. 领域边界
|
||||
|
||||
采集箱是工作空间共用的商品工作池:插件的“采集商品”“编辑上架”以及手动创建商品,都先创建或复用一条采集箱记录。采集时没有目标平台和门店。用户进入 ERP 编辑时使用页头当前平台;系统为该商品取得或创建这个平台的发布配置,并预选该平台默认门店。门店可以为这次及后续未上架 SKU 修改,但采集箱商品本身不属于任何门店。
|
||||
|
||||
**上架成功不会把商品移出采集箱。** 采集箱保留该商品,以便继续查看和编辑 Atlas 草稿;某个已成功提交到平台的 SKU 不能再次提交上架,但同一 SPU 下仍未上架的 SKU 可以首次上架。采集箱状态随**当前页头平台**变化:商品在 A 平台上架后,切换到 B 平台仍是未上架。在线商品是另一份“目标店铺在平台上实际存在什么商品”的同步视图,不能只由 Atlas 的发布记录推断。
|
||||
|
||||
```text
|
||||
来源采集 / 手动创建
|
||||
→ 采集箱(持续保留、可编辑;已成功上架 SKU 不可再次上架)
|
||||
→ 发布任务 / Ozon 当前状态
|
||||
→ 在线商品(店铺级平台同步视图,含非 Atlas 创建商品)
|
||||
```
|
||||
|
||||
## 2. 采集箱列表
|
||||
|
||||
默认按更新时间倒序显示当前工作空间内所有未删除的采集箱商品;已上架商品仍显示。
|
||||
|
||||
| 列 | 展示与规则 |
|
||||
|---|---|
|
||||
| 复选框 | 用于批量删除。 |
|
||||
| 图片 | 首张已就绪主图;素材转存中显示占位进度,失败显示占位和提示。 |
|
||||
| 产品名称 | 来源标题或手动填写标题;尚未填写时显示“未命名商品”。 |
|
||||
| 采集价格 | 单 SKU 显示来源价格;多 SKU 显示最小值–最大值,始终保留来源币种。它不是目标店铺售价。 |
|
||||
| SKU 数量 | 来源确认的真实 SKU 数;无可靠组合时是默认 SKU `1`,并带“待确认”提示。 |
|
||||
| 采集来源 | Ozon、1688、淘宝、天猫或手动创建;这是**来源平台**,不是目标发布平台。 |
|
||||
| 备注 | 工作空间内管理备注,不发送给平台。 |
|
||||
| 上架状态 | 按页头当前平台显示 `未上架`、`已部分上架` 或 `已上架`,口径见第 3 节。 |
|
||||
| 创建时间 | 采集箱记录首次创建时间。 |
|
||||
| 更新时间 | 采集补全、素材转存、编辑保存、发布任务或同步结果更新的时间。 |
|
||||
| 操作 | 未上架:`编辑上架`、`删除`;已上架:`编辑`、`删除`。 |
|
||||
|
||||
顶部功能:
|
||||
|
||||
- 按产品标题模糊查询;
|
||||
- 按采集来源平台筛选;
|
||||
- 按上架状态筛选;
|
||||
- `手动创建商品`;
|
||||
- 容量进度条:`当前有效采集箱商品数 / 1000`;
|
||||
- `批量删除`、`清空采集箱`。
|
||||
|
||||
容量按采集箱商品数计算,不按 SKU 数计算。一条采集箱记录即使含多个 SKU,也只计 1 个。由于已上架商品仍保留在采集箱,它同样占用当前 1000 条临时上限;已删除记录不计入。重复采集命中工作空间内同一 `source_platform + source_item_key` 时复用原记录,不增加额度。
|
||||
|
||||
## 3. 当前平台的上架状态和失败原因
|
||||
|
||||
列表按当前平台汇总该 SPU 下未删除 SKU 的**首次导入结果**;它不是 Ozon 前台可见性。Ozon 库存由卖家后续在 Ozon 后台设置,`visible`、库存、审核等实际状态在在线商品中查看。主状态有三种:
|
||||
|
||||
| 主状态 | 判定 |
|
||||
|---|---|
|
||||
| `未上架` | 当前平台没有任何 SKU 导入成功;包括未选择门店、尚未提交、提交处理中或所有已提交 SKU 均失败。 |
|
||||
| `已部分上架` | 至少一个 SKU 已导入成功,且仍有未删除 SKU 未导入成功或正在处理。 |
|
||||
| `已上架` | 当前平台下全部未删除 SKU 均已导入成功。若删除所有未上架 SKU、只留下已上架 SKU,状态随即变为此值。 |
|
||||
|
||||
“未上架”不能只给笼统结果。状态列的第二行或悬浮详情应展示状态说明:
|
||||
|
||||
- `未选择目标平台`;
|
||||
- `等待发布`;
|
||||
- `导入处理中` / `审核中`;
|
||||
- `已导入,库存由 Ozon 后台维护`;
|
||||
- `审核拒绝:{最近原因}`;
|
||||
- `上架失败:{最近失败原因}`;
|
||||
- `已归档或已下架`。
|
||||
|
||||
失败原因优先取最近 Atlas 发布任务保存的结构化错误;同步后若 Ozon 返回更准确的 `errors`、`status.decline_reasons` 或 `status.state_description`,以 Ozon 同步结果更新展示。处理/审核中不应误标为失败。
|
||||
|
||||
已成功上架的 SKU 没有“重新上架”或“更新平台商品”路径:编辑仅保存 Atlas 草稿,不向 Ozon 提交接口请求。未上架 SKU 可以在同一 SPU 中继续首次上架。若未来需要修改 Ozon 已有商品,应从在线商品的 SKU 行进入专门的“编辑在线商品”流程,并单独设计可修改字段、审核及发布规则;不能复用采集箱的上架按钮。首次发布仍为每个 SKU 保存独立不可变快照和任务记录。
|
||||
|
||||
## 4. 编辑、手动创建与删除
|
||||
|
||||
### 4.1 编辑上架
|
||||
|
||||
点击后进入 ERP 编辑入口:
|
||||
|
||||
1. 读取页头当前平台(首期默认 Ozon),取得或创建该商品的当前平台发布配置;
|
||||
2. 服务端预选该工作空间在此平台的默认店铺,用户可在编辑页改为该平台的另一已授权门店;无门店则提示前往店铺管理;
|
||||
3. 用户可编辑 SKU、媒体、定价、动态类目属性;已成功上架的 SKU 仅能保存 Atlas 侧编辑,未上架 SKU 可被选择并提交首次上架;
|
||||
4. 发布成功或失败后均返回/保留采集箱记录,状态和原因随任务、同步更新。
|
||||
|
||||
### 4.2 手动创建
|
||||
|
||||
“手动创建商品”创建来源为 `manual` 的工作空间级采集箱草稿,并立即打开同一编辑入口。它不因为是手动创建而绕过采集箱、目标平台绑定、发布校验或任务快照。
|
||||
|
||||
### 4.3 删除与清空
|
||||
|
||||
- 删除只删除 Atlas 中的采集箱记录及其未被其他记录引用的素材关系;不删除来源站商品。
|
||||
- 已上架采集箱记录也允许删除,但二次确认必须说明:**不会删除或下架 Ozon 商品,也不会从在线商品同步列表移除。**
|
||||
- 删除时取消未执行的素材任务;已转存文件在确认没有任何引用后延迟物理清理。
|
||||
- “清空采集箱”清理当前工作空间所有未删除的采集箱记录(包括已上架记录),必须展示数量并二次确认;不影响任何平台商品和在线商品记录。
|
||||
|
||||
## 5. 在线商品
|
||||
|
||||
在线商品是店铺级的 Ozon 实际商品镜像:既包含通过 Atlas 发布的商品,也包含卖家此前直接在 Ozon 后台或其他工具创建的商品。它是**平台 + 门店独有**的数据,不能跨平台或跨门店复用;即使某行关联到采集箱 SKU,它仍是 Ozon 店铺中的独立事实记录。**列表粒度为 Ozon `product_id` / `offer_id` 对应的一条商品 SKU 行,不按 Atlas 采集箱 SPU 聚合展示。** 一个采集箱 SPU 有多个 SKU 时,在线商品中应显示为多行;外部同步商品同样按这个粒度展示。
|
||||
|
||||
### 5.1 Ozon API 能力确认
|
||||
|
||||
现有 Ozon Seller API 资料已确认以下同步链路:
|
||||
|
||||
1. `POST /v3/product/list`:按 `last_id` 游标分页拉取店铺商品,支持 `ALL`、`VISIBLE`、`INVISIBLE`、`EMPTY_STOCK` 筛选;每项返回 `product_id` 与 `offer_id`,单页最多 1000 条。
|
||||
2. `POST /v3/product/info/list`:按 `product_id`、`offer_id` 或 `sku` 批量读取详情,每批最多 100 条;返回名称、价格、图片、属性、库存、`visible`、审核状态、失败/拒绝原因和可见性详情。
|
||||
|
||||
因此可以使用 `Client-Id + Api-Key` 完成同步,不需要浏览器 Cookie。依据见 [商品列表 API](../integrations/ozon-seller-api/06-product-list.md) 与 [商品信息 API](../integrations/ozon-seller-api/05-product-info.md)。
|
||||
|
||||
### 5.2 同步任务
|
||||
|
||||
在线商品页提供“同步 Ozon 商品”入口;后台也可按后续确定的频率自动执行。同步必须是 BullMQ 异步任务:
|
||||
|
||||
```text
|
||||
创建 store_online_product_sync 任务
|
||||
→ /v3/product/list 分页获得全部 product_id + offer_id
|
||||
→ /v3/product/info/list 每批最多 100 条补全详情
|
||||
→ 以 store_id + ozon_product_id(或同店 offer_id)upsert 在线商品 SKU 镜像
|
||||
→ 将 Atlas SKU 映射到匹配的 Ozon 商品;非 Atlas 商品保持“外部同步”来源
|
||||
→ 成功完成全量分页后,处理本轮未见项目为疑似已删除/已归档,不直接物理删除
|
||||
→ 保存同步时间、游标、统计、失败原因和原始响应摘要
|
||||
```
|
||||
|
||||
同步中的并发、分页、重试、限流和异常应由 Worker 控制。同步失败保留上一轮成功镜像,并在在线商品页显示“最近同步失败”;不把失败当作平台商品已下架。
|
||||
|
||||
### 5.3 与采集箱的关联
|
||||
|
||||
通过 Atlas 发布的 SKU,使用 `store_id + offer_id` 和发布回填的 Ozon `product_id` 建立稳定映射。在线商品的每一 SKU 行可显示其 Atlas 来源链接;采集箱 SPU 的当前平台上架状态由首次导入映射汇总,**不**由在线商品的当前可见性派生。外部同步得到的 Ozon 商品也可出现在在线商品,但初始没有采集箱记录或 Atlas 商品关联;后续如需纳入编辑,另行设计“认领/导入在线商品”流程。
|
||||
|
||||
## 6. 待补充
|
||||
|
||||
1. 采集箱草稿已绑定目标后,是否允许换平台/换店铺及其迁移规则;
|
||||
2. 在线商品列表的字段、筛选、详情、编辑入口和“认领外部商品”流程;
|
||||
3. 自动同步频率、手动同步冷却时间、单店并发和限流参数;
|
||||
4. 采集箱容量 1000 的最终套餐口径及超限提示;
|
||||
5. 采集箱“首次导入成功”的用户文案,以及在线商品“实际可见/库存”的用户文案;二者必须区分,不能把 `visible=true` 当作采集箱上架状态。
|
||||
Reference in New Issue
Block a user