fix: 允许已采集 PDD 商品重新采集 (#121)

This commit is contained in:
chengma
2026-08-10 19:38:40 +08:00
parent 352d861425
commit 546d9ef7e2
9 changed files with 250 additions and 7 deletions
+69
View File
@@ -589,6 +589,75 @@ func CreatePddCollectTasksForUser(db *sql.DB, actor *model.User, goodsIDs []stri
return createPddCollectTasks(db, goodsIDs, strings.TrimSpace(clientID), visibleUserID)
}
// RecollectPddProductForUser 为详情页一次明确的重新采集创建单商品任务。
// 普通批量入口仍跳过 collected;本入口允许 collected,但保留旧采集数据,
// 等 Client 成功提交新结果后再由既有提交逻辑覆盖。
func RecollectPddProductForUser(db *sql.DB, actor *model.User, goodsID, clientID string) (CollectTaskResult, error) {
var result CollectTaskResult
goodsID = strings.TrimSpace(goodsID)
clientID = strings.TrimSpace(clientID)
if goodsID == "" {
return result, invalidInput("商品 ID 不能为空")
}
visibleUserID, err := visibleClientUserID(actor)
if err != nil {
return result, err
}
tx, err := db.Begin()
if err != nil {
return result, fmt.Errorf("开始事务失败: %w", err)
}
defer tx.Rollback()
if clientID != "" {
visible, err := repository.ClientVisibleToUser(tx, clientID, visibleUserID)
if err != nil {
return result, err
}
if !visible {
return result, invalidInput("所选客户端不存在或不在当前账号可见范围")
}
}
p, err := repository.GetPddProductByGoodsID(tx, goodsID)
if err != nil {
return result, err
}
if p == nil || p.IsDeleted() {
result.SkippedDeleted = 1
if err := tx.Commit(); err != nil {
return CollectTaskResult{}, fmt.Errorf("提交事务失败: %w", err)
}
return result, nil
}
ok, err := repository.MarkRecollecting(tx, goodsID)
if err != nil {
return result, err
}
if !ok {
result.SkippedCollecting = 1
if wait, ok := retryWaitFor(p.UpdatedAt); ok {
result.RetryWaitText = formatRetryWait(wait)
}
if err := tx.Commit(); err != nil {
return CollectTaskResult{}, fmt.Errorf("提交事务失败: %w", err)
}
return result, nil
}
if err := repository.InsertCollectTaskForClient(
tx, newCollectTaskID(), p.GoodsID, p.URL, clientID); err != nil {
return result, err
}
result.Created = 1
if err := tx.Commit(); err != nil {
return CollectTaskResult{}, fmt.Errorf("提交事务失败: %w", err)
}
return result, nil
}
func createPddCollectTasks(db *sql.DB, goodsIDs []string, clientID, visibleUserID string) (CollectTaskResult, error) {
var result CollectTaskResult