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
+28
View File
@@ -430,6 +430,34 @@ func MarkCollecting(q Execer, pddGoodsID string) (bool, error) {
return n == 1, nil
}
// MarkRecollecting 为详情页明确发起的“重新采集”原子占用商品。
//
// 它与 MarkCollecting 的唯一区别是允许 collected:普通批量采集仍应跳过
// 已采集商品,只有操作员在详情页明确点击“重新采集”时才能走这里。
// 本方法只改状态和更新时间,不清空旧标题、店铺、规格或采集时间;新结果成功
// 提交前,旧数据仍可用于诊断和查看。
func MarkRecollecting(q Execer, pddGoodsID string) (bool, error) {
now := time.Now()
nowISO := now.UTC().Format(model.TimeLayout)
staleBefore := now.Add(-model.CollectStaleAfter).UTC().Format(model.TimeLayout)
res, err := q.Exec(`
UPDATE pdd_products
SET collect_status = 'collecting', updated_at = ?
WHERE goods_id = ? AND deleted_at IS NULL
AND ( collect_status IN ('pending', 'failed', 'collected')
OR (collect_status = 'collecting' AND updated_at < ?) )`,
nowISO, pddGoodsID, staleBefore)
if err != nil {
return false, fmt.Errorf("标记 PDD 商品 %s 重新采集中失败: %w", pddGoodsID, err)
}
n, err := res.RowsAffected()
if err != nil {
return false, err
}
return n == 1, nil
}
// SoftDeletePddProduct 软删除。
//
// 不硬删是因为 spec_mappings 指向它,硬删会把人工攒了很久的匹配成果一起带走。