feat: 重构顺运宝规格主链路 (#88)

This commit is contained in:
chengma
2026-08-10 12:24:23 +08:00
parent 5bb1258462
commit d1165b9e17
28 changed files with 985 additions and 531 deletions
+16 -15
View File
@@ -168,6 +168,7 @@ type ShopeeProduct struct {
Title string
ShopeeStatus string
MainSKUCode string
Source string // report=蝦皮报表完整行;syb=顺运宝同步补建的商品骨架
PddGoodsURL string
PddGoodsID string // 指向 PddProduct.GoodsID,为空表示还没填链接
CreatedAt string
@@ -201,17 +202,16 @@ type ShopeeSKU struct {
// PriceTwdCent 是**台币分**,跟采购任务的人民币价格上限没有换算关系,
// 不要互相赋值,见 docs/admin/01-requirements.md §7。
//
// `[必须]` ShopeeSKUID 是蝦皮规格识别结果(人工确认或自动识别产生),
// 它不代表已经完成蝦皮 SKU 到 PDD SKU 的采购规格映射。
// 顺运宝同步**绝不能覆盖它**——顺运宝根本没有这个值,见工单 #46、
// docs/admin/08-顺运宝接口.md §6.2。
// ShopeeSKUID 是 #88 之前的蝦皮规格识别结果。数据库列因只追加迁移保留,
// 新同步和采购主链路均不再读写它。
type SybOrder struct {
SybID string
OrderNo string
Title string
ProductSpec string // 规格原文,顺运宝 productSpec,原样保留,对应 shopee_skus.spec_raw
SpecKey string // ProductSpec 的稳定身份键;空规格保持 SQL NULL,读出时为空字符串
ShopeeGoodsID string
ShopeeSKUID string // 蝦皮规格识别结果;顺运宝同步永远不覆盖这一列,见上面的注释
ShopeeSKUID string // 历史兼容字段;新主链路不使用
Quantity int
PriceTwdCent int64
ImageURL string
@@ -250,14 +250,14 @@ type SybSyncRun struct {
FinishedAt string
}
// SKUMapping 是「蝦皮的这个规格 = 拼多多的那个规格」。
// SpecMapping 是「这个蝦皮商品的顺运宝规格 = 拼多多的那个规格」。
//
// # 为什么主键要带上 PddGoodsID
//
// PDD 商品下架换代很频繁。假设蝦皮商品 X 原来对应 PDD 商品 A,
// 操作员匹配好了"黑色/M → 黑色/M码";后来 A 下架,换成了 B。
//
// 如果映射只按 ShopeeSKUID 存,那条旧映射还在,但它描述的是 **A 的规格**:
// 如果映射不带 PddGoodsID,那条旧映射还在,但它描述的是 **A 的规格**:
//
// - 运气好:B 没有"黑色/M码",建任务时找不到会报错,还算安全;
// - 运气坏:B 恰好也有"黑色/M码",但完全是另一件衣服
@@ -268,14 +268,15 @@ type SybSyncRun struct {
// 不需要在换商品时记得去删旧数据——靠查询条件天然隔离,忘不了。
//
// 附带好处:A 的映射还留着。A 补货换回去时,之前的匹配成果直接复用。
type SKUMapping struct {
ShopeeSKUID string
PddGoodsID string // 这条映射属于哪个 PDD 商品
PddOptionKey string // 规范化后的组合键,见 service.OptionKey
PddOptions string // 原始 options 对象 JSON,显示用
GoodsID string // 蝦皮商品 ID,方便按商品批量查
MappedAt string
MappedBy string
type SpecMapping struct {
ShopeeGoodsID string
SpecKey string // 由 spec.SpecKey 生成,存和查必须使用同一实现
SpecRaw string // 保存当时的顺运宝原文,供人工核对
PddGoodsID string // 这条映射属于哪个 PDD 商品
PddOptionKey string // 规范化后的组合键,见 service.OptionKey
PddOptions string // 原始 options 对象 JSON,显示用
MappedAt string
MappedBy string
}
// ---------- 任务 ----------