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