package statistics import ( "fmt" "server/call" "server/common" "server/db" "server/modules/backend/app" "server/modules/backend/models" utils "server/modules/backend/util" "server/modules/backend/values" "time" "github.com/gin-gonic/gin" ) // 付费分析 func RechargeData(c *gin.Context) { a := app.NewApp(c) defer func() { a.Response() }() req := new(values.RechargeDataReq) if !a.S(req) { return } var oneDay int64 = 24 * 60 * 60 resp := values.RechargeDataResp1{} su, eu := utils.GetQueryUnix(req.Start, req.End) e := eu - int64(((req.Page-1)*req.Num)*24*60*60) s := e - int64((req.Num-1)*24*60*60) if s < su { s = su } resp.Count = (eu - su) / (24 * 60 * 60) for i := s; i < e; i += oneDay { j := i + oneDay resp.List = append([]values.OneRechargeData{GetRechargeData(i, j, req.ChannelID)}, resp.List...) } resp.Total = GetRechargeData(su, eu, req.ChannelID) a.Data = resp } func GetRechargeData(start, end int64, channel *int) values.OneRechargeData { var res values.OneRechargeData res.Date = time.Unix(start, 0).Format("20060102") if channel != nil { res.Channel = *channel } // 新玩家数 res.NewCount = models.GetNewPlayerCountBySql(channel, start, end) // s := time.Unix(start, 0).Format("2006-01-02") // e := time.Unix(end, 0).Format("2006-01-02") sqlr := fmt.Sprintf("(event = %v or event = %v) and status = %v and create_time >= %d and create_time < %d", common.CurrencyEventReCharge, common.CurrencyEventGMRecharge, common.StatusROrderPay, start, end) if channel != nil { sqlr = fmt.Sprintf("(event = %v or event = %v) and status = %v and create_time >= %d and create_time < %d and channel_id = %v", common.CurrencyEventReCharge, common.CurrencyEventGMRecharge, common.StatusROrderPay, start, end, *channel) } // 充值订单数 res.RechargeCount = db.Mysql().Count(&common.RechargeOrder{}, sqlr) // 充值用户数(新用户+老用户) res.RechargePlayerNum = models.GetPayCount(&start, &end, channel, nil) var gitTotal int64 db.Mysql().C().Model(&common.RechargeOrder{}).Where(sqlr).Count(&gitTotal) allGift := call.GetConfigPayProduct() for i := 0; i < len(allGift); i++ { var count int64 db.Mysql().C().Model(&common.RechargeOrder{}).Where(sqlr+" AND productid = ?", allGift[i].ProductID).Count(&count) var rec values.RechargeStatistics rec.GiftBag = allGift[i].ProductID rec.Count = count rec.RechargePer = utils.GetPer(count, gitTotal) res.RechargeStatisticsList = append(res.RechargeStatisticsList, rec) } // 充值总额 res.RechargeTotal = models.GetAmountTotalBySQL(start, end, channel) sql := fmt.Sprintf("event = %v and status = %v and create_time >= '%v' and create_time < '%v'", common.CurrencyEventWithDraw, common.StatusROrderFinish, start, end) if channel != nil { sql += fmt.Sprintf(" and channel_id = %v", *channel) } res.WithdrawTotal = db.Mysql().Sum(&common.RechargeOrder{}, sql, "amount") res.WRPer = utils.GetPer(res.WithdrawTotal, res.RechargeTotal) res.Profit = res.RechargeTotal - res.WithdrawTotal active := models.GetNewPlayerCountBySql(channel, start, end) + models.GetOldPlayerCountBySql(channel, start, end) res.ARPU = utils.GetPoint(res.RechargeTotal, active) res.ARPPU = utils.GetPoint(res.RechargeTotal, res.RechargePlayerNum) res.RechargePer = utils.GetPer(res.RechargePlayerNum, active) return res }