refactor: 重构更新多个文件中的相关调用
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user