Admiral/admiral-worker/cli/run_optimizationResults_migrations.py
2025-06-24 14:22:50 +02:00

59 lines
2.2 KiB
Python

from collections import defaultdict
from uuid import UUID
from app.App import App
from core.domain.map.CrnMicroUpdate import CrnMicroUpdateState, CrnMicroUpdate
from core.domain.map.CrnPoint import CrnPoint
from core.extend.logger import Progress
from core.types.Id import Id
App.init()
# ids = App.repos.optimizationResultRepo.getAllIds()
microLocations = App.repos.crnMicroUpdateRepo.getAllByState(state=CrnMicroUpdateState.POTRJENO)
ids = [Id(value=UUID('70faa8ef-83da-4b5f-9e76-84d1d5acb995'))]
posta_hisa_crn: dict[int, dict[int, (CrnPoint, CrnMicroUpdate)]] = defaultdict(dict)
hisa_micro: dict[int, CrnMicroUpdate] = {}
for m in sorted(microLocations, key=lambda x: x.createdAt):
hisa_micro[m.hisa] = m
progress = Progress("Optimization result migration", ids)
for i, id in enumerate(ids):
optimizationResult = App.repos.optimizationResultRepo.get(id=id)
opt = App.repos.optimizationRepo.get(id=optimizationResult.optimizationId)
posta = opt.posta.value
postOffice = App.repos.postOfficeRepo.get(posta=posta)
if posta not in posta_hisa_crn:
posta_hisa_crn[posta] = {crn.hisa: crn for crn in App.services.postaService.getCrnPoints(posta=posta)}
hisa_crn = posta_hisa_crn[posta]
for ri, route in enumerate(optimizationResult.routes):
for pi, point in enumerate(route.points):
point.crnPoint.attr.dostopnost = 'Kolo'
point.crnPoint.attr.namen = None
point.crnPoint.attr.nevarenPes = None
point.crnPoint.attr.dostopenNabiralnik = None
mikro = hisa_micro.get(point.crnPoint.hisa, None)
if mikro is not None:
point.crnPoint.attr.mikroLat = mikro.lat
point.crnPoint.attr.mikroLon = mikro.lon
optimizationResult.routes[ri].points[pi] = point
for pi, point in enumerate(optimizationResult.unvisited):
point.crnPoint.attr.dostopnost = 'Kolo'
point.crnPoint.attr.namen = None
point.crnPoint.attr.nevarenPes = None
point.crnPoint.attr.dostopenNabiralnik = None
mikro = hisa_micro.get(point.crnPoint.hisa, None)
if mikro is not None:
point.crnPoint.attr.mikroLat = mikro.lat
point.crnPoint.attr.mikroLon = mikro.lon
optimizationResult.unvisited[pi] = point
App.repos.optimizationResultRepo.post(optimizationResult)
progress.log(i, f"https://optdos.posta.si/optimizations/{opt.id.value}/result/{optimizationResult.id.value}")