| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- package db
- import (
- "go.uber.org/zap"
- "cold-delivery/app/admin/model"
- jobModel "cold-delivery/app/jobs/model"
- "fmt"
- "log"
- "os"
- "strings"
- "gorm.io/gorm"
- )
- // 执行数据迁移
- func AutoMigrateDB() {
- //自动迁移模式
- err := DB.Set("gorm:table_options", "charset=utf8mb4").
- AutoMigrate(
- &jobModel.SysJob{},
- &model.SysUser{},
- &model.SysRole{},
- &model.SysRoleMenu{},
- &model.SysMenu{},
- &model.SysDept{},
- &model.SysLoginLog{},
- &model.SysOperaLog{},
- &model.Address{},
- &model.AddressDefault{},
- &model.CoolerBox{},
- &model.Waybill{},
- &model.WaybillLogistics{},
- &model.WaybillTask{},
- &model.IceRaft{},
- &model.IceLocker{},
- &model.IceRaftRecord{},
- &model.CoolerBoxRecord{},
- &model.Drug{},
- &model.SysPost{},
- &model.SysPostMenu{},
- )
- if err != nil {
- zap.L().Panic("migrate db fail", zap.Error(err))
- }
- }
- // AutoSeedMenus 检查并初始化菜单数据
- func AutoSeedMenus() {
- var count int64
- DB.Table("sys_menu").Count(&count)
- if count > 0 {
- return
- }
- log.Println("sys_menu 表为空,开始初始化菜单数据...")
- err := ExecSqlFile(DB, "conf/menu_seed.sql")
- if err != nil {
- log.Printf("菜单数据初始化失败: %s", err.Error())
- } else {
- log.Println("菜单数据初始化完成")
- }
- }
- // ExecSqlFile 执行SQL文件
- func ExecSqlFile(db *gorm.DB, filePath string) error {
- sql, err := ioUtil(filePath)
- if err != nil {
- return fmt.Errorf("读取SQL文件失败: %s", err.Error())
- }
- tx := db.Begin()
- defer func() {
- if err != nil {
- tx.Rollback()
- } else {
- tx.Commit()
- }
- }()
- sqlList := strings.Split(sql, ";")
- for i := 0; i < len(sqlList)-1; i++ {
- s := strings.TrimSpace(sqlList[i])
- if s == "" || strings.HasPrefix(s, "--") {
- continue
- }
- s = sqlList[i] + ";"
- s = strings.Replace(s, "\n", "", -1)
- s = strings.TrimSpace(s)
- if s == ";" {
- continue
- }
- if err = tx.Exec(s).Error; err != nil {
- if !strings.Contains(err.Error(), "Query was empty") {
- log.Printf("error sql: %s", s)
- return err
- }
- }
- }
- return nil
- }
- func ioUtil(filePath string) (string, error) {
- contents, err := os.ReadFile(filePath)
- if err != nil {
- return "", err
- }
- return strings.Replace(string(contents), "\n", "", 1), nil
- }
|