构建适用于预订的可用性数据

参数定义

Availability 定义中所述:

  • party_size:此时间空档内可容纳的就餐人数。一家餐厅可以同时与多个空档相关联,每个空档可指定一个不同的 party_size,例如可预订 2 人、3 人或 4 人座
  • spots_open:此空房情况条目当前可用的空位数
  • spots_total:商家针对此配置的广告位总数(包括不可用的广告位)

这三个参数协同工作,构建平面图的数字表示法。party_size 是每张桌子的人数上限(每张桌子可容纳的人数大小对应一个条目)。spots_openspots_total 是可以容纳该 party_size 的表数量。

空白平面图示例

假设某家餐厅的平面图如下,且没有有效的预订:

图 1:没有有效预订的平面图
图 1:没有有效预订的平面图

party_sizespots_openspots_total 的值将为:

party_size spots_open spots_total
4 3 3
5 3 3
6 4 4
7 1 1
8 1 1

此商家一次性空档的可用性 Feed 如下所示:

JSON

{
  "availability": [
        {
          "spots_total": 3,
          "spots_open": 3,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 4
          }
        },
        {
          "spots_total": 3,
          "spots_open": 3,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 5
          }
        },
        {
          "spots_total": 4,
          "spots_open": 4,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 6
          }
        },
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 7
          }
        },
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 8
          }
        }
      ]
}

包含预订信息的平面图示例

现在假设其中一个圆桌已被预订:

图 2:包含一个有效预订信息的平面图
图 2:包含一个有效预订的平面图

party_sizespots_openspots_total 的值现在将如下所示:

party_size spots_open spots_total
4 2 3
5 2 3
6 3 4
7 1 1
8 1 1

JSON

{
  "availability": [
        {
          "spots_total": 3,
          "spots_open": 2,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 4
          }
        },
        {
          "spots_total": 3,
          "spots_open": 2,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 5
          }
        },
        {
          "spots_total": 4,
          "spots_open": 3,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 6
          }
        },
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 7
          }
        },
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 8
          }
        }
      ]
}

使用组合桌支持功能指定餐厅空位情况

餐厅可以通过多种方式组合桌子,以容纳更多人群。您应在 Feed 中指定 spots_openspots_total,以准确反映您是否可以接受给定大小的派对。以下示例展示了如何指定组合表。 您的 Feed 在执行此计算的方式上可能会有所不同,您可以根据自己的业务逻辑指定 spots_openspots_total

如果餐厅支持将桌子合并以容纳更大的派对,您可以更新 spots_openspots_total 以反映这一点。

假设一家餐厅可以将两张小桌子拼在一起,以容纳 7-10 人。

图 3:没有有效预订的平面图
图 3:没有有效预订的平面图

如果没有有效的预订,party_sizespots_openspots_total 的值为:

party_size spots_open spots_total
4 3 3
5 3 3
6 4 4
7 1 1
8 1 1
9 1 1
10 1 1

现在,使用相同的平面图,为 10 人(两张小桌子)的预订进行预订。

图 4:平面图,其中一个有效预订跨越两张桌子
图 4:平面图,其中一个有效预订跨越两张桌子

然后,party_sizespots_openspots_total 的值现在为:

party_size spots_open spots_total
4 1 3
5 1 3
6 2 4
7 1 1
8 1 1
9 0 1
10 0 1