64 lines
1.6 KiB
Go
64 lines
1.6 KiB
Go
package payvidlgser
|
|
|
|
import (
|
|
"time"
|
|
|
|
"91porn-server/models/l/payvidlgmod"
|
|
"91porn-server/models/v/usermod"
|
|
"91porn-server/models/v/vidmod"
|
|
)
|
|
|
|
// VideoCoinIncomeAggregateTopN
|
|
func VideoCoinIncomeAggregateTopN(topN int, start, end time.Time) (ret VideoCoinIncomeAggregateTopNStat, err error) {
|
|
list, err := payvidlgmod.VideoCoinIncomeAggregateTopN(topN, start, end)
|
|
if err != nil {
|
|
return
|
|
}
|
|
listLen := len(list)
|
|
videoIDs := make([]payvidlgmod.ObjectID, listLen)
|
|
for i, v := range list {
|
|
videoIDs[i] = v.VID
|
|
}
|
|
videos, err := vidmod.GetVideoListByIDsNoStatus(videoIDs)
|
|
if err != nil {
|
|
return
|
|
}
|
|
videoMap := make(map[payvidlgmod.ObjectID]vidmod.VideoModel)
|
|
for _, video := range videos {
|
|
videoMap[video.ID] = *video
|
|
}
|
|
listDetail := make([]VideoCoinIncomeAggregateInfo, listLen)
|
|
publisherIDs := make([]uint64, 0, listLen)
|
|
for i, v := range list {
|
|
listDetail[i] = VideoCoinIncomeAggregateInfo{
|
|
ID: v.VID,
|
|
Total: v.Total,
|
|
Count: v.Count,
|
|
CreatedAt: videoMap[v.VID].CreatedAt,
|
|
PublisherID: videoMap[v.VID].PublisherID,
|
|
Title: videoMap[v.VID].Title,
|
|
Coins: videoMap[v.VID].Coins,
|
|
}
|
|
if videoMap[v.VID].PublisherID != 0 {
|
|
publisherIDs = append(publisherIDs, videoMap[v.VID].PublisherID)
|
|
}
|
|
}
|
|
userMap, err := usermod.GetUsersBaseInfoMap(publisherIDs)
|
|
if err != nil {
|
|
return
|
|
}
|
|
for _, v := range listDetail {
|
|
user, ok := userMap[v.PublisherID]
|
|
if ok {
|
|
v.PublisherName = user.Name
|
|
}
|
|
}
|
|
gross, err := payvidlgmod.VideoCoinIncomeGross(start, end)
|
|
if err != nil {
|
|
return
|
|
}
|
|
ret.Gross = gross
|
|
ret.List = listDetail
|
|
return
|
|
}
|