+14
-13
@@ -125,6 +125,8 @@ v18(#208)新增 `shops` 业务店铺和 `shop_channel_aliases` 渠道名称
|
||||
`syb_orders`、`shopee_products` 增加可空 `shop_id`。迁移把 v14 旧准入项一对一
|
||||
转成业务店铺,同时保留 `syb_allowed_shops` 作为回退依据;历史数据只按渠道原始
|
||||
名称精确回填,无法确认的记录保持未关联。
|
||||
v19(#212)将产品概念收敛为唯一店铺名称和唯一启停状态。迁移按“任一旧开关停用
|
||||
则保持停用”的安全规则合并 v18 状态,重建由 `shops` 派生的兼容数据和两侧关联。
|
||||
|
||||
**v3 为什么丢弃旧 `sku_mappings` 数据(见 #20):** 新主键需要 `pdd_option_key`,
|
||||
这是 Go 的 `service.OptionKey()` 用 `json.Marshal` 算出来的规范化键,SQL 语句
|
||||
@@ -547,24 +549,23 @@ v14 起,`stock_count` 继续表示通过完整性校验的**原始货运单数
|
||||
`shop_filter_hash` 保存同步开始时启用店铺排序后计算的 SHA-256,只用于判断两次同步
|
||||
是否使用同一份快照,不保存 Cookie、密码或原始响应。
|
||||
|
||||
### 5.3 全局店铺与渠道名称(MySQL v18)
|
||||
### 5.3 店铺(MySQL v18 / v19)
|
||||
|
||||
`shops` 是 Admin 内部统一展示的业务店铺;`shop_channel_aliases` 保存同一业务店铺
|
||||
在 `syb`、`shopee` 渠道中的原始名称。首版每个业务店铺每个渠道维护一个主名称,
|
||||
渠道和去除首尾空白后的原始名称组成唯一约束。匹配使用 `utf8mb4_bin` 精确比较,
|
||||
不做模糊、正则、大小写折叠或 AI 猜测。
|
||||
`shops` 是唯一店铺配置。`display_name` 是页面中的“店铺名称”,同时用于 SYB 同步
|
||||
准入和蝦皮商品关联;`enabled` 是唯一启停状态。匹配会去除首尾空白,再使用
|
||||
`utf8mb4_bin` 精确比较,不做模糊、正则、大小写折叠或 AI 猜测。
|
||||
|
||||
全局 `shops.enabled` 和 SYB 渠道名称的 `enabled` 是两个不同开关:前者停用整个业务
|
||||
店铺,后者只停止该店铺进入后续 SYB 同步。蝦皮导入和 SYB 写入都保留上游原始店铺
|
||||
名称,并把精确解析出的 `shop_id` 作为派生关联;未解析成功时 `shop_id` 保持 `NULL`,
|
||||
由“待关联”筛选暴露给管理员处理。
|
||||
蝦皮导入和 SYB 写入都保留上游原始店铺名称,并把精确解析出的 `shop_id` 作为派生
|
||||
关联;未解析成功时 `shop_id` 保持 `NULL`,可从店铺管理的“未登记商品”入口查看。
|
||||
`shop_channel_aliases` 是 v18 升级兼容表,不再是独立产品概念,也不在页面中编辑;
|
||||
每个店铺固定保留 `syb`、`shopee` 两条与唯一店铺名称和状态完全相同的派生记录。
|
||||
|
||||
`[必须]` 没有任何“业务店铺启用且 SYB 渠道启用”的名称时,同步关闭失败,不请求
|
||||
顺运宝、不推进游标。编辑渠道名称会在一个事务里重建该业务店铺的历史精确关联。
|
||||
永久删除只允许全局停用且没有任何货运单或蝦皮商品引用的店铺。
|
||||
`[必须]` 没有任何启用店铺时,同步关闭失败,不请求顺运宝、不推进游标。编辑店铺
|
||||
名称会在一个事务里重建该店铺的历史精确关联。永久删除只允许已经停用且没有任何
|
||||
货运单或蝦皮商品引用的店铺。
|
||||
|
||||
v14 的 `syb_allowed_shops` 在 v18 后不再作为运行时配置源,但为迁移回退保留,不能
|
||||
在 v18 中直接改名或删除。
|
||||
在 v18 / v19 中直接改名或删除。
|
||||
|
||||
## 6. `spec_mappings` 顺运宝规格映射
|
||||
|
||||
|
||||
@@ -136,7 +136,7 @@
|
||||
### 4.1 工具条
|
||||
|
||||
```text
|
||||
[导入记录] [创建 PDD 采集任务] 状态[全部▾] 店铺[全部▾] 图片[全部▾] 数据范围[正常商品▾] 商品 ID / 名称 [____] 店铺名称 [____] [搜索] [删除]
|
||||
[导入记录] [回收站] [创建 PDD 采集任务] 状态[全部▾] 分类[商品 ID▾] 关键词[____] [搜索] [删除]
|
||||
```
|
||||
|
||||
- **导入记录**:管理员进入统一商品目录导入记录页;采购员无系统级审计入口。
|
||||
@@ -156,18 +156,14 @@
|
||||
- `[必须]` 筛选参数认不出来的一律当"全部",不报错——地址栏是用户可以
|
||||
随便改的。
|
||||
- `[必须]` 筛选与关键词搜索可以叠加,翻页时都要保留,见 §3.2。
|
||||
- **店铺筛选**(工单 #150):全部 / 有店铺 / 无店铺;按
|
||||
`shopee_shop_name` 去除首尾空白后的非空/空判断。
|
||||
- **店铺名称搜索**(工单 #182):独立的 `shop_name` 包含匹配,和店铺三态筛选
|
||||
同时保留;商品 ID / 名称与店铺名称两个输入框各使用 20% 弹性基础宽度,最小宽度
|
||||
160px,空间不足时随工具条换行,不影响其他模块的搜索框宽度。
|
||||
- **图片筛选**(工单 #150):全部 / 有图片 / 无图片;按 `image_url`
|
||||
去除首尾空白后的非空/空判断。
|
||||
- `[必须]` 店铺、图片使用独立三态下拉框,不使用含义不清的复选框;两个条件可互相
|
||||
组合,也可与状态和商品 ID/标题搜索叠加。未知参数按“全部”处理,翻页、详情弹窗
|
||||
和写操作返回时保留全部条件。工具条在窄窗口沿用公共 `flex-wrap` 自然换行。
|
||||
- **数据范围**(工单 #205):只向管理员显示“正常商品 / 已删除”。正常列表不返回
|
||||
软删除商品;已删除列表只用于查看和恢复,不允许创建采集任务或打开处理详情。
|
||||
- **分类搜索**(工单 #213):分类固定为商品 ID、商品名称、店铺名。商品 ID 使用精确
|
||||
匹配,商品名称和店铺名使用转义后的包含匹配;后端必须用白名单分支,不能把请求参数
|
||||
拼成 SQL 列名。未知分类回退到商品 ID。状态、分类和关键词在翻页、详情弹窗和写操作
|
||||
返回时都要保留。
|
||||
- **回收站**(工单 #213):不再显示“数据范围”筛选。管理员通过独立回收站按钮查看
|
||||
软删除商品,并可返回正常商品;已删除列表不允许创建采集任务或打开处理详情。
|
||||
- **未登记商品**(工单 #212):不在常用筛选中增加额外下拉框。管理员从店铺管理页的
|
||||
数量链接进入内部 `unlinked=1` 视图,页面显示当前范围提示和清除入口。
|
||||
- **创建 PDD 采集任务**(工单 #185):勾选蝦皮商品后打开批量确认弹窗,显示选择
|
||||
数量及带可见标签的“执行客户端”,默认不指定。服务端按当前 PDD 关联和 PDD 商品 ID
|
||||
去重;未关联、已删除、已采集、正常采集中分别统计并跳过。商品详情的单商品入口保留。
|
||||
@@ -182,7 +178,9 @@
|
||||
|---|---|
|
||||
| ☐ | 勾选 |
|
||||
| 商品 ID | |
|
||||
| 图片 | 32×32 缩略图,可打开原图;加载失败显示文字占位 |
|
||||
| 商品名称 | 截断 + 悬停完整 |
|
||||
| 店铺 | 导入或同步得到的蝦皮店铺名称;为空显示 `—` |
|
||||
| 数据来源 | 蝦皮报表 / 顺运宝补建;不只靠颜色区分 |
|
||||
| 颜色 / 尺码 / 建议 | 解析失败的显示为 `—` 并**整行标黄**,提示需人工补 |
|
||||
| PDD 链接 | 空的显示"**未填写**"并标红,这是最需要操作员注意的状态 |
|
||||
@@ -479,9 +477,9 @@ Go 的 map 是无序的,不靠它定顺序的话,同一个商品每次刷新
|
||||
日期始终显示在主工具条,按 UTC+8 解释且两端都包含。首次打开页面固定默认昨天
|
||||
到今天,不因覆盖游标位置自动扩大范围;需要补历史缺口时由采购员明确选择日期。
|
||||
所有账号都能看到当前启用 SYB 同步店铺数量;只有管理员显示独立“店铺管理”入口。
|
||||
管理页一行一个业务店铺,同时展示和编辑 SYB、蝦皮原始名称;全局启停与 SYB 同步
|
||||
启停使用不同按钮和明确文字。启用店铺不显示删除入口,服务端还要拒绝删除有关联
|
||||
货运单或蝦皮商品的停用店铺。
|
||||
管理页一行一个店铺,只展示和编辑一个店铺名称,并使用一个启停状态。该名称同时用于
|
||||
SYB 同步准入和蝦皮商品关联。启用店铺不显示删除入口,服务端还要拒绝删除有关联货运单
|
||||
或蝦皮商品的停用店铺;“未登记商品 N 个”链接进入蝦皮未关联数据视图。
|
||||
空状态必须明确提示先新增并启用至少一个店铺,否则同步会安全停止。
|
||||
|
||||
`[必须]` 「同步」是唯一同步入口:
|
||||
@@ -908,12 +906,11 @@ placeholder 写「任务编号 / 订单号 / 商品 ID」,**不要写全「PDD
|
||||
蝦皮 SKU,价格是最近货运单台币售价、不是 PDD 人民币采购价;展示规格原文、订单
|
||||
数、累计数量、最近图片、最后出现时间及唯一正式 SKU 匹配结果,多条匹配交给人工。
|
||||
|
||||
蝦皮商品列表在商品 ID 后显示 32×32 懒加载主图,在标题后显示“蝦皮店铺”。主图可
|
||||
蝦皮商品列表在商品 ID 后显示 32×32 懒加载主图,在标题后显示“店铺”。主图可
|
||||
打开通用原图弹窗和新窗口,加载失败显示文字占位;无图不打开空弹窗。店铺列最大约
|
||||
150px并省略,完整值放在 `title` 和详情中。商品标题继续使用 `.col-title` 的 18%,
|
||||
不得因新增列再次缩窄;1366×768 下通过表格横向滚动保留可读性。详情同时显示图片、
|
||||
店铺、各自来源和观测时间,顺运宝观测图仍只出现在观测区域。
|
||||
|
||||
蝦皮列表同时显示“业务店铺”列,并提供具体业务店铺和“待关联”筛选。蝦皮店铺列
|
||||
始终显示导入或同步得到的渠道原始值,用于追溯;业务店铺列显示 `shop_id` 对应的统一
|
||||
名称。两列不能互相替代,未精确关联时必须显示文字“待关联”。
|
||||
店铺列显示导入或同步得到的蝦皮店铺原始值。`shop_id` 只作为精确匹配后的稳定内部关联,
|
||||
不再额外显示“业务店铺”列;未精确关联的数据从店铺管理页的“未登记商品”入口查看。
|
||||
|
||||
Reference in New Issue
Block a user