diff --git a/script/fruit_machine_charge.go b/script/fruit_machine_charge.go index fad9fac3a07d7cb694274b9dbf5713476f3a4e3c..6e6cc1d326565892ddb79b633f6438a5d060304d 100644 --- a/script/fruit_machine_charge.go +++ b/script/fruit_machine_charge.go @@ -8,13 +8,16 @@ import ( ) type FruitDayChargeData struct { - Date string // 日期 - FruitUserNum int // 水果机参与人数 - Recycle float64 // 总回收 M - DayChargeCnt int // 当日充值用户数 - DayChargeUserIds []uint64 // 当日充值用户id - DayChargeMoney int64 // 当日充值金额 - ChargeRecycle float64 // 充值用户回收 M + Date string // 日期 + FruitUserNum int // 水果机参与人数 + Recycle float64 // 总回收 M + DayChargeCnt int // 当日充值用户数 + DayChargeUserIds []uint64 // 当日充值用户id + DayChargeMoney int64 // 当日充值金额 + ChargeRecycle float64 // 充值用户回收 M + Top100DayChargeCnt int // 投注榜TOP100的充值用户数 + Top100DayChargeMoney int64 // 投注榜TOP100的当日充值金额 + Top100ChargeRecycle float64 // 投注榜TOP100的回收 } func ats2(a interface{}) string { @@ -33,10 +36,20 @@ func main() { var data []FruitDayChargeData for startTime.Before(endTime) { var userIds []uint64 + var top100UserIds []uint64 date := startTime.Format("2006-01-02") if err := mysql.ProdReadOnlyDB.Table("fruit_machine_stake").Where("`date` = ?", date).Group("user_id").Select("user_id").Scan(&userIds).Error; err != nil { panic(err) } + if err := mysql.ProdReadOnlyDB.Table("fruit_machine_stake").Where("`date` = ?", date).Group("user_id"). + Order("SUM(stake) DESC").Limit(100). + Select("user_id").Scan(&top100UserIds).Error; err != nil { + panic(err) + } + top100UserIdMap := make(map[uint64]struct{}) + for _, userId := range top100UserIds { + top100UserIdMap[userId] = struct{}{} + } um1, err := GetDateChargeUserAndMoney(date, userIds) if err != nil { panic(err) @@ -46,19 +59,33 @@ func main() { panic(err) } userChargeNum := make(map[uint64]struct{}) + top100UserChargeNum := make(map[uint64]struct{}) userChargeMoney := int64(0) + top100UserChargeMoney := int64(0) for _, um := range um1 { userChargeNum[um.UserId] = struct{}{} userChargeMoney += um.Money + if _, ok := top100UserIdMap[um.UserId]; ok { + top100UserChargeNum[um.UserId] = struct{}{} + top100UserChargeMoney += um.Money + } } for _, um := range um2 { userChargeNum[um.UserId] = struct{}{} userChargeMoney += um.Money + if _, ok := top100UserIdMap[um.UserId]; ok { + top100UserChargeNum[um.UserId] = struct{}{} + top100UserChargeMoney += um.Money + } } var chargeUserIds []uint64 for userId := range userChargeNum { chargeUserIds = append(chargeUserIds, userId) } + var top100ChargeUserIds []uint64 + for userId := range top100UserChargeNum { + top100ChargeUserIds = append(top100ChargeUserIds, userId) + } userNum, err := GetFruitUserNum(date) if err != nil { panic(err) @@ -71,14 +98,21 @@ func main() { if err != nil { panic(err) } + top100FruitChargeRecycle, err := GetFruitChargeRecycle(date, top100ChargeUserIds) + if err != nil { + panic(err) + } data = append(data, FruitDayChargeData{ - Date: date, - FruitUserNum: userNum, - Recycle: float64(fruitRecycle) * 0.05 / 1000000, // 1M - DayChargeCnt: len(userChargeNum), - DayChargeUserIds: userIds, - DayChargeMoney: userChargeMoney, - ChargeRecycle: float64(fruitChargeRecycle) * 0.05 / 1000000, // 1M + Date: date, + FruitUserNum: userNum, + Recycle: float64(fruitRecycle) * 0.05 / 1000000, // 1M + DayChargeCnt: len(userChargeNum), + DayChargeUserIds: userIds, + DayChargeMoney: userChargeMoney, + ChargeRecycle: float64(fruitChargeRecycle) * 0.05 / 1000000, // 1M + Top100DayChargeCnt: len(top100UserChargeNum), + Top100DayChargeMoney: top100UserChargeMoney, + Top100ChargeRecycle: float64(top100FruitChargeRecycle) * 0.05 / 1000000, // 1M }) startTime = startTime.AddDate(0, 0, 1) } @@ -87,12 +121,14 @@ func main() { xlFile := xlsx.NewFile() sheet, _ := xlFile.AddSheet("charge") row := sheet.AddRow() - c1, c2, c3, c4, c5, c6 := row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell() - c1.Value, c2.Value, c3.Value, c4.Value, c5.Value, c6.Value = "日期", "参与人数", "总回收 M", "当日充值用户数", "当日充值金额(美分)", "充值用户回收 M" + c1, c2, c3, c4, c5, c6, c7, c8, c9 := row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell() + c1.Value, c2.Value, c3.Value, c4.Value, c5.Value, c6.Value, c7.Value, c8.Value, c9.Value = "日期", "参与人数", "总回收 M", "当日充值用户数", "当日充值金额(美分)", "充值用户回收 M", + "投注榜TOP100的充值用户数", "投注榜TOP100的当日充值金额(美分)", "投注榜TOP100的回收" for _, d := range data { row := sheet.AddRow() - c1, c2, c3, c4, c5, c6 := row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell() + c1, c2, c3, c4, c5, c6, c7, c8, c9 := row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell() c1.Value, c2.Value, c3.Value, c4.Value, c5.Value, c6.Value = d.Date, ats2(d.FruitUserNum), ats2(d.Recycle), ats2(d.DayChargeCnt), ats2(d.DayChargeMoney), ats2(d.ChargeRecycle) + c7.Value, c8.Value, c9.Value = ats2(d.Top100DayChargeCnt), ats2(d.Top100DayChargeMoney), ats2(d.Top100ChargeRecycle) } _ = xlFile.Save(excelFileName) }