main.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "math/rand"
  6. "os"
  7. "time"
  8. "github.com/bxcodec/faker/v3"
  9. "github.com/mhaya/game/game_cluster/internal/mdb/eventmodels"
  10. "gorm.io/driver/clickhouse"
  11. "gorm.io/gorm"
  12. "gorm.io/gorm/logger"
  13. )
  14. // `insert into assets_event_contents (user_id, user_name, tg_id, x_id, parent_user_id, is_robot, points_rank_seq,
  15. // throw_dice_rank_seq, invite_user_rank_seq, is_success, create_at, operation_type,
  16. // currency, reason, before_balance, amount, after_balance, server_id)
  17. // values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
  18. func main() {
  19. dsn := "clickhouse://default:123456@192.168.0.193:9000/default?dial_timeout=10s&read_timeout=20s"
  20. newLogger := logger.New(
  21. log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer(日志输出的地方,这里是标准输出)
  22. logger.Config{
  23. SlowThreshold: time.Second, // 慢 SQL 阈值
  24. LogLevel: logger.Info, // 日志级别
  25. Colorful: true, // 彩色打印
  26. },
  27. )
  28. db, err := gorm.Open(clickhouse.Open(dsn), &gorm.Config{
  29. Logger: newLogger,
  30. })
  31. if err != nil {
  32. panic("failed to connect database")
  33. }
  34. datas := make([]*eventmodels.AssetsEventContent, 0, 8)
  35. count := 100
  36. names := make([]string, 0, 8)
  37. for i := 0; i < 10; i++ {
  38. name := faker.Name()
  39. names = append(names, name)
  40. }
  41. server_id := "m-web-admin-1"
  42. for i := 0; i < count; i++ {
  43. index := rand.Intn(len(names))
  44. user_id := names[index]
  45. user_name := names[index]
  46. tg_id := faker.Name()
  47. x_id := faker.Name()
  48. parent_user_id := names[index]
  49. is_robot := false
  50. points_rank_seq := faker.RandomUnixTime()
  51. throw_dice_rank_seq := faker.RandomUnixTime()
  52. invite_user_rank_seq := faker.RandomUnixTime()
  53. is_success := func() bool {
  54. return rand.Intn(2) == 1
  55. }
  56. create_at := faker.RandomUnixTime()
  57. operation_type := func() string {
  58. if rand.Intn(2) == 1 {
  59. return "increase"
  60. }
  61. return "decrease"
  62. }
  63. currency := func() string {
  64. index := rand.Intn(3)
  65. if index == 1 {
  66. return "POINTS"
  67. }
  68. if index == 2 {
  69. return "TON"
  70. }
  71. return "USDT"
  72. }
  73. reason := func() string {
  74. if rand.Intn(2) == 1 {
  75. return "reason"
  76. }
  77. return ""
  78. }
  79. var before_balance int64
  80. var amount int64
  81. var after_balance int64
  82. before_balance = rand.Int63n(100000)
  83. amount = rand.Int63n(1000)
  84. after_balance = before_balance + amount
  85. // email := faker.Email()
  86. // address := faker.Address()
  87. // phone := faker.Phone()
  88. datas = append(datas, &eventmodels.AssetsEventContent{
  89. UserBasic: eventmodels.UserBasic{
  90. UserId: user_id,
  91. UserName: user_name,
  92. TgId: tg_id,
  93. XId: x_id,
  94. ParentUserId: parent_user_id,
  95. IsRobot: is_robot,
  96. PointsRankSeq: points_rank_seq,
  97. ThrowDiceRankSeq: throw_dice_rank_seq,
  98. InviteUserRankSeq: invite_user_rank_seq,
  99. },
  100. EventBasic: eventmodels.EventBasic{
  101. ServerId: server_id,
  102. IsSuccess: is_success(),
  103. CreateAt: create_at,
  104. },
  105. OperationType: operation_type(),
  106. Currency: currency(),
  107. Reason: reason(),
  108. BeforeBalance: before_balance,
  109. Amount: amount,
  110. AfterBalance: after_balance,
  111. })
  112. }
  113. err = db.CreateInBatches(datas, len(datas)).Error
  114. if err != nil {
  115. fmt.Printf("CreateInBatches error:%v", err)
  116. return
  117. }
  118. // sqlStr := `select SUM(amount) as total_amount from assets_event_contents where user_id = ? and currency = ?`
  119. var total_amount int64
  120. for _, name := range names {
  121. // err := db.Raw(sqlStr, name, "USDT").Pluck("SUM(amount) as total_amount", &total_amount).Error
  122. // if err != nil {
  123. // fmt.Printf("Pluck error:%v", err)
  124. // return
  125. // }
  126. where := &eventmodels.AssetsEventContent{
  127. UserBasic: eventmodels.UserBasic{
  128. UserId: name,
  129. // UserId: "1", // 不存在的用户
  130. },
  131. EventBasic: eventmodels.EventBasic{
  132. ServerId: server_id,
  133. },
  134. Currency: "USDT",
  135. }
  136. err := db.Model(&eventmodels.AssetsEventContent{}).Where(where).Pluck("SUM(amount) as total_amount", &total_amount).Error
  137. if err != nil {
  138. fmt.Printf("Pluck error:%v", err)
  139. return
  140. }
  141. fmt.Printf("name:%s total_amount:%v", name, total_amount)
  142. }
  143. }