46 lines
1.1 KiB
Go
46 lines
1.1 KiB
Go
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")
|
|
}
|