2025-06-24 14:22:50 +02:00

44 lines
1.2 KiB
Python

from dataclasses import dataclass, field
from typing import Optional
from core import Utils
from core.Utils import initDataclass
from core.domain.map.GeoLocation import GeoLocation
from core.domain.optimization.OptimizationPoint import OptimizationPoint
from core.domain.optimization.OptimizationVehicle import OptimizationVehicle
@dataclass
class OptimizationRoute:
name: str
isExtra: bool
index: int
distance: float
duration: int
cost: float
vehicle: OptimizationVehicle
points: list[OptimizationPoint]
steps: list[GeoLocation]
hash: str = field(default_factory=str)
averageDistance: Optional[float] = None
averageDuration: Optional[int] = None
@staticmethod
def fromJson(**kwargs) -> 'OptimizationRoute':
kwargs['vehicle'] = OptimizationVehicle(**kwargs['vehicle'])
kwargs['points'] = [OptimizationPoint.fromJson(**point) for point in kwargs['points']]
kwargs['steps'] = [GeoLocation(**stepDict) for stepDict in kwargs['steps']]
return initDataclass(OptimizationRoute, **kwargs)
def setHash(self):
self.hash = self.__calculateHash()
@property
def isDirty(self):
return self.__calculateHash() != self.hash
def __calculateHash(self) -> str:
return Utils.hash("".join([str(point.crnPoint.hisa) for point in self.points]))