| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- 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.NewSysSignConfig(),
- entity.NewAssetConfig(),
- entity.NewSysI18n(),
- entity.NewSysCoin(),
- entity.NewSysLevelConfig(),
- entity.NewSysJob(),
- // 用户
- entity.NewUser(),
- entity.NewUserQuota(),
- entity.NewUserLogs(),
- 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.NewStakeUserOrderPeriodSnapshot(), // 每期快照
- entity.NewStakeQueueInfo(), // 每气排队信息
- entity.NewStakePeriodJob(), // 每期任务
- // 促销活动模块
- entity.NewPromotionUpgradeLevel(), // 升级奖
- // Telegram红包模块
- entity.NewTgRedPacket(), // 红包表
- entity.NewTgRedPacketRecord(), // 抢红包记录
- entity.NewTgUserBind(), // Telegram用户绑定
- entity.NewTgBindToken(), // Telegram绑定令牌
- }
- 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
- }
|