in prototype/dispatch/order-dispatcher/src/main/java/com/aws/proto/dispatching/planner/solution/v2/SolutionConsumer.java [82:139]
public static DispatcherResult buildResult(DispatchingSolution solution, SolverStatus solverStatus, long solverDurationInMs, boolean includeEmptyDrivers) {
DispatcherResult result = new DispatcherResult();
result.problemId = solution.getId();
result.executionId = solution.getExecutionId();
result.createdAt = solution.getCreatedAt();
result.score = solution.getScore().toString();
result.state = solverStatus.name();
result.solverDurationInMs = solverDurationInMs;
List<PlanningDriver> drivers = solution.getPlanningDrivers();
if(drivers.size() > 0) {
DistanceMatrix distanceMatrix = drivers.get(0).getLocation().getDistanceMatrix();
result.distanceMatrixMetrics = new DispatcherResult.DistanceMatrixMetrics(distanceMatrix.getGeneratedTime(), distanceMatrix.dimension());
}
List<DispatcherResult.AssignedOrders> assignedOrders = new ArrayList<>();
List<String> unassigned = new ArrayList<>();
for(PlanningDriver driver : drivers) {
List<String> orderIds = new ArrayList<>();
List<DispatcherResult.Visit> visits = new ArrayList<>();
PlanningDelivery delivery = driver.getNextPlanningDelivery();
if (delivery == null && !includeEmptyDrivers) {
continue;
}
// TODO: manually putting orders to unassigned if there are more than 2 assigned to a driver
// because driver simulator at this point cannot handle more than one assigned order
int ctr = 0;
while(delivery != null) {
ctr++;
if (ctr > 1) {
unassigned.add(delivery.getOrder().getOrderId());
} else {
orderIds.add(delivery.getOrder().getOrderId());
visits.add(new DispatcherResult.Visit(delivery.getPickup()));
visits.add(new DispatcherResult.Visit(delivery.getDropoff()));
}
delivery = delivery.getNextPlanningDelivery();
}
assignedOrders.add(new DispatcherResult.AssignedOrders(
driver.getId(),
driver.getDriverIdentity(),
driver.getLocation(),
orderIds,
visits
));
}
result.assigned = assignedOrders;
// currently we don't have a mechanism to keep orders unassigned
result.unassigned = unassigned;
return result;
}