บทที่ 13

ห้องเย็นต้องขึ้นรถห้องเย็น

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

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

1เรื่องที่เกิดขึ้น

เดือนนี้เราเริ่มรับงานไอศกรีมกับของแช่แข็ง คลังบางนามีรถห้องเย็นคันเดียว ที่เหลือเป็นรถแห้งทั้งนั้น

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

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

2ทำยังไง

  1. ตั้งประเภทรถในคลังก่อน เปิด ⚙ รายละเอียด ของคลัง กด + เพิ่มประเภทรถ แล้วตั้งชื่อตามที่เรียกกันจริงหน้างาน เช่น ห้องเย็น, 4 ล้อ, 6 ล้อ

    ชื่อนี้สำคัญกว่าที่คิด เพราะจุดส่งจะอ้างถึงชื่อนี้ และคนขับก็เห็นชื่อนี้บนหน้าจอ

    แถวของคลังบางนา มีวงสีแดงรอบปุ่ม ⚙ ที่ท้ายแถว
    ⚙ อยู่ท้ายแถวของคลัง แถวจุดส่งก็มี ⚙ ที่ตำแหน่งเดียวกัน วงสีแดงทุกวงในคู่มือคือปุ่มที่ต้องกด เป็นของคู่มือ ไม่มีในโปรแกรม
    ส่วนรถของคลังบางนา มีประเภทรถสามแบบ: 4 ล้อ จำกัด 1000 กก., ห้องเย็น จำกัด 800 กก., 6 ล้อ จำกัด 2500 กก. ล่างสุดมีวงสีแดงรอบปุ่ม + เพิ่มประเภทรถ
    คลังเดียว รถสามแบบ แต่ละแบบมีจำนวนคัน เวลาทำงาน และความจุของตัวเอง ห้องเย็นมีคันเดียวและเล็กกว่าเพื่อน กองรถจริงก็เป็นแบบนี้ ปุ่มเพิ่มประเภทรถอยู่ล่างสุดของส่วนรถ ตามที่วงไว้
  2. ผูกจุดส่งกับประเภทรถ เปิด ⚙ รายละเอียด ของจุดส่ง หาแถว รถที่ส่งจุดนี้ได้ แล้วติ๊กแค่ ห้องเย็น

    แถว 'รถที่ส่งจุดนี้ได้' ช่องคลังบางนาขึ้นขีด ใต้คลังมีสามช่อง: 4 ล้อ ไม่ติ๊ก, ห้องเย็น ติ๊กและมีวงสีแดงรอบ, 6 ล้อ ไม่ติ๊ก
    ช่องของคลังขึ้นเป็นขีด ไม่ใช่ติ๊ก อ่านว่า “คลังนี้ส่งได้ แต่ไม่ใช่ทุกคัน”

3โปรแกรมอ่านว่าอะไร

จุดส่งไม่ได้ผูกกับคลังแล้ว แต่ผูกกับประเภทรถของคลังนั้น มีสามแบบ:

ติ๊กครบทุกประเภทในคลัง เท่ากับติ๊กคลังทั้งคลังพอดี ไม่ต้องกลัวว่าจะกลายเป็นการจำกัด เพราะบอกว่า “รถทุกแบบที่คลังนี้มี” ก็คือไม่ได้จำกัดอะไรเลย

กดช่องคลังตอนที่มันขึ้นขีด แล้วได้อะไร

ได้ทุกประเภทในคลังนั้น ไม่ได้ล้างทิ้ง เพราะคนที่กดตอนนั้นส่วนใหญ่หมายถึง “รถคันไหนของคลังนี้ก็ได้” ถ้าอยากเอาคลังนี้ออกทั้งคลัง กดอีกครั้ง

4เช็กว่าใช้ได้จริง

ดูได้สามที่ ไม่ต้องเปิดอะไรเพิ่ม:

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

แถวจุดส่ง 'ร้านไอศกรีมสุขุมวิท' ตามด้วย 40 กก. · 100 ลิตร · ห้องเย็น
บอกชื่อประเภทตรง ๆ ไม่ใช้ไอคอน เพราะคนอ่านต้องรู้ว่าแบบไหน ไอคอนที่บอกแค่ว่า “จุดนี้พิเศษ” เอาไปตัดสินใจอะไรไม่ได้

ที่บรรทัดสรุป หลังกด วางแผนเส้นทาง มีคนไปส่งทุกจุด

บรรทัดสรุปผล: รถ 2 คัน · จุดส่ง 5 จุด · 32.6 กม. · 261 บาท · ตรงเวลาทุกคัน
ห้าจุด รถสองคัน ไม่มีจุดค้าง ไอศกรีมได้รถห้องเย็นทั้งสองจุดโดยไม่ต้องนั่งจัดเอง ส่วนของแห้งขึ้นคันไหนก็ได้ รวมทั้งคันห้องเย็น เพราะข้อจำกัดนี้ไปทางเดียว ของแช่แข็งห้ามขึ้นรถแห้ง แต่ไม่ได้ห้ามรถห้องเย็นรับของแห้ง

ที่การ์ดรถ มีป้ายกำกับไว้ว่าคันนั้นเป็นรถแบบไหน

การ์ดของรถคันที่ 4 มีป้ายกำกับว่า ห้องเย็น พร้อมระยะทาง 14.6 กม. และน้ำหนักบรรทุก 195.0 กก.
รถคันที่ 4 คือคันห้องเย็น แผนตอบกลับมาว่าจัดตามที่สั่งไว้จริง

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

5แลกกับอะไร

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

บรรทัดสรุปผล: รถ 2 คัน · 4 จาก 5 จุด · 28.4 กม. · 227 บาท · ตรงเวลาทุกคัน · 1 จุดจัดไม่ได้
ลดความจุห้องเย็นเหลือ 80 กก. แล้ววางแผนใหม่ ได้ 4 จาก 5 จุด เหลืออีก 1 จุดจัดไม่ได้ ไม่ใช่แผนพัง แต่เป็นแผนที่พูดตรง

แบบนี้ถูกแล้ว โทรเลื่อนลูกค้าเจ้าหนึ่งตั้งแต่เช้า ยังดีกว่าแผนที่ดูสวยทั้งวัน แล้วไปรู้ตอนรถจอดหน้าร้านว่าของขึ้นผิดคัน

6แก้ชื่อกับลบประเภทรถ

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

เปลี่ยนชื่อ

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

ลบประเภทรถ

จะถามก่อน พร้อมบอกว่ากระทบกี่จุด — “ลบประเภทรถ ห้องเย็น ไหม / มีจุดส่ง 1 จุดที่ระบุประเภทรถนี้ หลังลบจะใช้รถทุกประเภทในคลังได้” จุดที่กระทบจะกลับไปเป็น “รถคันไหนของคลังนี้ก็ได้” คือปล่อยให้กว้างขึ้น ไม่ได้ตัดจุดส่งทิ้ง

ถ้าส่งข้อมูลเข้ามาเป็น JSONสำหรับคนที่ต่อระบบเอง

ในเพย์โหลด จุดส่งใช้ฟิลด์ candidate_van_types เขียนเป็นคู่ คลัง + ชื่อประเภทรถ:

{
  "order_id": "A-101",
  "location": { "lat": 13.706, "lng": 100.601 },
  "weight_kg": 40,
  "volume_cm3": 100000,
  "candidate_van_types": [
    { "depot_id": "บางนา", "type_name": "ห้องเย็น" }
  ]
}

ฟิลด์เดิม depot_id กับ candidate_depot_ids ยังใช้ได้เหมือนเดิม อ่านว่า “รถประเภทไหนก็ได้ในคลังนั้น” เพย์โหลดเก่าจึงได้แผนเหมือนเดิมทุกอย่าง

ถ้าพิมพ์ชื่อประเภทรถผิด ระบบไม่ปล่อยผ่านให้ไปโผล่เป็นจุด “จัดไม่ได้” เฉย ๆ แต่จะปฏิเสธตอนนำเข้า บอกบรรทัดที่ผิด และบอกว่าคลังนั้นมีประเภทอะไรให้เลือก:

line 46 — Job A-101 references van type 'ห้องเย็น',
which depot บางนา does not have (it has: ['4 ล้อ', '6 ล้อ'])

7ลองเอง

สามกรณีนี้กดเปิดในโปรแกรมได้เลย ไม่ต้องคัดลอกอะไร:

อีกไฟล์หนึ่งคือ ch13-no-chiller.json คลังไม่มีห้องเย็น แต่จุดส่งยังระบุไว้ ไฟล์นี้ตั้งใจให้ระบบปฏิเสธ ต้องเอาไปวางในแท็บ JSON เองเพื่อดูข้อความที่ขึ้น

สามอย่างที่ควรลองด้วยมือ:

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