From 902884c14e27e88ba5ee013e30e8292132fb9aab Mon Sep 17 00:00:00 2001 From: hujiebin Date: Wed, 9 Aug 2023 16:13:20 +0800 Subject: [PATCH] =?UTF-8?q?=20=E5=B0=9D=E8=AF=95=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/redisCli/util.go | 19 +++++++++++ script/Makefile | 2 ++ script/fruit_fix.go | 66 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 script/fruit_fix.go diff --git a/resource/redisCli/util.go b/resource/redisCli/util.go index b6eb8a2..8219890 100644 --- a/resource/redisCli/util.go +++ b/resource/redisCli/util.go @@ -36,6 +36,25 @@ func Lock(key string, expiration time.Duration) bool { return true } +// 尝试获取锁 +func TryLock(key string, expiration time.Duration) bool { + deadline := time.Now().Add(expiration) + for { + if time.Now().After(deadline) { + return false // 超时无法获取锁 + } + if Lock(key, expiration) { + return true + } + time.Sleep(time.Millisecond) + } +} + +// 删除锁 +func DelLock(key string) { + RedisClient.Del(context.Background(), key) +} + func GetCacheInt64(key string) (int64, error) { data, err := RedisClient.Get(context.Background(), key).Int64() if err != nil && err != redis.Nil { diff --git a/script/Makefile b/script/Makefile index d3d58fb..d90abe0 100644 --- a/script/Makefile +++ b/script/Makefile @@ -18,4 +18,6 @@ user_register_stat: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o user_register_stat user_register_stat.go h5_game_yellow: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o h5_game_yellow h5_game_yellow.go +fruit_fix: + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o fruit_fix fruit_fix.go diff --git a/script/fruit_fix.go b/script/fruit_fix.go new file mode 100644 index 0000000..7b89ff2 --- /dev/null +++ b/script/fruit_fix.go @@ -0,0 +1,66 @@ +package main + +import ( + "fmt" + "git.hilo.cn/hilo-common/script/mysql" + "github.com/tealeg/xlsx" + "gorm.io/gorm" +) + +var userIds = []uint64{3117191} + +type FruitMachine struct { + Date string + Round int64 + FruitId int +} + +type FruitMachineStake2 struct { + Stake int64 +} + +func main() { + var Plus = make(map[int]int64) // fruitId->plush + Plus[1] = 5 + Plus[2] = 5 + Plus[3] = 5 + Plus[4] = 5 + Plus[5] = 10 + Plus[6] = 15 + Plus[7] = 25 + Plus[8] = 45 + var data = make(map[uint64]int64) + for round := 194; round <= 216; round++ { + var fm = new(FruitMachine) + if err := mysql.ProdReadOnlyDB.Model(FruitMachine{}).Where("`date` = '2023-08-09'").Where("round = ?", round).First(fm).Error; err != nil { + panic(err) + } + for _, userId := range userIds { + var fs = new(FruitMachineStake2) + if err := mysql.ProdReadOnlyDB.Table("fruit_machine_stake"). + Where("`date` = '2023-08-09'"). + Where("round = ?", round). + Where("fruit_id = ?", fm.FruitId). + Where("user_id = ?", userId).First(&fs).Error; err != nil { + if err != gorm.ErrRecordNotFound { + panic(err) + } + continue + } + data[userId] += fs.Stake * Plus[fm.FruitId] + } + } + excelFileName := fmt.Sprintf("./水果机.xlsx") + xlFile := xlsx.NewFile() + sheet, _ := xlFile.AddSheet("charge") + row := sheet.AddRow() + c1, c2 := row.AddCell(), row.AddCell() + c1.Value, c2.Value = "userId", "should" + for userId, award := range data { + row := sheet.AddRow() + c1, c2 := row.AddCell(), row.AddCell() + c1.Value, c2.Value = fmt.Sprintf("%d", userId), fmt.Sprintf("%d", award) + } + _ = xlFile.Save(excelFileName) + +} -- 2.22.0