This commit is contained in:
@@ -1794,6 +1794,7 @@ class CompetitorPriceFeeder:
|
||||
skus: list,
|
||||
source: str = "pchome",
|
||||
label: str = "已確認身份價格刷新",
|
||||
allow_missing_recovery: bool = True,
|
||||
) -> FeederResult:
|
||||
start = time.time()
|
||||
|
||||
@@ -1837,6 +1838,25 @@ class CompetitorPriceFeeder:
|
||||
try:
|
||||
product = product_map.get(_product_id_key(competitor_product_id))
|
||||
if not product:
|
||||
if not allow_missing_recovery:
|
||||
self._record_match_attempt(
|
||||
sku,
|
||||
momo_name,
|
||||
momo_product_id=momo_product_id,
|
||||
momo_price=momo_price,
|
||||
search_terms=search_terms,
|
||||
candidate_count=0,
|
||||
attempt_status="refresh_no_result",
|
||||
error_message=(
|
||||
f"PChome product_id not returned: {competitor_product_id}; "
|
||||
"fresh_search_recovery_deferred"
|
||||
),
|
||||
source=source,
|
||||
)
|
||||
skipped_no += 1
|
||||
attempts_written += 1
|
||||
continue
|
||||
|
||||
recovered, recovery_terms, recovery_candidate_count = _recover_low_score_with_fresh_search(
|
||||
crawler,
|
||||
momo_name,
|
||||
@@ -2029,20 +2049,21 @@ class CompetitorPriceFeeder:
|
||||
if score < MIN_MATCH_SCORE:
|
||||
recovery_terms: list[str] = []
|
||||
recovery_candidate_count = 0
|
||||
recovered, recovery_terms, recovery_candidate_count = _recover_low_score_with_fresh_search(
|
||||
crawler,
|
||||
momo_name,
|
||||
momo_price=momo_price,
|
||||
existing_product_id=competitor_product_id,
|
||||
)
|
||||
if recovered:
|
||||
recovered_product, recovered_score, recovered_diagnostics = recovered
|
||||
if (
|
||||
recovered_score > score
|
||||
or getattr(diagnostics, "hard_veto", False)
|
||||
and not getattr(recovered_diagnostics, "hard_veto", False)
|
||||
):
|
||||
best_product, score, diagnostics = recovered_product, recovered_score, recovered_diagnostics
|
||||
if allow_missing_recovery:
|
||||
recovered, recovery_terms, recovery_candidate_count = _recover_low_score_with_fresh_search(
|
||||
crawler,
|
||||
momo_name,
|
||||
momo_price=momo_price,
|
||||
existing_product_id=competitor_product_id,
|
||||
)
|
||||
if recovered:
|
||||
recovered_product, recovered_score, recovered_diagnostics = recovered
|
||||
if (
|
||||
recovered_score > score
|
||||
or getattr(diagnostics, "hard_veto", False)
|
||||
and not getattr(recovered_diagnostics, "hard_veto", False)
|
||||
):
|
||||
best_product, score, diagnostics = recovered_product, recovered_score, recovered_diagnostics
|
||||
|
||||
if score >= MIN_MATCH_SCORE:
|
||||
extras = ["refresh_known_identity"]
|
||||
@@ -2144,7 +2165,11 @@ class CompetitorPriceFeeder:
|
||||
best_product=best_product,
|
||||
best_score=score,
|
||||
diagnostics=diagnostics,
|
||||
error_message=_format_match_diagnostics(diagnostics),
|
||||
error_message=(
|
||||
_format_match_diagnostics(diagnostics)
|
||||
if allow_missing_recovery
|
||||
else f"fresh_search_recovery_deferred; {_format_match_diagnostics(diagnostics)}"
|
||||
),
|
||||
source=source,
|
||||
)
|
||||
skipped_low += 1
|
||||
@@ -2286,7 +2311,12 @@ class CompetitorPriceFeeder:
|
||||
logger.error(f"[Feeder] 讀取過期 identity_v2 商品失敗: {e}")
|
||||
return FeederResult(0, 0, 0, 0, 1, 0.0)
|
||||
|
||||
return self._run_known_identity_refresh_items(skus, source=source, label="identity_v2 過期價格刷新")
|
||||
return self._run_known_identity_refresh_items(
|
||||
skus,
|
||||
source=source,
|
||||
label="identity_v2 過期價格刷新",
|
||||
allow_missing_recovery=False,
|
||||
)
|
||||
|
||||
def run_retryable_candidate_revalidation(
|
||||
self,
|
||||
|
||||
Reference in New Issue
Block a user