60 lines
2.7 KiB
Python
60 lines
2.7 KiB
Python
import asyncio
|
|
import logging
|
|
from sqlalchemy import text
|
|
from app.database import AsyncSessionLocal
|
|
|
|
logging.basicConfig(level=logging.INFO, format='%(asctime)s [OPTIMIZER] %(message)s')
|
|
logger = logging.getLogger("Efficiency-Optimizer")
|
|
|
|
async def optimize_queue():
|
|
async with AsyncSessionLocal() as db:
|
|
try:
|
|
# 1. FÁZIS: AUTO-GOLD (Ami már kész van, ne menjen AI-hoz)
|
|
# Ha az UltimateSpecs vagy az RDW már kitöltötte a lényeget, lőjük Aranyba!
|
|
logger.info("🚀 1. Fázis: Auto-Gold ellenőrzés indítása...")
|
|
auto_gold_query = text("""
|
|
UPDATE vehicle.vehicle_model_definitions
|
|
SET status = 'gold_enriched',
|
|
updated_at = NOW(),
|
|
source = source || ' + AUTO_GOLD'
|
|
WHERE status = 'awaiting_ai_synthesis'
|
|
AND power_kw > 0
|
|
AND engine_capacity > 0
|
|
AND fuel_type != 'Unknown'
|
|
AND body_type IS NOT NULL
|
|
AND trim_level != ''
|
|
RETURNING id;
|
|
""")
|
|
result = await db.execute(auto_gold_query)
|
|
logger.info(f"✅ {len(result.fetchall())} járművet automatikusan ARANY státuszba emeltem (AI megspórolva).")
|
|
|
|
# 2. FÁZIS: DEDUPLIKÁCIÓ (Katalógus összehasonlítás)
|
|
# Keressük azokat a várakozókat, amiknek már van egy ARANY párjuk
|
|
logger.info("🚀 2. Fázis: Duplikációk szűrése a katalógus alapján...")
|
|
dedup_query = text("""
|
|
UPDATE vehicle.vehicle_model_definitions AS pending
|
|
SET status = 'merged_duplicate',
|
|
updated_at = NOW()
|
|
FROM vehicle.vehicle_model_definitions AS gold
|
|
WHERE pending.status = 'awaiting_ai_synthesis'
|
|
AND gold.status = 'gold_enriched'
|
|
AND pending.make = gold.make
|
|
AND pending.normalized_name = gold.normalized_name
|
|
AND pending.year_from = gold.year_from
|
|
AND pending.fuel_type = gold.fuel_type
|
|
AND pending.market = gold.market
|
|
AND pending.id != gold.id
|
|
RETURNING pending.id;
|
|
""")
|
|
result = await db.execute(dedup_query)
|
|
logger.info(f"🗑️ {len(result.fetchall())} duplikált várakozót töröltem a sorból (Már van Arany párjuk).")
|
|
|
|
await db.commit()
|
|
logger.info("🏆 Optimalizálás befejezve. A sor megtisztítva!")
|
|
|
|
except Exception as e:
|
|
await db.rollback()
|
|
logger.error(f"❌ Hiba az optimalizálás során: {e}")
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(optimize_queue()) |