| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- package core
- import (
- "fmt"
- "go_server/base/config"
- "go_server/model/system"
- "gorm.io/gorm"
- )
- // 数据库同步
- // MigrateTable 迁移表接口
- type MigrateTable interface {
- TableName() string
- Comment() string
- }
- var allTables = []MigrateTable{
- &system.Administrator{},
- &system.AdministratorLog{},
- &system.Role{},
- &system.Apis{},
- &system.Menus{},
- &system.Dictionaries{},
- &system.DictionaryDetail{},
- &system.FileJob{},
- &system.SysSignConfig{},
- }
- func Migrates() {
- db := MainDb()
- CurrentDatabase := db.Migrator().CurrentDatabase()
- Log.Info(fmt.Sprintf("当前数据库[%s]", CurrentDatabase))
- mTables := make([]MigrateTable, 0)
- mTables = append(mTables, allTables...)
- migrationTable(db, mTables) // 同步数据库结构
- sysDataInit(db) // 数据初始化
- sysSignInfoInit(db) // 系统交互密钥初始化
- Log.Info(fmt.Sprintf("数据库迁移完成"))
- }
- func sysDataInit(db *gorm.DB) {
- if err := system.NewAdministrator().DataInit(db); err != nil {
- Log.Error("error:", err.Error())
- }
- if err := system.NewApis().DataInit(db); err != nil {
- Log.Error("error:", err.Error())
- }
- if err := system.NewMenus().DataInit(db); err != nil {
- Log.Error("error:", err.Error())
- }
- if err := system.NewRole().DataInit(db); err != nil {
- Log.Error("error:", err.Error())
- }
- }
- // migrationTable 迁移数据表
- func migrationTable(db *gorm.DB, tables []MigrateTable) {
- for _, table := range tables {
- //slog.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 {
- Log.Error(fmt.Sprintf("[%s]表迁移失败:%s", table.TableName(), err.Error()))
- }
- Log.Info(fmt.Sprintf("[%s]表迁移完成", table.TableName()))
- }
- }
- const (
- SignKey = "sign"
- SignSystemName = "app" // 本系统名称 -- 用于接口交互时候身份识别
- SignSystemAdminServerName = "admin" // 管理后台服务
- )
- // 初始化系统签名信息
- func sysSignInfoInit(db *gorm.DB) {
- var rows []system.SysSignConfig
- // 初始化本系统密钥信息
- findRow := system.NewSysSignConfig()
- err := db.Model(&system.SysSignConfig{}).Where("sign_name", SignSystemAdminServerName).Find(&findRow).Error
- if err != nil {
- panic(err)
- }
- if findRow.ID == 0 {
- addr, pri, err := GenerateSysInfo()
- if err != nil {
- panic(err)
- }
- rows = append(rows, system.SysSignConfig{
- IsSystemSign: true,
- SignName: SignSystemAdminServerName,
- SignAddress: addr,
- SignPriKey: pri,
- SignExpSec: 5,
- SysUrl: fmt.Sprintf("http://127.0.0.1:%d", config.AdminHostPort),
- })
- //bizAddr, bizPri, err := GenerateSysInfo()
- //if err != nil {
- // panic(err)
- //}
- //rows = append(rows, system.SysSignConfig{
- // IsSystemSign: false,
- // SignName: SignSystemName,
- // SignAddress: bizAddr,
- // SignPriKey: bizPri,
- // SignExpSec: 5,
- // SysUrl: fmt.Sprintf("http://127.0.0.1:%d", config.BizHostPort),
- //})
- }
- if len(rows) > 0 {
- err = db.Create(&rows).Error
- if err != nil {
- panic(err)
- }
- }
- }
|