数据结构

// 规则
type ScheduleRule struct {
  ID             int64         // 规则ID
  Title          string        // 规则标题
  Payload        string        // 规则内容
  Enabled        bool          // 规则开关
  StartTime      time.Time     // 开始时间
  EndTime        time.Time     // 结束时间
  NextCheckTime  sql.NullTime  // 下次检查时间
  CheckFrequency string        // 检查频率
}

// 任务
type RuleTask struct {
  ID             int64         // 任务ID
  RuleID         int64         // 规则ID
  RunTime        time.Time     // 开始时间
  Payload        string        // 规则内容
  Status         string        // 任务状态
  Result         string        // 任务结果
}

注意事项

  1. 改开始时间,不能早于当前时间,重新计算 next_check_time
  2. 改结束时间,不能早于当前时间,直接修改
  3. 改检查频率,重新计算 next_check_time
  4. 改规则开关,如果开启,重新计算 next_check_time
  5. next_check_time 为距离当前时间最近的下一次执行时间
  6. 生成任务和编辑规则时均需要锁定规则,防止并发