refactor: 重构更新多个文件中的相关调用

This commit is contained in:
TsMask
2025-02-20 10:11:40 +08:00
parent f3c33b31ac
commit 5b9bcd6660
34 changed files with 1243 additions and 1894 deletions

View File

@@ -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
}

View File

@@ -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... ")