印度包网
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.
 
 
 

103 lines
3.1 KiB

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
}