【发布时间】:2013-12-22 18:46:29
【问题描述】:
我正在使用 Asterisk 在 Lua 中开发一个数据库驱动的拨号方案项目。我在替换 .conf 拨号方案格式的 GotoIfTime() 应用程序时绊倒了。正如Asterisk Lua Reference 中列出的那样,Goto Asterisk 主食确实不应该在 Lua 中使用,这对我来说很有意义。
我检查时间条件的方法将与 GotoIfTime 应用程序完全相同,因为它将限定一周中的某一天,时间按小时和分钟,然后按帐户时区。该系统将有许多位于不同时区的帐户。帐户的营业时间将取决于帐户定义的时区中的时间。
我的数据库结构如下:
CREATE TABLE IF NOT EXISTS `hours` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`account_id` int(11) NOT NULL,
`day_start` varchar(3) NOT NULL,
`day_end` varchar(3) NOT NULL,
`hour_start` int(3) NOT NULL,
`minute_start` int(3) NOT NULL,
`hour_end` int(3) NOT NULL,
`minute_end` int(3) NOT NULL,
`closed_dest_type` varchar(20) NOT NULL,
`closed_dest_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE IF NOT EXISTS `accounts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`timezone` varchar(40) NOT NULL,
);
下面是这个操作在 Lua 中的一些非常简化的用法:
if (open == true) then
dial(dest_type, dest_id)
else
dial(closed_dest_type, closed_dest_id)
end
以下是我的烦恼:
星期几由范围指定。如何验证日期范围以字符串格式存储时是星期几?
此系统将使用在操作系统上设置可能不同时区的多台服务器。使用 GotoIfTime 验证帐户的时区很容易,因为我唯一需要做的就是将帐户的时区数据库条目的结果指向 GotoIfTime 应用程序的时区参数。
【问题讨论】:
-
1) 为什么将所有内容都设为
varchar,而不是使用更合理的数据类型? 2)您根本没有明确说明您要对时区做什么。通常,在查询期间需要考虑时区,而不是事后考虑。 3)请退后一步,从陌生人的角度阅读这篇文章。我不知道您将哪些数据放入这些列中,我也不知道您是如何将这些数据加载到变量中的,或者其他很多事情。你需要更简洁。谢谢。 -
与论坛网站不同,我们不使用“谢谢”、“感谢任何帮助”或Stack Overflow 上的签名。见Should 'Hi', 'thanks,' taglines, and salutations be removed from posts?。
-
@MattJohnson 1) 已更正。 2) 我添加了几行代码,试图以更清晰和简洁的格式解释时区正在做什么。 3) 当我写这个问题时,我假设读者会熟悉星号,并且会理解 GotoIfTime 应用程序的功能,因为它是 Asterisk 的主要内容。 GotoIftime 应用程序正在被替换为 Asterisk 的 Lua diaplan 格式。坦率地说,我还没有将这些数据加载到 Lua 变量中的方法,因为我还没有做到这一点。