diff --git a/resource/redisCli/util.go b/resource/redisCli/util.go index b6eb8a2de07831f0a907c9edb1f667665d2f70fa..82198906274c934496dca08327fb6c29920e7b02 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 d3d58fb6335f2021c7beb6cf089ac31b094bbbfe..d90abe09d62093da63ba98f175da3f2d05c258d9 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 0000000000000000000000000000000000000000..7b89ff278ca81cf867bdd8a2d37e8bbbc6f6e66a --- /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) + +}