package customerform
import (
"appPlatform/models/modelAppPlatform"
"appPlatform/overall"
"appPlatform/overall/publicmethod"
"encoding/json"
"fmt"
"strconv"
"strings"
"github.com/gin-gonic/gin"
)
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 13 13 : 02 : 23
@ 功能 : 数据库表结构
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) HaveDataBaseTableStruct ( c * gin . Context ) {
var requestData publicmethod . CommonId [ string ]
err := c . ShouldBindJSON ( & requestData )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if requestData . Id == "" {
publicmethod . Result ( 101 , err , c )
return
}
//获取自定义表单设置主表信息
var customerFormCont modelAppPlatform . CustomerForm
err = customerFormCont . GetCont ( map [ string ] interface { } { "`id`" : requestData . Id } , "`id`" , "`tablename`" )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
var versionInfo [ ] modelAppPlatform . CustomerFormVersion
err = overall . CONSTANT_DB_AppPlatform . Model ( & modelAppPlatform . CustomerFormVersion { } ) . Select ( "`id`,`tablekey`,`status`,`version`,`table_structure`" ) . Where ( "`tablekey` = ? AND `status` BETWEEN ? AND ?" , customerFormCont . TableNames , 1 , 2 ) . Order ( "status asc" ) . Order ( "version asc" ) . Order ( "id desc" ) . Find ( & versionInfo ) . Error
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
var sunFormStr string
var versionIdStr string
var sendCont CustomerFormDatabaseVesion
if len ( versionInfo ) > 0 {
for _ , v := range versionInfo {
var versionCont PublicFormDatabaseVesion
versionCont . Id = requestData . Id
versionCont . VersionId = strconv . FormatInt ( v . Id , 10 )
versionCont . Name = fmt . Sprintf ( "V%v" , v . Version )
if v . Status == 1 {
versionCont . IsMain = true
sunFormStr = v . TableStructure
versionIdStr = strconv . FormatInt ( v . Id , 10 )
//主表单数据
var masterFormTable PublicFormDatabaseVesion
masterFormTable . Id = requestData . Id
masterFormTable . VersionId = versionIdStr
masterFormTable . Name = v . TableKey
masterFormTable . IsMain = true
if num := HaveTableLog ( v . TableKey ) ; num > 0 {
masterFormTable . IsEdit = false
} else {
masterFormTable . IsEdit = true
}
sendCont . TableList = append ( sendCont . TableList , masterFormTable )
} else {
versionCont . IsMain = false
}
sendCont . Version = append ( sendCont . Version , versionCont )
}
}
if sunFormStr != "" {
sunSqlMap := make ( map [ string ] string )
json . Unmarshal ( [ ] byte ( sunFormStr ) , & sunSqlMap )
if len ( sunSqlMap ) > 0 {
for _ , s := range sunSqlMap {
var sunFromTableCont PublicFormDatabaseVesion
sunFromTableCont . Id = requestData . Id
sunFromTableCont . VersionId = versionIdStr
sunFromTableCont . Name = s
sunFromTableCont . IsMain = false
if num := HaveTableLog ( s ) ; num > 0 {
sunFromTableCont . IsEdit = false
} else {
sunFromTableCont . IsEdit = true
}
sendCont . TableList = append ( sendCont . TableList , sunFromTableCont )
}
}
}
publicmethod . Result ( 0 , sendCont , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 13 14 : 34 : 04
@ 功能 : 获取表格是否有记录
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func HaveTableLog ( tableName string ) ( logCount int64 ) {
err := overall . CONSTANT_DB_CustomerForm . Table ( tableName ) . Select ( "`id`" ) . First ( & logCount ) . Error
if err != nil {
logCount = 0
}
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 13 13 : 03 : 11
@ 功能 : 读取数据表结构
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ReadDatabaseForm ( tableName string , tableType ... string ) ( list [ ] Result , err error ) {
tableTypes := ""
if len ( tableType ) > 0 {
tableTypes = tableType [ 0 ]
}
gormDb := overall . CONSTANT_DB_CustomerForm
switch tableTypes {
default :
gormDb = overall . CONSTANT_DB_CustomerForm
}
// sqlStr := fmt.Sprintf("DESC %v", tableName)
sqlStr := fmt . Sprintf ( "SHOW FULL COLUMNS FROM `%v`" , tableName )
err = gormDb . Raw ( sqlStr ) . Scan ( & list ) . Error
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 13 15 : 25 : 03
@ 功能 : 获取表单结构 { "table1693810889577" : "table1693810889577" , "table1693811003658" : "table1693811003658" , "table1693811044212" : "table1693811044212" }
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) HaveFormTabelCont ( c * gin . Context ) {
var requestData HaveVersionForm
err := c . ShouldBindJSON ( & requestData )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if requestData . Id == "" {
publicmethod . Result ( 101 , err , c )
return
}
if requestData . Name == "" {
publicmethod . Result ( 101 , err , c )
return
}
//获取自定义表单设置主表信息
var versionCont modelAppPlatform . CustomerFormVersion
err = versionCont . GetCont ( map [ string ] interface { } { "`id`" : requestData . Id } , "`tablekey`" , "`mastesformjson`" , "`table_structure`" )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
var formJsonCont CustomerFormMaster
err = json . Unmarshal ( [ ] byte ( versionCont . MastesFormJson ) , & formJsonCont )
masterForm , sunForm := AnalyseFormTableJson ( formJsonCont )
formStruct , err := ReadDatabaseForm ( requestData . Name )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
fmt . Printf ( "masterForm---->%s---->%s\n" , requestData . Name , versionCont . TableKey )
sendMap := make ( map [ string ] interface { } )
// sendMap["masterForm"] = masterForm
// sendMap["sunForm"] = sunForm
// sendMap["formStruct"] = formStruct
// sendMap["err"] = err
// sendMap["formJsonCont"] = formJsonCont
var filedList [ ] Result
if requestData . Name == versionCont . TableKey {
for _ , v := range formStruct {
if publicmethod . IsInTrue [ string ] ( v . Field , masterForm ) {
attFiled := strings . Split ( v . Type , " " )
if len ( attFiled ) >= 2 {
v . Attribute = attFiled [ 1 ]
v . Type = attFiled [ 0 ]
}
// fmt.Printf("attFiled--->%v--->%v\n", attFiled, len(attFiled))
filedList = append ( filedList , v )
}
// attFiled := strings.Split(v.Type, " ")
// if len(attFiled) >= 2 {
// v.Attribute = attFiled[1]
// v.Type = attFiled[0]
// }
// // fmt.Printf("attFiled--->%v--->%v\n", attFiled, len(attFiled))
// filedList = append(filedList, v)
}
} else {
fmt . Printf ( "sunForm[requestData.Name]=====>%v\n" , sunForm )
// if fieldAry, isOk := sunForm[requestData.Name]; isOk {
for _ , v := range formStruct {
// if publicmethod.IsInTrue[string](v.Field, fieldAry.([]string)) {
if ! publicmethod . IsInTrue [ string ] ( v . Field , [ ] string { "id" , "masters_key" , "creater" , "creater_time" , "edit_time" } ) {
attFiled := strings . Split ( v . Type , " " )
if len ( attFiled ) >= 2 {
v . Attribute = attFiled [ 1 ]
v . Type = attFiled [ 0 ]
}
filedList = append ( filedList , v )
}
// }
}
// }
}
sendMap [ "filedlist" ] = filedList
if num := HaveTableLog ( requestData . Name ) ; num > 0 {
sendMap [ "isedit" ] = false
} else {
sendMap [ "isedit" ] = true
}
publicmethod . Result ( 0 , sendMap , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 13 15 : 38 : 42
@ 功能 : 根据版本获取数据库表集合
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) HaveFormTableList ( c * gin . Context ) {
var requestData publicmethod . CommonId [ string ]
err := c . ShouldBindJSON ( & requestData )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if requestData . Id == "" {
publicmethod . Result ( 101 , err , c )
return
}
//获取自定义表单设置主表信息
var versionCont modelAppPlatform . CustomerFormVersion
err = versionCont . GetCont ( map [ string ] interface { } { "`id`" : requestData . Id } , "`id`" , "`tablekey`" , "`status`" , "`version`" , "`table_structure`" )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
var customerFormCont modelAppPlatform . CustomerForm
err = customerFormCont . GetCont ( map [ string ] interface { } { "`tablename`" : versionCont . TableKey } , "`id`" )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
formId := strconv . FormatInt ( customerFormCont . Id , 10 )
var sendAry [ ] PublicFormDatabaseVesion
var masterFormTable PublicFormDatabaseVesion
masterFormTable . Id = formId
masterFormTable . VersionId = requestData . Id
masterFormTable . Name = versionCont . TableKey
masterFormTable . IsMain = true
if num := HaveTableLog ( versionCont . TableKey ) ; num > 0 {
masterFormTable . IsEdit = false
} else {
masterFormTable . IsEdit = true
}
sendAry = append ( sendAry , masterFormTable )
if versionCont . TableStructure != "" {
sunSqlMap := make ( map [ string ] string )
json . Unmarshal ( [ ] byte ( versionCont . TableStructure ) , & sunSqlMap )
if len ( sunSqlMap ) > 0 {
for _ , s := range sunSqlMap {
var sunFromTableCont PublicFormDatabaseVesion
sunFromTableCont . Id = formId
sunFromTableCont . VersionId = requestData . Id
sunFromTableCont . Name = s
sunFromTableCont . IsMain = false
if num := HaveTableLog ( s ) ; num > 0 {
sunFromTableCont . IsEdit = false
} else {
sunFromTableCont . IsEdit = true
}
sendAry = append ( sendAry , sunFromTableCont )
}
}
}
publicmethod . Result ( 0 , sendAry , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 13 15 : 57 : 13
@ 功能 : 拆析版本表单
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func AnalyseFormTableJson ( formJsonCont CustomerFormMaster ) ( masterForm [ ] string , sunForm map [ string ] interface { } ) {
dataMap := make ( map [ string ] interface { } )
fieldType := [ ] string { "input" , "password" , "colorPicker" , "component" , "datePicker" , "checkbox" , "cascader" , "treeSelect" , "textarea" , "upload" , "expand-user" , "select" , "radio" , "inputSlot" , "rate" , "inputNumber" , "slider" , "switch" , "tinymce" }
cardFieldType := [ ] string { "card" }
customLayout := [ ] string { "grid" , "tabs" }
sunFieldType := [ ] string { "table" , "flex" }
for _ , v := range formJsonCont . List {
if publicmethod . IsInTrue [ string ] ( v . Type , fieldType ) {
masterForm = append ( masterForm , v . Name )
}
//卡片数据
if publicmethod . IsInTrue [ string ] ( v . Type , cardFieldType ) {
if len ( v . List ) > 0 {
sqlStr := ComponentMappingDataTableField ( v . List )
masterForm = append ( masterForm , sqlStr ... )
}
}
//自定义布局
if publicmethod . IsInTrue [ string ] ( v . Type , customLayout ) {
if len ( v . Columns ) > 0 {
for _ , cv := range v . Columns {
sqlStr := ComponentMappingDataTableField ( cv . List )
masterForm = append ( masterForm , sqlStr ... )
}
}
}
//子表
if publicmethod . IsInTrue [ string ] ( v . Type , sunFieldType ) {
if len ( v . List ) > 0 {
sqlStr := ComponentMappingDataTableField ( v . List )
dataMap [ v . Name ] = sqlStr
}
}
}
sunForm = dataMap
return
}
/ * *
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 13 16 : 14 : 07
@ 功能 : 组件印射字段
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ComponentMappingDataTableField ( list [ ] MasterStruct ) ( mastSql [ ] string ) {
if len ( list ) > 0 {
for _ , lv := range list {
fieldType := [ ] string { "input" , "password" , "colorPicker" , "component" , "datePicker" , "checkbox" , "cascader" , "treeSelect" , "textarea" , "upload" , "expand-user" , "select" , "radio" , "inputSlot" , "rate" , "inputNumber" , "slider" , "switch" , "tinymce" }
if publicmethod . IsInTrue [ string ] ( lv . Type , fieldType ) {
mastSql = append ( mastSql , lv . Name )
}
}
}
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 14 0 9 : 01 : 40
@ 功能 : 优化 / 修复数据表
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) OptimizeOrRepairFormTable ( c * gin . Context ) {
var requestData OptimizeOrRepairTable
err := c . ShouldBindJSON ( & requestData )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if requestData . Name == "" {
publicmethod . Result ( 101 , err , c )
return
}
if requestData . OptimizeOrRepair == 1 { //优化表
sqlStr := fmt . Sprintf ( "OPTIMIZE TABLE %v" , requestData . Name )
overall . CONSTANT_DB_CustomerForm . Exec ( sqlStr )
} else { //修复表
sqlStr1 := fmt . Sprintf ( "CHECK TABLE %v" , requestData . Name )
overall . CONSTANT_DB_CustomerForm . Exec ( sqlStr1 )
sqlStr2 := fmt . Sprintf ( "REPAIR TABLE %v" , requestData . Name )
overall . CONSTANT_DB_CustomerForm . Exec ( sqlStr2 )
}
publicmethod . Result ( 0 , err , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 14 11 : 50 : 30
@ 功能 : 表单结构数据处理
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) FormFieldHandle ( c * gin . Context ) {
var requestData Result
err := c . ShouldBindJSON ( & requestData )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
var sendForm SendFieldCont
sendForm . Field = requestData . Field
sendForm . Type = requestData . Type
sendForm . Attribute = requestData . Attribute
sendForm . Collation = requestData . Collation
sendForm . Null = requestData . Null
sendForm . Key = requestData . Key
sendForm . Default = requestData . Default
sendForm . Extra = requestData . Extra
sendForm . Privileges = requestData . Privileges
sendForm . Comment = requestData . Comment
if requestData . Type == "" {
sendForm . Type = "varchar"
} else {
attFiled := strings . Split ( requestData . Type , "(" )
sendForm . Type = attFiled [ 0 ]
if len ( attFiled ) > 1 {
fieldLenght := publicmethod . MatchBracket ( requestData . Type , "(" , ")" )
switch sendForm . Type {
case "decimal" , "float" , "double" :
maxAndMin := strings . Split ( fieldLenght , "," )
switch len ( maxAndMin ) {
case 1 :
sendForm . Integer = maxAndMin [ 0 ]
case 2 :
sendForm . Integer = maxAndMin [ 0 ]
sendForm . Decimal = maxAndMin [ 1 ]
default :
}
default :
sendForm . Integer = fieldLenght
}
}
}
publicmethod . Result ( 0 , sendForm , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 14 15 : 43 : 03
@ 功能 : 编辑数据库表字段信息
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) EditFormField ( c * gin . Context ) {
var requestData EditDatabaseFormField
err := c . ShouldBindJSON ( & requestData )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if requestData . FormName == "" || requestData . Field == "" {
publicmethod . Result ( 101 , err , c )
return
}
sqlStr := fmt . Sprintf ( "ALTER TABLE `%v` MODIFY COLUMN `%v` " , requestData . FormName , requestData . Field )
switch requestData . Type {
case "decimal" , "float" , "double" :
var integerIntVal int64
if requestData . Integer == "" {
integerIntVal = 3
} else {
integerInt , err := strconv . ParseInt ( requestData . Integer , 10 , 64 )
if err == nil {
integerIntVal = integerInt
}
}
decimalVal := integerIntVal - 1
if requestData . Decimal != "" {
decimalVales , err := strconv . ParseInt ( requestData . Decimal , 10 , 64 )
if err == nil {
decimalVal = decimalVales
}
}
if decimalVal == 0 {
decimalVal = integerIntVal
}
sqlStr = fmt . Sprintf ( " %v %v(%v,%v) " , sqlStr , requestData . Type , integerIntVal , decimalVal )
case "tinyint" , "smallint" , "mediumint" , "int" , "integer" , "bigint" :
var integerIntVal int64
if requestData . Integer == "" {
integerIntVal = 3
} else {
integerInt , err := strconv . ParseInt ( requestData . Integer , 10 , 64 )
if err == nil {
integerIntVal = integerInt
}
}
sqlStr = fmt . Sprintf ( " %v %v(%v) %v " , sqlStr , requestData . Type , integerIntVal , requestData . Attribute )
case "enum" , "set" , "text" , "tinytext" , "mediumtext" , "longtext" , "blob" , "year" , "date" , "time" , "datetime" , "timestamp" :
sqlStr = fmt . Sprintf ( " %v %v " , sqlStr , requestData . Type )
default :
if requestData . Integer != "" {
sqlStr = fmt . Sprintf ( " %v %v(%v) " , sqlStr , requestData . Type , requestData . Integer )
} else {
sqlStr = fmt . Sprintf ( " %v %v " , sqlStr , requestData . Type )
}
}
if requestData . Null == "NO" {
sqlStr = fmt . Sprintf ( " %v NOT NULL " , sqlStr )
}
if ! publicmethod . IsInTrue [ string ] ( requestData . Type , [ ] string { "enum" , "set" , "text" , "tinytext" , "mediumtext" , "longtext" , "blob" , "year" , "date" , "time" , "datetime" , "timestamp" } ) {
sqlStr = fmt . Sprintf ( " %v DEFAULT '%v'" , sqlStr , requestData . Default )
}
sqlStr = fmt . Sprintf ( " %v COMMENT '%v'" , sqlStr , requestData . Comment )
err = publicmethod . ExecSql ( "CustomerForm" , sqlStr )
if err != nil {
publicmethod . Result ( 106 , err , c )
return
}
publicmethod . Result ( 0 , err , c )
}