You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
619 lines
15 KiB
619 lines
15 KiB
package customerform
|
|
|
|
import (
|
|
"appPlatform/models/modelAppPlatform"
|
|
"appPlatform/overall"
|
|
"appPlatform/overall/publicmethod"
|
|
"encoding/json"
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-09-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-09-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-09-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-09-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-09-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-09-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-09-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-09-14 09: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-09-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-09-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)
|
|
}
|
|
|