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}")