我需要触发一个功能来仅在他们的工作时间向用户发送邮件。
发送邮件的功能有效,我知道如何执行 CRON 作业。
我的不同用户没有相同的工作时间;例如:
用户 1:[9h00;12h30] 和 [14h00;17h30]
用户 2:[8h30;12h00] 和 [13h00;16h30]
等...
周一到周日可能不同。
如果所有用户和所有天的所有时间都相同,没有午休时间,我的 MySQL 数据库中会有几个键“mailEnableHour”和“mailDisableHour”,我的函数会在任何操作之前检查这些键...
但问题实际上更棘手:7天x 4次= 28个键...
问题:
请问您将如何组织数据库来为每个用户存储这 28 个 key ?
你知道有什么方法可以将 28 个 key 减少为唯一 key 吗?
如何获得更“灵活”的代码(假设我有一个新的中断要在将来添加,例如 [10h30;10h45])?
谢谢你的帮助:)
最好的问候。
最佳答案
理想情况下,您需要的是 INTERVAL data type .但是看起来 MySQL 不支持这个。但即使使用该数据类型,您也需要另一个表。
如果我理解正确的话,不仅这些时间会因用户而异,而且对于同一用户,它们每天都可能会发生变化。
所以
用户 1 星期一:[9.00 - 12.30] & [14.00 - 17.30]
用户 1 星期二:[10.00 - 13.30] & [14.30 - 18.00]
如果是这种情况,最好的办法是使用另一个表 - 类似于 MailEligibleWorkHours
,您可以在其中将这些字段设置为索引并从那里查询用户/资格。 (日期是列之一)也许您的实际用户表包含许多其他字段,可以帮助您优化连接(例如用户休假/育儿假等...)。
如果你想让它更灵活,你可以有一个 interval
表,你必须将 interval_id
引用到你的 MailEligibleWorkHours
表。这种设计将使您能够
- 根据需要添加/删除时间间隔。
- 重新使用已定义的时间间隔(例如星期一 09.00 - 12.30 时段)
- TimeIntervals 很可能不会是一个巨大的表,因此您可以查询所有内容并缓存 ID + 时间段,这意味着您可以通过一次没有任何连接的往返计算出员工是否当时有资格邮寄。
MailEligibleWorkHours 表
| employee-id | interval_id |
|:------------|:------------|
| 111 | 1 |
| 111 | 3 |
| 132 | 2 |
时间间隔表
| interval_id | dayOfWeek | timestart | timeend |
|:------------|:----------|:----------|:--------|
| 1 | 1 | 12.00 | 13.30 |
| 3 | 4 | 14:00 | 16:30 |
| 2 | 3 | 09:00 | 12:30 |
关于node.js - NodeJS如何只在工作时间执行一个功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53742064/