package vid import ( "time" "91porn-server/common/constant/redisconst" "91porn-server/common/timeutil/timerange" "91porn-server/models/s/statrecordmod" "91porn-server/models/v/vidmod" "91porn-server/skd/skdg" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" ) func incPageView(syncTime time.Time) error { now := syncTime recentMinute := timerange.RecentMinute(now, statrecordmod.FiveMinuteScale) key := redisconst.VidPageViewListKey(recentMinute.Unix()) count, err := skdg.Redis.LCount(key) if err != nil { return err } if count == 0 { return nil } strList, err := skdg.Redis.LRange(key, 0, count-1) if err != nil { return err } dmap := make(map[string]int64) for i := range strList { dmap[strList[i]]++ } models := make([]mongo.WriteModel, 0, len(dmap)) for k, v := range dmap { _id, err1 := primitive.ObjectIDFromHex(k) if err1 != nil { continue } filter := bson.M{"_id": _id} update := bson.M{"$inc": bson.M{"pageViewCount": v}} models = append(models, mongo.NewUpdateOneModel().SetFilter(filter).SetUpdate(update)) } if err = vidmod.Bulk(models); err != nil { return err } _, _ = skdg.Redis.Del(key) return nil }