package tasks import ( "awesomeProject/internal/common" "awesomeProject/internal/models" "log" "time" ) // CheckUserExpiry 检查用户过期状态并禁用过期用户 func CheckUserExpiry() { log.Println("开始执行用户过期检查任务...") db := common.GetDB() now := time.Now() // 查找所有已过期但仍然启用的用户 var expiredUsers []models.User if err := db.Where("expiry_date IS NOT NULL AND expiry_date < ? AND status = ?", now, 1).Find(&expiredUsers).Error; err != nil { log.Printf("查询过期用户失败: %v", err) return } if len(expiredUsers) == 0 { log.Println("没有发现过期用户") return } log.Printf("发现 %d 个过期用户需要禁用", len(expiredUsers)) // 批量禁用过期用户 var userIDs []uint for _, user := range expiredUsers { userIDs = append(userIDs, user.ID) log.Printf("用户 ID: %d, 手机号: %s, 过期时间: %v", user.ID, user.Phone, user.ExpiryDate.Format("2006-01-02 15:04:05")) } // 使用事务批量更新状态 tx := db.Begin() if err := tx.Model(&models.User{}).Where("id IN ?", userIDs).Update("status", 0).Error; err != nil { tx.Rollback() log.Printf("批量禁用过期用户失败: %v", err) return } if err := tx.Commit().Error; err != nil { log.Printf("提交事务失败: %v", err) return } log.Printf("成功禁用 %d 个过期用户", len(userIDs)) log.Println("用户过期检查任务执行完成") }