44 lines
1.2 KiB
Python
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]))
|