diff --git a/client/src/main/java/ru/trader/controllers/RouteSearchController.java b/client/src/main/java/ru/trader/controllers/RouteSearchController.java index af7a7e7..d292096 100644 --- a/client/src/main/java/ru/trader/controllers/RouteSearchController.java +++ b/client/src/main/java/ru/trader/controllers/RouteSearchController.java @@ -8,6 +8,8 @@ import ru.trader.view.support.autocomplete.AutoCompletion; import ru.trader.view.support.autocomplete.CachedSuggestionProvider; import ru.trader.view.support.autocomplete.SystemsProvider; +import java.util.Collection; +import java.util.Iterator; import java.util.Optional; public class RouteSearchController { @@ -104,11 +106,16 @@ public class RouteSearchController { specificator.setFullScan(cbFullScan.isSelected()); missionsList.getItems().forEach(m -> m.toSpecification(specificator)); market.getRoutes(f, fS, t, tS, profile.getBalance(), specificator, routes -> { + for (Iterator iterator = routes.iterator(); iterator.hasNext(); ) { + RouteModel route = iterator.next(); + Collection notAdded = route.addAll(0, missionsList.getItems()); + if (!notAdded.isEmpty()){ + iterator.remove(); + } + } Optional path = Screeners.showRouters(routes); if (path.isPresent()) { - RouteModel route = path.get(); - route.addAll(0, missionsList.getItems()); - profile.setRoute(route); + profile.setRoute(path.get()); Screeners.showTrackTab(); } }); diff --git a/client/src/main/java/ru/trader/model/RouteModel.java b/client/src/main/java/ru/trader/model/RouteModel.java index d854635..fe5e83a 100644 --- a/client/src/main/java/ru/trader/model/RouteModel.java +++ b/client/src/main/java/ru/trader/model/RouteModel.java @@ -223,20 +223,22 @@ public class RouteModel { if (offer != null){ Collection reserves = RouteFiller.getReserves(_route, offset, offer); if (!reserves.isEmpty()) { - _route.reserve(reserves); - mission.setReserves(reserves); - completeIndex = RouteReserve.getCompleteIndex(reserves, offset); - refresh(); + if (_route.reserve(reserves)){ + mission.setReserves(reserves); + completeIndex = RouteReserve.getCompleteIndex(reserves, offset); + refresh(); + } } } else if (mission.isDelivery()){ RouteReserve reserve = RouteFiller.getReserves(_route, offset, ModelFabric.get(mission.getTarget()), mission.getCount()); if (reserve != null) { - _route.reserve(reserve); - mission.setReserves(Collections.singleton(reserve)); - completeIndex = reserve.getToIndex(); - for (RouteEntryModel entry : entries) { - entry.refresh(market); + if (_route.reserve(reserve)){ + mission.setReserves(Collections.singleton(reserve)); + completeIndex = reserve.getToIndex(); + for (RouteEntryModel entry : entries) { + entry.refresh(market); + } } } } else @@ -264,17 +266,19 @@ public class RouteModel { reserves = RouteFiller.getReserves(_route, offset, offer); } if (!reserves.isEmpty()) { - _route.reserve(reserves); - mission.setReserves(reserves); - completeIndex = RouteReserve.getCompleteIndex(reserves, offset); + if (_route.reserve(reserves)){ + mission.setReserves(reserves); + completeIndex = RouteReserve.getCompleteIndex(reserves, offset); + } } } else if (mission.isDelivery()){ RouteReserve reserve = RouteFiller.getReserves(_route, offset, ModelFabric.get(mission.getTarget()), mission.getCount()); if (reserve != null) { - _route.reserve(reserve); - mission.setReserves(Collections.singleton(reserve)); - completeIndex = reserve.getToIndex(); + if (_route.reserve(reserve)){ + mission.setReserves(Collections.singleton(reserve)); + completeIndex = reserve.getToIndex(); + } } } else if (mission.isCourier()){ diff --git a/core/src/main/java/ru/trader/analysis/Route.java b/core/src/main/java/ru/trader/analysis/Route.java index 173067e..c431da1 100644 --- a/core/src/main/java/ru/trader/analysis/Route.java +++ b/core/src/main/java/ru/trader/analysis/Route.java @@ -167,22 +167,30 @@ public class Route implements Comparable { return -1; } - public void reserve(final RouteReserve reserve){ + public boolean reserve(final RouteReserve reserve){ for (Route.LoopIterator iterator = loopIterator(reserve.getFromIndex()); iterator.hasNext(); ) { RouteEntry entry = iterator.next(); if (entry.isTransit()) continue; if (iterator.getRealIndex() == reserve.getToIndex() && (reserve.getFromIndex() != reserve.getToIndex() || iterator.getIndex() > 0)) { break; } - entry.reserve(reserve.getCount(), cargo); + if (!entry.reserve(reserve.getCount(), cargo)){ + return false; + } } if (reserve.getOrder() != null) { entries.get(reserve.getFromIndex()).addOrder(reserve.getOrder()); } + return true; } - public void reserve(Collection reserves){ - reserves.forEach(this::reserve); + public boolean reserve(Collection reserves){ + for (RouteReserve reserve : reserves) { + if (!reserve(reserve)){ + return false; + } + } + return true; } public void unreserve(final RouteReserve reserve){ @@ -268,6 +276,13 @@ public class Route implements Comparable { LOG.trace("new stats profit={}, distance={}, lands={}, fuel={}, time={}", profit, distance, lands, fuel, time); } + public boolean isOverload(){ + for (RouteEntry entry : entries) { + if (entry.getCargo() > cargo) return true; + } + return false; + } + @Override public int compareTo(@NotNull Route o) { return Double.compare(getScore(), o.getScore()); diff --git a/core/src/main/java/ru/trader/analysis/RouteEntry.java b/core/src/main/java/ru/trader/analysis/RouteEntry.java index 3601fca..4864d6c 100644 --- a/core/src/main/java/ru/trader/analysis/RouteEntry.java +++ b/core/src/main/java/ru/trader/analysis/RouteEntry.java @@ -142,7 +142,7 @@ public class RouteEntry { return orders.stream().filter(o -> o.fixed).collect(Collectors.toList()); } - void reserve(final long count, final long cargo){ + boolean reserve(final long count, final long cargo){ long empty = cargo - getCargo(); long need = count - empty; if (need > 0){ @@ -159,6 +159,7 @@ public class RouteEntry { } } reserved += count; + return need <= 0; } void fill(long count){