25 changed files with 2194 additions and 137 deletions
@ -0,0 +1,111 @@ |
|||
package customerform |
|||
|
|||
import ( |
|||
"appPlatform/overall/publicmethod" |
|||
"encoding/json" |
|||
"fmt" |
|||
"strings" |
|||
|
|||
"gorm.io/gorm" |
|||
) |
|||
|
|||
/* |
|||
* |
|||
@ 作者: 秦东 |
|||
@ 时间: 2025-01-03 08:58:14 |
|||
@ 功能: 获取指定数据表所有字段 |
|||
@ 参数 |
|||
|
|||
# |
|||
|
|||
@ 返回值 |
|||
|
|||
# |
|||
|
|||
@ 方法原型 |
|||
|
|||
# |
|||
*/ |
|||
func GainFormAllField(sqlDb *gorm.DB, formName string) (fieldAry []Result, err error) { |
|||
sqlStr := fmt.Sprintf("SHOW FULL COLUMNS FROM `%v`", formName) |
|||
err = sqlDb.Raw(sqlStr).Scan(&fieldAry).Error |
|||
return |
|||
} |
|||
|
|||
func GainFormAllFieldList(sqlDb *gorm.DB, formName string) (fieldList []Result, err error) { |
|||
sqlStr := fmt.Sprintf("SHOW FULL COLUMNS FROM `%v`", formName) |
|||
err = sqlDb.Raw(sqlStr).Scan(&fieldList).Error |
|||
for i, v := range fieldList { |
|||
attFiled := strings.Split(v.Type, " ") |
|||
if len(attFiled) >= 2 { |
|||
fieldList[i].Attribute = attFiled[1] |
|||
fieldList[i].Type = attFiled[0] |
|||
|
|||
} |
|||
if v.Field == "id" { |
|||
fieldList[i].Comment = "Id" |
|||
} |
|||
patternInfo := strings.Split(v.Type, "(") |
|||
if len(patternInfo) >= 1 { |
|||
fieldList[i].Pattern = patternInfo[0] |
|||
} |
|||
} |
|||
return |
|||
} |
|||
|
|||
/* |
|||
* |
|||
@ 作者: 秦东 |
|||
@ 时间: 2025-01-03 09:09:54 |
|||
@ 功能: 处理数据源数据表 |
|||
@ 参数 |
|||
|
|||
# |
|||
|
|||
@ 返回值 |
|||
|
|||
# |
|||
|
|||
@ 方法原型 |
|||
|
|||
# |
|||
*/ |
|||
func (c *CustomerFormMaster) CreateActiveFormTable(sqlDb *gorm.DB, formName string) (relevance string, err error) { |
|||
tableFieldList, err := GainFormAllField(sqlDb, formName) //获取当前主表的字段
|
|||
var tableFormSqlAry FormTableSql |
|||
tableFormSqlAry.TableSubUnitAnalysis(c.Form.DataSourceConfig.TableKey, c.List, true, tableFieldList) |
|||
jsonStr, _ := json.Marshal(tableFormSqlAry) |
|||
fmt.Printf("数据表-----》%v\n", string(jsonStr)) |
|||
// 存在要新增或修改的主表字段
|
|||
if len(tableFormSqlAry.MasterSql) > 0 { |
|||
CreateDataSourceFormFiled(sqlDb, c.Form.DataSourceConfig.TableKey, c.Form.FormName, true, tableFormSqlAry.MasterSql) //添加主表字段
|
|||
} |
|||
sunFormNameAry := make(map[string]string) |
|||
var sunTableNameAry []string |
|||
//当存在子表时进行子表操作
|
|||
if len(tableFormSqlAry.SunSql) > 0 { |
|||
for _, v := range tableFormSqlAry.SunSql { |
|||
if len(v.SqlAry) > 0 { |
|||
sunFormTableName := v.TableName |
|||
if !publicmethod.IsInTrue[string](sunFormTableName, sunTableNameAry) { |
|||
sunTableNameAry = append(sunTableNameAry, sunFormTableName) |
|||
sunFormNameAry[v.TableName] = sunFormTableName |
|||
} else { |
|||
sunFormTableName = fmt.Sprintf("%v%v", v.TableName, publicmethod.GetUUid(1)) |
|||
sunTableNameAry = append(sunTableNameAry, sunFormTableName) |
|||
sunFormNameAry[v.TableName] = sunFormTableName |
|||
} |
|||
err = CreateDataSourceForm(sqlDb, sunFormTableName, fmt.Sprintf("%v(%v)子表", c.Form.FormName, c.Form.Name), "InnoDB", false) |
|||
// fmt.Printf("%v------->%v------->%v\n", sunFormTableName, err, v.SqlAry)
|
|||
if err == nil { |
|||
CreateDataSourceFormFiled(sqlDb, sunFormTableName, fmt.Sprintf("%v(%v)子表", c.Form.FormName, c.Form.Name), false, v.SqlAry) |
|||
} |
|||
} |
|||
} |
|||
} |
|||
if len(sunFormNameAry) > 0 { |
|||
relevanceByte, _ := json.Marshal(sunFormNameAry) |
|||
relevance = string(relevanceByte) |
|||
} |
|||
return |
|||
} |
|||
@ -0,0 +1,362 @@ |
|||
package datacenter |
|||
|
|||
import ( |
|||
"appPlatform/overall/publicmethod" |
|||
"encoding/json" |
|||
"errors" |
|||
"fmt" |
|||
"strings" |
|||
|
|||
"gorm.io/driver/mysql" |
|||
"gorm.io/driver/postgres" |
|||
"gorm.io/driver/sqlite" |
|||
"gorm.io/driver/sqlserver" |
|||
"gorm.io/gorm" |
|||
) |
|||
|
|||
/* |
|||
* |
|||
@ 作者: 秦东 |
|||
@ 时间: 2024-12-24 11:28:46 |
|||
@ 功能: 建立SqlServer |
|||
@ 参数 |
|||
|
|||
# |
|||
|
|||
@ 返回值 |
|||
|
|||
# |
|||
|
|||
@ 方法原型 |
|||
|
|||
# |
|||
*/ |
|||
func (c *DatabaseConfig) ConnectToSqlServer() (*gorm.DB, error) { |
|||
// connStr := "provider=SQLOLEDB;data source=你的服务器名;initial catalog=你的数据库名;user id=你的用户名;password=你的密码;"
|
|||
// db, err := sql.Open("adodb", connStr)
|
|||
// connStr := fmt.Sprintf("server=%v;user id=<%v>;password=<%v>;port=<%v>;database=<%v>;", c.Host,
|
|||
// c.User, c.Password, c.Port, c.Name)
|
|||
// db, err := sql.Open("mssql", connStr)
|
|||
dsn := fmt.Sprintf("sqlserver://gorm:LoremIpsum86@%v:%v?database=%v", c.Host, c.Port, c.Name) |
|||
db, err := gorm.Open(sqlserver.Open(dsn), &gorm.Config{}) |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
return db, nil |
|||
} |
|||
|
|||
/* |
|||
* |
|||
@ 作者: 秦东 |
|||
@ 时间: 2024-12-24 09:59:12 |
|||
@ 功能: 建立PostgreSQL |
|||
@ 参数 |
|||
|
|||
# |
|||
|
|||
@ 返回值 |
|||
|
|||
# |
|||
|
|||
@ 方法原型 |
|||
|
|||
# |
|||
*/ |
|||
func (c *DatabaseConfig) ConnectToPostgreSQL() (*gorm.DB, error) { |
|||
connStr := fmt.Sprintf("user=%s password=%s dbname=%s host=%s port=%d sslmode=disable", |
|||
c.User, c.Password, c.Name, c.Host, c.Port) |
|||
// db, err := sql.Open("postgres", connStr)
|
|||
db, err := gorm.Open(postgres.Open(connStr), &gorm.Config{}) |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
return db, nil |
|||
} |
|||
|
|||
/* |
|||
* |
|||
@ 作者: 秦东 |
|||
@ 时间: 2024-12-24 09:59:12 |
|||
@ 功能: 建立MySQL |
|||
@ 参数 |
|||
|
|||
# |
|||
|
|||
@ 返回值 |
|||
|
|||
# |
|||
|
|||
@ 方法原型 |
|||
|
|||
# |
|||
*/ |
|||
func (c *DatabaseConfig) ConnectToMySQL() (*gorm.DB, error) { |
|||
connStr := fmt.Sprintf("%v:%v@tcp(%v:%v)/%v?charset=utf8mb4", c.User, c.Password, c.Host, c.Port, c.Name) |
|||
// db, err := sql.Open("mysql", connStr)
|
|||
fmt.Printf("sqlOpen: %v\n", connStr) |
|||
|
|||
sqlConfig := mysql.Config{ |
|||
DSN: connStr, // DSN
|
|||
DefaultStringSize: 255, // string 类型字段的默认长度
|
|||
DisableDatetimePrecision: true, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持
|
|||
DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
|
|||
DontSupportRenameColumn: true, // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列
|
|||
SkipInitializeWithVersion: false, // 根据版本自动配置
|
|||
} |
|||
|
|||
db, err := gorm.Open(mysql.New(sqlConfig)) |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
|
|||
return db, nil |
|||
} |
|||
|
|||
/* |
|||
* |
|||
@ 作者: 秦东 |
|||
@ 时间: 2024-12-24 09:59:12 |
|||
@ 功能: 建立SQLite |
|||
@ 参数 |
|||
|
|||
# |
|||
|
|||
@ 返回值 |
|||
|
|||
# |
|||
|
|||
@ 方法原型 |
|||
|
|||
# |
|||
*/ |
|||
func (c *DatabaseConfig) ConnectToSQLite() (*gorm.DB, error) { |
|||
// db, err := sql.Open("sqlite3", c.Name)
|
|||
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{}) |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
return db, nil |
|||
} |
|||
|
|||
/* |
|||
* |
|||
@ 作者: 秦东 |
|||
@ 时间: 2024-12-24 16:25:17 |
|||
@ 功能: Tidb |
|||
@ 参数 |
|||
|
|||
# |
|||
|
|||
@ 返回值 |
|||
|
|||
# |
|||
|
|||
@ 方法原型 |
|||
|
|||
# |
|||
*/ |
|||
func (c *DatabaseConfig) ConnectToTiDb() (*gorm.DB, error) { |
|||
sql := fmt.Sprintf("%v:%v@tcp(%v:%v)/%v", c.User, c.Password, c.Host, c.Port, c.Name) |
|||
db, err := gorm.Open(mysql.Open(sql), &gorm.Config{}) |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
return db, nil |
|||
} |
|||
|
|||
/* |
|||
* |
|||
@ 作者: 秦东 |
|||
@ 时间: 2024-12-24 10:04:00 |
|||
@ 功能: 启动数据库 |
|||
@ 参数 |
|||
|
|||
# |
|||
|
|||
@ 返回值 |
|||
|
|||
# |
|||
|
|||
@ 方法原型 |
|||
|
|||
# |
|||
*/ |
|||
func (d *DataBastType) StartDataBast() (openDb *gorm.DB, err error) { |
|||
var configInfo DatabaseConfig |
|||
|
|||
configInfo.Name = d.DataBaseName |
|||
configInfo.Host = d.Ip |
|||
configInfo.Port = d.Port |
|||
configInfo.User = d.UserName |
|||
configInfo.Password = d.Pwd |
|||
switch strings.ToLower(d.Type) { |
|||
case "PostgreSQL", "postgresql", "postgre sql": |
|||
openDb, err = configInfo.ConnectToPostgreSQL() |
|||
case "MySQL", "mysql": |
|||
openDb, err = configInfo.ConnectToMySQL() |
|||
case "SQLite", "sqlite": |
|||
openDb, err = configInfo.ConnectToSQLite() |
|||
case "SqlServer", "sql server", "sqlserver": |
|||
openDb, err = configInfo.ConnectToSqlServer() |
|||
case "Tidb", "tidb", "TiDb", "TIDB": |
|||
openDb, err = configInfo.ConnectToMySQL() |
|||
default: |
|||
msg := fmt.Sprintf("对不起!当前不支持'%v'数据库。", d.DataBaseName) |
|||
err = errors.New(msg) |
|||
} |
|||
return |
|||
} |
|||
|
|||
/* |
|||
* |
|||
@ 作者: 秦东 |
|||
@ 时间: 2024-12-24 13:07:56 |
|||
@ 功能: 获取数据库中说有表 |
|||
@ 参数 |
|||
|
|||
# |
|||
|
|||
@ 返回值 |
|||
|
|||
# |
|||
|
|||
@ 方法原型 |
|||
|
|||
#获取数据库表comment |
|||
*/ |
|||
func (d *DataBastType) ObtainDataBaseAllTableMysql() (tableKeyValue []DataBaseTableInfo, err error) { |
|||
// tableKeyValue := publicmethod.MapOut[string]()
|
|||
sqlDb, err := d.StartDataBast() |
|||
if err != nil { |
|||
return |
|||
} |
|||
var valData []string |
|||
// // sql := fmt.Sprintf("SHOW %v", d.DataBaseName)
|
|||
sqlDb.Raw("SHOW TABLES").Scan(&valData) |
|||
// if err != nil {
|
|||
// return tableKeyValue, err
|
|||
// }
|
|||
// fmt.Println(rows)
|
|||
fmt.Printf("%T----->%v\n", valData, valData) |
|||
// var
|
|||
for _, v := range valData { |
|||
fmt.Printf("%T----->%v\n", v, v) |
|||
// sqlStr := fmt.Sprintf("SHOW `%v`", v)
|
|||
|
|||
// sql := "SELECT TABLE_NAME AS `Table`, TABLE_COMMENT AS `Table Comment` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ?"
|
|||
|
|||
// var list []Result
|
|||
// err = sqlDb.Raw(sqlStr).Scan(&list).Error
|
|||
// tableKeyValue[v] = list
|
|||
var tableName string |
|||
sql := fmt.Sprintf("SELECT TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = \"%v\" AND TABLE_NAME = \"%v\";", d.DataBaseName, v) |
|||
err = sqlDb.Raw(sql).Scan(&tableName).Error |
|||
// tableKeyValue[v] = tableInfo
|
|||
var tableInfo DataBaseTableInfo |
|||
tableInfo.TableName = tableName |
|||
tableInfo.TableKey = v |
|||
sqlStr := fmt.Sprintf("SHOW FULL COLUMNS FROM `%v`", v) |
|||
err = sqlDb.Raw(sqlStr).Scan(&tableInfo.Fields).Error |
|||
tableKeyValue = append(tableKeyValue, tableInfo) |
|||
} |
|||
// defer rows.Close()
|
|||
// var tableName []string
|
|||
// for rows.Next() {
|
|||
// var table string
|
|||
// err = rows.Scan(&table)
|
|||
// if err == nil {
|
|||
// tableName = append(tableName, table)
|
|||
// }
|
|||
// }
|
|||
// if len(tableName) > 0 {
|
|||
|
|||
// rows, err = sqlDb.Query("SHOW TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA IS NOT NULL")
|
|||
// for _,v := range tableName{
|
|||
// sql := fmt.Sprintf("SHOW TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = %v AND TABLE_NAME = %v",d.DataBaseName,v)
|
|||
// rows, err = sqlDb.Query("SHOW TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA IS NOT NULL")
|
|||
// }
|
|||
// if err != nil {
|
|||
// return tableKeyValue, err
|
|||
// }
|
|||
// defer rows.Close()
|
|||
|
|||
// var tableComments = make(map[string]string)
|
|||
// for rows.Next() {
|
|||
// var table, comment string
|
|||
// if err := rows.Scan(&table, &comment); err != nil {
|
|||
// // log.Fatal(err)
|
|||
// fmt.Printf("rows----err---->:%v\n", err)
|
|||
// }
|
|||
// tableComments[table] = comment
|
|||
// }
|
|||
// fmt.Printf("rows-------->:%v\n", tableComments)
|
|||
// }
|
|||
|
|||
return tableKeyValue, err |
|||
} |
|||
|
|||
/* |
|||
* |
|||
@ 作者: 秦东 |
|||
@ 时间: 2024-12-30 16:49:14 |
|||
@ 功能: 获取数据源 |
|||
@ 参数 |
|||
|
|||
# |
|||
|
|||
@ 返回值 |
|||
|
|||
# |
|||
|
|||
@ 方法原型 |
|||
|
|||
# |
|||
*/ |
|||
func GainDataStorce(dataId string) (openDb *gorm.DB, err error) { |
|||
sendUrl := fmt.Sprintf("http://120.224.6.6:29911/prod-api/database/app/datasource/page?pageNum=1&pageSize=%v&databaseName=&dataType=", 100000) |
|||
// fmt.Printf("1获取数据源===>%v\n", sendUrl)
|
|||
getData := publicmethod.CurlGet(sendUrl) |
|||
// fmt.Printf("2获取数据源===>%v\n", getData)
|
|||
var sendMap map[string]interface{} |
|||
json.Unmarshal(getData, &sendMap) |
|||
var sqlDb DataBastType |
|||
// fmt.Printf("3获取数据源===>%v\n", sendMap)
|
|||
if code, ok := sendMap["code"]; ok { |
|||
// fmt.Printf("4获取数据源===>%v\n", code)
|
|||
|
|||
codeInt, _ := publicmethod.StringToInt64(code) |
|||
if codeInt == 200 { |
|||
// jsonval, _ := json.Marshal(sendMap)
|
|||
// fmt.Printf("\n\n\n6获取数据源===>%v\n\n\n", string(jsonval))
|
|||
if dataval, isOk := sendMap["data"]; isOk { |
|||
if dataMap, ok := dataval.(map[string]interface{}); ok { |
|||
if records, isOk := dataMap["records"]; isOk { |
|||
if recordAry, isOk := records.([]interface{}); isOk { |
|||
for _, v := range recordAry { |
|||
if vMAp, ok := v.(map[string]interface{}); ok { |
|||
// fmt.Printf("5获取数据源===>%T\n===>%v\n\n\n", vMAp, vMAp["id"])
|
|||
idStr := publicmethod.TypeToInterface(vMAp["id"]) |
|||
if idStr == dataId { |
|||
typeVal, _ := publicmethod.StringToInt64(vMAp["datasourceType"]) |
|||
sqlDb.Type = publicmethod.DatabaseIntToString(typeVal) |
|||
sqlDb.Ip = publicmethod.TypeToInterface(vMAp["ipAddress"]) |
|||
sqlDb.DataBaseName = publicmethod.TypeToInterface(vMAp["databaseName"]) |
|||
sqlDb.Port, _ = publicmethod.StringToInt64(vMAp["port"]) |
|||
sqlDb.UserName = publicmethod.TypeToInterface(vMAp["account"]) |
|||
sqlDb.Pwd = publicmethod.TypeToInterface(vMAp["password"]) |
|||
} |
|||
|
|||
} |
|||
// fmt.Printf("5获取数据源===>%T\n===>%v\n\n\n", v, v)
|
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
} |
|||
} |
|||
} |
|||
// fmt.Printf("7获取数据源===>%T\n===>%v\n\n\n", sqlDb, sqlDb)
|
|||
openDb, err = sqlDb.StartDataBast() |
|||
return |
|||
} |
|||
@ -0,0 +1,58 @@ |
|||
package datacenter |
|||
|
|||
import ( |
|||
"appPlatform/overall/publicmethod" |
|||
"fmt" |
|||
|
|||
"github.com/gin-gonic/gin" |
|||
) |
|||
|
|||
/* |
|||
* |
|||
@ 作者: 秦东 |
|||
@ 时间: 2024-12-24 11:43:02 |
|||
@ 功能: 获取数据表 |
|||
@ 参数 |
|||
|
|||
# |
|||
|
|||
@ 返回值 |
|||
|
|||
# |
|||
|
|||
@ 方法原型 |
|||
|
|||
# |
|||
*/ |
|||
func (a *ApiMethod) GainDataTable(c *gin.Context) { |
|||
var requestData DataBastType |
|||
err := c.ShouldBindJSON(&requestData) |
|||
if err != nil { |
|||
publicmethod.Result(100, err, c) |
|||
return |
|||
} |
|||
if requestData.Type == "" { |
|||
publicmethod.Result(1, err, c, "未知数据库类型!请先确实是什么数据库类型!") |
|||
return |
|||
} |
|||
if requestData.DataBaseName == "" { |
|||
publicmethod.Result(1, err, c, "请输入数据库名称!") |
|||
return |
|||
} |
|||
if requestData.Ip == "" { |
|||
publicmethod.Result(1, err, c, "请输入数据库地址!") |
|||
return |
|||
} |
|||
|
|||
if requestData.UserName == "" { |
|||
publicmethod.Result(1, err, c, "请输入用户名!") |
|||
return |
|||
} |
|||
if requestData.Pwd == "" { |
|||
publicmethod.Result(1, err, c, "请输入密码!") |
|||
return |
|||
} |
|||
tableInfo, err := requestData.ObtainDataBaseAllTableMysql() |
|||
fmt.Printf("tableInfo:%v\n", tableInfo) |
|||
publicmethod.Result(0, tableInfo, c) |
|||
} |
|||
Loading…
Reference in new issue