78 lines
3.2 KiB
Python
78 lines
3.2 KiB
Python
import asyncio
|
|
from sqlalchemy import select, update, func
|
|
from app.db.session import SessionLocal
|
|
from app.models.asset import AssetCatalog
|
|
from app.models.vehicle_definitions import VehicleModelDefinition, VehicleType
|
|
|
|
async def link_catalog_to_mdm():
|
|
async with SessionLocal() as db:
|
|
try:
|
|
print("🔍 Meglévő variánsok elemzése...")
|
|
|
|
# 1. Lekérjük a típusokat a gyors kereséshez
|
|
type_res = await db.execute(select(VehicleType))
|
|
types = {t.code: t.id for t in type_res.scalars().all()}
|
|
|
|
# 2. Kigyűjtjük az egyedi márkákat és modelleket a katalógusból
|
|
# Itt csoportosítunk, hogy ne legyen duplikáció
|
|
stmt = select(
|
|
AssetCatalog.make,
|
|
AssetCatalog.model,
|
|
AssetCatalog.vehicle_class
|
|
).distinct()
|
|
|
|
raw_data = await db.execute(stmt)
|
|
unique_models = raw_data.all()
|
|
|
|
print(f"📊 Találtunk {len(unique_models)} egyedi modellt. Összefésülés indul...")
|
|
|
|
linked_count = 0
|
|
for make, model, v_class in unique_models:
|
|
# Meghatározzuk a típus ID-t (alapértelmezett: car)
|
|
t_code = v_class if v_class in types else "car"
|
|
t_id = types.get(t_code)
|
|
|
|
# Keressük, létezik-e már ilyen Master rekord
|
|
# A technical_code-ot itt ideiglenesen a modell nevével töltjük,
|
|
# amíg a robot/AI nem pontosítja
|
|
master_stmt = select(VehicleModelDefinition).where(
|
|
VehicleModelDefinition.make == make,
|
|
VehicleModelDefinition.marketing_name == model
|
|
)
|
|
master_res = await db.execute(master_stmt)
|
|
master = master_res.scalar_one_or_none()
|
|
|
|
if not master:
|
|
master = VehicleModelDefinition(
|
|
make=make,
|
|
technical_code=model, # Ideiglenes
|
|
marketing_name=model,
|
|
vehicle_type=t_code,
|
|
vehicle_type_id=t_id,
|
|
status="unverified",
|
|
source="initial_linking"
|
|
)
|
|
db.add(master)
|
|
await db.flush() # Hogy megkapjuk az ID-t
|
|
|
|
# 3. Összekötjük az összes variánst ezzel a Master rekorddal
|
|
update_stmt = update(AssetCatalog).where(
|
|
AssetCatalog.make == make,
|
|
AssetCatalog.model == model
|
|
).values(master_definition_id=master.id)
|
|
|
|
await db.execute(update_stmt)
|
|
linked_count += 1
|
|
|
|
if linked_count % 100 == 0:
|
|
print(f"⏳ Feldolgozva: {linked_count} modell...")
|
|
|
|
await db.commit()
|
|
print(f"✅ Kész! {linked_count} Master rekord létrehozva és összekötve.")
|
|
|
|
except Exception as e:
|
|
await db.rollback()
|
|
print(f"❌ Hiba az összefésülésnél: {e}")
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(link_catalog_to_mdm()) |