fix: 允许已采集 PDD 商品重新采集 (#121)
This commit is contained in:
@@ -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 指向它,硬删会把人工攒了很久的匹配成果一起带走。
|
||||
|
||||
Reference in New Issue
Block a user