| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- package cmds
- import (
- "app/commons/config"
- "app/commons/core"
- "app/commons/model/entity"
- "fmt"
- "github.com/spf13/cobra"
- "gorm.io/gorm"
- )
- // 数据库迁移服务
- var migrateCmd = &cobra.Command{
- Use: "migrate",
- Short: "数据库迁移服务",
- Run: func(cmd *cobra.Command, args []string) {
- if err := cmd.Help(); err != nil {
- panic(err)
- }
- migrateMain(core.MainDb()) // 系统表迁移及基础数据初始化
- },
- }
- var dataInitCmd = &cobra.Command{
- Use: "data",
- Short: "数据迁移服务",
- Run: func(cmd *cobra.Command, args []string) {
- if err := cmd.Help(); err != nil {
- panic(err)
- }
- sysDataInit(core.MainDb()) // 数据初始化
- },
- }
- // MigrateTable 迁移表接口
- type MigrateTable interface {
- TableName() string
- Comment() string
- }
- var allTables = []MigrateTable{
- // 系统表(仅保留必需的)
- // entity.NewSysI18n(), // 国际化
- entity.NewUserLogs(), // 用户操作日志(审计)
- // DayTask模块(核心业务表)
- entity.NewDtUser(),
- entity.NewDtUserLevel(),
- entity.NewDtUserSocial(),
- entity.NewDtUserPayment(),
- entity.NewDtTaskCategory(),
- entity.NewDtTask(),
- entity.NewDtTaskStep(),
- entity.NewDtUserTask(),
- entity.NewDtBalanceLog(),
- entity.NewDtWithdrawOrder(),
- entity.NewDtUserSign(),
- entity.NewDtNotice(),
- &entity.DtNoticeRead{},
- entity.NewDtBanner(),
- entity.NewDtMaterial(),
- entity.NewDtMaterialCategory(),
- entity.NewDtLeaderboardStats(),
- entity.NewDtLeaderboardReward(),
- entity.NewDtConfig(),
- entity.NewDtHelpCategory(),
- entity.NewDtHelp(),
- entity.NewDtCustomerService(),
- }
- // 其他业务模块的表(暂时不使用,需要时再启用)
- var deprecatedTables = []MigrateTable{
- // 系统配置信息
- // entity.NewSysSignConfig(),
- // entity.NewAssetConfig(),
- // entity.NewSysCoin(),
- // entity.NewSysLevelConfig(),
- // entity.NewSysJob(),
- // // 用户
- // entity.NewUser(),
- // entity.NewUserQuota(),
- // entity.NewUserRelationActionLog(),
- // // 资产模块
- // entity.NewAsset(),
- // entity.NewAssetBill(),
- // entity.NewAssetRwRecord(),
- // entity.NewAssetRwCallbackLog(),
- // // 新增指标模块
- // entity.NewUserProfit(),
- // entity.NewUserProfitRecord(),
- // // 节点模块
- // entity.NewNodeOrderPayments(),
- // entity.NewNodeOrder(),
- // entity.NewNodeInfo(),
- // entity.NewNodeBanner(),
- // // 业务模块
- // entity.NewStakeProduct(),
- // entity.NewStakeUserCurrentOrder(),
- // entity.NewStakeUserCurrentOpsRecord(),
- // entity.NewStakeQueueInfo(),
- // entity.NewStakePeriodJob(),
- // // 促销活动模块
- // entity.NewPromotionUpgradeLevel(),
- }
- func migrateMain(db *gorm.DB) {
- CurrentDatabase := db.Migrator().CurrentDatabase()
- core.Log.Info(fmt.Sprintf("当前数据库[%s]", CurrentDatabase))
- mTables := make([]MigrateTable, 0)
- mTables = append(mTables, allTables...)
- migrationTable(db, mTables) // 同步数据库结构
- core.Log.Info(fmt.Sprintf("数据库模型迁移完成"))
- }
- func sysDataInit(db *gorm.DB) {
- var err error
- defer func() {
- if err != nil {
- core.Log.Error(err.Error())
- } else {
- core.Log.Infof("系统基础数据初始化完成")
- }
- }()
- if err = sysSignInfoInit(db); err != nil {
- return
- }
- if err = entity.NewSysCoin().DataInit(db); err != nil {
- return
- }
- if err = entity.NewAssetConfig().DataInit(db); err != nil {
- return
- }
- if err = entity.NewSysLevelConfig().DataInit(db); err != nil {
- return
- }
- if err = entity.NewNodeInfo().DataInit(db); err != nil {
- return
- }
- if err = entity.NewStakeProduct().DataInit(db); err != nil {
- return
- }
- return
- }
- func migrationTable(db *gorm.DB, tables []MigrateTable) {
- for _, table := range tables {
- core.Log.Info(fmt.Sprintf("开始迁移[%s]表", table.TableName()))
- db = db.Set("gorm:table_options", "ENGINE=InnoDB")
- comment := fmt.Sprintf("COMMENT='%s'", table.Comment())
- db = db.Set("gorm:table_options", comment)
- err := db.Migrator().AutoMigrate(table)
- if err != nil {
- core.Log.Error(fmt.Sprintf("[%s]表迁移失败:%s", table.TableName(), err.Error()))
- }
- }
- }
- // 初始化系统签名信息
- func sysSignInfoInit(db *gorm.DB) error {
- var rows []entity.SysSignConfig
- // 初始化本系统密钥信息
- findRow := entity.NewSysSignConfig()
- err := db.Model(&entity.SysSignConfig{}).Where("sign_name", config.SignSystemName).Find(&findRow).Error
- if err != nil {
- return err
- }
- if findRow.Id == 0 {
- addr, pri, err := core.GenerateSysInfo()
- if err != nil {
- return err
- }
- rows = append(rows, entity.SysSignConfig{
- IsSystemSign: true,
- SignName: config.SignSystemName,
- SignAddress: addr,
- SignPriKey: pri,
- SignExpSec: 5,
- SysUrl: fmt.Sprintf("http://127.0.0.1:%d", config.BizHostPort),
- })
- rows = append(rows, entity.SysSignConfig{
- IsSystemSign: false,
- SignName: config.SignSystemAdminServerName,
- SignAddress: config.SignSystemAdminServerAddress,
- SignExpSec: 5,
- SysUrl: fmt.Sprintf("http://127.0.0.1:%d", config.AdminHostPort),
- })
- }
- if len(rows) > 0 {
- return db.Create(&rows).Error
- }
- return nil
- }
|