Actualiza las tareas del vehículo de entrega

En este documento, se asume que conoces lo siguiente:

En una situación real de entregas a domicilio, las empresas asignan tareas de envío de entregas a conductores, que luego usan un vehículo para entregarlos al destinatario en una ubicación, como una residencia o una sala de entregas en un complejo de edificios. Tú modelar esto en Fleet Engine creando una tarea y emitiendo un vehículo de reparto de actualización, que luego actualiza la entidad del vehículo con una lista de paradas para viajes. Asignas a cada parada una lista de tareas que se deben completar en esa parada.

Puedes actualizar las tareas del vehículo en cualquier momento, pero, por lo general, esto se hace para el los siguientes propósitos:

  • Programa tareas para que se completen en un vehículo. Puedes hacerlo de las siguientes maneras: con una solicitud de actualización que agregue una nueva parada al vehículo, o bien con una actualización solicitud que agrega una tarea nueva a una parada existente.
  • Actualiza el orden de las tareas existentes asociadas con una parada del vehículo determinada.
  • Cambia la ubicación de la finalización de la tarea. De forma predeterminada, Fleet Engine marca la ubicación de finalización de la tarea como la misma que la de la parada del vehículo asociadas a la tarea. Si lo prefieres, puedes especificar ubicaciones específicas para tareas individuales. Por ejemplo, puedes tener una parada para vehículos en una zona complejo para entregar una serie de paquetes, a cada uno de los cuales se le asigna un sala de entrega de correos específica.
  • Cierra las tareas asignadas anteriormente para excluirlas de la actualización. con los datos. Consulta Cómo finalizar tareas para obtener más detalles.

Programar o modificar las tareas de entrega

Puedes programar o cambiar las tareas asignadas a un vehículo desde un servidor. o mediante el SDK del controlador si permites que el conductor administrar tareas con un dispositivo de confianza. Usa solo un método para evitar carrera y mantener una única fuente de verdad.

Para cambiar un envío de un vehículo a otro, cierra la tarea original. y recrearla antes de asignarla a un vehículo diferente. Si actualizas un vehículo de entrega para incluir una tarea que ya está asignada a un vehículo, recibirás un error.

Campos obligatorios para actualizar tareas

Esta sección documenta los campos obligatorios que se deben configurar al actualizar una tarea de una vehículo. No se proporcionan campos opcionales. El motor de flota ignora todos los demás campos. en la entidad para la actualización.

Campo obligatorioValor
remainingVehicleJourneySegments Una lista de segmentos de recorrido para las tareas en el orden en que deben ejecutarse. La primera tarea de la lista se ejecuta primero.
remainingVehicleJourneySegments[i].stop La parada de la tarea i en la lista.
remainingVehicleJourneySegments[i].stop.plannedLocation Es la ubicación planificada para la parada.
remainingVehicleJourneySegments[i].stop.tasks Una lista de tareas que se deben realizar en esta parada del vehículo.
remainingVehicleJourneySegments[i].stop.state State.NEW

Ejemplo de asignación de tareas

En los siguientes ejemplos, se muestra cómo usar la biblioteca gRPC de Java y una solicitud Llamada de REST a UpdateDeliveryVehicle para agregar dos tareas nuevas para el vehículo

gRPC

 static final String PROJECT_ID = "my-delivery-co-gcp-project";
 static final String VEHICLE_ID = "vehicle-8241890";
 static final String TASK1_ID = "task-756390";
 static final String TASK2_ID = "task-849263";

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Vehicle settings
 String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
 DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
     .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 1st stop
        .setStop(VehicleStop.newBuilder()
            .setPlannedLocation(LocationInfo.newBuilder()
                .setPoint(LatLng.newBuilder()
                    .setLatitude(37.7749)
                    .setLongitude(122.4194)))
            .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
            .setState(VehicleStop.State.NEW)))
     .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 2nd stop
        .setStop(VehicleStop.newBuilder()
            .setPlannedLocation(LocationInfo.newBuilder()
                .setPoint(LatLng.newBuilder()
                    .setLatitude(37.3382)
                    .setLongitude(121.8863)))
            .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
            .setState(VehicleStop.State.NEW)))
     .build();

 // DeliveryVehicle request
 UpdateDeliveryVehicleRequest updateDeliveryRequest =
   UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
       .setName(vehicleName)
       .setDeliveryVehicle(deliveryVehicle)
       .setUpdateMask(FieldMask.newBuilder().addPaths("remaining_vehicle_journey_segments"))
       .build();

 try {
   DeliveryVehicle updatedDeliveryVehicle =
       deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
 } catch (StatusRuntimeException e) {
   Status s = e.getStatus();
   switch (s.getCode()) {
      case NOT_FOUND:
        break;
      case PERMISSION_DENIED:
        break;
   }
   return;
 }

REST

 PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`
  • &lt;id&gt; es un identificador único para un vehículo de entrega de tu flota. para el que tienes la intención de actualizar el orden de las tareas. Es el identificador que que especificaste cuando creaste el vehículo.

  • El encabezado de la solicitud debe contener un campo Authorization con el valor Bearer <token>, donde tu servidor emite <token>. según los lineamientos descritos en Roles de cuentas de servicio y Tokens web JSON:

  • El cuerpo de la solicitud debe contener una entidad DeliveryVehicle

Comando curl de ejemplo

  # Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
  # environment
  curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
    -H "Content-type: application/json" \
    -H "Authorization: Bearer ${JWT}" \
    --data-binary @- << EOM
  {
    "remainingVehicleJourneySegments": [
      {
        "stop": {
          "state": "NEW",
          "plannedLocation": {
            "point": {
              "latitude": 37.7749,
              "longitude": -122.084061
            }
          },
          "tasks": [
            {
              "taskId": "${TASK1_ID}"
            }
          ]
        }
      },
      {
        "stop": {
          "state": "NEW",
          "plannedLocation": {
            "point": {
              "latitude": 37.3382,
              "longitude": 121.8863
            }
          },
          "tasks": [
            {
              "taskId": "${TASK2_ID}"
            }
          ]
        }
      }
    ]
  }
  EOM

¿Qué sigue?