package version_local import ( "IotAdmin/app/other/models/tools" jobModels "IotAdmin/app/schedule/models" sysModels "IotAdmin/app/system/models" "IotAdmin/core/sdk/config" "IotAdmin/migration" "IotAdmin/migration/models" "errors" "runtime" "strconv" "gorm.io/gorm" ) /** 开发者项目的迁移脚本放在这个目录里,init写法参考version目录里的migrate或者自动生成 */ func init() { _, fileName, _, _ := runtime.Caller(0) migration.Migrate.SetVersion(migration.GetFilename(fileName)+"_init", systemDefaultDataInit) migration.Migrate.SetVersion(migration.GetFilename(fileName)+"_menu", systemDefaultMenu) } func systemDefaultDataInit(db *gorm.DB, version string) error { return db.Transaction(func(tx *gorm.DB) error { if config.DatabaseConfig.Driver == "mysql" { tx = tx.Set("gorm:table_options", "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4") } // 生成Table err := tx.Migrator().AutoMigrate( new(tools.SysTables), new(tools.SysColumns), new(sysModels.SysOrg), new(sysModels.SysConfig), new(sysModels.SysMenu), new(sysModels.SysLoginLog), new(sysModels.SysOperaLog), //new(sysModels.SysRoleDept), new(models.SysUser), new(models.SysRole), new(sysModels.SysPost), new(sysModels.SysDictData), new(sysModels.SysDictType), new(sysModels.SysConfig), new(sysModels.SysApi), new(jobModels.SysJob), ) if err != nil { return err } // 插入数据 if err := migration.InitDbData(tx); err != nil { return err } return tx.Create(&models.Migration{ Version: version, }).Error }) } func systemDefaultMenu(db *gorm.DB, version string) error { return db.Transaction(func(tx *gorm.DB) error { var list []sysModels.SysMenu err := tx.Model(&sysModels.SysMenu{}).Order("parent_id,menu_id").Find(&list).Error if err != nil { return err } for _, v := range list { if v.ParentId == 0 { v.Paths = "/0/" + strconv.Itoa(v.MenuId) } else { var e sysModels.SysMenu err = tx.Model(&sysModels.SysMenu{}).Where("menu_id=?", v.ParentId).First(&e).Error if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { continue } return err } v.Paths = e.Paths + "/" + strconv.Itoa(v.MenuId) } err = tx.Model(&v).Update("paths", v.Paths).Error if err != nil { return err } } return tx.Create(&models.Migration{ Version: version, }).Error }) }