migrate.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. package main
  2. import (
  3. "context"
  4. "database/sql"
  5. "encoding/json"
  6. "fmt"
  7. _ "github.com/go-sql-driver/mysql"
  8. "github.com/mhaya/game/game_cluster/internal/mdb/models"
  9. "go.mongodb.org/mongo-driver/mongo"
  10. "go.mongodb.org/mongo-driver/mongo/options"
  11. "log"
  12. "time"
  13. )
  14. // MySQL结构体
  15. type MySQLUser struct {
  16. Username string `json:"username"`
  17. Nickname string `json:"nickname"`
  18. Pid string `json:"pid"`
  19. Level int `json:"level"`
  20. Money float64 `json:"money"`
  21. Score int `json:"score"`
  22. Roll int `json:"roll"`
  23. Invite int `json:"invite"`
  24. AllRoll int `json:"allroll"`
  25. RollDay int `json:"rollday"`
  26. RollNums int `json:"rollnums"`
  27. RollDays int `json:"rolldays"`
  28. TonWall string `json:"tonwall"`
  29. DrawsNumber int `json:"drawsnumber"`
  30. DayLimit int `json:"daylimit"`
  31. Jump int `json:"jump"`
  32. DayRoll int `json:"dayroll"`
  33. DayInvite int `json:"dayinvite"`
  34. DatScore int `json:"datscore"`
  35. WallTon string `json:"wallton"`
  36. WallU string `json:"wallu"`
  37. RollOneStatus int `json:"rollonestatus"`
  38. FirstReward int `json:"firsteward"`
  39. }
  40. // MySQL 数据读取
  41. func readFromMySQL() ([]MySQLUser, error) {
  42. db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/dbname")
  43. if err != nil {
  44. return nil, err
  45. }
  46. defer db.Close()
  47. rows, err := db.Query("SELECT * FROM users")
  48. if err != nil {
  49. return nil, err
  50. }
  51. defer rows.Close()
  52. var users []MySQLUser
  53. for rows.Next() {
  54. var user MySQLUser
  55. err := rows.Scan(
  56. &user.Username,
  57. &user.Nickname,
  58. &user.Pid,
  59. &user.Level,
  60. &user.Money,
  61. &user.Score,
  62. &user.Roll,
  63. &user.Invite,
  64. &user.AllRoll,
  65. &user.RollDay,
  66. &user.RollNums,
  67. &user.RollDays,
  68. &user.TonWall,
  69. &user.DrawsNumber,
  70. &user.DayLimit,
  71. &user.Jump,
  72. &user.DayRoll,
  73. &user.DayInvite,
  74. &user.DatScore,
  75. &user.WallTon,
  76. &user.WallU,
  77. &user.RollOneStatus,
  78. &user.FirstReward,
  79. )
  80. if err != nil {
  81. return nil, err
  82. }
  83. users = append(users, user)
  84. }
  85. return users, nil
  86. }
  87. // 数据转换
  88. func convertToMongo(user MySQLUser) (models.Player, error) {
  89. var mongoUser models.Player
  90. err := json.Unmarshal([]byte(fmt.Sprintf(`%v`, user)), &mongoUser)
  91. if err != nil {
  92. return mongoUser, err
  93. }
  94. // 填充其他字段
  95. mongoUser.UserName = user.Username
  96. mongoUser.NickName = user.Nickname
  97. mongoUser.Pid = user.Pid
  98. mongoUser.Level = user.Level
  99. mongoUser.Exp = user.Score // 假设Exp和Score相同
  100. mongoUser.CreateTime = time.Now().Unix()
  101. mongoUser.UpdateTime = time.Now().Unix()
  102. mongoUser.DailyRefreshTime = time.Now().Unix()
  103. mongoUser.WeeklyRefreshTime = time.Now().Unix()
  104. //mongoUser.RollDay = user.RollDay
  105. mongoUser.Status = 1 // 默认状态
  106. mongoUser.Index = 1 // 默认索引
  107. mongoUser.TonWall = user.TonWall
  108. mongoUser.JoinTime = time.Now().Unix()
  109. mongoUser.JoinIP = "127.0.0.1"
  110. // 初始化其他结构体
  111. //mongoUser.Roll = &models.Roll{}
  112. //mongoUser.Share = &models.RShare{}
  113. //mongoUser.Item = models.RItemBasePack{}
  114. //mongoUser.SinIn = models.RSignIn{}
  115. //mongoUser.DailyTask = models.RDailyTask{}
  116. //mongoUser.AchieveTask = models.RAchieveTask{}
  117. //mongoUser.RankReward = models.RRankReward{}
  118. //mongoUser.Invite = models.RInvite{}
  119. //mongoUser.InviteReward = &models.RInviteReward{}
  120. //mongoUser.PlayerReward = make(map[int]*models.RPlayerRewardBase)
  121. return mongoUser, nil
  122. }
  123. // 插入MongoDB
  124. func insertIntoMongo(users []MySQLUser) error {
  125. clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
  126. client, err := mongo.Connect(context.TODO(), clientOptions)
  127. if err != nil {
  128. return err
  129. }
  130. defer client.Disconnect(context.TODO())
  131. collection := client.Database("game").Collection("players")
  132. for _, user := range users {
  133. mongoUser, err := convertToMongo(user)
  134. if err != nil {
  135. return err
  136. }
  137. _, err = collection.InsertOne(context.TODO(), mongoUser)
  138. if err != nil {
  139. return err
  140. }
  141. }
  142. return nil
  143. }
  144. // 主函数
  145. func main() {
  146. users, err := readFromMySQL()
  147. if err != nil {
  148. log.Fatal(err)
  149. }
  150. err = insertIntoMongo(users)
  151. if err != nil {
  152. log.Fatal(err)
  153. }
  154. log.Println("Data migration completed successfully.")
  155. }