feat: 支持蝦皮批量创建 PDD 采集任务 (#185)

This commit is contained in:
chengma
2026-08-12 16:12:35 +08:00
parent 250998b7b9
commit 07ca1b0afb
10 changed files with 280 additions and 26 deletions
+37
View File
@@ -112,6 +112,43 @@ func CreateShopeePddCollectTaskForUser(db *sql.DB, actor *model.User, shopeeGood
return CreatePddCollectTasksForUser(db, actor, []string{product.PddGoodsID}, "")
}
// CreateShopeePddCollectTasksForUser 把勾选的蝦皮商品转换成当前 PDD 商品后批量建采集任务。
// 蝦皮与 PDD 可以多对一,因此交给统一 PDD 服务前先按 PDD goods_id 去重;
// 商品不存在和未关联按原因跳过,其余状态、防重和客户端权限仍由统一服务处理。
func CreateShopeePddCollectTasksForUser(db *sql.DB, actor *model.User, shopeeGoodsIDs []string, clientID string) (CollectTaskResult, error) {
shopeeGoodsIDs = dedupe(shopeeGoodsIDs)
if len(shopeeGoodsIDs) == 0 {
return CollectTaskResult{}, invalidInput("没有选择蝦皮商品")
}
links, err := repository.ListShopeePddLinksByGoodsIDs(db, shopeeGoodsIDs)
if err != nil {
return CollectTaskResult{}, err
}
var skipped CollectTaskResult
pddGoodsIDs := make([]string, 0, len(shopeeGoodsIDs))
for _, shopeeGoodsID := range shopeeGoodsIDs {
pddGoodsID, exists := links[shopeeGoodsID]
if !exists {
skipped.SkippedShopeeMissing++
continue
}
if strings.TrimSpace(pddGoodsID) == "" {
skipped.SkippedUnlinked++
continue
}
pddGoodsIDs = append(pddGoodsIDs, pddGoodsID)
}
result, err := CreatePddCollectTasksForUser(db, actor, dedupe(pddGoodsIDs), clientID)
if err != nil {
return CollectTaskResult{}, err
}
result.SkippedShopeeMissing = skipped.SkippedShopeeMissing
result.SkippedUnlinked = skipped.SkippedUnlinked
return result, nil
}
// AssociateSybPdd 从顺运宝明细解析出可信的蝦皮商品,再复用统一关联逻辑。
func AssociateSybPdd(db *sql.DB, sybID, rawURL string, confirmReplace bool) (string, error) {
context, err := repository.GetSybOrderContext(db, strings.TrimSpace(sybID))