migrate.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. package cmds
  2. import (
  3. "app/commons/config"
  4. "app/commons/core"
  5. "app/commons/model/entity"
  6. "fmt"
  7. "github.com/spf13/cobra"
  8. "gorm.io/gorm"
  9. )
  10. // 数据库迁移服务
  11. var migrateCmd = &cobra.Command{
  12. Use: "migrate",
  13. Short: "数据库迁移服务",
  14. Run: func(cmd *cobra.Command, args []string) {
  15. if err := cmd.Help(); err != nil {
  16. panic(err)
  17. }
  18. migrateMain(core.MainDb()) // 系统表迁移及基础数据初始化
  19. },
  20. }
  21. var dataInitCmd = &cobra.Command{
  22. Use: "data",
  23. Short: "数据迁移服务",
  24. Run: func(cmd *cobra.Command, args []string) {
  25. if err := cmd.Help(); err != nil {
  26. panic(err)
  27. }
  28. sysDataInit(core.MainDb()) // 数据初始化
  29. },
  30. }
  31. // MigrateTable 迁移表接口
  32. type MigrateTable interface {
  33. TableName() string
  34. Comment() string
  35. }
  36. var allTables = []MigrateTable{
  37. // 系统配置信息
  38. entity.NewSysSignConfig(),
  39. entity.NewAssetConfig(),
  40. entity.NewSysI18n(),
  41. entity.NewSysCoin(),
  42. entity.NewSysLevelConfig(),
  43. entity.NewSysJob(),
  44. // 用户
  45. entity.NewUser(),
  46. entity.NewUserQuota(),
  47. entity.NewUserLogs(),
  48. entity.NewUserRelationActionLog(),
  49. // 资产模块
  50. entity.NewAsset(),
  51. entity.NewAssetBill(),
  52. entity.NewAssetRwRecord(),
  53. entity.NewAssetRwCallbackLog(),
  54. // 新增指标模块
  55. entity.NewUserProfit(),
  56. entity.NewUserProfitRecord(),
  57. // 节点模块
  58. entity.NewNodeOrderPayments(),
  59. entity.NewNodeOrder(),
  60. entity.NewNodeInfo(),
  61. entity.NewNodeBanner(),
  62. // 业务模块
  63. entity.NewStakeProduct(), // 产品
  64. entity.NewStakeUserCurrentOrder(), // 活期订单
  65. entity.NewStakeUserCurrentOpsRecord(), // 活期操作记录
  66. //entity.NewStakeUserOrderPeriodSnapshot(), // 每期快照
  67. entity.NewStakeQueueInfo(), // 每气排队信息
  68. entity.NewStakePeriodJob(), // 每期任务
  69. // 促销活动模块
  70. entity.NewPromotionUpgradeLevel(), // 升级奖
  71. // DayTask模块
  72. entity.NewDtUser(),
  73. entity.NewDtUserLevel(),
  74. entity.NewDtUserSocial(),
  75. entity.NewDtUserPayment(),
  76. entity.NewDtTaskCategory(),
  77. entity.NewDtTask(),
  78. entity.NewDtTaskStep(),
  79. entity.NewDtUserTask(),
  80. entity.NewDtBalanceLog(),
  81. entity.NewDtWithdrawOrder(),
  82. entity.NewDtUserSign(),
  83. entity.NewDtNotice(),
  84. entity.NewDtBanner(),
  85. entity.NewDtMaterial(),
  86. entity.NewDtMaterialCategory(),
  87. entity.NewDtLeaderboardStats(),
  88. entity.NewDtLeaderboardReward(),
  89. entity.NewDtConfig(),
  90. entity.NewDtHelpCategory(),
  91. entity.NewDtHelp(),
  92. entity.NewDtCustomerService(),
  93. }
  94. func migrateMain(db *gorm.DB) {
  95. CurrentDatabase := db.Migrator().CurrentDatabase()
  96. core.Log.Info(fmt.Sprintf("当前数据库[%s]", CurrentDatabase))
  97. mTables := make([]MigrateTable, 0)
  98. mTables = append(mTables, allTables...)
  99. migrationTable(db, mTables) // 同步数据库结构
  100. core.Log.Info(fmt.Sprintf("数据库模型迁移完成"))
  101. }
  102. func sysDataInit(db *gorm.DB) {
  103. var err error
  104. defer func() {
  105. if err != nil {
  106. core.Log.Error(err.Error())
  107. } else {
  108. core.Log.Infof("系统基础数据初始化完成")
  109. }
  110. }()
  111. if err = sysSignInfoInit(db); err != nil {
  112. return
  113. }
  114. if err = entity.NewSysCoin().DataInit(db); err != nil {
  115. return
  116. }
  117. if err = entity.NewAssetConfig().DataInit(db); err != nil {
  118. return
  119. }
  120. if err = entity.NewSysLevelConfig().DataInit(db); err != nil {
  121. return
  122. }
  123. if err = entity.NewNodeInfo().DataInit(db); err != nil {
  124. return
  125. }
  126. if err = entity.NewStakeProduct().DataInit(db); err != nil {
  127. return
  128. }
  129. return
  130. }
  131. func migrationTable(db *gorm.DB, tables []MigrateTable) {
  132. for _, table := range tables {
  133. core.Log.Info(fmt.Sprintf("开始迁移[%s]表", table.TableName()))
  134. db = db.Set("gorm:table_options", "ENGINE=InnoDB")
  135. comment := fmt.Sprintf("COMMENT='%s'", table.Comment())
  136. db = db.Set("gorm:table_options", comment)
  137. err := db.Migrator().AutoMigrate(table)
  138. if err != nil {
  139. core.Log.Error(fmt.Sprintf("[%s]表迁移失败:%s", table.TableName(), err.Error()))
  140. }
  141. }
  142. }
  143. // 初始化系统签名信息
  144. func sysSignInfoInit(db *gorm.DB) error {
  145. var rows []entity.SysSignConfig
  146. // 初始化本系统密钥信息
  147. findRow := entity.NewSysSignConfig()
  148. err := db.Model(&entity.SysSignConfig{}).Where("sign_name", config.SignSystemName).Find(&findRow).Error
  149. if err != nil {
  150. return err
  151. }
  152. if findRow.Id == 0 {
  153. addr, pri, err := core.GenerateSysInfo()
  154. if err != nil {
  155. return err
  156. }
  157. rows = append(rows, entity.SysSignConfig{
  158. IsSystemSign: true,
  159. SignName: config.SignSystemName,
  160. SignAddress: addr,
  161. SignPriKey: pri,
  162. SignExpSec: 5,
  163. SysUrl: fmt.Sprintf("http://127.0.0.1:%d", config.BizHostPort),
  164. })
  165. rows = append(rows, entity.SysSignConfig{
  166. IsSystemSign: false,
  167. SignName: config.SignSystemAdminServerName,
  168. SignAddress: config.SignSystemAdminServerAddress,
  169. SignExpSec: 5,
  170. SysUrl: fmt.Sprintf("http://127.0.0.1:%d", config.AdminHostPort),
  171. })
  172. }
  173. if len(rows) > 0 {
  174. return db.Create(&rows).Error
  175. }
  176. return nil
  177. }