ShipmentModel

รูปแบบการจัดส่งประกอบด้วยชุดการจัดส่งที่ต้องดำเนินการโดยยานพาหนะหลายคัน ในขณะเดียวกันก็ลดค่าใช้จ่ายโดยรวม ซึ่งเป็นผลรวมของสิ่งต่อไปนี้

  • ค่าใช้จ่ายในการกำหนดเส้นทางพาหนะ (ผลรวมของค่าใช้จ่ายต่อเวลาทั้งหมด ค่าใช้จ่ายต่อเวลาเดินทาง และค่าใช้จ่ายคงที่สำหรับยานพาหนะทุกคัน)
  • บทลงโทษด้านการจัดส่งที่ไม่สมบูรณ์
  • ต้นทุนของระยะเวลาการจัดส่งทั่วโลก
การแสดง JSON
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "globalStartTime": string,
  "globalEndTime": string,
  "globalDurationCostPerHour": number,
  "durationDistanceMatrices": [
    {
      object (DurationDistanceMatrix)
    }
  ],
  "durationDistanceMatrixSrcTags": [
    string
  ],
  "durationDistanceMatrixDstTags": [
    string
  ],
  "transitionAttributes": [
    {
      object (TransitionAttributes)
    }
  ],
  "shipmentTypeIncompatibilities": [
    {
      object (ShipmentTypeIncompatibility)
    }
  ],
  "shipmentTypeRequirements": [
    {
      object (ShipmentTypeRequirement)
    }
  ],
  "precedenceRules": [
    {
      object (PrecedenceRule)
    }
  ],
  "maxActiveVehicles": integer
}
ช่อง
shipments[]

object (Shipment)

ชุดการจัดส่งที่ต้องดำเนินการในโมเดล

vehicles[]

object (Vehicle)

ชุดยานพาหนะที่สามารถใช้ในการเข้าชม

globalStartTime

string (Timestamp format)

เวลาเริ่มต้นและสิ้นสุดโดยรวมของโมเดล: ไม่มีเวลานอกช่วงนี้ถือว่าถูกต้อง

ช่วงเวลาของโมเดลต้องน้อยกว่า 1 ปี กล่าวคือ globalEndTime และ globalStartTime ต้องอยู่ห่างกันไม่เกิน 31536000 วินาที

เมื่อใช้ช่อง cost_per_*hour คุณอาจต้องตั้งค่ากรอบเวลานี้ให้มีระยะเวลาสั้นลงเพื่อเพิ่มประสิทธิภาพ (เช่น หากคุณสร้างโมเดลวันเดียว คุณควรกำหนดขีดจำกัดเวลาทั่วโลกเป็นวันนั้น) หากไม่ได้ตั้งค่า ระบบจะใช้ 00:00:00 UTC วันที่ 1 มกราคม 1970 (เช่น seconds: 0, nanos: 0) เป็นค่าเริ่มต้น

การประทับเวลาจะอยู่ในรูปแบบ RFC3339 UTC "Zulu" ที่มีความละเอียดระดับนาโนวินาทีและมีตัวเลขที่เป็นเศษส่วนได้สูงสุด 9 หลัก ตัวอย่าง: "2014-10-02T15:01:23Z" และ "2014-10-02T15:01:23.045123456Z"

globalEndTime

string (Timestamp format)

หากไม่ได้ตั้งค่า ระบบจะใช้ 00:00:00 UTC วันที่ 1 มกราคม 1971 (เช่น วินาที 31536000, nanos: 0) เป็นค่าเริ่มต้น

การประทับเวลาจะอยู่ในรูปแบบ RFC3339 UTC "Zulu" ที่มีความละเอียดระดับนาโนวินาทีและมีตัวเลขที่เป็นเศษส่วนได้สูงสุด 9 หลัก ตัวอย่าง: "2014-10-02T15:01:23Z" และ "2014-10-02T15:01:23.045123456Z"

globalDurationCostPerHour

number

"ระยะเวลาทั่วโลก" ของแผนโดยรวมคือความแตกต่างระหว่างเวลาเริ่มต้นที่มีประสิทธิภาพเร็วที่สุดกับเวลาสิ้นสุดที่มีประสิทธิภาพล่าสุดของยานพาหนะทั้งหมด เช่น ผู้ใช้กำหนดค่าใช้จ่ายต่อชั่วโมงให้กับจำนวนนั้นได้เพื่อพยายามเพิ่มประสิทธิภาพให้งานเสร็จเร็วที่สุด เป็นต้น ค่าใช้จ่ายนี้ต้องอยู่ในหน่วยเดียวกับ Shipment.penalty_cost

durationDistanceMatrices[]

object (DurationDistanceMatrix)

ระบุระยะเวลาและเมทริกซ์ระยะทางที่ใช้ในโมเดล หากช่องนี้เว้นว่างไว้ ระบบจะใช้ Google Maps หรือระยะทางทางภูมิศาสตร์แทน ทั้งนี้ขึ้นอยู่กับค่าของช่อง useGeodesicDistances หากไม่ว่างเปล่า useGeodesicDistances ต้องไม่เป็นจริง และ durationDistanceMatrixSrcTags และ durationDistanceMatrixDstTags ต้องไม่ว่างเปล่า

ตัวอย่างการใช้

  • ตำแหน่งที่ตั้งมี 2 แห่ง คือ locA และ locB
  • ยานพาหนะ 1 คันกำลังสตาร์ทที่ locA และสิ้นสุดที่ locA
  • 1 คำขอเข้าชมการรับสินค้าที่ locB
model {
  vehicles { startTags: "locA"  endTags: "locA" }
  shipments { pickups { tags: "locB" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixDstTags: "locA"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • สถานที่มี 3 แห่ง ได้แก่ locA, locB และ locC
  • ยานพาหนะ 1 คันกำลังสตาร์ทที่ locA และสิ้นสุดที่ locB โดยใช้เมทริกซ์ "เร็ว"
  • มียานพาหนะ 1 คันกำลังสตาร์ทที่ locB และสิ้นสุดที่ locB โดยใช้เมทริกซ์ "ช้า"
  • ยานพาหนะ 1 คันกำลังสตาร์ทที่ locB และสิ้นสุดที่ locB โดยใช้เมทริกซ์ "เร็ว"
  • คำขอไปรับสินค้าที่ locC 1 รายการ
model {
  vehicles { startTags: "locA" endTags: "locB" startTags: "fast" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "slow" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "fast" }
  shipments { pickups { tags: "locC" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixSrcTags: "locC"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrixDstTags: "locC"
  durationDistanceMatrices {
    vehicleStartTag: "fast"
    rows {  # from: locA
      durations { seconds: 1000 } meters: 2000 # to: locB
      durations { seconds: 600 }  meters: 1000 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }   meters: 0    # to: locB
      durations { seconds: 700 } meters: 1200 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 702 } meters: 1190 # to: locB
      durations { seconds: 0 }   meters: 0    # to: locC
    }
  }
  durationDistanceMatrices {
    vehicleStartTag: "slow"
    rows {  # from: locA
      durations { seconds: 1800 } meters: 2001 # to: locB
      durations { seconds: 900 }  meters: 1002 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }    meters: 0    # to: locB
      durations { seconds: 1000 } meters: 1202 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 1001 } meters: 1195 # to: locB
      durations { seconds: 0 }    meters: 0    # to: locC
    }
  }
}
durationDistanceMatrixSrcTags[]

string

แท็กกำหนดแหล่งที่มาของระยะเวลาและเมทริกซ์ระยะทาง durationDistanceMatrices(i).rows(j) กำหนดระยะเวลาและระยะทางจากการเข้าชมด้วยแท็ก durationDistanceMatrixSrcTags(j) ไปยังการเข้าชมอื่นๆ ในเมทริกซ์ 1

แท็กจะสอดคล้องกับ VisitRequest.tags หรือ Vehicle.start_tags VisitRequest หรือ Vehicle ที่ระบุต้องตรงกับแท็กเดียวในช่องนี้ โปรดทราบว่าแท็กต้นทาง ปลายทาง และเมทริกซ์ของ Vehicle อาจเหมือนกัน ในทำนองเดียวกัน แท็กต้นทางและปลายทางของ VisitRequest อาจเหมือนกัน แท็กทั้งหมดต้องไม่ซ้ำกันและต้องไม่มีสตริงที่ว่างเปล่า หากช่องนี้มีข้อมูล ค่า durationDistanceMatrices ต้องไม่ว่างเปล่า

durationDistanceMatrixDstTags[]

string

แท็กที่กำหนดปลายทางของระยะเวลาและเมทริกซ์ระยะทาง durationDistanceMatrices(i).rows(j).durations(k) (resp. durationDistanceMatrices(i).rows(j).meters(k)) กำหนดระยะเวลา (ระยะทาง) ของการเดินทางจากการเข้าชมที่มีแท็ก durationDistanceMatrixSrcTags(j) ไปยังการเข้าชมที่มีแท็ก durationDistanceMatrixDstTags(k) ในเมทริกซ์ 1

แท็กจะสอดคล้องกับ VisitRequest.tags หรือ Vehicle.start_tags VisitRequest หรือ Vehicle ที่ระบุต้องตรงกับแท็กเดียวในช่องนี้ โปรดทราบว่าแท็กต้นทาง ปลายทาง และเมทริกซ์ของ Vehicle อาจเหมือนกัน ในทำนองเดียวกัน แท็กต้นทางและปลายทางของ VisitRequest อาจเหมือนกัน แท็กทั้งหมดต้องไม่ซ้ำกันและต้องไม่มีสตริงที่ว่างเปล่า หากช่องนี้มีข้อมูล ค่า durationDistanceMatrices ต้องไม่ว่างเปล่า

transitionAttributes[]

object (TransitionAttributes)

เพิ่มแอตทริบิวต์การเปลี่ยนลงในโมเดลแล้ว

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

ชุด shipping_types ที่ใช้ร่วมกันไม่ได้ (ดู ShipmentTypeIncompatibility)

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

ชุดข้อกำหนดของ shipmentType (ดู ShipmentTypeRequirement)

precedenceRules[]

object (PrecedenceRule)

ชุดกฎลำดับความสำคัญซึ่งต้องบังคับใช้ในโมเดล

maxActiveVehicles

integer

จำกัดจำนวนยานพาหนะที่ใช้งานอยู่สูงสุด ยานพาหนะจอดอยู่หากเส้นทางมีการจัดส่งอย่างน้อย 1 ครั้ง ซึ่งสามารถใช้เพื่อจำกัดจำนวนเส้นทางในกรณีที่มีผู้ขับขี่น้อยกว่ายานพาหนะและยานพาหนะจำนวนมากเป็นยานพาหนะต่างกัน จากนั้นการเพิ่มประสิทธิภาพจะเลือกชุดย่อยของยานพาหนะที่ดีที่สุดที่จะใช้ ต้องเป็นเชิงบวกอย่างเคร่งครัด

การจัดส่ง

การจัดส่งสินค้ารายการเดียวจากการรับสินค้าไปยังสินค้าจัดส่งหนึ่งชิ้น หากต้องการให้ถือว่าการจัดส่งดำเนินการสำเร็จ ยานพาหนะที่ไม่ซ้ำกันต้องไปที่จุดรับเองแห่งใดแห่งหนึ่ง (และลดขีดจำกัดสำรองให้สอดคล้องกัน) จากนั้นจึงไปยังสถานที่นำส่งแห่งใดแห่งหนึ่งในภายหลัง (และจะเพิ่มขีดจำกัดสำรองอีกครั้งตามความเหมาะสม)

การแสดง JSON
{
  "displayName": string,
  "pickups": [
    {
      object (VisitRequest)
    }
  ],
  "deliveries": [
    {
      object (VisitRequest)
    }
  ],
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "allowedVehicleIndices": [
    integer
  ],
  "costsPerVehicle": [
    number
  ],
  "costsPerVehicleIndices": [
    integer
  ],
  "pickupToDeliveryAbsoluteDetourLimit": string,
  "pickupToDeliveryTimeLimit": string,
  "shipmentType": string,
  "label": string,
  "ignore": boolean,
  "penaltyCost": number,
  "pickupToDeliveryRelativeDetourLimit": number
}
ช่อง
displayName

string

ชื่อที่แสดงที่ผู้ใช้กำหนดของการจัดส่ง โดยมีความยาวได้สูงสุด 63 อักขระและใช้อักขระ UTF-8 ได้

pickups[]

object (VisitRequest)

ชุดตัวเลือกการรับสินค้าที่เชื่อมโยงกับการจัดส่ง หากไม่ระบุ ยานพาหนะจะต้องไปยังสถานที่ตั้งที่เกี่ยวข้องกับการนำส่งเท่านั้น

deliveries[]

object (VisitRequest)

ชุดทางเลือกในการนำส่งที่เชื่อมโยงกับการจัดส่ง หากไม่ระบุ ยานพาหนะจะต้องไปยังสถานที่ตั้งที่เกี่ยวข้องกับการรับสินค้าเท่านั้น

loadDemands

map (key: string, value: object (Load))

น้ำหนักของการขนส่ง (เช่น น้ำหนัก ปริมาณ จำนวนพาเลต ฯลฯ) คีย์ในแผนที่ควรเป็นตัวระบุที่อธิบายประเภทของการโหลดที่เกี่ยวข้อง และควรรวมหน่วยไว้ด้วย ยกตัวอย่างเช่น "weight_kg", "Volume_gallons", "pallet_count" ฯลฯ หากคีย์ที่ระบุไม่ปรากฏในแผนที่ โหลดที่เกี่ยวข้องจะถือเป็นค่าว่าง

ออบเจ็กต์ที่มีรายการคู่ "key": value ตัวอย่าง: { "name": "wrench", "mass": "1.3kg", "count": "3" }

allowedVehicleIndices[]

integer

ชุดยานพาหนะที่สามารถดำเนินการจัดส่งนี้ได้ หากปล่อยว่างไว้ ยานพาหนะทุกคันอาจทำงานได้ ระบบระบุยานพาหนะตามดัชนีไว้ในรายชื่อvehiclesของShipmentModel

costsPerVehicle[]

number

ระบุค่าใช้จ่ายที่เกิดขึ้นเมื่อยานพาหนะแต่ละคันได้รับการจัดส่งนี้ หากระบุไว้ ไฟล์จะต้องมีอย่างใดอย่างหนึ่งต่อไปนี้

  • จำนวนองค์ประกอบเท่ากับ costsPerVehicleIndices costsPerVehicle[i] สอดคล้องกับพาหนะ costsPerVehicleIndices[i] ของรุ่น
  • มีจำนวนองค์ประกอบเท่ากับที่มีในรุ่นดังกล่าว องค์ประกอบที่ i สอดคล้องกับยานพาหนะ #i ของรุ่นดังกล่าว

ค่าใช้จ่ายเหล่านี้ต้องอยู่ในหน่วยเดียวกับ penaltyCost และต้องไม่เป็นค่าลบ ปล่อยช่องนี้ว่างไว้ หากไม่มีค่าใช้จ่ายดังกล่าว

costsPerVehicleIndices[]

integer

ดัชนียานพาหนะที่ costsPerVehicle นำไปใช้ หากเว้นว่างไว้ ข้อมูลนั้นต้องมีจำนวนองค์ประกอบเท่ากับ costsPerVehicle ไม่สามารถระบุดัชนีรถได้มากกว่า 1 ครั้ง หากไม่รวมยานพาหนะจาก costsPerVehicleIndices จะมีต้นทุนเป็น 0

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

ระบุเวลาเปลี่ยนเส้นทางสัมบูรณ์สูงสุดเทียบกับเส้นทางที่สั้นที่สุดจากการรับสินค้าจนถึงการนำส่ง หากระบุ ค่านั้นต้องไม่ติดลบและการจัดส่งต้องมีการรับสินค้าและการนำส่งเป็นอย่างน้อย

เช่น ระบุระยะเวลาที่สั้นที่สุดในการเดินทางจากตัวเลือกการรับสินค้าที่เลือกไว้ไปยังทางเลือกการจัดส่งที่เลือกโดยตรง จากนั้นการตั้งค่า pickupToDeliveryAbsoluteDetourLimit จะบังคับใช้สิ่งต่อไปนี้

startTime(delivery) - startTime(pickup) <=
t + pickupToDeliveryAbsoluteDetourLimit

หากระบุทั้งขีดจำกัดแบบสัมพัทธ์และสัมบูรณ์ในการจัดส่งเดียวกัน ระบบจะใช้ขีดจำกัดของข้อจำกัดที่มากขึ้นสำหรับคู่สินค้าที่จะมารับ/นำส่งแต่ละคู่ ตั้งแต่วันที่ 10/10/2017 เป็นต้นไป ระบบจะรองรับการเปลี่ยนเส้นทางในกรณีที่ระยะเวลาการเดินทางไม่ได้ขึ้นอยู่กับยานพาหนะเท่านั้น

ระยะเวลาเป็นวินาทีที่มีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" เช่น "3.5s"

pickupToDeliveryTimeLimit

string (Duration format)

ระบุระยะเวลาสูงสุดตั้งแต่เริ่มรับสินค้าไปจนถึงเวลาเริ่มนำส่งพัสดุ หากระบุ ค่านั้นต้องไม่ติดลบและการจัดส่งต้องมีการรับสินค้าและการนำส่งเป็นอย่างน้อย ข้อมูลนี้ไม่ได้ขึ้นอยู่กับทางเลือกต่างๆ ที่เราเลือกใช้สำหรับการมารับที่ร้านและจัดส่ง หรือขึ้นอยู่กับความเร็วของยานพาหนะ สามารถระบุร่วมกับข้อจำกัดทางอ้อมสูงสุด: โซลูชันจะเป็นไปตามข้อกำหนดทั้ง 2 อย่าง

ระยะเวลาเป็นวินาทีที่มีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" เช่น "3.5s"

shipmentType

string

สตริงที่ไม่ว่างเปล่าที่ระบุ "ประเภท" สำหรับการจัดส่งนี้ ฟีเจอร์นี้สามารถใช้เพื่อกำหนดความไม่เข้ากันหรือข้อกำหนดระหว่าง shipment_types (ดู shipmentTypeIncompatibilities ถึง shipmentTypeRequirements ใน ShipmentModel)

แตกต่างจาก visitTypes ที่ระบุไว้สำหรับการเข้าชมครั้งเดียว: การรับสินค้า/การนำส่งทั้งหมดที่เป็นของการจัดส่งเดียวกันจะใช้ shipmentType เดียวกัน

label

string

ระบุป้ายกำกับสำหรับการจัดส่งนี้ ป้ายกำกับนี้มีการรายงานในคำตอบใน shipmentLabel ของ ShipmentRoute.Visit ที่เกี่ยวข้อง

ignore

boolean

หากเป็นจริง ให้ข้ามการจัดส่งนี้ แต่อย่าใช้ penaltyCost

การละเว้นการจัดส่งจะทำให้เกิดข้อผิดพลาดในการตรวจสอบเมื่อมี shipmentTypeRequirements ในโมเดล

อนุญาตให้เพิกเฉยต่อการจัดส่งที่ดำเนินการในinjectedFirstSolutionRoutesหรือinjectedSolutionConstraint เครื่องมือแก้โจทย์จะนำการเข้าชมรับสินค้า/นำส่งที่เกี่ยวข้องออกจากเส้นทางที่ดำเนินการอยู่ precedenceRules ที่อ้างอิงการจัดส่งที่ละเว้นไปก็จะไม่มีผลเช่นกัน

penaltyCost

number

หากการจัดส่งไม่เสร็จสมบูรณ์ ค่าปรับนี้จะรวมอยู่ในค่าใช้จ่ายโดยรวมของเส้นทาง ระบบจะถือว่าการจัดส่งเสร็จสมบูรณ์หากมีการไปรับสินค้าที่ร้านหรือจัดส่งถึงบ้าน ค่าใช้จ่ายอาจแสดงในหน่วยเดียวกันกับที่ใช้สำหรับช่องที่เกี่ยวข้องกับค่าใช้จ่ายอื่นๆ ทั้งหมดในโมเดล และต้องเป็นค่าบวก

สําคัญ: หากไม่ได้ระบุบทลงโทษนี้ จะถือว่าไม่มีที่สิ้นสุด กล่าวคือ ต้องดําเนินการจัดส่งให้เสร็จสมบูรณ์

pickupToDeliveryRelativeDetourLimit

number

ระบุเวลาทางอ้อมสูงสุดเมื่อเทียบกับเส้นทางที่สั้นที่สุดจากการรับสินค้าไปจนถึงการจัดส่ง หากระบุ ค่านั้นต้องไม่ติดลบและการจัดส่งต้องมีการรับสินค้าและการนำส่งเป็นอย่างน้อย

เช่น ระบุระยะเวลาที่สั้นที่สุดในการเดินทางจากตัวเลือกการรับสินค้าที่เลือกไว้ไปยังทางเลือกการจัดส่งที่เลือกโดยตรง จากนั้นการตั้งค่า pickupToDeliveryRelativeDetourLimit จะบังคับใช้สิ่งต่อไปนี้

startTime(delivery) - startTime(pickup) <=
std::ceil(t * (1.0 + pickupToDeliveryRelativeDetourLimit))

หากระบุทั้งขีดจำกัดแบบสัมพัทธ์และสัมบูรณ์ในการจัดส่งเดียวกัน ระบบจะใช้ขีดจำกัดของข้อจำกัดที่มากขึ้นสำหรับคู่สินค้าที่จะมารับ/นำส่งแต่ละคู่ ตั้งแต่วันที่ 10/10/2017 เป็นต้นไป ระบบจะรองรับการเปลี่ยนเส้นทางในกรณีที่ระยะเวลาการเดินทางไม่ได้ขึ้นอยู่กับยานพาหนะเท่านั้น

VisitRequest

ขอเข้าชมในยานพาหนะได้ด้วย โดยมีการระบุตำแหน่งทางภูมิศาสตร์ (หรือ 2 ตำแหน่ง ดูด้านล่าง) เวลาเปิดและปิดซึ่งแสดงเป็นกรอบเวลา และระยะเวลาการให้บริการ (เวลาที่ยานพาหนะใช้เมื่อมาถึงเพื่อไปรับหรือส่งคืนสินค้า)

การแสดง JSON
{
  "arrivalLocation": {
    object (LatLng)
  },
  "arrivalWaypoint": {
    object (Waypoint)
  },
  "departureLocation": {
    object (LatLng)
  },
  "departureWaypoint": {
    object (Waypoint)
  },
  "tags": [
    string
  ],
  "timeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "duration": string,
  "cost": number,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "visitTypes": [
    string
  ],
  "label": string
}
ช่อง
arrivalLocation

object (LatLng)

ตำแหน่งทางภูมิศาสตร์ที่ยานพาหนะมาถึงเมื่อปฏิบัติVisitRequest หากรูปแบบการจัดส่งมีเมทริกซ์ระยะทางของระยะเวลา ก็ต้องไม่ระบุ arrivalLocation

arrivalWaypoint

object (Waypoint)

จุดอ้างอิงที่ยานพาหนะมาถึงเมื่อออกVisitRequest หากรูปแบบการจัดส่งมีเมทริกซ์ระยะทางของระยะเวลา ก็ต้องไม่ระบุ arrivalWaypoint

departureLocation

object (LatLng)

ตำแหน่งทางภูมิศาสตร์ที่พาหนะออกเดินทางหลังจาก VisitRequest นี้เสร็จสมบูรณ์ ละเว้นได้หากเหมือนกับ arrivalLocation หากรูปแบบการจัดส่งมีเมทริกซ์ระยะทางของระยะเวลา ก็ต้องไม่ระบุ departureLocation

departureWaypoint

object (Waypoint)

จุดอ้างอิงที่ยานพาหนะจะออกหลังจากเสร็จสิ้น VisitRequest นี้ ละเว้นได้หากเหมือนกับ arrivalWaypoint หากรูปแบบการจัดส่งมีเมทริกซ์ระยะทางของระยะเวลา ก็ต้องไม่ระบุ departureWaypoint

tags[]

string

ระบุแท็กที่แนบมากับคำขอการเข้าชม ไม่อนุญาตให้มีสตริงว่างหรือซ้ำกัน

timeWindows[]

object (TimeWindow)

กรอบเวลาที่จํากัดเวลาถึงที่การเข้าชม โปรดทราบว่ายานพาหนะอาจออกเดินทางนอกกรอบเวลาถึง เช่น เวลาถึง + ระยะเวลาไม่จำเป็นต้องอยู่ในกรอบเวลา ซึ่งอาจส่งผลให้ต้องใช้เวลารอหากยานพาหนะมาถึงก่อน TimeWindow.start_time

ไม่มี TimeWindow หมายความว่าพาหนะสามารถเดินทางได้ทุกเมื่อ

กรอบเวลาต้องไม่ต่อเนื่อง กล่าวคือ ไม่มีกรอบเวลาต้องทับซ้อนหรืออยู่ติดกันและต้องเรียงกันมากขึ้น

ตั้งค่า costPerHourAfterSoftEndTime และ softEndTime ได้ในกรณีที่มีกรอบเวลาเดียวเท่านั้น

duration

string (Duration format)

ระยะเวลาการเข้าชม เช่น เวลาที่รถใช้ระหว่างขาเข้าและขาออก (หากต้องการรวมกับระยะเวลารอที่เป็นไปได้ โปรดดู timeWindows)

ระยะเวลาเป็นวินาทีที่มีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" เช่น "3.5s"

cost

number

ค่าใช้จ่ายในการให้บริการคำขอเยี่ยมชมนี้บนเส้นทางสำหรับยานพาหนะ ซึ่งสามารถใช้เพื่อชำระค่าใช้จ่ายที่แตกต่างกันสำหรับการมารับที่ร้านหรือการจัดส่งแต่ละรายการ ค่าใช้จ่ายนี้ต้องอยู่ในหน่วยเดียวกับ Shipment.penalty_cost และต้องไม่เป็นค่าลบ

loadDemands

map (key: string, value: object (Load))

ความต้องการโหลดของคำขอการเข้าชมนี้ ซึ่งเหมือนกับช่อง Shipment.load_demands ยกเว้นว่าจะใช้กับ VisitRequest นี้เท่านั้นแทนที่จะเป็น Shipment ทั้งช่อง ความต้องการที่ระบุที่นี่จะเพิ่มไปยังความต้องการที่ระบุไว้ในShipment.load_demands

ออบเจ็กต์ที่มีรายการคู่ "key": value ตัวอย่าง: { "name": "wrench", "mass": "1.3kg", "count": "3" }

visitTypes[]

string

ระบุประเภทการเข้าชม ซึ่งอาจใช้ในการจัดสรรเวลาเพิ่มเติมที่ต้องใช้ในการเดินทางไปยังยานพาหนะนี้ให้เสร็จสมบูรณ์ (ดู Vehicle.extra_visit_duration_for_visit_type)

ประเภทหนึ่งๆ จะแสดงได้เพียงครั้งเดียวเท่านั้น

label

string

ระบุป้ายกำกับสำหรับ VisitRequest นี้ ป้ายกำกับนี้ได้รับการรายงานในการตอบกลับเป็น visitLabel ใน ShipmentRoute.Visit ที่เกี่ยวข้อง

LatLng

วัตถุที่แสดงคู่ละติจูด/ลองจิจูด ค่านี้แสดงเป็นเลขคู่คู่แทนองศาละติจูดและลองจิจูดองศา ออบเจ็กต์นี้ต้องเป็นไปตาม มาตรฐาน WGS84 เว้นแต่จะระบุไว้เป็นอย่างอื่น ค่าต้องอยู่ภายในช่วงมาตรฐาน

การแสดง JSON
{
  "latitude": number,
  "longitude": number
}
ช่อง
latitude

number

ละติจูดเป็นองศา ค่าต้องอยู่ในช่วง [-90.0, +90.0]

longitude

number

ลองจิจูด หน่วยเป็นองศา ค่าต้องอยู่ในช่วง [-180.0, +180.0]

จุดบอกทาง

ล้อมรอบจุดอ้างอิง จุดอ้างอิงจะระบุตำแหน่งขาเข้าและขาออกของ ReachRequests รวมถึงตำแหน่งเริ่มต้นและสิ้นสุดของยานพาหนะ

การแสดง JSON
{
  "sideOfRoad": boolean,

  // Union field location_type can be only one of the following:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of list of possible types for union field location_type.
}
ช่อง
sideOfRoad

boolean

ไม่บังคับ ระบุว่าตำแหน่งจุดอ้างอิงนี้ต้องการให้รถจอดที่ฝั่งใดฝั่งหนึ่งของถนน เมื่อคุณกำหนดค่านี้ เส้นทางจะผ่านตำแหน่งเพื่อให้รถสามารถหยุดที่ด้านข้างถนนที่ตำแหน่งดังกล่าวมีความคลาดเคลื่อนจากกึ่งกลางของถนน ตัวเลือกนี้ใช้ไม่ได้กับโหมดการเดินทาง "เดินเท้า"

ฟิลด์สหภาพ location_type วิธีต่างๆ ในการนำเสนอสถานที่ location_type ต้องเป็นค่าใดค่าหนึ่งต่อไปนี้เท่านั้น
location

object (Location)

จุดที่ระบุโดยใช้พิกัดทางภูมิศาสตร์ รวมถึงส่วนหัวที่ไม่บังคับ

placeId

string

รหัสสถานที่ของจุดที่น่าสนใจที่เชื่อมโยงกับการชี้ทาง

ตำแหน่ง

มีการล้อมรอบสถานที่ตั้ง (จุดทางภูมิศาสตร์ และหัวข้อที่ไม่บังคับ)

การแสดง JSON
{
  "latLng": {
    object (LatLng)
  },
  "heading": integer
}
ช่อง
latLng

object (LatLng)

พิกัดทางภูมิศาสตร์ของจุดอ้างอิง

heading

integer

ทิศทางของเข็มทิศที่เชื่อมโยงกับทิศทางการเคลื่อนที่ของการจราจร ค่านี้ใช้เพื่อระบุด้านข้างของถนนที่จะใช้สำหรับการไปรับและส่งคืน ค่าส่วนหัวอาจอยู่ระหว่าง 0 ถึง 360 โดย 0 ระบุทิศทางของทิศเหนือ และ 90 ระบุทิศทางของ "ตะวันออกเฉียงเหนือ" ฯลฯ

TimeWindow

กรอบเวลาจะจํากัดเวลาของเหตุการณ์ เช่น เวลาที่มาถึงเมื่อเข้าชม หรือเวลาเริ่มต้นและสิ้นสุดของยานพาหนะ

ขอบเขตของกรอบเวลาแบบเข้มงวด startTime และ endTime จะบังคับใช้เวลาแรกสุดและล่าสุดของเหตุการณ์เพื่อให้ startTime <= event_time <= endTime ขอบเขตล่างของกรอบเวลาชั่วคราว softStartTime แสดงค่ากำหนดของเหตุการณ์ให้เกิดขึ้นที่หรือหลังจาก softStartTime โดยระบุต้นทุนตามสัดส่วนของระยะเวลาก่อน softStartTime ที่เหตุการณ์จะเกิดขึ้น ขอบเขตบนของกรอบเวลาชั่วคราว softEndTime จะแสดงค่ากําหนดให้เหตุการณ์เกิดขึ้นในหรือก่อน softEndTime โดยทําให้ต้นทุนเป็นสัดส่วนกับระยะเวลาหลังจาก softEndTime ที่เกิดเหตุการณ์ startTime, endTime, softStartTime และ softEndTime ควรอยู่ภายในขีดจำกัดเวลาทั่วโลก (ดู ShipmentModel.global_start_time และ ShipmentModel.global_end_time) และควรเป็นไปตามข้อกำหนดต่อไปนี้

  0 <= `startTime` <= `softStartTime` <= `endTime` and
  0 <= `startTime` <= `softEndTime` <= `endTime`.
การแสดง JSON
{
  "startTime": string,
  "endTime": string,
  "softStartTime": string,
  "softEndTime": string,
  "costPerHourBeforeSoftStartTime": number,
  "costPerHourAfterSoftEndTime": number
}
ช่อง
startTime

string (Timestamp format)

เวลาเริ่มต้นของกรอบเวลาที่ยากลำบาก หากไม่ระบุ ระบบจะตั้งค่าเป็น ShipmentModel.global_start_time

การประทับเวลาจะอยู่ในรูปแบบ RFC3339 UTC "Zulu" ที่มีความละเอียดระดับนาโนวินาทีและมีตัวเลขที่เป็นเศษส่วนได้สูงสุด 9 หลัก ตัวอย่าง: "2014-10-02T15:01:23Z" และ "2014-10-02T15:01:23.045123456Z"

endTime

string (Timestamp format)

เวลาสิ้นสุดของกรอบเวลาที่ยากลำบาก หากไม่ระบุ ระบบจะตั้งค่าเป็น ShipmentModel.global_end_time

การประทับเวลาจะอยู่ในรูปแบบ RFC3339 UTC "Zulu" ที่มีความละเอียดระดับนาโนวินาทีและมีตัวเลขที่เป็นเศษส่วนได้สูงสุด 9 หลัก ตัวอย่าง: "2014-10-02T15:01:23Z" และ "2014-10-02T15:01:23.045123456Z"

softStartTime

string (Timestamp format)

เวลาเริ่มต้นแบบซอฟต์สตาร์ทของกรอบเวลา

การประทับเวลาจะอยู่ในรูปแบบ RFC3339 UTC "Zulu" ที่มีความละเอียดระดับนาโนวินาทีและมีตัวเลขที่เป็นเศษส่วนได้สูงสุด 9 หลัก ตัวอย่าง: "2014-10-02T15:01:23Z" และ "2014-10-02T15:01:23.045123456Z"

softEndTime

string (Timestamp format)

เวลาสิ้นสุดแบบนุ่มนวลของกรอบเวลา

การประทับเวลาจะอยู่ในรูปแบบ RFC3339 UTC "Zulu" ที่มีความละเอียดระดับนาโนวินาทีและมีตัวเลขที่เป็นเศษส่วนได้สูงสุด 9 หลัก ตัวอย่าง: "2014-10-02T15:01:23Z" และ "2014-10-02T15:01:23.045123456Z"

costPerHourBeforeSoftStartTime

number

ค่าใช้จ่ายต่อชั่วโมงที่เพิ่มลงในค่าใช้จ่ายอื่นๆ ในโมเดลหากเหตุการณ์เกิดขึ้นก่อน softStartTime โดยคำนวณจาก

   max(0, softStartTime - t.seconds)
                          * costPerHourBeforeSoftStartTime / 3600,
t being the time of the event.

ค่าใช้จ่ายนี้ต้องเป็นบวกและสามารถตั้งค่าช่องนี้ได้ก็ต่อเมื่อมีการตั้งค่า softStartTime แล้วเท่านั้น

costPerHourAfterSoftEndTime

number

ค่าใช้จ่ายต่อชั่วโมงที่เพิ่มลงในค่าใช้จ่ายอื่นๆ ในโมเดล หากเหตุการณ์เกิดขึ้นหลังจาก softEndTime โดยคํานวณดังนี้

   max(0, t.seconds - softEndTime.seconds)
                    * costPerHourAfterSoftEndTime / 3600,
t being the time of the event.

ค่าใช้จ่ายนี้ต้องเป็นค่าบวก และจะตั้งค่าช่องนี้ได้ก็ต่อเมื่อได้ตั้งค่า softEndTime ไว้เท่านั้น

ยานพาหนะ

สร้างโมเดลยานพาหนะที่มีปัญหาเกี่ยวกับการจัดส่ง การแก้ไขปัญหาเกี่ยวกับการจัดส่งจะสร้างเส้นทางที่เริ่มจาก startLocation และสิ้นสุดที่ endLocation สำหรับยานพาหนะนี้ เส้นทางคือลำดับการเข้าชม (ดู ShipmentRoute)

การแสดง JSON
{
  "displayName": string,
  "travelMode": enum (TravelMode),
  "startLocation": {
    object (LatLng)
  },
  "startWaypoint": {
    object (Waypoint)
  },
  "endLocation": {
    object (LatLng)
  },
  "endWaypoint": {
    object (Waypoint)
  },
  "startTags": [
    string
  ],
  "endTags": [
    string
  ],
  "startTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "endTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "unloadingPolicy": enum (UnloadingPolicy),
  "loadLimits": {
    string: {
      object (LoadLimit)
    },
    ...
  },
  "costPerHour": number,
  "costPerTraveledHour": number,
  "costPerKilometer": number,
  "fixedCost": number,
  "usedIfRouteIsEmpty": boolean,
  "routeDurationLimit": {
    object (DurationLimit)
  },
  "travelDurationLimit": {
    object (DurationLimit)
  },
  "routeDistanceLimit": {
    object (DistanceLimit)
  },
  "extraVisitDurationForVisitType": {
    string: string,
    ...
  },
  "breakRule": {
    object (BreakRule)
  },
  "label": string,
  "ignore": boolean,
  "travelDurationMultiple": number
}
ช่อง
displayName

string

ชื่อที่แสดงของยานพาหนะที่ผู้ใช้กำหนด โดยมีความยาวได้สูงสุด 63 อักขระและใช้อักขระ UTF-8 ได้

travelMode

enum (TravelMode)

รูปแบบการเดินทางซึ่งส่งผลต่อถนนที่รถวิ่งอยู่และความเร็ว ดู travelDurationMultiple เพิ่มเติม

startLocation

object (LatLng)

สถานที่ตั้งทางภูมิศาสตร์ที่ยานพาหนะสตาร์ทก่อนไปรับการจัดส่ง หากไม่ระบุ รถจะสตาร์ทตั้งแต่การมารับครั้งแรก หากรูปแบบการจัดส่งมีระยะเวลาและเมทริกซ์ระยะทาง ก็ต้องไม่ระบุ startLocation

startWaypoint

object (Waypoint)

จุดอ้างอิงที่แสดงสถานที่ตั้งทางภูมิศาสตร์ที่ยานพาหนะสตาร์ทก่อนไปรับการจัดส่ง หากไม่ได้ระบุทั้ง startWaypoint และ startLocation ยานพาหนะจะสตาร์ทรถตอนมารับเองเป็นครั้งแรก หากรูปแบบการจัดส่งมีระยะเวลาและเมทริกซ์ระยะทาง ก็ต้องไม่ระบุ startWaypoint

endLocation

object (LatLng)

สถานที่ตั้งทางภูมิศาสตร์ที่ยานพาหนะสิ้นสุดหลังจากสิ้นสุด VisitRequest สุดท้าย หากไม่ระบุ ShipmentRoute ของยานพาหนะจะสิ้นสุดทันทีเมื่อเดินทางถึง VisitRequest ท้ายสุด หากรูปแบบการจัดส่งมีระยะเวลาและเมทริกซ์ระยะทาง ก็ต้องไม่ระบุ endLocation

endWaypoint

object (Waypoint)

จุดอ้างอิงที่แสดงสถานที่ตั้งทางภูมิศาสตร์ที่ยานพาหนะสิ้นสุดหลังจากสิ้นสุด VisitRequest สุดท้ายแล้ว หากไม่ได้ระบุทั้ง endWaypoint และ endLocation ShipmentRoute ของยานพาหนะจะสิ้นสุดทันทีเมื่อเสร็จสิ้น VisitRequest สุดท้ายของยานพาหนะ หากรูปแบบการจัดส่งมีระยะเวลาและเมทริกซ์ระยะทาง ก็ต้องไม่ระบุ endWaypoint

startTags[]

string

ระบุแท็กที่ติดอยู่กับจุดเริ่มต้นของเส้นทางของยานพาหนะ

ไม่อนุญาตให้มีสตริงว่างหรือซ้ำกัน

endTags[]

string

ระบุแท็กที่ติดอยู่ท้ายเส้นทางของยานพาหนะ

ไม่อนุญาตให้มีสตริงว่างหรือซ้ำกัน

startTimeWindows[]

object (TimeWindow)

กรอบเวลาที่รถอาจออกเดินทางจากตำแหน่งเริ่มต้น โดยต้องอยู่ในขีดจำกัดเวลาทั่วโลก (ดู ShipmentModel.global_* ช่อง) หากไม่ระบุ จะไม่มีข้อจำกัดอื่นนอกเหนือจากขีดจำกัดเวลาทั่วโลก

กรอบเวลาที่อยู่ในช่องที่ซ้ำเดียวกันต้องไม่ต่อเนื่องกัน กล่าวคือ ไม่มีกรอบเวลาดังกล่าวทับซ้อนหรืออยู่ติดกันได้ และต้องไม่อยู่ตามลำดับเวลา

ตั้งค่า costPerHourAfterSoftEndTime และ softEndTime ได้ในกรณีที่มีกรอบเวลาเดียวเท่านั้น

endTimeWindows[]

object (TimeWindow)

กรอบเวลาที่ยานพาหนะอาจจะมาถึงปลายทาง โดยต้องอยู่ในขีดจำกัดเวลาทั่วโลก (ดู ShipmentModel.global_* ช่อง) หากไม่ระบุ จะไม่มีข้อจำกัดอื่นนอกเหนือจากขีดจำกัดเวลาทั่วโลก

กรอบเวลาที่อยู่ในช่องที่ซ้ำเดียวกันต้องไม่ต่อเนื่องกัน กล่าวคือ ไม่มีกรอบเวลาดังกล่าวทับซ้อนหรืออยู่ติดกันได้ และต้องไม่อยู่ตามลำดับเวลา

ตั้งค่า costPerHourAfterSoftEndTime และ softEndTime ได้ในกรณีที่มีกรอบเวลาเดียวเท่านั้น

unloadingPolicy

enum (UnloadingPolicy)

บังคับใช้นโยบายการยกเลิกการโหลดบนยานพาหนะแล้ว

loadLimits

map (key: string, value: object (LoadLimit))

ความจุของยานพาหนะ (เช่น น้ำหนัก ปริมาตร จำนวนพาเลต) คีย์ในแผนที่คือตัวระบุประเภทการโหลด ซึ่งสอดคล้องกับคีย์ของช่อง Shipment.load_demands หากไม่มีคีย์ที่ระบุจากแผนที่นี้ จะถือว่าความจุที่เกี่ยวข้องไม่มีขีดจำกัด

ออบเจ็กต์ที่มีรายการคู่ "key": value ตัวอย่าง: { "name": "wrench", "mass": "1.3kg", "count": "3" }

costPerHour

number

ค่าใช้จ่ายสำหรับยานพาหนะ: ค่าใช้จ่ายทั้งหมดรวมกันและต้องอยู่ในหน่วยเดียวกับ Shipment.penalty_cost

ค่าใช้จ่ายต่อชั่วโมงของเส้นทางพาหนะ ค่าใช้จ่ายนี้จะใช้กับเวลารวมที่ใช้เส้นทางนั้นๆ ซึ่งรวมถึงเวลาในการเดินทาง เวลาที่รอ และเวลาในการเยี่ยมชม การใช้ costPerHour แทนการใช้เพียง costPerTraveledHour อาจทำให้เวลาในการตอบสนองเพิ่มขึ้น

costPerTraveledHour

number

ต้นทุนต่อชั่วโมงในการเดินทางของเส้นทางยานพาหนะ ค่าใช้จ่ายนี้มีผลเฉพาะกับระยะเวลาเดินทางที่ใช้เส้นทาง (ซึ่งรายงานในเดือนShipmentRoute.transitions) โดยไม่รวมเวลารอและเวลาในการเข้าชม

costPerKilometer

number

ค่าใช้จ่ายต่อกิโลเมตรของเส้นทางยานพาหนะ ค่าใช้จ่ายนี้ใช้กับระยะทางที่รายงานใน ShipmentRoute.transitions และไม่มีผลกับระยะทางที่เดินทางโดยนัยจาก arrivalLocation ถึง departureLocation ของ VisitRequest เดียว

fixedCost

number

จะมีค่าบริการคงที่หากใช้ยานพาหนะนี้ในการจัดส่ง

usedIfRouteIsEmpty

boolean

ช่องนี้ใช้กับยานพาหนะเมื่อเส้นทางไม่ได้ให้บริการการจัดส่งเท่านั้น ซึ่งจะระบุว่าในกรณีนี้ ระบบควรพิจารณาว่ายานพาหนะเป็นรถมือสองหรือไม่

หากเป็นจริง พาหนะจะเดินทางจากต้นทางถึงปลายทางแม้ว่าจะไม่ได้ให้บริการส่งสินค้าก็ตาม และคำนึงถึงค่าใช้จ่ายด้านเวลาและระยะทางที่เกิดขึ้นเมื่อเริ่มต้น --> การเดินทางเมื่อสิ้นสุดจะนำมาพิจารณาด้วย

มิเช่นนั้น จะไม่เดินทางจากต้นทางถึงปลายทาง และไม่มีกำหนดเวลา breakRule หรือล่าช้า (จาก TransitionAttributes) สำหรับยานพาหนะคันนี้ ในกรณีนี้ ShipmentRoute ของรถไม่มีข้อมูลใดๆ ยกเว้นดัชนีและป้ายกำกับของยานพาหนะ

routeDurationLimit

object (DurationLimit)

ขีดจำกัดมีผลกับระยะเวลารวมของเส้นทางที่ใช้ยานพาหนะ ในOptimizeToursResponseหนึ่งๆ ระยะเวลาใช้เส้นทางของยานพาหนะจะต่างระหว่าง vehicleEndTime กับ vehicleStartTime

travelDurationLimit

object (DurationLimit)

ขีดจำกัดมีผลกับระยะเวลาเดินทางของเส้นทางรถยนต์ ใน OptimizeToursResponse หนึ่งๆ ระยะเวลาการเดินทางตามเส้นทางคือผลรวมของ transitions.travel_duration ทั้งหมด

routeDistanceLimit

object (DistanceLimit)

ขีดจำกัดมีผลกับระยะทางรวมของเส้นทางรถ ใน OptimizeToursResponse ที่ระบุ ระยะทางของเส้นทางคือผลรวมของ transitions.travel_distance_meters ทั้งหมด

extraVisitDurationForVisitType

map (key: string, value: string (Duration format))

ระบุแมปจากสตริง trafficTypes ไปจนถึงระยะเวลา ระยะเวลาเป็นเวลานอกเหนือจาก VisitRequest.duration ที่จะถูกนําไปยังการเข้าชมที่มี visitTypes ที่ระบุ ระยะเวลาการเข้าชมเพิ่มเติมนี้จะเพิ่มค่าใช้จ่ายหากระบุ costPerHour ไว้ คีย์ (เช่น visitTypes) ต้องไม่ว่างเปล่า

หากคำขอเข้าชมมีหลายประเภท ระบบจะเพิ่มระยะเวลาสำหรับแต่ละประเภทในแผนที่

ออบเจ็กต์ที่มีรายการคู่ "key": value ตัวอย่าง: { "name": "wrench", "mass": "1.3kg", "count": "3" }

breakRule

object (BreakRule)

อธิบายกำหนดเวลาพักที่จะบังคับใช้กับยานพาหนะนี้ หากเว้นว่างไว้ จะไม่มีการกำหนดเวลาพักสำหรับยานพาหนะคันนี้

label

string

ระบุป้ายกำกับสำหรับยานพาหนะนี้ ป้ายกำกับนี้มีการรายงานในคำตอบเป็น vehicleLabel ของ ShipmentRoute ที่เกี่ยวข้อง

ignore

boolean

หากเป็น "จริง" usedIfRouteIsEmpty ต้องเป็น "เท็จ" และยานพาหนะคันนี้จะยังคงไม่มีการใช้งาน

หากดำเนินการจัดส่งโดยยานพาหนะที่ละเว้นใน injectedFirstSolutionRoutes ระบบจะข้ามการจัดส่งดังกล่าวในโซลูชันแรก แต่จะดำเนินการในการตอบสนองได้โดยไม่เสียค่าใช้จ่าย

หากดำเนินการจัดส่งโดยยานพาหนะที่เพิกเฉยใน injectedSolutionConstraint และการมารับ/นำส่งที่เกี่ยวข้องจะถูกจํากัดให้อยู่บนยานพาหนะนั้นต่อไป (เช่น ไม่ผ่อนปรนให้ถึงระดับ RELAX_ALL_AFTER_THRESHOLD) ระบบจะข้ามคำขอนั้นในการตอบกลับ หากการจัดส่งมีช่อง allowedVehicleIndices ที่ไม่ว่างเปล่าและระบบจะไม่สนใจยานพาหนะที่อนุญาตทั้งหมด ระบบจะข้ามการดำเนินการดังกล่าวในการตอบกลับ

travelDurationMultiple

number

ระบุตัวคูณที่ใช้ซ้ำเพื่อเพิ่มหรือลดระยะเวลาเดินทางของยานพาหนะนี้ได้ ตัวอย่างเช่น การตั้งค่าเป็น 2.0 หมายความว่ายานพาหนะคันนี้จะช้ากว่าและมีระยะเวลาเดินทางมากกว่ายานพาหนะมาตรฐานถึง 2 เท่า หลายรายการนี้ไม่มีผลต่อระยะเวลาการเข้าชม และจะมีผลต่อค่าใช้จ่ายหากระบุ costPerHour หรือ costPerTraveledHour โดยต้องอยู่ในช่วง [0.001, 1000.0] หากไม่ได้ตั้งค่า ยานพาหนะจะเป็นแบบมาตรฐาน และหลายรายการนี้จะถือว่าเป็น 1.0

คำเตือน: เวลาเดินทางจะปัดเศษเป็นวินาทีที่ใกล้เคียงที่สุดหลังจากใช้ตัวคูณนี้ แต่ก่อนที่จะดำเนินการตัวเลข ดังนั้น การปัดเศษหลายครั้งอาจทำให้ความแม่นยําลดลง

โปรดดูextraVisitDurationForVisitTypeด้านล่าง

TravelMode

รูปแบบการเดินทางที่สามารถใช้โดยรถยนต์

โหมดเหล่านี้ควรเป็นส่วนหนึ่งของโหมดการเดินทางของ Google Maps Platform Routes ที่ต้องการ ดูใน https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode

Enum
TRAVEL_MODE_UNSPECIFIED โหมดการเดินทางที่ไม่ระบุ เทียบเท่ากับ DRIVING
DRIVING รูปแบบการเดินทางที่สอดคล้องกับเส้นทางการขับขี่ (รถยนต์, ...)
WALKING รูปแบบการเดินทางที่สอดคล้องกับเส้นทางเดินเท้า

UnloadingPolicy

นโยบายเกี่ยวกับวิธียกเลิกการขนย้ายยานพาหนะ มีผลเฉพาะกับการจัดส่งที่มีทั้งการรับสินค้าและการจัดส่ง

การจัดส่งอื่นๆ ไม่มีค่าใช้จ่ายใดๆ เกิดขึ้นได้ทุกที่ในเส้นทางที่ไม่ขึ้นกับ unloadingPolicy

Enum
UNLOADING_POLICY_UNSPECIFIED นโยบายการยกเลิกการโหลดที่ไม่ได้ระบุ การจัดส่งต้องเกิดขึ้นหลังจากการมารับสินค้าที่เกี่ยวข้องเท่านั้น
LAST_IN_FIRST_OUT ต้องนำส่งสินค้าตามลําดับการรับสินค้า
FIRST_IN_FIRST_OUT การนำส่งต้องดำเนินการในลำดับเดียวกับการรับสินค้า

LoadLimit

กำหนดขีดจำกัดการบรรทุกที่ใช้กับยานพาหนะ เช่น "รถบรรทุกนี้รับน้ำหนักได้สูงสุด 3, 500 กก. เท่านั้น" ดูloadLimits

การแสดง JSON
{
  "softMaxLoad": string,
  "costPerUnitAboveSoftMax": number,
  "startLoadInterval": {
    object (Interval)
  },
  "endLoadInterval": {
    object (Interval)
  },
  "maxLoad": string
}
ช่อง
softMaxLoad

string (int64 format)

ขีดจำกัดการโหลดแบบไม่เข้มงวด ดูcostPerUnitAboveSoftMax

costPerUnitAboveSoftMax

number

หากน้ำหนักบรรทุกเกิน softMaxLoad ตลอดเส้นทางของรถคันนี้ จะมีค่าปรับตามต้นทุน 1 ครั้งต่อคัน ได้แก่ (น้ำหนักบรรทุก - softMaxLoad) * costPerUnitAboveSoftMax ค่าใช้จ่ายทั้งหมดจะรวมกันและต้องอยู่ในหน่วยเดียวกับ Shipment.penalty_cost

startLoadInterval

object (Interval)

ช่วงการบรรทุกที่ยอมรับได้ของยานพาหนะที่จุดเริ่มต้นของเส้นทาง

endLoadInterval

object (Interval)

ช่วงการบรรทุกที่ยอมรับได้ของยานพาหนะเมื่อถึงจุดสิ้นสุดของเส้นทาง

maxLoad

string (int64 format)

จำนวนการโหลดสูงสุดที่ยอมรับได้

ช่วงเวลา

ระยะเวลาของการโหลดที่ยอมรับได้

การแสดง JSON
{
  "min": string,
  "max": string
}
ช่อง
min

string (int64 format)

การโหลดขั้นต่ำที่ยอมรับได้ ต้องเท่ากับ ≥ 0 หากระบุไว้ทั้ง 2 แบบ min ต้องเท่ากับ ≤ max

max

string (int64 format)

น้ำหนักสูงสุดที่ยอมรับได้ ต้องเท่ากับ ≥ 0 หากไม่ระบุ ข้อความนี้จะไม่มีการจำกัดการโหลดสูงสุด หากระบุไว้ทั้ง 2 แบบ min ต้องเท่ากับ ≤ max

DurationLimit

ขีดจำกัดที่กำหนดระยะเวลาสูงสุดของเส้นทางของยานพาหนะ อาจแข็งหรืออ่อนก็ได้

เมื่อมีการกำหนดช่องขีดจำกัด Soft จะต้องกำหนดทั้งเกณฑ์ Soft Max และค่าใช้จ่ายที่เกี่ยวข้องร่วมกัน

การแสดง JSON
{
  "maxDuration": string,
  "softMaxDuration": string,
  "quadraticSoftMaxDuration": string,
  "costPerHourAfterSoftMax": number,
  "costPerSquareHourAfterQuadraticSoftMax": number
}
ช่อง
maxDuration

string (Duration format)

ขีดจำกัดแบบเข้มงวดจะจำกัดระยะเวลาสูงสุดเป็น maxDuration

ระยะเวลาเป็นวินาทีที่มีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" เช่น "3.5s"

softMaxDuration

string (Duration format)

ขีดจำกัดแบบไม่เข้มงวดที่บังคับใช้ขีดจำกัดระยะเวลาสูงสุด แต่หากมีการละเมิดจะทำให้เส้นทางนั้นเสียค่าใช้จ่าย ค่าใช้จ่ายนี้จะรวมกันกับค่าใช้จ่ายอื่นๆ ที่กำหนดไว้ในโมเดลโดยใช้หน่วยเดียวกัน

หากกำหนดไว้ softMaxDuration ต้องไม่เป็นค่าลบ หากกำหนด maxDuration ด้วย softMaxDuration ต้องน้อยกว่า maxDuration

ระยะเวลาเป็นวินาทีที่มีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" เช่น "3.5s"

quadraticSoftMaxDuration

string (Duration format)

ขีดจำกัดแบบไม่เข้มงวดที่บังคับใช้ระยะเวลาสูงสุด แต่การละเมิดจะทำให้เส้นทางนั้นมีค่าใช้จ่ายเป็นเลขกำลังสองในช่วงเวลาดังกล่าว ค่าใช้จ่ายนี้จะรวมกันกับค่าใช้จ่ายอื่นๆ ที่กำหนดไว้ในโมเดลโดยใช้หน่วยเดียวกัน

หากกำหนดไว้ quadraticSoftMaxDuration ต้องไม่เป็นค่าลบ หากกำหนด maxDuration ไว้ด้วย quadraticSoftMaxDuration ต้องน้อยกว่า maxDuration และความแตกต่างต้องไม่เกิน 1 วัน

maxDuration - quadraticSoftMaxDuration <= 86400 seconds

ระยะเวลาเป็นวินาทีที่มีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" เช่น "3.5s"

costPerHourAfterSoftMax

number

จะมีค่าใช้จ่ายต่อชั่วโมงหากละเมิดเกณฑ์ softMaxDuration ค่าใช้จ่ายเพิ่มเติมจะเป็น 0 หากระยะเวลาต่ำกว่าเกณฑ์ ไม่เช่นนั้น ค่าใช้จ่ายจะขึ้นอยู่กับระยะเวลาดังนี้

  costPerHourAfterSoftMax * (duration - softMaxDuration)

ค่าใช้จ่ายต้องไม่ติดลบ

costPerSquareHourAfterQuadraticSoftMax

number

ค่าใช้จ่ายต่อตารางชั่วโมงที่เกิดขึ้นหากละเมิดเกณฑ์ quadraticSoftMaxDuration

ค่าใช้จ่ายเพิ่มเติมจะเป็น 0 หากระยะเวลาต่ำกว่าเกณฑ์ ไม่เช่นนั้น ค่าใช้จ่ายจะขึ้นอยู่กับระยะเวลาดังนี้

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

ค่าใช้จ่ายต้องไม่ติดลบ

DistanceLimit

ขีดจำกัดเป็นตัวกำหนดระยะทางสูงสุดที่เดินทางได้ อาจแข็งหรืออ่อนก็ได้

หากกำหนดขีดจำกัดรอง ต้องกำหนดทั้ง softMaxMeters และ costPerKilometerAboveSoftMax และไม่เป็นค่าลบ

การแสดง JSON
{
  "maxMeters": string,
  "softMaxMeters": string,
  "costPerKilometerAboveSoftMax": number
}
ช่อง
maxMeters

string (int64 format)

ขีดจำกัดแบบเข้มงวดจะจํากัดระยะทางที่ไม่เกิน maxMeters ขีดจำกัดต้องไม่ติดลบ

softMaxMeters

string (int64 format)

ค่าจำกัดชั่วคราวที่ไม่ได้บังคับใช้ขีดจำกัดระยะทางสูงสุด แต่หากมีการละเมิดจะส่งผลให้เกิดค่าใช้จ่ายที่บวกกับค่าใช้จ่ายอื่นๆ ที่กำหนดไว้ในโมเดลด้วยหน่วยเดียวกัน

หาก softMaxMeters กำหนดไว้ต้องน้อยกว่า maxMeters และต้องไม่เป็นค่าลบ

costPerKilometerAboveSoftMax

number

ต้นทุนต่อกิโลเมตรที่เกิดขึ้นหากระยะทางเกินขีดจํากัด softMaxMeters ค่าใช้จ่ายเพิ่มเติมจะเป็น 0 หากระยะทางต่ำกว่าขีดจำกัด ไม่เช่นนั้นสูตรที่ใช้คำนวณต้นทุนจะเป็นดังนี้

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

ค่าใช้จ่ายต้องไม่ติดลบ

BreakRule

กฎในการสร้างช่วงพักสำหรับยานพาหนะ (เช่น ช่วงพักกลางวัน) ช่วงพักคือระยะเวลาที่ต่อเนื่องกันระหว่างที่พาหนะไม่มีการใช้งานที่ตำแหน่งปัจจุบันและไม่สามารถเยี่ยมชมได้ เวลาพักอาจเกิดเหตุการณ์ต่อไปนี้

  • ระหว่างการเดินทางระหว่างการเข้าชม 2 ครั้ง (ซึ่งรวมถึงเวลาที่อยู่ก่อนหรือหลังการเข้าชม แต่ไม่ใช่ระหว่างการเข้าชม) ซึ่งในกรณีนี้จะเป็นการขยายเวลาขนส่งในระหว่างการเข้าชมนั้นๆ
  • หรือก่อนที่รถจะสตาร์ท (รถอาจไม่สตาร์ทระหว่างหยุดพัก) ซึ่งในกรณีนี้จะไม่มีผลต่อเวลาเริ่มต้นของรถ
  • หรือหลังสิ้นสุดยานพาหนะ (ด้วยเวลาสิ้นสุดของยานพาหนะ)
การแสดง JSON
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
ช่อง
breakRequests[]

object (BreakRequest)

ลำดับของช่วงพัก ดูข้อความ BreakRequest

frequencyConstraints[]

object (FrequencyConstraint)

อาจมี FrequencyConstraint หลายรายการ คำตอบทั้งหมดจะต้องเป็นไปตามBreakRequestของBreakRuleนี้ โปรดดูFrequencyConstraint

BreakRequest

คุณต้องทราบลำดับของการพัก (เช่น หมายเลขและลำดับ) ที่ใช้กับยานพาหนะแต่ละคันล่วงหน้า BreakRequest ที่ซ้ำจะกำหนดลำดับดังกล่าว ตามลำดับที่ต้องแสดง กรอบเวลา (earliestStartTime / latestStartTime) อาจซ้อนทับกัน แต่ต้องเข้ากันได้กับคำสั่งซื้อ (เลือกไว้)

การแสดง JSON
{
  "earliestStartTime": string,
  "latestStartTime": string,
  "minDuration": string
}
ช่อง
earliestStartTime

string (Timestamp format)

ต้องระบุ ขอบเขตล่าง (รวม) เมื่อเริ่มต้นช่วงพัก

การประทับเวลาจะอยู่ในรูปแบบ RFC3339 UTC "Zulu" ที่มีความละเอียดระดับนาโนวินาทีและมีตัวเลขที่เป็นเศษส่วนได้สูงสุด 9 หลัก ตัวอย่าง: "2014-10-02T15:01:23Z" และ "2014-10-02T15:01:23.045123456Z"

latestStartTime

string (Timestamp format)

ต้องระบุ ขอบเขตบน (รวม) เมื่อเริ่มต้นช่วงพัก

การประทับเวลาจะอยู่ในรูปแบบ RFC3339 UTC "Zulu" ที่มีความละเอียดระดับนาโนวินาทีและมีตัวเลขที่เป็นเศษส่วนได้สูงสุด 9 หลัก ตัวอย่าง: "2014-10-02T15:01:23Z" และ "2014-10-02T15:01:23.045123456Z"

minDuration

string (Duration format)

ต้องระบุ ระยะเวลาขั้นต่ำของช่วงพัก ต้องเป็นค่าบวก

ระยะเวลาเป็นวินาทีที่มีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" เช่น "3.5s"

FrequencyConstraint

เราอาจจำกัดความถี่และระยะเวลาของช่วงพักที่ระบุไว้ข้างต้นด้วยการบังคับใช้ความถี่ช่วงพักขั้นต่ำ เช่น "ต้องมีช่วงพักอย่างน้อย 1 ชั่วโมงทุก 12 ชั่วโมง" สมมติว่าค่านี้แปลได้ว่า "ภายในกรอบเวลาการเลื่อนที่ 12 ชม. ต้องมีช่วงพักอย่างน้อย 1 ชั่วโมงอย่างน้อย 1 ชั่วโมง" ตัวอย่างนั้นจะแปลค่าเป็น FrequencyConstraint ต่อไปนี้

{
   minBreakDuration { seconds: 3600 }         # 1 hour.
   maxInterBreakDuration { seconds: 39600 }  # 11 hours (12 - 1 = 11).
}

เวลาและระยะเวลาของช่วงพักในโซลูชันจะเป็นไปตามข้อจำกัดดังกล่าวทั้งหมด นอกเหนือจากกรอบเวลาและระยะเวลาขั้นต่ำที่ระบุไว้ใน BreakRequest แล้ว

FrequencyConstraint ในทางปฏิบัติอาจมีผลกับช่วงพักโฆษณาที่ไม่ต่อเนื่อง ตัวอย่างเช่น กำหนดเวลาต่อไปนี้เป็นไปตามตัวอย่าง "1h ทุก 12h"

  04:00 vehicle start
   .. performing travel and visits ..
  09:00 1 hour break
  10:00 end of the break
   .. performing travel and visits ..
  12:00 20-min lunch break
  12:20 end of the break
   .. performing travel and visits ..
  21:00 1 hour break
  22:00 end of the break
   .. performing travel and visits ..
  23:59 vehicle end
การแสดง JSON
{
  "minBreakDuration": string,
  "maxInterBreakDuration": string
}
ช่อง
minBreakDuration

string (Duration format)

ต้องระบุ ระยะเวลาช่วงพักขั้นต่ำสำหรับข้อจำกัดนี้ ไม่ใช่ค่าลบ ดูคำอธิบายของ FrequencyConstraint

ระยะเวลาเป็นวินาทีที่มีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" เช่น "3.5s"

maxInterBreakDuration

string (Duration format)

ต้องระบุ ช่วงเวลาสูงสุดที่อนุญาตของช่วงเวลาใดก็ได้ในเส้นทางที่ไม่มีช่วงพักของ duration >= minBreakDuration อย่างน้อยบางส่วน ต้องเป็นค่าบวก

ระยะเวลาเป็นวินาทีที่มีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" เช่น "3.5s"

DurationDistanceMatrix

ระบุระยะเวลาและเมทริกซ์ระยะทางจากตำแหน่งการเยี่ยมชมและตำแหน่งเริ่มต้นของรถเพื่อไปยังสถานที่สุดท้ายของรถ

การแสดง JSON
{
  "rows": [
    {
      object (Row)
    }
  ],
  "vehicleStartTag": string
}
ช่อง
rows[]

object (Row)

ระบุแถวของระยะเวลาและเมทริกซ์ระยะทาง ต้องมีองค์ประกอบเท่ากับ ShipmentModel.duration_distance_matrix_src_tags

vehicleStartTag

string

แท็กระบุว่ายานพาหนะใดที่ใช้ระยะเวลานี้และเมตริกระยะทางนี้ หากเว้นว่างไว้ การตั้งค่านี้จะมีผลกับยานพาหนะทั้งหมด และจะมีเมทริกซ์ได้เพียงรายการเดียว

การสตาร์ทรถแต่ละครั้งต้องตรงกับเมทริกซ์ 1 ตัวเท่านั้น เช่น ช่อง startTags ช่องใดช่องหนึ่งต้องตรงกับ vehicleStartTag ของเมทริกซ์ (และเมทริกซ์ดังกล่าวเท่านั้น)

เมทริกซ์ทั้งหมดต้องมี vehicleStartTag ต่างกัน

แถว

ระบุแถวของเมทริกซ์ระยะเวลาและระยะทาง

การแสดง JSON
{
  "durations": [
    string
  ],
  "meters": [
    number
  ]
}
ช่อง
durations[]

string (Duration format)

ค่าระยะเวลาของแถวหนึ่งๆ ต้องมีองค์ประกอบเท่ากับ ShipmentModel.duration_distance_matrix_dst_tags

ระยะเวลาเป็นวินาทีที่มีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" เช่น "3.5s"

meters[]

number

ค่าระยะทางสำหรับแถวที่กำหนด หากไม่มีค่าใช้จ่ายหรือข้อจํากัดอ้างอิงถึงระยะทางในโมเดล คุณสามารถเว้นว่างไว้ได้ ไม่เช่นนั้นต้องมีองค์ประกอบมากเท่ากับ durations

TransitionAttributes

ระบุแอตทริบิวต์ของการเปลี่ยนระหว่างการเข้าชม 2 ครั้งติดต่อกันบนเส้นทาง TransitionAttributes หลายรายการอาจมีผลกับการเปลี่ยนเดียวกัน ในกรณีนั้น ค่าใช้จ่ายเพิ่มเติมทั้งหมดจะรวมกันและมีข้อจํากัดหรือขีดจำกัดที่เข้มงวดที่สุด (ตามความหมาย "และ" ตามธรรมชาติ)

การแสดง JSON
{
  "srcTag": string,
  "excludedSrcTag": string,
  "dstTag": string,
  "excludedDstTag": string,
  "cost": number,
  "costPerKilometer": number,
  "distanceLimit": {
    object (DistanceLimit)
  },
  "delay": string
}
ช่อง
srcTag

string

แท็กที่กำหนดชุดของ (src->dst) การเปลี่ยนแอตทริบิวต์เหล่านี้จะมีผล

การเยี่ยมชมต้นทางหรือการสตาร์ทรถตรงกับ VisitRequest.tags หรือ Vehicle.start_tags ของเส้นทางนั้น มี srcTag หรือไม่มี excludedSrcTag (ขึ้นอยู่กับว่าฟิลด์ใดใน 2 ช่องนี้ไม่ว่างเปล่า)

excludedSrcTag

string

ดูsrcTag ต้องระบุ srcTag และ excludedSrcTag อย่างน้อย 1 รายการ

dstTag

string

การเข้าชมปลายทางหรือจุดสิ้นสุดของพาหนะตรงกับ VisitRequest.tags หรือ Vehicle.end_tags ของรถประกอบด้วย dstTag หรือไม่มี excludedDstTag (ขึ้นอยู่กับว่าฟิลด์ใดใน 2 ฟิลด์นี้ไม่ว่างเปล่า)

excludedDstTag

string

ดูdstTag ต้องระบุ dstTag และ excludedDstTag อย่างน้อย 1 รายการ

cost

number

ระบุค่าใช้จ่ายในการทำการเปลี่ยนแปลงนี้ นี่คือหน่วยเดียวกับค่าใช้จ่ายอื่นๆ ทั้งหมดในโมเดลและต้องไม่เป็นค่าลบ โดยจะมีผลกับค่าใช้จ่ายอื่นๆ ทั้งหมดที่มีอยู่

costPerKilometer

number

ระบุต้นทุนต่อกิโลเมตรที่ใช้กับระยะทางที่เดินทางในระหว่างดําเนินการเปลี่ยนนี้ โดยจะรวมกันเป็น Vehicle.cost_per_kilometer ที่ระบุไว้บนยานพาหนะ

distanceLimit

object (DistanceLimit)

ระบุการจำกัดระยะทางในการเดินทางขณะดำเนินการเปลี่ยนนี้

ตั้งแต่วันที่ 06/06/2021 เป็นต้นไป ระบบจะรองรับเฉพาะขีดจำกัดคำขอชั่วคราวเท่านั้น

delay

string (Duration format)

ระบุการหน่วงเวลาที่เกิดขึ้นเมื่อดำเนินการเปลี่ยน

ความล่าช้านี้จะเกิดขึ้นเสมอหลังจากสิ้นสุดการเข้าชมต้นทางและก่อนเริ่มต้นการเข้าชมปลายทาง

ระยะเวลาเป็นวินาทีที่มีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" เช่น "3.5s"

ShipmentTypeIncompatibility

ระบุความไม่เข้ากันระหว่างการจัดส่งโดยขึ้นอยู่กับประเภทการจัดส่ง ลักษณะที่ปรากฏของการจัดส่งที่เข้ากันไม่ได้ในเส้นทางเดียวกันถูกจำกัดตามโหมดความไม่เข้ากัน

การแสดง JSON
{
  "types": [
    string
  ],
  "incompatibilityMode": enum (IncompatibilityMode)
}
ช่อง
types[]

string

รายการประเภทที่ใช้ร่วมกันไม่ได้ การจัดส่ง 2 รายการที่มี shipment_types ต่างกันในแต่ละรายการที่ "ใช้ร่วมกันไม่ได้"

incompatibilityMode

enum (IncompatibilityMode)

ใช้โหมดกับความเข้ากันไม่ได้แล้ว

IncompatibilityMode

โหมดที่กำหนดวิธีจำกัดลักษณะที่ปรากฏของการจัดส่งที่เข้ากันไม่ได้ในเส้นทางเดียวกัน

Enum
INCOMPATIBILITY_MODE_UNSPECIFIED โหมดความไม่เข้ากันที่ไม่ได้ระบุ คุณไม่ควรใช้ค่านี้
NOT_PERFORMED_BY_SAME_VEHICLE ในโหมดนี้ การจัดส่ง 2 รายการที่มีประเภทที่ใช้ร่วมกันไม่ได้จะใช้ยานพาหนะคันเดียวกันไม่ได้
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

สำหรับการจัดส่ง 2 รายการที่มีประเภทที่เข้ากันไม่ได้กับ NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY ในโหมดความเข้ากันได้

  • หากทั้ง 2 บริการเป็นการรับสินค้าเท่านั้น (ไม่มีการนำส่ง) หรือการนำส่งเท่านั้น (ไม่มีการมารับสินค้า) ลูกค้าจะใช้ยานพาหนะคันเดียวกันไม่ได้
  • หากการจัดส่งชิ้นใดชิ้นหนึ่งมีการนำส่งและอีกชิ้นหนึ่งมารับ ทั้ง 2 ชิ้นสามารถใช้ยานพาหนะคันเดียวกันได้หากนำส่งสินค้าเก่าก่อน แล้วลูกค้าจะมารับสินค้าในภายหลัง

ShipmentTypeRequirement

ระบุข้อกำหนดระหว่างการจัดส่งตามประเภทการจัดส่ง รายละเอียดของข้อกำหนดจะกำหนดโดยโหมดข้อกำหนด

การแสดง JSON
{
  "requiredShipmentTypeAlternatives": [
    string
  ],
  "dependentShipmentTypes": [
    string
  ],
  "requirementMode": enum (RequirementMode)
}
ช่อง
requiredShipmentTypeAlternatives[]

string

รายการประเภทการจัดส่งทางเลือกที่ dependentShipmentTypes กำหนด

dependentShipmentTypes[]

string

การจัดส่งทั้งหมดที่มีประเภทในช่อง dependentShipmentTypes ต้องมีการจัดส่งประเภท requiredShipmentTypeAlternatives อย่างน้อย 1 ครั้งสำหรับการเข้าชมในเส้นทางเดียวกัน

หมายเหตุ: ไม่อนุญาตให้ใช้ข้อกำหนดชุดที่ shipmentType พึ่งพาตัวเอง

requirementMode

enum (RequirementMode)

ใช้โหมดกับข้อกำหนดแล้ว

RequirementMode

รูปแบบที่กำหนดลักษณะของการจัดส่งที่ต้องพึ่งพาบนเส้นทาง

Enum
REQUIREMENT_MODE_UNSPECIFIED โหมดข้อกำหนดที่ไม่ได้ระบุ คุณไม่ควรใช้ค่านี้
PERFORMED_BY_SAME_VEHICLE ในโหมดนี้ การจัดส่งที่ "ขึ้นอยู่กับ" ทั้งหมดต้องใช้ยานพาหนะเดียวกันกับการจัดส่งที่ "จำเป็น" อย่างน้อย 1 รายการ
IN_SAME_VEHICLE_AT_PICKUP_TIME

เมื่อใช้โหมด IN_SAME_VEHICLE_AT_PICKUP_TIME การจัดส่งแบบ "ขึ้นอยู่กับ" ทั้งหมดจะต้องมีการจัดส่งที่ "จำเป็น" อย่างน้อย 1 รายการอยู่บนยานพาหนะ ณ เวลาที่รับสินค้า

ดังนั้น การรับสินค้าที่ "ขึ้นอยู่กับ" การจัดส่งจำเป็นต้องมี

  • การจัดส่งที่ "ต้องระบุ" แบบจัดส่งเท่านั้นซึ่งนำส่งในระหว่างเส้นทาง หรือ
  • การนำส่งสินค้าที่ "จำเป็น" ที่ได้รับในระหว่างเส้นทาง และหากการจัดส่งที่ "จำเป็น" มีการนำส่ง จะต้องดำเนินการนำส่งนี้หลังจากการรับสินค้าที่ "ขึ้นอยู่กับ" การจัดส่ง
IN_SAME_VEHICLE_AT_DELIVERY_TIME เช่นเดียวกับก่อนหน้านี้ ยกเว้นการจัดส่งที่ "ขึ้นอยู่กับ" จะต้องมีการจัดส่งที่ "จำเป็น" ในยานพาหนะ ณ เวลาที่นำส่ง

PrecedenceRule

กฎที่มีความสำคัญระหว่าง 2 เหตุการณ์ (แต่ละเหตุการณ์คือการรับสินค้าหรือการนำส่งการจัดส่ง): เหตุการณ์ที่ "ที่ 2" ต้องเริ่มขึ้นอย่างน้อย offsetDuration หลังจากเริ่มต้น "ครั้งแรก"

ลำดับความสำคัญหลายรายการอาจอ้างอิงถึงเหตุการณ์เดียวกัน (หรือที่เกี่ยวข้อง) เช่น "การรับสินค้า ข. จะเกิดขึ้นหลังจากการรับสินค้า ก." และ "การรับสินค้า ข. จะเกิดขึ้นหลังการรับสินค้า ข."

นอกจากนี้ ลำดับความสำคัญจะมีผลเมื่อมีการดำเนินการจัดส่งทั้ง 2 รายการและระบบจะไม่สนใจลำดับความสำคัญเท่านั้น

การแสดง JSON
{
  "firstIsDelivery": boolean,
  "secondIsDelivery": boolean,
  "offsetDuration": string,
  "firstIndex": integer,
  "secondIndex": integer
}
ช่อง
firstIsDelivery

boolean

ระบุว่าเหตุการณ์ "แรก" เป็นการแสดงโฆษณาหรือไม่

secondIsDelivery

boolean

ระบุว่าเหตุการณ์ "ที่ 2" เป็นการแสดงโฆษณาหรือไม่

offsetDuration

string (Duration format)

ค่าชดเชยระหว่างเหตุการณ์ "แรก" กับ "วินาที" ซึ่งอาจเป็นค่าลบได้

ระยะเวลาเป็นวินาทีที่มีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" เช่น "3.5s"

firstIndex

integer

ดัชนีการจัดส่งของเหตุการณ์ "แรก" ต้องระบุข้อมูลในช่องนี้

secondIndex

integer

ดัชนีการจัดส่งของเหตุการณ์ "ที่สอง" ต้องระบุข้อมูลในช่องนี้