@@ -0,0 +1,144 @@
|
||||
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
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
package publishser
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/shopspring/decimal"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
// ListType 榜单类型
|
||||
type ListType int
|
||||
|
||||
const (
|
||||
WeekIncomeLeaderboard ListType = iota // 本周收益榜
|
||||
WeekWorkLeaderboard // 本周作品榜
|
||||
)
|
||||
|
||||
type CreateVideoPageResp struct {
|
||||
WorkTotal int64 `json:"workTotal"` // 作品总数
|
||||
PendingReviewWorkCount int64 `json:"pendingReviewWorkCount"` // 待审核作品数
|
||||
PassWorkCount int64 `json:"passWorkCount"` // 已通过作品数
|
||||
WorkCreateCount int64 `json:"workCreateCount"` // 作品创作者总数
|
||||
ActivityDetails struct {
|
||||
ID primitive.ObjectID `json:"id"` // 活动ID
|
||||
BackgroundImage string `json:"backgroundImage"` // 活动背景图
|
||||
EndTime time.Time `json:"endTime"` // 活动结束时间
|
||||
} `json:"activityDetails"` // 活动详情
|
||||
Leaderboards []struct {
|
||||
Type ListType `json:"type"` // 榜单类型
|
||||
Members []struct {
|
||||
Name string `json:"name"` // 发布者名称
|
||||
Avatar string `json:"avatar"` // 发布者头像
|
||||
Value int64 `json:"value"` // 作品收益/作品数量
|
||||
} `json:"members"` // 成员列表
|
||||
} `json:"leaderboards"` // 排行榜列表
|
||||
}
|
||||
|
||||
// DetailsResponse 发布详情返回
|
||||
type DetailsResponse struct {
|
||||
IsFirst bool `json:"isFirst"` // 是否为首次进入
|
||||
WorkTotal int64 `json:"workTotal"` // 作品总数
|
||||
PendingReviewWorkCount int64 `json:"pendingReviewWorkCount"` // 待审核作品数
|
||||
PassWorkCount int64 `json:"passWorkCount"` // 已通过作品数
|
||||
WorkCreateCount int64 `json:"workCreateCount"` // 作品创作者总数
|
||||
ActivityDetails VideoActivity `json:"activityDetails"` // 活动详情
|
||||
Leaderboards []Leaderboard `json:"leaderboards"` // 排行榜列表
|
||||
}
|
||||
|
||||
// Leaderboard 排行榜信息
|
||||
type Leaderboard struct {
|
||||
Type ListType `json:"type"` // 榜单类型
|
||||
Members []User `json:"members"` // 成员列表
|
||||
}
|
||||
|
||||
// User 用户信息
|
||||
type User struct {
|
||||
Name string `json:"name"` // 发布者名称
|
||||
Avatar string `json:"avatar"` // 发布者头像
|
||||
Value decimal.Decimal `json:"value"` // 作品收益/作品数量
|
||||
ID uint64 `json:"id"` // 发布者ID
|
||||
}
|
||||
|
||||
type VideoActivity struct {
|
||||
ID primitive.ObjectID `json:"id"` // 活动ID
|
||||
BackgroundImage string `json:"backgroundImage"` // 活动背景图
|
||||
EndTime time.Time `json:"endTime"` // 活动结束时间
|
||||
Desc string `json:"desc"` // 活动详情描述
|
||||
}
|
||||
|
||||
// WeekLeaderboardReq 周榜请求
|
||||
type WeekLeaderboardReq struct {
|
||||
Type int `form:"type"` // 榜单类型
|
||||
}
|
||||
|
||||
// WeekLeaderboardResp 周榜返回
|
||||
type WeekLeaderboardResp struct {
|
||||
Type ListType `json:"type"` // 榜单类型
|
||||
Members []User `json:"members"` // 成员列表
|
||||
}
|
||||
Reference in New Issue
Block a user