145 lines
3.7 KiB
Go
145 lines
3.7 KiB
Go
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
|
|
}
|