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 }