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
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 |
|
}
|
|
|