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。这种设计可以让你
- 根据需要添加/删除时间间隔。
- 重新使用已定义的时间间隔(如星期一 09.00 - 12.30 时段)
- 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 |
我需要触发一个功能来向用户发送邮件仅在他们的工作时间。
发送邮件的功能有效,我知道如何执行 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。这种设计可以让你
- 根据需要添加/删除时间间隔。
- 重新使用已定义的时间间隔(如星期一 09.00 - 12.30 时段)
- 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 |