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

@@ -7,7 +7,6 @@ import (
"net/http"
"regexp"
"strings"
"time"
"be.ems/lib/config"
"be.ems/lib/core/ctx"
@@ -15,9 +14,9 @@ import (
"be.ems/lib/global"
"be.ems/lib/log"
"be.ems/lib/services"
"be.ems/src/framework/database/db"
"github.com/gorilla/mux"
"xorm.io/xorm"
)
type XormResponse struct {
@@ -62,56 +61,6 @@ var (
)
var XEngine *xorm.Engine
type DatabaseClient struct {
dbType string
dbUrl string
dbConnMaxLifetime time.Duration
dbMaxIdleConns int
dbMaxOpenConns int
IsShowSQL bool
XEngine *xorm.Engine
}
var DbClient DatabaseClient
func InitDbClient(dbType, dbUser, dbPassword, dbHost, dbPort, dbName, dbParam string) error {
// DbClient.dbUrl = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=true&loc=Local",
// dbUser, dbPassword, dbHost, dbPort, dbName)
DbClient.dbUrl = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?%s",
dbUser, dbPassword, dbHost, dbPort, dbName, dbParam)
DbClient.dbType = dbType
DbClient.dbConnMaxLifetime = 0
DbClient.dbMaxIdleConns = 0
DbClient.dbMaxOpenConns = 0
if log.GetLevel() == log.LOG_TRACE {
DbClient.IsShowSQL = true
}
log.Debugf("dbType:%s dbUrl:%s:", dbType, DbClient.dbUrl)
var err error
DbClient.XEngine, err = xorm.NewEngine(DbClient.dbType, DbClient.dbUrl)
if err != nil {
log.Error("Failed to connet database:", err)
return err
}
DbClient.XEngine.SetConnMaxLifetime(DbClient.dbConnMaxLifetime)
DbClient.XEngine.SetMaxIdleConns(DbClient.dbMaxIdleConns)
DbClient.XEngine.SetMaxOpenConns(DbClient.dbMaxOpenConns)
DbClient.XEngine.DatabaseTZ = time.Local // 必须
DbClient.XEngine.TZLocation = time.Local // 必须
if DbClient.IsShowSQL {
//DbClient.XEngine.SetLogger(&log.Elogger)
DbClient.XEngine.ShowSQL(true)
}
XEngine = DbClient.XEngine
return nil
}
func GetUriSQLArray(r *http.Request) []string {
var sa []string
vars := r.URL.Query()
@@ -181,17 +130,13 @@ func GetTableName(sql string) string {
func IsQuerySQL(s string) bool {
ts := strings.Trim(strings.ToLower(s), " ")
if strings.Index(ts, "select") != 0 {
return false
}
return true
return strings.Index(ts, "select") == 0
}
// xorm Get data from database
func ExtDatabaseExecSQL(w http.ResponseWriter, r *http.Request) {
log.Debug("ExtDatabaseExecSQL processing... ")
var sql []string
// var err error
// _, err = services.CheckExtValidRequest(w, r)
@@ -202,7 +147,7 @@ func ExtDatabaseExecSQL(w http.ResponseWriter, r *http.Request) {
//vars := mux.Vars(r)
//tblName := vars["objectTypeValue"]
sql = GetUriSQLArray(r)
var sql = GetUriSQLArray(r)
// select as must, todo ...
ls := services.ExtGetUriPageLimitString(r)
@@ -229,7 +174,7 @@ func ExtDatabaseExecSQL(w http.ResponseWriter, r *http.Request) {
querySQL = querySQL + " " + ls
}
log.Debug("querySQL:", querySQL)
rows, err := DbClient.XEngine.Exec(querySQL)
rows, err := db.RawDB("", querySQL, nil)
if err != nil {
log.Error("SQL failed:", err)
services.ResponseInternalServerError500DatabaseOperationFailed(w)
@@ -313,7 +258,7 @@ func ExtDatabaseGetData(w http.ResponseWriter, r *http.Request) {
querySQL = querySQL + " " + ls
}
log.Debug("querySQL:", querySQL)
rows, err := DbClient.XEngine.QueryInterface(querySQL)
rows, err := db.RawDB("", querySQL, nil)
if err != nil {
log.Error("SQL failed:", err)
services.ResponseInternalServerError500DatabaseOperationFailed(w)
@@ -374,20 +319,18 @@ func ExtDatabaseInsertData(w http.ResponseWriter, r *http.Request) {
tn, sql := dborm.ConstructInsertSQL(tbname, insertData)
log.Tracef("tn: %s sql :%s", tn, sql)
xSession := DbClient.XEngine.NewSession()
defer xSession.Close()
var affected int64
for _, s := range sql {
res, err := xSession.Exec(s)
n, err := db.ExecDB("", s, nil)
if err != nil {
log.Error("Insert failed:", err)
services.ResponseInternalServerError500DatabaseOperationFailed(w)
return
}
n, _ := res.RowsAffected()
affected = affected + n
}
xSession.Commit()
// affected, err := InsertDataWithJson(insertData)
mapRow := make(map[string]interface{})
row := map[string]interface{}{"affectedRows": affected}
@@ -440,20 +383,18 @@ func ExtDatabaseUpdateData(w http.ResponseWriter, r *http.Request) {
tn, sql := dborm.ConstructUpdateSQL(tbname, updateData, wc)
log.Tracef("tn: %s sql :%s", tn, sql)
xSession := DbClient.XEngine.NewSession()
defer xSession.Close()
var affected int64
for _, s := range sql {
res, err := xSession.Exec(s)
n, err := db.ExecDB("", s, nil)
if err != nil {
log.Error("Update failed:", err)
services.ResponseInternalServerError500DatabaseOperationFailed(w)
return
}
n, _ := res.RowsAffected()
affected = affected + n
}
xSession.Commit()
mapRow := make(map[string]interface{})
row := map[string]interface{}{"affectedRows": affected}
mapRow[tn] = row
@@ -494,16 +435,14 @@ func ExtDatabaseDeleteData(w http.ResponseWriter, r *http.Request) {
log.Debug("Table name:", tbname, "wc:", wc)
sql := dborm.ConstructDeleteSQL(tbname, wc)
xSession := DbClient.XEngine.NewSession()
defer xSession.Close()
res, err := xSession.Exec(sql)
affected, err := db.ExecDB("", sql, nil)
if err != nil {
log.Error("Update failed, err:", err)
services.ResponseInternalServerError500DatabaseOperationFailed(w)
return
}
affected, _ := res.RowsAffected()
xSession.Commit()
mapRow := make(map[string]interface{})
row := map[string]interface{}{"affectedRows": affected}
mapRow["data"] = row
@@ -515,7 +454,6 @@ func DatabaseGetData(w http.ResponseWriter, r *http.Request) {
log.Debug("DatabaseGetData processing... ")
var sql []string
var err error
// _, err = services.CheckFrontValidRequest(w, r)
// if err != nil {
@@ -546,7 +484,6 @@ func DatabaseGetData(w http.ResponseWriter, r *http.Request) {
for i, s := range sql {
log.Tracef("SQL[%d]: %s", i, sql[i])
rows := make([]map[string]interface{}, 0)
mapRows := make(map[string]interface{})
if s != "" {
@@ -561,7 +498,7 @@ func DatabaseGetData(w http.ResponseWriter, r *http.Request) {
querySQL = querySQL + " " + ls
}
log.Debug("querySQL:", querySQL)
rows, err = DbClient.XEngine.QueryInterface(querySQL)
rows, err := db.RawDB("", querySQL, nil)
if err != nil {
log.Error("QueryInterface failed:", err)
services.ResponseInternalServerError500ProcessError(w, err)
@@ -611,20 +548,18 @@ func DatabaseInsertData(w http.ResponseWriter, r *http.Request) {
tn, sql := dborm.ConstructInsertSQL(tableName, insertData)
log.Tracef("tn: %s sql :%s", tn, sql)
xSession := DbClient.XEngine.NewSession()
defer xSession.Close()
var affected int64
for _, s := range sql {
res, err := xSession.Exec(s)
n, err := db.ExecDB("", s, nil)
if err != nil {
log.Error("Insert failed:", err)
services.ResponseInternalServerError500DatabaseOperationFailed(w)
return
}
n, _ := res.RowsAffected()
affected = affected + n
}
xSession.Commit()
// affected, err := InsertDataWithJson(insertData)
mapRow := make(map[string]interface{})
row := map[string]interface{}{"affectedRows": affected}
@@ -653,20 +588,18 @@ func DatabaseUpdateData(w http.ResponseWriter, r *http.Request) {
tn, sql := dborm.ConstructUpdateSQL(tblName, updateData, wc)
log.Tracef("tn: %s sql :%s", tn, sql)
xSession := DbClient.XEngine.NewSession()
defer xSession.Close()
var affected int64
for _, s := range sql {
res, err := xSession.Exec(s)
n, err := db.ExecDB("", s, nil)
if err != nil {
log.Error("Update failed:", err)
services.ResponseInternalServerError500DatabaseOperationFailed(w)
return
}
n, _ := res.RowsAffected()
affected = affected + n
}
xSession.Commit()
mapRow := make(map[string]interface{})
row := map[string]interface{}{"affectedRows": affected}
mapRow[tn] = row
@@ -683,16 +616,14 @@ func DatabaseDeleteData(w http.ResponseWriter, r *http.Request) {
log.Debug("Table name:", tblName, "wc:", wc)
sql := dborm.ConstructDeleteSQL(tblName, wc)
xSession := DbClient.XEngine.NewSession()
defer xSession.Close()
res, err := xSession.Exec(sql)
affected, err := db.ExecDB("", sql, nil)
if err != nil {
log.Error("Update failed, err:", err)
services.ResponseInternalServerError500DatabaseOperationFailed(w)
return
}
affected, _ := res.RowsAffected()
xSession.Commit()
mapRow := make(map[string]interface{})
row := map[string]interface{}{"affectedRows": affected}
mapRow["data"] = row
@@ -701,15 +632,25 @@ func DatabaseDeleteData(w http.ResponseWriter, r *http.Request) {
// 连接用户实例
func DbConnection(w http.ResponseWriter, r *http.Request) {
if dborm.DbClient.XEngine == nil {
// 获取底层 SQL 数据库连接
sqlDB, err := db.DB("").DB()
if err != nil {
services.ResponseErrorWithJson(w, 400, "无连接")
return
}
// 测试数据库连接
err = sqlDB.Ping()
if err != nil {
services.ResponseErrorWithJson(w, 400, "无连接")
return
}
// 查询实例
result, err := dborm.DbClient.XEngine.QueryString("SHOW PROCESSLIST;")
result, err := db.RawDB("", "SHOW PROCESSLIST;", nil)
if err != nil {
services.ResponseErrorWithJson(w, 500, err.Error())
}
filterData := []map[string]string{}
filterData := []map[string]any{}
for _, r := range result {
if r["User"] != "system user" {
filterData = append(filterData, r)
@@ -724,15 +665,24 @@ func DbConnection(w http.ResponseWriter, r *http.Request) {
// 关闭数据库连接
func DbStop(w http.ResponseWriter, r *http.Request) {
if dborm.DbClient.XEngine == nil {
// 获取底层 SQL 数据库连接
sqlDB, err := db.DB("").DB()
if err != nil {
services.ResponseErrorWithJson(w, 400, "无连接")
return
}
// 测试数据库连接
err = sqlDB.Ping()
if err != nil {
services.ResponseErrorWithJson(w, 400, "无连接")
return
}
// json 請求參數獲取
var bodyArgs struct {
ID string `json:"ID" validate:"required"`
}
err := ctx.ShouldBindJSON(r, &bodyArgs)
err = ctx.ShouldBindJSON(r, &bodyArgs)
if err != nil {
log.Error("io.ReadAll is failed:", err)
services.ResponseErrorWithJson(w, 400, err.Error())
@@ -740,7 +690,7 @@ func DbStop(w http.ResponseWriter, r *http.Request) {
}
// 关闭
rse, err := dborm.DbClient.XEngine.Exec("KILL ?;", bodyArgs.ID)
rse, err := db.ExecDB("", "KILL ?;", []any{bodyArgs.ID})
if err != nil {
services.ResponseErrorWithJson(w, 500, err.Error())
return
@@ -752,12 +702,9 @@ func DbStop(w http.ResponseWriter, r *http.Request) {
func TaskDatabaseGetData(w http.ResponseWriter, r *http.Request) {
log.Debug("DatabaseGetData processing... ")
var sql []string
var err error
vars := mux.Vars(r)
tblName := vars["objectTypeValue"]
sql = GetUriSQLArray(r)
var sql = GetUriSQLArray(r)
// select as must, todo ...
if sql == nil {
@@ -778,12 +725,11 @@ func TaskDatabaseGetData(w http.ResponseWriter, r *http.Request) {
for i, s := range sql {
log.Tracef("SQL[%d]: %s", i, sql[i])
rows := make([]map[string]interface{}, 0)
mapRows := make(map[string]interface{})
if s != "" {
// err = XEngine.SQL(s).Find(&rows)
if IsQuerySQL(s) == false {
if !IsQuerySQL(s) {
services.ResponseNotAcceptable406QuerySQLError(w)
return
}
@@ -793,7 +739,7 @@ func TaskDatabaseGetData(w http.ResponseWriter, r *http.Request) {
querySQL = querySQL + " " + ls
}
log.Debug("querySQL:", querySQL)
rows, err = DbClient.XEngine.QueryInterface(querySQL)
rows, err := db.RawDB("", querySQL, nil)
if err != nil {
log.Error("SQL failed:", err)
services.ResponseInternalServerError500DatabaseOperationFailed(w)
@@ -830,20 +776,18 @@ func TaskDatabaseInsertData(w http.ResponseWriter, r *http.Request) {
tn, sql := dborm.ConstructInsertSQL(tableName, insertData)
log.Tracef("tn: %s sql :%s", tn, sql)
xSession := DbClient.XEngine.NewSession()
defer xSession.Close()
var affected int64
for _, s := range sql {
res, err := xSession.Exec(s)
n, err := db.ExecDB("", s, nil)
if err != nil {
log.Error("Insert failed:", err)
services.ResponseInternalServerError500DatabaseOperationFailed(w)
return
}
n, _ := res.RowsAffected()
affected = affected + n
}
xSession.Commit()
// affected, err := InsertDataWithJson(insertData)
mapRow := make(map[string]interface{})
row := map[string]interface{}{"affectedRows": affected}
@@ -872,20 +816,18 @@ func TaskDatabaseUpdateData(w http.ResponseWriter, r *http.Request) {
tn, sql := dborm.ConstructUpdateSQL(tblName, updateData, wc)
log.Tracef("tn: %s sql :%s", tn, sql)
xSession := DbClient.XEngine.NewSession()
defer xSession.Close()
var affected int64
for _, s := range sql {
res, err := xSession.Exec(s)
n, err := db.ExecDB("", s, nil)
if err != nil {
log.Error("Update failed:", err)
services.ResponseInternalServerError500DatabaseOperationFailed(w)
return
}
n, _ := res.RowsAffected()
affected = affected + n
}
xSession.Commit()
mapRow := make(map[string]interface{})
row := map[string]interface{}{"affectedRows": affected}
mapRow[tn] = row
@@ -902,16 +844,14 @@ func TaskDatabaseDeleteData(w http.ResponseWriter, r *http.Request) {
log.Debug("Table name:", tblName, "wc:", wc)
sql := dborm.ConstructDeleteSQL(tblName, wc)
xSession := DbClient.XEngine.NewSession()
defer xSession.Close()
res, err := xSession.Exec(sql)
affected, err := db.ExecDB("", sql, nil)
if err != nil {
log.Error("Update failed, err:", err)
services.ResponseInternalServerError500DatabaseOperationFailed(w)
return
}
affected, _ := res.RowsAffected()
xSession.Commit()
mapRow := make(map[string]interface{})
row := map[string]interface{}{"affectedRows": affected}
mapRow["data"] = row