我正在测试自动结算周期系统。我有一个C#脚本,每分钟运行一次,检查下一个开票日期,但我在运行时遇到代码问题。它返回一个空日期但如果我从30天更改为14天,则脚本的工作方式就像它的意思。它意味着从上一个结算日的X天开始运行下一个结算周期,同时跳过周末。
这部分代码工作正常:
command.CommandText = "SELECT * FROM bill_cycle WHERE DATE(NOW()) >= DATE(date_Start) AND (Next_cycle IS NULL OR Next_cycle = '' OR DATE(NOW()) >= DATE(Next_cycle)) AND status != 'suspend' AND cycle_Total != '0'";
var bill_cycle = command.ExecuteReader().ListRecordsAsDictionaries();
foreach (IDictionary<string, string> dictionary in bill_cycle)
{
它意味着在此括号内运行代码以进行结算周期,以便为客户端创建pdf并向电子邮件服务器发送电子邮件。
这部分代码是我遇到的问题所在:
UPDATE bill_cycle
SET Last_cycle=NOW(),
Next_cycle=(NOW() + INTERVAL CASE WEEKDAY(NOW() + INTERVAL 30 DAY)
WHEN 5 THEN 30+2
WHEN 6 THEN 30+1
END DAY)
WHERE id = 20
} Thread.sleep代码(60000); 等到计时器结束并再次运行。
基本上,它不会在下一个30天的结算周期更新客户端。它的值是对MySQL时间戳的重要值,导致它被卡住并反复重新运行脚本。