NodeJS如何只在工作时间执行一个功能?

NodeJS how to execute a function only on working hours?

我需要触发一个功能来向用户发送邮件仅在他们的工作时间

发送邮件的功能有效,我知道如何执行 CRON 作业。

我的不同用户的工作时间不一样;例如:

用户 1:[9h00;12h30] 和 [14h00;17h30]

用户 2:[8h30;12h00] 和 [13h00;16h30]

等...

周一到周日可能不同

如果所有用户和所有天的所有时间都相同,没有午休时间,我的 MySQL 数据库中会有几个键 "mailEnableHour" 和 "mailDisableHour"我的功能会在任何操作之前检查...

但问题其实更棘手:7天x 4次= 28键...

问题:

你会如何组织数据库来为每个用户存储这 28 个密钥?

您知道将 28 个密钥减少为唯一密钥的方法吗?

如何获得更多 "flexible" 代码(假设我将来要添加一个新的中断,例如 [10h30;10h45])?

感谢您的帮助:)

此致。

您理想中需要的是 INTERVAL data type。但看起来 MySQL 不支持这个。但即使使用该数据类型,您仍需要另一个 table.

如果我理解正确的话,不仅这些小时数会因用户而异,而且对于同一用户来说,它们每天都会发生变化。

所以

用户 1 星期一:[9.00 - 12.30] & [14.00 - 17.30]

用户 1 星期二:[10.00 - 13.30] & [14.30 - 18.00]

如果是这种情况,您最好的选择是使用另一个 table - 类似 MailEligibleWorkHours 的东西,您可以在其中将这些字段设置为索引并从那里查询用户/资格。 (日期是列之一)也许您的实际用户 table 包含许多其他字段,可以帮助您优化连接(例如用户休假/育儿假等...)。

如果你想让它更灵活,你可以有一个 interval table,你必须将 interval_id 引用到你的 [=12] =] table。这种设计可以让你

  1. 根据需要添加/删除时间间隔。
  2. 重新使用已定义的时间间隔(如星期一 09.00 - 12.30 时段)
  3. TimeIntervals 可能不会很大 table,因此您可以查询所有内容并缓存 ID + 时隙,这意味着您可以通过单次往返计算 而无需任何加入 如果员工当时有资格获得邮件。

MailEligibleWorkHours table

| employee-id | interval_id |
|:------------|:------------|
| 111         | 1           |
| 111         | 3           |
| 132         | 2           |

TimeIntervals table

| interval_id | dayOfWeek | timestart | timeend |
|:------------|:----------|:----------|:--------|
| 1           |  1        |  12.00    | 13.30   |
| 3           |  4        |  14:00    | 16:30   |
| 2           |  3        |  09:00    | 12:30   |