package core import ( "time" "simple-memo/global" "simple-memo/models" "go.uber.org/zap" ) func InitCron() { go func() { for { now := time.Now() next := getNextRunTime(10, 0) duration := next.Sub(now) time.Sleep(duration) checkPerfectDay() } }() } func getNextRunTime(hour, minute int) time.Time { now := time.Now() today := time.Date(now.Year(), now.Month(), now.Day(), hour, minute, 0, 0, now.Location()) if now.Before(today) { return today } return today.AddDate(0, 0, 1) } func checkPerfectDay() { yesterday := time.Now().AddDate(0, 0, -1).Format("2006-01-02") var progressList []models.DailyProgress err := global.DB.Where("record_date = ?", yesterday).Find(&progressList).Error if err != nil { global.Logger.Error("查询每日进度失败", zap.Error(err)) return } for _, progress := range progressList { if progress.TotalTasks > 0 && progress.TaskCount >= progress.TotalTasks && !progress.PerfectDay { err := global.DB.Model(&models.DailyProgress{}). Where("id = ?", progress.ID). Update("perfect_day", true).Error if err != nil { global.Logger.Error("更新PerfectDay失败", zap.Error(err)) } } } global.Logger.Info("PerfectDay check completed", zap.String("date", yesterday)) }