场景描述:
一群门店给一群园区送外卖,不同门店营业时间不同,不同园区允许外卖进入的时间段也不一样。同时,由于门店与不同园区之间的距离有远有近,所以并不是每个门店都能服务所有的园区,也不是每个园区都能点所有门店的外卖。有的门店可能会因为某些不可预计的原因临时闭店,从而无法按照预期提供外卖服务。
现在想要把这些约束关系尽可能简单的配置起来。
门店
门店的基本配置项:
- 营业日期。
- 营业时间。
- 营业状态(正常营业/暂停营业)。
园区
园区的基本配置项:
- 允许外卖进入的日期。
- 允许外卖进入的时间段。
- 园区开放状态(正常开放/疫情管控)。
门店&园区
- 生效日期。
- 生效时间。
- 生效状态(启用/禁用)。
在配置理解之前,有几个问题需要先明确。
一、 如何配置日期?
最精确的当然是配置到每一天,但是这样有比较多的问题:1. 日期是无限的。2. 修改不便。
所以综合考虑下来,像闹钟一样配置星期的重复模式就够用了。如果在此重复模式下,需要临时调整,就通过各项的状态开关进行手动控制。
二、 门店&园区上配置的日期和时间,是什么作用?
这个配置有多种理解:
- 不论门店或者园区上是如何配置的,一切以 门店&园区 上的配置为准。
- 门店配置 与 园区配置 与 门店&园区配置,这三者取交集。交集规则:日期与日期计算,时间与时间计算,不然就无限了。
不同的理解有不同的优劣势。如果我们遵循第一种理解,优势是简单直接,实现也简单。但是缺点也很明显:如果门店延长或者缩短了营业时间之后,实际情况就与配置情况不一致了,要么导致门店实际服务时间比实际短了,要么导致用户看到可以下单,但实际门店并不能服务。如果我们遵循第二种理解,优势是可以自动伸缩,缺点就是无法直观的看出最终生效的结果到底是怎样的。
三、 如果不配置,默认值应该是多少?
门店:
日期:周一到周日。
时间:00:00 - 23:59 。
园区:
日期:周一到周日。
时间:00:00 - 23:59 。
至于门店&园区配置的默认值,对于不同的理解,应该有不同的默认值:如果“一切以 门店&园区 上的配置为准”,理应以创建当时 门店配置 与 园区配置 的交集为默认值。否则,应该以
日期:周一到周日。
时间:00:00 - 23:59
作为默认值。
配置完成之后,一个门店在某个时间能否为某个社群提供外卖服务,取决于三项配置共同作用的结果。
示例
门店A在1月1号在10:00 - 13:00之间正常营业, 园区在1月1日在12:00 - 14:00之间正常开放。在没有其他配置情况下,门店1月1号就只能在12:00-13:00之间为园区 B 提供外卖服务。