feat: import services and standardize Go 1.26.5
This commit is contained in:
163
apps/base/mgt/internal/models/impl.go
Normal file
163
apps/base/mgt/internal/models/impl.go
Normal file
@@ -0,0 +1,163 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"strings"
|
||||
|
||||
"git.apinb.com/bsm-apps/mgt/internal/config"
|
||||
"git.apinb.com/bsm-sdk/core/database/sql"
|
||||
"git.apinb.com/bsm-sdk/core/types"
|
||||
"git.apinb.com/bsm-sdk/core/vars"
|
||||
|
||||
"gorm.io/driver/mysql"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
var (
|
||||
DBService *gorm.DB
|
||||
migrateTables = []any{
|
||||
&MgtUser{},
|
||||
&MgtDepartment{},
|
||||
&MgtRole{},
|
||||
&MgtPermission{},
|
||||
&MgtApplication{},
|
||||
&MgtLinkUserDpt{},
|
||||
&MgtLinkUserRole{},
|
||||
&MgtLinkUserPmn{},
|
||||
&MgtLinkUserApp{},
|
||||
&MgtLinkRolePmn{},
|
||||
&MgtLinkRoleApp{},
|
||||
&MgtLinkDptRole{},
|
||||
&MgtLinkDptPmn{},
|
||||
}
|
||||
)
|
||||
|
||||
func New(driver string, dsn []string, options *types.SqlOptions) (err error) {
|
||||
driver = strings.ToLower(driver)
|
||||
|
||||
switch driver {
|
||||
case "mysql":
|
||||
DBService, err = NewMysql(dsn, options)
|
||||
case "postgres":
|
||||
DBService, err = NewPostgres(dsn, options)
|
||||
default:
|
||||
log.Fatalln("Unsupported database driver:", driver)
|
||||
return
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
return err
|
||||
}
|
||||
log.Println("数据库连接成功")
|
||||
|
||||
// 注册自定义连接表
|
||||
setupRegister()
|
||||
|
||||
log.Println("自定义连接表注册成功")
|
||||
// 自动迁移表
|
||||
err = DBService.AutoMigrate(migrateTables...)
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
return err
|
||||
}
|
||||
log.Println("数据表迁移成功")
|
||||
|
||||
// 初始化管理员数据(幂等操作,如果已存在则跳过)
|
||||
if config.InitRootUserEnabled() {
|
||||
InitRootUserData()
|
||||
log.Println("管理员数据初始化完成(如已存在则跳过)")
|
||||
} else {
|
||||
log.Println("已跳过管理员数据初始化(InitRootUser=false)")
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func NewMysql(dsn []string, options *types.SqlOptions) (gormDb *gorm.DB, err error) {
|
||||
//set connection default val.
|
||||
if options == nil {
|
||||
maxIdleConns := vars.SqlOptionMaxIdleConns
|
||||
// MaxOpenConns 应该大于 MaxIdleConns,通常设置为 MaxIdleConns * 2 或更大
|
||||
maxOpenConns := maxIdleConns * 2
|
||||
if maxOpenConns < 10 {
|
||||
maxOpenConns = 10 // 确保最小值
|
||||
}
|
||||
options = &types.SqlOptions{
|
||||
MaxIdleConns: maxIdleConns,
|
||||
MaxOpenConns: maxOpenConns,
|
||||
ConnMaxLifetime: vars.SqlOptionConnMaxLifetime,
|
||||
LogStdout: false,
|
||||
Debug: true,
|
||||
}
|
||||
} else {
|
||||
// 如果传入了options但MaxOpenConns未设置或小于MaxIdleConns,则自动调整
|
||||
if options.MaxOpenConns <= 0 || options.MaxOpenConns < options.MaxIdleConns {
|
||||
maxOpenConns := options.MaxIdleConns * 2
|
||||
if maxOpenConns < 10 {
|
||||
maxOpenConns = 10
|
||||
}
|
||||
options.MaxOpenConns = maxOpenConns
|
||||
}
|
||||
}
|
||||
|
||||
gormDb, err = gorm.Open(mysql.Open(dsn[0]), &gorm.Config{
|
||||
SkipDefaultTransaction: true,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if options.Debug {
|
||||
gormDb = gormDb.Debug()
|
||||
}
|
||||
|
||||
// 获取通用数据库对象 sql.DB ,然后使用其提供的功能
|
||||
sqlDB, _ := gormDb.DB()
|
||||
// SetMaxIdleConns 用于设置连接池中空闲连接的最大数量。
|
||||
sqlDB.SetMaxIdleConns(options.MaxIdleConns)
|
||||
// SetMaxOpenConns 设置打开数据库连接的最大数量。
|
||||
sqlDB.SetMaxOpenConns(options.MaxOpenConns)
|
||||
// SetConnMaxLifetime 设置了连接可复用的最大时间。
|
||||
sqlDB.SetConnMaxLifetime(options.ConnMaxLifetime)
|
||||
|
||||
return gormDb, nil
|
||||
}
|
||||
|
||||
func NewPostgres(dsn []string, options *types.SqlOptions) (gormDb *gorm.DB, err error) {
|
||||
fmt.Println(dsn[0])
|
||||
|
||||
//set connection default val.
|
||||
if options == nil {
|
||||
maxIdleConns := vars.SqlOptionMaxIdleConns
|
||||
// MaxOpenConns 应该大于 MaxIdleConns,通常设置为 MaxIdleConns * 2 或更大
|
||||
maxOpenConns := maxIdleConns * 2
|
||||
if maxOpenConns < 10 {
|
||||
maxOpenConns = 10 // 确保最小值
|
||||
}
|
||||
options = &types.SqlOptions{
|
||||
MaxIdleConns: maxIdleConns,
|
||||
MaxOpenConns: maxOpenConns,
|
||||
ConnMaxLifetime: vars.SqlOptionConnMaxLifetime,
|
||||
LogStdout: false,
|
||||
Debug: true,
|
||||
}
|
||||
} else {
|
||||
// 如果传入了options但MaxOpenConns未设置或小于MaxIdleConns,则自动调整
|
||||
if options.MaxOpenConns <= 0 || options.MaxOpenConns < options.MaxIdleConns {
|
||||
maxOpenConns := options.MaxIdleConns * 2
|
||||
if maxOpenConns < 10 {
|
||||
maxOpenConns = 10
|
||||
}
|
||||
options.MaxOpenConns = maxOpenConns
|
||||
}
|
||||
}
|
||||
|
||||
db, err := sql.NewPostgreSql(dsn[0], options)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return db, nil
|
||||
}
|
||||
Reference in New Issue
Block a user