/////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////// public AssignOrdersOperation(SolverContext context, Schedule schedule, AssignOrdersParams inputParams, SolveOptions options) : base(context, schedule, options) { Debug.Assert(inputParams != null); _inputParams = inputParams; }
/// <summary> /// Adjusts VRP job request for cases when target sequence parameter is set. /// Does nothing if <paramref name="parameters"/> have no target sequence /// or order to be assigned is a violated one. /// </summary> /// <param name="request">Request to be adjusted.</param> /// <param name="parameters">Assign orders operation parameters to be /// used for adjusting the request.</param> /// <param name="violations">Collection of violations to be checked.</param> /// <exception cref="T:ESRI.ArcLogistics.Routing.RouteException">when /// <paramref name="request"/> does not contain order from /// <paramref name="parameters"/>.</exception> private void _AdjustRequestWithTargetSequence( SubmitVrpJobRequest request, AssignOrdersParams parameters, IEnumerable <Violation> violations) { Debug.Assert(request != null); Debug.Assert(parameters != null); Debug.Assert(violations != null); if (!parameters.TargetSequence.HasValue) { return; } Debug.Assert(parameters.OrdersToAssign.Count == 1); // must contain a single order Debug.Assert(parameters.TargetRoutes.Count == 1); // must contain a single route var orderToAssign = parameters.OrdersToAssign.First(); Debug.Assert(orderToAssign != null); if (violations.Any(v => v.AssociatedObject == orderToAssign)) { return; } GPFeature targetFeature; if (!_FindTargetFeature(request.Orders, orderToAssign, out targetFeature)) { throw new RouteException(Properties.Messages.Error_InternalRouteError); } // free place for new order position var targetSequence = parameters.TargetSequence.Value; Debug.Assert(targetSequence > 0); if (_HasSequence(request.Orders, targetSequence)) { _ShiftSequence(request.Orders, targetSequence); } // set assignment attributes var targetRoute = parameters.TargetRoutes.First(); Debug.Assert(targetRoute != null); targetFeature.Attributes.Set(NAAttribute.SEQUENCE, targetSequence); targetFeature.Attributes.Set(NAAttribute.ROUTE_NAME, targetRoute.Id.ToString()); targetFeature.Attributes.Set(NAAttribute.ASSIGNMENT_RULE, (int)NAOrderAssignmentRule.esriNAOrderPreserveRouteAndRelativeSequence); }
/////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////// public AssignOrdersStep2(SolverContext context, Schedule schedule, SolveRequestData reqData, AssignOrdersParams inputParams, IList <RouteResult> prevRouteResults, IList <Violation> prevViolations, SolveOptions options) : base(context, schedule, options) { _reqData = reqData; _inputParams = inputParams; _prevRouteResults = prevRouteResults; _prevViolations = prevViolations; }
public AssignOrdersOperation(SolverContext context, Schedule schedule, AssignOrdersParams inputParams, SolveOptions options, SolveRequestData reqData, AssignOrdersReqBuilder reqBuilder, List <Violation> violations) : base(context, schedule, options) { Debug.Assert(inputParams != null); Debug.Assert(reqData != null); Debug.Assert(reqBuilder != null); Debug.Assert(violations != null); _inputParams = inputParams; _reqData = reqData; _reqBuilder = reqBuilder; _violations = violations; }
public Guid AssignOrdersAsync(Schedule schedule, ICollection <Order> ordersToAssign, ICollection <Route> targetRoutes, int?targetSequence, bool keepViolatedOrdersUnassigned, SolveOptions options) { AssignOrdersParams inputParams = new AssignOrdersParams( ordersToAssign, targetRoutes, targetSequence, keepViolatedOrdersUnassigned); AssignOrdersOperation operation = new AssignOrdersOperation( _context, schedule, inputParams, options); return(_RunAsync(operation)); }