package repository import ( "database/sql" "errors" "fmt" "cmautobuy/admin/model" ) // GetSKUMapping 读取某个蝦皮 SKU 在指定 PDD 商品下的映射。 func GetSKUMapping(q Execer, shopeeSKUID, pddGoodsID string) (*model.SKUMapping, error) { var m model.SKUMapping var mappedBy sql.NullString err := q.QueryRow(` SELECT shopee_sku_id, pdd_goods_id, pdd_option_key, pdd_options, goods_id, mapped_at, mapped_by FROM sku_mappings WHERE shopee_sku_id = ? AND pdd_goods_id = ?`, shopeeSKUID, pddGoodsID).Scan( &m.ShopeeSKUID, &m.PddGoodsID, &m.PddOptionKey, &m.PddOptions, &m.GoodsID, &m.MappedAt, &mappedBy) if errors.Is(err, sql.ErrNoRows) { return nil, nil } if err != nil { return nil, fmt.Errorf("查询规格映射失败: %w", err) } m.MappedBy = mappedBy.String return &m, nil } // UpsertSKUMapping 保存可复用规格映射,唯一键包含当前 PDD 商品。 func UpsertSKUMapping(q Execer, m model.SKUMapping) error { _, err := q.Exec(` INSERT INTO sku_mappings (shopee_sku_id, pdd_goods_id, pdd_option_key, pdd_options, goods_id, mapped_at, mapped_by) VALUES (?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE pdd_option_key = VALUES(pdd_option_key), pdd_options = VALUES(pdd_options), goods_id = VALUES(goods_id), mapped_at = VALUES(mapped_at), mapped_by = VALUES(mapped_by)`, m.ShopeeSKUID, m.PddGoodsID, m.PddOptionKey, m.PddOptions, m.GoodsID, m.MappedAt, nullableText(m.MappedBy)) if err != nil { return fmt.Errorf("保存规格映射失败: %w", err) } return nil }