slot_user_charge.go 3.33 KB
Newer Older
hujiebin's avatar
hujiebin committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
package main

import (
	"fmt"
	"git.hilo.cn/hilo-common/script/model"
	"git.hilo.cn/hilo-common/script/mysql"
	"github.com/tealeg/xlsx"
)

type SlotChargeData struct {
	Period string
	UserId uint64
	Code   string
	Stake  uint64
	Award  uint64
	Charge int64
}

var bt22 = "2023-03-28 00:00:00"
var et22 = "2023-03-29 00:00:00"

func ct(c string, arr []string) bool {
	for _, v := range arr {
		if c == v {
			return true
		}
	}
	return false
}

func ats22(a interface{}) string {
	return fmt.Sprintf("%v", a)
}

func main() {
	var countries []string
	if err := mysql.ProdReadOnlyDB.Table("res_country").Where("area = 1").Select("name").Find(&countries).Error; err != nil {
		panic(err)
	}
	var rows []SlotChargeData
	if err := mysql.ProdReadOnlyDB.Table("act_slot_day_rank_area").Where("`period` = '2023-03-28' AND `area` = 1").Select("period,user_id,stake,award").Find(&rows).Error; err != nil {
		panic(err)
	}
	var data []SlotChargeData
	for _, v := range rows {
		u, err := GetUserById(v.UserId)
		if err != nil {
			panic(err)
		}
		if !ct(u.Country, countries) {
			continue
		}
		charge, _, err := GetChargeMoneyDiamond22(v.UserId)
		if err != nil {
			panic(err)
		}
		data = append(data, SlotChargeData{
			Period: v.Period,
			UserId: v.UserId,
			Code:   u.Code,
			Stake:  v.Stake,
			Award:  v.Award,
			Charge: charge,
		})
	}
	excelFileName := fmt.Sprintf("./slot%s.xlsx", "20230328")
	xlFile := xlsx.NewFile()
	sheet, err := xlFile.AddSheet("slot")
	if err != nil {
		panic(err)
	}
	row := sheet.AddRow()
	c1, c2, c3, c4, c5 := row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell()
	c1.Value, c2.Value, c3.Value, c4.Value, c5.Value = "period", "code", "投注金额", "中奖金额", "当日充值金额(美分)"
	for _, d := range data {
		row := sheet.AddRow()
		c1, c2, c3, c4, c5 := row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell()
		c1.Value, c2.Value, c3.Value, c4.Value, c5.Value = d.Period, d.Code, ats22(d.Stake), ats22(d.Award), ats22(d.Charge)
	}
	_ = xlFile.Save(excelFileName)
}

func GetUserById(id uint64) (model.User, error) {
	var u model.User
	if err := mysql.ProdReadOnlyDB.Model(model.User{}).Where("id = ?", id).First(&u).Error; err != nil {
		panic(err)
	}
	return u, nil
}

func GetChargeMoneyDiamond22(uid uint64) (int64, int64, error) {
	type R struct {
		Money   int64
		Diamond int64
	}
	var money R
	if err := mysql.ProdReadOnlyDB.Table("diamond_account_detail AS d").
		Joins("INNER JOIN pay_order AS p ON d.origin_id = p.id").
		Where("d.user_id in (?) AND operate_type in (?) AND add_reduce = 1",
			uid, []int{int(4), int(42), int(55), int(68)}).
		Where("d.created_time >= ? AND d.created_time < ?", bt22, et22).
		Order("d.user_id").
		Select("SUM(p.price) as money,SUM(d.num) as diamond").Scan(&money).Error; err != nil {
		return 0, 0, err
	}
	type R2 struct {
		Price   int64
		Diamond int64
	}
	var money2 R2
	if err := mysql.ProdReadOnlyDB.Table("diamond_account_detail AS d").
		Joins("INNER JOIN dealer_transfer_detail AS t ON d.origin_id = t.id").
		Where("d.user_id in (?) AND operate_type = ? AND add_reduce = 1",
			uid, 26).Select("SUM(t.dollar) as price,SUM(d.num) as diamond").
		Where("d.created_time >= ? AND d.created_time < ?", bt22, et22).
		Order("d.user_id").
		Scan(&money2).Error; err != nil {
		return 0, 0, err
	}
	return money.Money + money2.Price, money.Diamond + money2.Diamond, nil
}