This commit is contained in:
55
scheduler.py
55
scheduler.py
@@ -2257,6 +2257,61 @@ def run_competitor_price_feeder_task():
|
||||
logging.error(f"[Scheduler] [Feeder] event_router 失敗: {_router_e}")
|
||||
|
||||
|
||||
def run_external_offer_sync_task():
|
||||
"""
|
||||
外部報價正規化同步任務(每 4 小時執行一次)
|
||||
將已確認同款的既有比價快取自動同步到 external_offers,讓 PChome 成長作戰清單
|
||||
能吃共同資料層。CSV 僅保留備援,不是日常主流程。
|
||||
"""
|
||||
try:
|
||||
from config import DATABASE_PATH
|
||||
from sqlalchemy import create_engine
|
||||
from services.external_market_offer_service import sync_legacy_momo_reference_offers
|
||||
|
||||
now_str = datetime.now(TAIPEI_TZ).strftime('%Y-%m-%d %H:%M')
|
||||
limit = int(os.getenv("EXTERNAL_OFFER_SYNC_LIMIT", "1000"))
|
||||
logging.info(f"[Scheduler] [ExternalOfferSync] 🚀 啟動外部報價自動同步 | {now_str}")
|
||||
|
||||
engine = create_engine(DATABASE_PATH)
|
||||
try:
|
||||
result = sync_legacy_momo_reference_offers(engine, limit=limit, dry_run=False)
|
||||
finally:
|
||||
engine.dispose()
|
||||
|
||||
stats = {
|
||||
"status": "Success" if result.get("success") else "Skipped",
|
||||
"candidate_count": result.get("candidate_count", 0),
|
||||
"written_count": result.get("written_count", 0),
|
||||
"source_code": result.get("source_code", "momo_reference"),
|
||||
"message": result.get("message"),
|
||||
}
|
||||
logging.info(
|
||||
"[Scheduler] [ExternalOfferSync] ✅ 完成 | candidates=%s written=%s status=%s",
|
||||
stats["candidate_count"],
|
||||
stats["written_count"],
|
||||
result.get("status"),
|
||||
)
|
||||
_save_stats('external_offer_sync', stats)
|
||||
|
||||
except Exception as e:
|
||||
import traceback as _tb
|
||||
logging.error(f"[Scheduler] [ExternalOfferSync] 🚨 任務異常 | Error: {e}")
|
||||
_save_stats('external_offer_sync', {"status": "Failed", "error": str(e)})
|
||||
try:
|
||||
from services.event_router import notify_failure
|
||||
notify_failure(
|
||||
task_name="run_external_offer_sync_task",
|
||||
error=e,
|
||||
source="Scheduler.ExternalOfferSync",
|
||||
event_type="external_offer_sync_failure",
|
||||
priority="P2",
|
||||
title="外部報價自動同步異常",
|
||||
trace=_tb.format_exc(),
|
||||
)
|
||||
except Exception as _router_e:
|
||||
logging.error(f"[Scheduler] [ExternalOfferSync] event_router 失敗: {_router_e}")
|
||||
|
||||
|
||||
def run_pchome_match_backfill_task():
|
||||
"""
|
||||
PChome 待比對商品補抓任務(每日執行)
|
||||
|
||||
Reference in New Issue
Block a user