You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
3.1 KiB
104 lines
3.1 KiB
|
1 year ago
|
package profit
|
||
|
|
|
||
|
|
import (
|
||
|
|
"github.com/gin-gonic/gin"
|
||
|
|
"server/common"
|
||
|
|
"server/modules/backend/app"
|
||
|
|
"server/modules/backend/models"
|
||
|
|
utils "server/modules/backend/util"
|
||
|
|
"server/modules/backend/values"
|
||
|
|
"server/util"
|
||
|
|
"time"
|
||
|
|
)
|
||
|
|
|
||
|
|
var playerProfitCache = make(map[int]map[int64]*values.PlayerProfitInfo)
|
||
|
|
|
||
|
|
func PlayerProfit(c *gin.Context) {
|
||
|
|
a := app.NewApp(c)
|
||
|
|
defer func() {
|
||
|
|
a.Response()
|
||
|
|
}()
|
||
|
|
|
||
|
|
req := new(values.PlayerProfitReq)
|
||
|
|
if !a.S(req) {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
resp := values.PlayerProfitResp{}
|
||
|
|
|
||
|
|
var oneDay int64 = 24 * 60 * 60
|
||
|
|
su, eu := utils.GetQueryUnix(req.Start, req.End)
|
||
|
|
|
||
|
|
zeroTime := util.GetZeroTime(time.Now()).Unix()
|
||
|
|
|
||
|
|
var channelId int
|
||
|
|
if req.Channel != nil {
|
||
|
|
channelId = *req.Channel
|
||
|
|
}
|
||
|
|
|
||
|
|
// 缓存数据
|
||
|
|
data := playerProfitCache[channelId]
|
||
|
|
var flag bool
|
||
|
|
if data == nil {
|
||
|
|
flag = true
|
||
|
|
} else {
|
||
|
|
if _, ok := data[zeroTime-oneDay]; !ok {
|
||
|
|
flag = true
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if flag {
|
||
|
|
temp := make(map[int64]*values.PlayerProfitInfo)
|
||
|
|
for i := zeroTime - 29*oneDay; i < zeroTime; i += oneDay {
|
||
|
|
temp[i] = getPlayerProfitInfo(i, i+oneDay, req.Channel)
|
||
|
|
}
|
||
|
|
playerProfitCache[channelId] = temp
|
||
|
|
}
|
||
|
|
|
||
|
|
// 缓存中读取数据
|
||
|
|
for i := su; i < eu; i += oneDay {
|
||
|
|
if val, ok := playerProfitCache[channelId]; ok {
|
||
|
|
if val[i] != nil {
|
||
|
|
var income common.ESIncomeStatistics
|
||
|
|
t := i
|
||
|
|
models.QueryOneIncome(&t, req.Channel, &income)
|
||
|
|
val[i].Investment = income.Investment
|
||
|
|
val[i].Period = income.Period
|
||
|
|
resp.List = append(resp.List, []*values.PlayerProfitInfo{val[i]}...)
|
||
|
|
} else {
|
||
|
|
resp.List = append(resp.List, []*values.PlayerProfitInfo{getPlayerProfitInfo(i, i+oneDay, req.Channel)}...)
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
resp.List = append(resp.List, []*values.PlayerProfitInfo{getPlayerProfitInfo(i, i+oneDay, req.Channel)}...)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
a.Data = resp
|
||
|
|
}
|
||
|
|
|
||
|
|
func getPlayerProfitInfo(su, eu int64, channel *int) *values.PlayerProfitInfo {
|
||
|
|
var playerProfitInfo values.PlayerProfitInfo
|
||
|
|
|
||
|
|
playerProfitInfo.Date = su
|
||
|
|
|
||
|
|
newPlayer := true
|
||
|
|
var income common.ESIncomeStatistics
|
||
|
|
|
||
|
|
models.QueryOneIncome(&su, channel, &income)
|
||
|
|
playerProfitInfo.Investment = income.Investment
|
||
|
|
playerProfitInfo.NewPlayer = models.GetNewPlayerCountBySql(channel, su, eu)
|
||
|
|
playerProfitInfo.TheDayPayCount = models.GetRechargePlayers(&su, &eu, channel, &newPlayer, "UID")
|
||
|
|
playerProfitInfo.TheDayPayPer = utils.GetPer(playerProfitInfo.TheDayPayCount, playerProfitInfo.NewPlayer)
|
||
|
|
playerProfitInfo.TheDayPayAmount = models.GetNewPayAmountBySql(channel, su, eu)
|
||
|
|
playerProfitInfo.TheDayAvgPayment = utils.GetPoint(playerProfitInfo.TheDayPayAmount, playerProfitInfo.TheDayPayCount)
|
||
|
|
playerProfitInfo.NextDayPayCount = models.GetPlayerCountByBirth(channel, su)
|
||
|
|
playerProfitInfo.NextPayAmount = models.GetAmountTotalByBirth(channel, su)
|
||
|
|
playerProfitInfo.NextDayPayPer = utils.GetPer(playerProfitInfo.NextDayPayCount, models.GetNextDayReserved(channel, su))
|
||
|
|
playerProfitInfo.PayCount = models.GetNewAllPayCountBySql(channel, su, eu)
|
||
|
|
playerProfitInfo.PayAmount = models.GetNewAllPayAmountBySql(channel, su)
|
||
|
|
playerProfitInfo.WithdrawAmount = models.GetNewAllWithDrawAmountBySql(channel, su)
|
||
|
|
playerProfitInfo.Period = income.Period
|
||
|
|
|
||
|
|
return &playerProfitInfo
|
||
|
|
}
|