Commit 85a4d65a authored by hujiebin's avatar hujiebin

svip_history_top

parent 6a86c06f
......@@ -38,3 +38,5 @@ clear_redis:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o clear_redis clear_redis.go
charge_history_sum:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o charge_history_sum charge_history_sum.go
svip_history_top:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o svip_history_top svip_history_top.go
package main
import (
"fmt"
"git.hilo.cn/hilo-common/script/mysql"
"github.com/tealeg/xlsx"
"gorm.io/gorm"
)
type SvipHistoryData struct {
UserId uint64
Code string
Area string
Country string
SvipTopLevel int
SvipLevel int
Dollar float64 // 累充金额$
}
func ats41(a interface{}) string {
return fmt.Sprintf("%v", a)
}
func main() {
var data []SvipHistoryData
if err := mysql.ProdReadOnlyDB.Raw("select t.*,CASE area WHEN 1 THEN '阿语' ELSE '非阿语' END as area FROM (SELECT user_id,replace(MAX(remark),\"Become SVIP\",\"\") svip_top_level,code,country FROM `user_svip_detail` d,user u where u.id = d.user_id AND remark like '%Become SVIP%' GROUP BY user_id) t,res_country r where t.country = r.name").Find(&data).Error; err != nil {
panic(err)
}
var userIds []uint64
for _, d := range data {
userIds = append(userIds, d.UserId)
}
type ChargeData struct {
UserId uint64
Code string
Dollar float64
Country string
}
var chargeDatas []ChargeData
chargeMap := make(map[uint64]ChargeData)
if err := mysql.ProdReadOnlyDB.Raw("select id as user_id,code,SUM(dollar) as dollar,country FROM "+
"(select u.id,u.`code`,SUM(price) / 100 as dollar,u.country FROM pay_order p, `user` u where u.id = p.user_id AND p.`status` = 2 AND `type` = 0 group by user_id UNION ALL select u.id,u.code,SUM(dollar) / 100 as dollar,u.country FROM dealer_transfer_detail d, `user` u where u.id = d.receiver_id group by receiver_id UNION ALL "+
"select u.id,u.code,SUM(dollar) / 100 as dollar,u.country FROM dealer_transfer_detail_pink d, `user` u where u.id = d.receiver_id group by receiver_id) t "+
"where t.id in ? group by code order by dollar DESC", userIds).Find(&chargeDatas).Error; err != nil {
panic(err)
}
for i, v := range chargeDatas {
chargeMap[v.UserId] = chargeDatas[i]
}
for i, uc := range data {
data[i].SvipLevel = GetUserSvip2(uc.UserId)
if d, ok := chargeMap[uc.UserId]; ok {
data[i].Dollar = d.Dollar
}
//break
}
excelFileName := fmt.Sprintf("./svip历史充值.xlsx")
xlFile := xlsx.NewFile()
sheet, err := xlFile.AddSheet("charge")
if err != nil {
panic(err)
}
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 = "用户ID", "最高svip等级", "区域", "国家", "目前SVIP等级", "累计充值$"
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.Value, c2.Value, c3.Value, c4.Value, c5.Value, c6.Value = d.Code, ats41(d.SvipTopLevel), ats41(d.Area), ats41(d.Country), ats41(d.SvipLevel), ats41(d.Dollar)
}
_ = xlFile.Save(excelFileName)
}
func GetUserSvip2(uid uint64) int {
type UserSvip struct {
UserId uint64
Level int
}
var res UserSvip
if err := mysql.ProdReadOnlyDB.Table("user_svip").Where("user_id = ?", uid).First(&res).Error; err != nil {
if err != gorm.ErrRecordNotFound {
panic(err)
}
}
return res.Level
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment