refactor: 重构更新多个文件中的相关调用
This commit is contained in:
@@ -1,167 +0,0 @@
|
||||
package dborm
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"regexp"
|
||||
"time"
|
||||
|
||||
"gorm.io/driver/mysql"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/logger"
|
||||
)
|
||||
|
||||
// 数据库连接实例
|
||||
var dbgEngine *gorm.DB
|
||||
|
||||
// 载入连接日志配置
|
||||
func loadLogger() logger.Interface {
|
||||
newLogger := logger.New(
|
||||
log.New(os.Stdout, "[GORM] ", log.LstdFlags), // 将日志输出到控制台
|
||||
logger.Config{
|
||||
SlowThreshold: time.Second, // Slow SQL 阈值
|
||||
LogLevel: logger.Info, // 日志级别 Silent不输出任何日志
|
||||
ParameterizedQueries: false, // 参数化查询SQL 用实际值带入?的执行语句
|
||||
Colorful: false, // 彩色日志输出
|
||||
},
|
||||
)
|
||||
return newLogger
|
||||
}
|
||||
|
||||
// 连接数据库实例
|
||||
func InitGormConnect(dbType, dbUser, dbPassword, dbHost, dbPort, dbName, dbParam, dbLogging any) error {
|
||||
var dialector gorm.Dialector
|
||||
switch dbType {
|
||||
case "mysql":
|
||||
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?%s",
|
||||
dbUser,
|
||||
dbPassword,
|
||||
dbHost,
|
||||
dbPort,
|
||||
dbName,
|
||||
dbParam,
|
||||
)
|
||||
dialector = mysql.Open(dsn)
|
||||
default:
|
||||
err := fmt.Errorf("invalid type: %s", dbType)
|
||||
return err
|
||||
}
|
||||
opts := &gorm.Config{}
|
||||
// 是否需要日志输出
|
||||
if dbLogging.(bool) {
|
||||
opts.Logger = loadLogger()
|
||||
}
|
||||
// 创建连接
|
||||
db, err := gorm.Open(dialector, opts)
|
||||
if err != nil {
|
||||
log.Fatalf("failed to open: %s", err)
|
||||
return err
|
||||
}
|
||||
// 获取底层 SQL 数据库连接
|
||||
sqlDB, err := db.DB()
|
||||
if err != nil {
|
||||
log.Fatalf("failed to connect DB pool: %v", err)
|
||||
return err
|
||||
}
|
||||
// 测试数据库连接
|
||||
err = sqlDB.Ping()
|
||||
if err != nil {
|
||||
log.Fatalf("failed to ping database: %v", err)
|
||||
return err
|
||||
}
|
||||
dbgEngine = db
|
||||
return nil
|
||||
}
|
||||
|
||||
// 关闭数据库实例
|
||||
func Close() {
|
||||
sqlDB, err := dbgEngine.DB()
|
||||
if err != nil {
|
||||
log.Fatalf("failed to connect pool: %s", err)
|
||||
}
|
||||
if err := sqlDB.Close(); err != nil {
|
||||
log.Fatalf("failed to close: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
// default gorm DB
|
||||
func DefaultDB() *gorm.DB {
|
||||
return dbgEngine
|
||||
}
|
||||
|
||||
// get sql DB
|
||||
func GCoreDB() (*sql.DB, error) {
|
||||
return dbgEngine.DB()
|
||||
}
|
||||
|
||||
// RawSQL 原生查询语句
|
||||
func RawSQL(sql string, parameters []any) ([]map[string]any, error) {
|
||||
// 数据源
|
||||
db := DefaultDB()
|
||||
|
||||
// 使用正则表达式替换连续的空白字符为单个空格
|
||||
fmtSql := regexp.MustCompile(`\s+`).ReplaceAllString(sql, " ")
|
||||
|
||||
// logger.Infof("sql=> %v", fmtSql)
|
||||
// logger.Infof("parameters=> %v", parameters)
|
||||
|
||||
// 查询结果
|
||||
var rows []map[string]any
|
||||
res := db.Raw(fmtSql, parameters...).Scan(&rows)
|
||||
if res.Error != nil {
|
||||
return nil, res.Error
|
||||
}
|
||||
return rows, nil
|
||||
}
|
||||
|
||||
// ExecSQL 原生执行语句
|
||||
func ExecSQL(sql string, parameters []any) (int64, error) {
|
||||
// 数据源
|
||||
db := DefaultDB()
|
||||
|
||||
// 使用正则表达式替换连续的空白字符为单个空格
|
||||
fmtSql := regexp.MustCompile(`\s+`).ReplaceAllString(sql, " ")
|
||||
// 执行结果
|
||||
res := db.Exec(fmtSql, parameters...)
|
||||
if res.Error != nil {
|
||||
return 0, res.Error
|
||||
}
|
||||
return res.RowsAffected, nil
|
||||
}
|
||||
|
||||
func CloneTable(srcTable, dstTable string) error {
|
||||
// 获取表 A 的结构信息
|
||||
var columns []gorm.ColumnType
|
||||
dbMigrator := dbgEngine.Migrator()
|
||||
columns, err := dbMigrator.ColumnTypes(srcTable)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to ColumnTypes, %v", err)
|
||||
}
|
||||
|
||||
// 创建表 destination table
|
||||
err = dbMigrator.CreateTable(dstTable)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to CreateTable, %v", err)
|
||||
}
|
||||
// 复制表 src 的字段到表 dst
|
||||
for _, column := range columns {
|
||||
err = dbMigrator.AddColumn(dstTable, column.Name())
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to AddColumn, %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// 复制表 src 的主键和索引到表 dst
|
||||
err = dbMigrator.CreateConstraint(dstTable, "PRIMARY")
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to AddColumn, %v", err)
|
||||
}
|
||||
|
||||
err = dbMigrator.CreateConstraint(dstTable, "INDEX")
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to AddColumn, %v", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -518,66 +518,6 @@ type Period struct {
|
||||
End string `json:"End"`
|
||||
}
|
||||
|
||||
type KpiSetJ struct {
|
||||
Code string `json:"Code"` // 统计编码 如:SMFHA01
|
||||
KPIs []string `json:"KPIs` // 指标项集合 ["SMF.AttCreatePduSession", "SMF.AttCreatePduSession._Dnn"]
|
||||
}
|
||||
|
||||
type MeasureTask struct {
|
||||
Id int `json:"id" xorm:"pk 'id' autoincr"`
|
||||
NeType string `json:"neType" xorm:"ne_type"`
|
||||
NeIds []string `json:"neIds" xorm:"ne_ids"`
|
||||
KpiSet []KpiSetJ `json:"KPISet" xorm:"kpi_set"`
|
||||
StartTime string `json:"startTime" xorm:"start_time"`
|
||||
EndTime string `json:"endTime" xorm:"end_time"`
|
||||
Periods []Period `json:"Periods" xorm:"periods`
|
||||
Schedule []ScheduleJ `json:"Schedule" xorm:"schedule"`
|
||||
GranulOption string `json:"granulOption" xorm:"granul_option"`
|
||||
Status string `json:"status" xorm:"status"`
|
||||
AccountID string `json:"accountId" xorm:"account_id"`
|
||||
Comment string `json:"comment" xorm:"comment"`
|
||||
CreateTime string `json:"createTime" xorm:"create_time"`
|
||||
UpdateTime string `json:"updateTime" xorm:"update_time"`
|
||||
DeleteTime string `json:"deleteTime xorm:"delete_time"`
|
||||
}
|
||||
|
||||
func GetMeasureTask(taskId int) (*MeasureTask, error) {
|
||||
log.Debug("GetMeasureTask processing... ")
|
||||
|
||||
measureTask := new(MeasureTask)
|
||||
has, err := xEngine.Table("measure_task").Where("id=?", taskId).Get(measureTask)
|
||||
if err != nil || !has {
|
||||
log.Error("Failed to get table measure_task from database:", err)
|
||||
|
||||
return nil, err
|
||||
}
|
||||
|
||||
log.Debug("Measure Task:", measureTask)
|
||||
return measureTask, nil
|
||||
}
|
||||
|
||||
func XormGetActiveMeasureTask(measureTasks *[]MeasureTask) (*[]MeasureTask, error) {
|
||||
log.Debug("XormGetActiveMeasureTask processing... ")
|
||||
|
||||
measureTask := new(MeasureTask)
|
||||
rows, err := xEngine.Table("measure_task").Where("status='Active'").Rows(measureTask)
|
||||
if err != nil {
|
||||
log.Error("Failed to get table measure_task:", err)
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
for rows.Next() {
|
||||
err := rows.Scan(measureTask)
|
||||
if err != nil {
|
||||
log.Error("Failed to get table measure_task from database:", err)
|
||||
return nil, err
|
||||
}
|
||||
*measureTasks = append(*measureTasks, *measureTask)
|
||||
}
|
||||
log.Debug("measureTasks:", measureTasks)
|
||||
return measureTasks, nil
|
||||
}
|
||||
|
||||
func GetTableByWhere(whereCondition string, tableName string) (*[]interface{}, error) {
|
||||
log.Debug("GetTableByWhere processing... ")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user