53 lines
1.6 KiB
Go
53 lines
1.6 KiB
Go
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 CONFLICT(shopee_sku_id, pdd_goods_id) DO UPDATE SET
|
|
pdd_option_key = excluded.pdd_option_key,
|
|
pdd_options = excluded.pdd_options,
|
|
goods_id = excluded.goods_id,
|
|
mapped_at = excluded.mapped_at,
|
|
mapped_by = excluded.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
|
|
}
|