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 }