package vipexpiry import ( "context" "time" "videoweb/pub/common/log" "videoweb/pub/models/usermod" "videoweb/pub/pubdef" "go.mongodb.org/mongo-driver/bson" ) var isRunning = false // ResetExpiredVip 将 CurrentVipExpire 已过期但 VipType 仍非 None 的用户批量重置为普通用户。 // 同时清空 ShowCard* 展示字段,保证 DB 数据与实际状态一致。 func ResetExpiredVip() { if isRunning { return } isRunning = true defer func() { isRunning = false }() ctx := context.Background() now := time.Now() filter := bson.M{ usermod.FN.User.VipType: bson.M{"$gt": pubdef.VipTypeNone}, usermod.FN.User.CurrentVipExpire: bson.M{"$lt": now}, } update := bson.M{ "$set": bson.M{ usermod.FN.User.VipType: pubdef.VipTypeNone, usermod.FN.User.ShowCardId: int64(0), usermod.FN.User.ShowCardName: "", usermod.FN.User.UpdatedAt: now, }, } if serr := usermod.UpdateManyUser(ctx, filter, update); serr != nil { log.Error("vipexpiry:ResetExpiredVip UpdateManyUser failed", log.Any("err", serr)) return } log.Info("vipexpiry:ResetExpiredVip done") }