public VehicleRoutingSolution retrieveOrPrepareTripSheetData( TripSheet tripSheet, boolean create) { List<PickupPoint> pickUpPoints = getPickupPointDetails(tripSheet); Shift shift = shiftRepository.get(tripSheet.getShiftId()); Address address = new Address(); address.setId(0L); address.setAddressLine("Office"); address.setLatitude(new BigDecimal(AppConstants.OFFICE_LATITUDE)); address.setLongitude(new BigDecimal(AppConstants.OFFICE_LONGITUDE)); PickupPoint pickUpPoint = new PickupPoint(); pickUpPoint.setAddress(address); pickUpPoint.setNumberOfEmployees(0); pickUpPoints.add(0, pickUpPoint); tripSheet.setPickUpPoints(pickUpPoints); tripSheet.setShift(shift); // sort vehicles if (tripSheet.getVehicles() != null) { Collections.sort(tripSheet.getVehicles()); } tripSheet.setDistanceMatrix(addressRepository.getAddressDistanceMatrix()); VehicleRoutingSolution solution; if (create) { solution = solverManager.createSolution( tripSheet.getDate().toString() + tripSheet.getShiftId() + tripSheet.isDrop(), tripSheet); } else { solution = solverManager.retrieveOrCreateSolution( tripSheet.getDate().toString() + tripSheet.getShiftId() + tripSheet.isDrop(), tripSheet); } return solution; }