|
|
|
|
package statistics
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"server/call"
|
|
|
|
|
"server/common"
|
|
|
|
|
"server/db"
|
|
|
|
|
"server/modules/backend/app"
|
|
|
|
|
"server/modules/backend/bdb"
|
|
|
|
|
utils "server/modules/backend/util"
|
|
|
|
|
"server/modules/backend/values"
|
|
|
|
|
"server/util"
|
|
|
|
|
"sort"
|
|
|
|
|
"strconv"
|
|
|
|
|
"strings"
|
|
|
|
|
"sync"
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
|
"github.com/olivere/elastic/v7"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// 应用概要
|
|
|
|
|
func ReviewAppSummary(c *gin.Context) {
|
|
|
|
|
a := app.NewApp(c)
|
|
|
|
|
defer func() {
|
|
|
|
|
a.Response()
|
|
|
|
|
}()
|
|
|
|
|
req := new(values.ReviewAppSummaryReq)
|
|
|
|
|
if !a.S(req) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
resp := values.ReviewAppSummaryResp{}
|
|
|
|
|
|
|
|
|
|
su, eu := utils.GetQueryUnix(req.Start, req.End)
|
|
|
|
|
zero := util.GetZeroTime(time.Now()).Unix()
|
|
|
|
|
channelArr := call.GetChannelList()
|
|
|
|
|
var tempChannelArr []int
|
|
|
|
|
|
|
|
|
|
for k := 0; k < len(channelArr); k++ {
|
|
|
|
|
if len(a.User.SChannels) > 0 {
|
|
|
|
|
if !util.SliceContain(a.User.SChannels, channelArr[k].ChannelID) {
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if req.IsShow {
|
|
|
|
|
if channelArr[k].Show == 2 {
|
|
|
|
|
tempChannelArr = append(tempChannelArr, channelArr[k].ChannelID)
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if channelArr[k].Show != 2 {
|
|
|
|
|
tempChannelArr = append(tempChannelArr, channelArr[k].ChannelID)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
group := new(sync.WaitGroup)
|
|
|
|
|
group.Add(len(tempChannelArr))
|
|
|
|
|
resp.PlatformData = make([]*values.ReviewData, len(tempChannelArr))
|
|
|
|
|
if eu >= zero {
|
|
|
|
|
for m := 0; m < len(tempChannelArr); m++ {
|
|
|
|
|
index := m
|
|
|
|
|
util.Go(func() {
|
|
|
|
|
one := values.GetReviewData(tempChannelArr[index])
|
|
|
|
|
if one == nil {
|
|
|
|
|
one = GetReviewPlatformData(su, eu, &tempChannelArr[index])
|
|
|
|
|
}
|
|
|
|
|
resp.PlatformData[index] = one
|
|
|
|
|
group.Done()
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
list := []*values.ReviewData{}
|
|
|
|
|
q := elastic.NewBoolQuery()
|
|
|
|
|
q.Filter(elastic.NewRangeQuery("Time").Gte(su))
|
|
|
|
|
q.Filter(elastic.NewRangeQuery("Time").Lt(eu))
|
|
|
|
|
db.ES().QueryList(common.ESIndexBackAppSummary, 0, 5000, q, &list)
|
|
|
|
|
|
|
|
|
|
for m := range tempChannelArr {
|
|
|
|
|
index := m
|
|
|
|
|
util.Go(func() {
|
|
|
|
|
var one *values.ReviewData
|
|
|
|
|
for i, v := range list {
|
|
|
|
|
if tempChannelArr[index] == v.PlatformID {
|
|
|
|
|
one = list[i]
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if one == nil {
|
|
|
|
|
one = GetReviewPlatformData(su, eu, &tempChannelArr[index])
|
|
|
|
|
one.Time = su
|
|
|
|
|
bdb.BackDB.Create(one)
|
|
|
|
|
}
|
|
|
|
|
resp.PlatformData[index] = one
|
|
|
|
|
group.Done()
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
group.Wait()
|
|
|
|
|
resp.Total = &values.ReviewData{}
|
|
|
|
|
// var newRigist, newPlayTime, oldPlayTime, activePlayTime, arppu, withdrawSuccess float64
|
|
|
|
|
var newRigist float64
|
|
|
|
|
if len(tempChannelArr) != 0 {
|
|
|
|
|
resp.Total.NewCount = 0
|
|
|
|
|
resp.Total.DownloadCount = 0
|
|
|
|
|
// resp.Total.NewPlayCount = 0
|
|
|
|
|
resp.Total.NewPayCount = 0
|
|
|
|
|
resp.Total.NewPayAmount = 0
|
|
|
|
|
// resp.Total.OldCount = 0
|
|
|
|
|
// resp.Total.OldPayCount = 0
|
|
|
|
|
// resp.Total.OldPayAmount = 0
|
|
|
|
|
// resp.Total.OldPlayCount = 0
|
|
|
|
|
resp.Total.ActiveCount = 0
|
|
|
|
|
// resp.Total.ActivePlayCount = 0
|
|
|
|
|
resp.Total.ActivePayCount = 0
|
|
|
|
|
resp.Total.RechargeTotal = 0
|
|
|
|
|
resp.Total.WithdrawTotal = 0
|
|
|
|
|
// resp.Total.WithdrawCount = 0
|
|
|
|
|
resp.Total.WithdrawPlayerNum = 0
|
|
|
|
|
|
|
|
|
|
for i := 0; i < len(resp.PlatformData); i++ {
|
|
|
|
|
resp.Total.NewCount += resp.PlatformData[i].NewCount
|
|
|
|
|
resp.Total.DownloadCount += resp.PlatformData[i].DownloadCount
|
|
|
|
|
// resp.Total.NewPlayCount += resp.PlatformData[i].NewPlayCount
|
|
|
|
|
resp.Total.NewPayCount += resp.PlatformData[i].NewPayCount
|
|
|
|
|
resp.Total.NewPayAmount += resp.PlatformData[i].NewPayAmount
|
|
|
|
|
// resp.Total.OldCount += resp.PlatformData[i].OldCount
|
|
|
|
|
// resp.Total.OldPayCount += resp.PlatformData[i].OldPayCount
|
|
|
|
|
// resp.Total.OldPayAmount += resp.PlatformData[i].OldPayAmount
|
|
|
|
|
// resp.Total.OldPlayCount += resp.PlatformData[i].OldPlayCount
|
|
|
|
|
resp.Total.ActiveCount += resp.PlatformData[i].ActiveCount
|
|
|
|
|
// resp.Total.ActivePlayCount += resp.PlatformData[i].ActivePlayCount
|
|
|
|
|
resp.Total.ActivePayCount += resp.PlatformData[i].ActivePayCount
|
|
|
|
|
resp.Total.RechargeTotal += resp.PlatformData[i].RechargeTotal
|
|
|
|
|
resp.Total.WithdrawTotal += resp.PlatformData[i].WithdrawTotal
|
|
|
|
|
// resp.Total.WithdrawCount += resp.PlatformData[i].WithdrawCount
|
|
|
|
|
resp.Total.WithdrawPlayerNum += resp.PlatformData[i].WithdrawPlayerNum
|
|
|
|
|
nr, _ := strconv.ParseFloat(strings.ReplaceAll(resp.PlatformData[i].NewRegisterPer, "%", ""), 64)
|
|
|
|
|
newRigist += nr
|
|
|
|
|
// np, _ := strconv.ParseFloat(resp.PlatformData[i].NewPlayTime, 64)
|
|
|
|
|
// newPlayTime += np
|
|
|
|
|
// op, _ := strconv.ParseFloat(resp.PlatformData[i].OldPlayTime, 64)
|
|
|
|
|
// oldPlayTime += op
|
|
|
|
|
// ap, _ := strconv.ParseFloat(resp.PlatformData[i].ActivePlayTime, 64)
|
|
|
|
|
// activePlayTime += ap
|
|
|
|
|
// ar, _ := strconv.ParseFloat(resp.PlatformData[i].ARPPU, 64)
|
|
|
|
|
// arppu += ar
|
|
|
|
|
// ws, _ := strconv.ParseFloat(strings.ReplaceAll(resp.PlatformData[i].EmailWithdrawSuccess, "%", ""), 64)
|
|
|
|
|
// withdrawSuccess += ws
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
resp.Total.NewRegisterPer = utils.GetPer(resp.Total.NewCount, resp.Total.DownloadCount)
|
|
|
|
|
resp.Total.NewPayPer = utils.GetPer(resp.Total.NewPayCount, resp.Total.NewCount)
|
|
|
|
|
// resp.Total.NewPlayPer = utils.GetPer(resp.Total.NewPlayCount, resp.Total.NewCount)
|
|
|
|
|
// resp.Total.NewARPU = utils.GetPoint(resp.Total.NewPayAmount, resp.Total.NewCount)
|
|
|
|
|
// resp.Total.OldPayPer = utils.GetPer(resp.Total.OldPayCount, resp.Total.OldCount)
|
|
|
|
|
// resp.Total.OldPlayPer = utils.GetPer(resp.Total.OldPlayCount, resp.Total.OldCount)
|
|
|
|
|
// resp.Total.ActivePayPer = utils.GetPer(resp.Total.ActivePayCount, resp.Total.ActiveCount)
|
|
|
|
|
// resp.Total.ActivePlayPer = utils.GetPer(resp.Total.ActivePlayCount, resp.Total.ActiveCount)
|
|
|
|
|
// resp.Total.ActiveARPU = utils.GetPoint(resp.Total.RechargeTotal, resp.Total.ActiveCount)
|
|
|
|
|
resp.Total.WithdrawPer = utils.GetPer(resp.Total.WithdrawTotal, resp.Total.RechargeTotal)
|
|
|
|
|
|
|
|
|
|
resp.Total.NewRegisterPer = utils.GetPer(int64(newRigist*100), int64(len(tempChannelArr))*10000)
|
|
|
|
|
// resp.Total.NewPlayTime = util.FormatFloat(newPlayTime/float64(len(tempChannelArr)), 2)
|
|
|
|
|
// resp.Total.OldPlayTime = util.FormatFloat(oldPlayTime/float64(len(tempChannelArr)), 2)
|
|
|
|
|
// resp.Total.ActivePlayTime = util.FormatFloat(activePlayTime/float64(len(tempChannelArr)), 2)
|
|
|
|
|
// resp.Total.ARPPU = util.FormatFloat(arppu/float64(len(tempChannelArr)), 2)
|
|
|
|
|
// resp.Total.EmailWithdrawSuccess = utils.GetPer(int64(withdrawSuccess*100), int64(len(tempChannelArr))*10000)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch req.Sort {
|
|
|
|
|
case 1:
|
|
|
|
|
// 注册用户排序
|
|
|
|
|
sort.SliceStable(resp.PlatformData, func(i, j int) bool {
|
|
|
|
|
return resp.PlatformData[i].NewCount > resp.PlatformData[j].NewCount
|
|
|
|
|
})
|
|
|
|
|
case 2:
|
|
|
|
|
// 活跃用户排序
|
|
|
|
|
sort.SliceStable(resp.PlatformData, func(i, j int) bool {
|
|
|
|
|
return resp.PlatformData[i].ActiveCount > resp.PlatformData[j].ActiveCount
|
|
|
|
|
})
|
|
|
|
|
case 3:
|
|
|
|
|
// 充值数排序
|
|
|
|
|
sort.SliceStable(resp.PlatformData, func(i, j int) bool {
|
|
|
|
|
return resp.PlatformData[i].RechargeTotal > resp.PlatformData[j].RechargeTotal
|
|
|
|
|
})
|
|
|
|
|
default:
|
|
|
|
|
// 注册用户排序
|
|
|
|
|
sort.SliceStable(resp.PlatformData, func(i, j int) bool {
|
|
|
|
|
return resp.PlatformData[i].NewCount > resp.PlatformData[j].NewCount
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
a.Data = resp
|
|
|
|
|
}
|