Initial commit: Robot ökoszisztéma v2.0 - Stabilizált jármű és szerviz robotok
This commit is contained in:
63
backend/app/scripts/link_catalog_to_mdm.py
Executable file
63
backend/app/scripts/link_catalog_to_mdm.py
Executable file
@@ -0,0 +1,63 @@
|
||||
# /opt/docker/dev/service_finder/backend/app/scripts/link_catalog_to_mdm.py
|
||||
import asyncio
|
||||
from sqlalchemy import select, update
|
||||
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():
|
||||
""" Összefűzi a technikai katalógust a központi Master Definíciókkal. """
|
||||
async with SessionLocal() as db:
|
||||
try:
|
||||
print("🔍 Master-Híd építése indul...")
|
||||
|
||||
# 1. Típusok betöltése
|
||||
type_res = await db.execute(select(VehicleType))
|
||||
types = {t.code: t.id for t in type_res.scalars().all()}
|
||||
|
||||
# 2. Egyedi variánsok lekérése
|
||||
stmt = select(AssetCatalog.make, AssetCatalog.model, AssetCatalog.vehicle_class).distinct()
|
||||
raw_data = await db.execute(stmt)
|
||||
unique_models = raw_data.all()
|
||||
|
||||
linked_count = 0
|
||||
for make, model, v_class in unique_models:
|
||||
t_code = v_class if v_class in types else "car"
|
||||
t_id = types.get(t_code)
|
||||
|
||||
# Master rekord keresése vagy létrehozása
|
||||
master_stmt = select(VehicleModelDefinition).where(
|
||||
VehicleModelDefinition.make == make,
|
||||
VehicleModelDefinition.marketing_name == model
|
||||
)
|
||||
master = (await db.execute(master_stmt)).scalar_one_or_none()
|
||||
|
||||
if not master:
|
||||
master = VehicleModelDefinition(
|
||||
make=make,
|
||||
technical_code=model.replace(" ", "-").lower(),
|
||||
marketing_name=model,
|
||||
vehicle_type=t_code,
|
||||
vehicle_type_id=t_id,
|
||||
status="unverified",
|
||||
source="linking_process"
|
||||
)
|
||||
db.add(master)
|
||||
await db.flush()
|
||||
|
||||
# Összekötés
|
||||
await db.execute(
|
||||
update(AssetCatalog)
|
||||
.where(AssetCatalog.make == make, AssetCatalog.model == model)
|
||||
.values(master_definition_id=master.id)
|
||||
)
|
||||
linked_count += 1
|
||||
|
||||
await db.commit()
|
||||
print(f"✅ Sikeresen összekötve: {linked_count} modell.")
|
||||
except Exception as e:
|
||||
await db.rollback()
|
||||
print(f"❌ Hiba: {e}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(link_catalog_to_mdm())
|
||||
Reference in New Issue
Block a user