Files
solosw 99b11b04e4 1.0
2026-01-05 14:11:34 +08:00

54 lines
1.4 KiB
Go

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("用户过期检查任务执行完成")
}