package publishser import ( "fmt" "strconv" "time" "91porn-server/app/appg" "91porn-server/common/log" "91porn-server/common/timeutil" "91porn-server/models/v/txnmod" "91porn-server/models/v/usermod" "91porn-server/models/v/videoactivitymod" "91porn-server/models/v/vidmod" "github.com/shopspring/decimal" "go.mongodb.org/mongo-driver/bson" ) func GetWorkTotal(uid uint64) (int64, error) { return vidmod.GetCountByPublish(uid, nil) } func GetPendingReviewWorkCount(uid uint64) (int64, error) { status := 0 return vidmod.GetCountByPublish(uid, &status) } func GetWeekIncomeLeaderboard(limit int) (out []User, err error) { var ( weekEndDay = time.Now() weekStartDay = timeutil.BeginningOfWeek(weekEndDay) result []struct { UID uint64 `json:"uid" bson:"_id"` Income float64 `json:"income" bson:"income"` } ) filter := bson.M{"tranTypeInt": txnmod.WorksIncome, "createdAt": bson.M{"$gte": weekStartDay, "$lt": weekEndDay}} if err = txnmod.IncomeLeaderboard(&result, filter, limit); err != nil { log.Error("获取周收益榜异常:", log.E(err)) return } if len(result) == 0 { return []User{}, nil } retMap := make(map[uint64]float64) uids := make([]uint64, len(result)) for i, s := range result { uids[i] = s.UID retMap[s.UID] = s.Income } users, err := usermod.FindUsersByUID(uids) if err != nil { log.Error("获取用户信息异常:", log.E(err)) return } for _, s := range result { for _, user := range users { if s.UID == user.UID { out = append(out, User{ID: user.UID, Name: user.Name, Avatar: user.Portrait, Value: decimal.NewFromFloat(retMap[user.UID]).Mul(decimal.NewFromInt(3))}) break } } } return } func GetActivityDetails() (out VideoActivity, err error) { details, err := videoactivitymod.QueryDocumentByStatus(videoactivitymod.Enable) if err != nil { return } if details.ID.IsZero() { return } out.ID = details.ID out.EndTime = details.EndTime out.BackgroundImage = details.BackgroundImage out.Desc = details.Desc return } func GetCreatorNumber() (creatorNumber int64, err error) { result, err := appg.Redis.Get("creatorNumber") if err != nil { log.Error(fmt.Sprintf("getCreatorNumber redis获取数据异常:%v", err)) return } if result == nil { if creatorNumber, err = vidmod.GetCreatorNumber(); err != nil { log.Error(fmt.Sprintf("getCreatorNumber mongodb获取数据异常:%v", err)) return } if err = appg.Redis.Set("creatorNumber", creatorNumber, 0); err != nil { log.Error(fmt.Sprintf("getCreatorNumber redis操作异常:%v", err)) return } return } if creatorNumber, err = strconv.ParseInt(*result, 10, 64); err != nil { log.Error(fmt.Sprintf("getCreatorNumber 解析异常:%v", err)) return } return } func GetWeekWorkLeaderboard(limit int) (out []User, err error) { var ( weekEndDay = time.Now() weekStartDay = timeutil.BeginningOfWeek(weekEndDay) result []struct { UID uint64 `json:"uid" bson:"_id"` Count int64 `json:"count" bson:"count"` } ) filter := bson.M{"createdAt": bson.M{"$gte": weekStartDay, "$lt": weekEndDay}} if err = vidmod.WorkLeaderboard(&result, filter, limit); err != nil { log.Error("获取周作品榜异常:", log.E(err)) return } if len(result) == 0 { return []User{}, nil } uids := make([]uint64, len(result)) var retMap = make(map[uint64]int64) for i, s := range result { uids[i] = s.UID retMap[s.UID] = s.Count } users, err := usermod.FindUsersByUID(uids) if err != nil { log.Error("获取用户信息异常:", log.E(err)) return } for _, s := range result { for _, user := range users { if s.UID == user.UID { out = append(out, User{ID: user.UID, Name: user.Name, Avatar: user.Portrait, Value: decimal.NewFromInt(retMap[user.UID])}) break } } } return }