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.
483 lines
13 KiB
483 lines
13 KiB
package customerform
|
|
|
|
import (
|
|
"appPlatform/overall/publicmethod"
|
|
"fmt"
|
|
"strconv"
|
|
)
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-09-26 15:34:07
|
|
@ 功能:
|
|
@ 参数
|
|
|
|
#分析表格
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func AnalysisTable(subUnit MasterStruct) (fieldCont TableFormStruct) {
|
|
//TableFormStruct
|
|
fieldCont.TableName = subUnit.Name
|
|
switch subUnit.Type {
|
|
case "datePicker":
|
|
switch subUnit.Control.Type {
|
|
case "year", "month", "date", "datetime":
|
|
|
|
fieldCont.Types = "bigint"
|
|
fieldCont.ControlType = subUnit.Control.Type
|
|
fieldCont.DefaultValue = 0
|
|
fieldCont.FieldLenght = 20
|
|
|
|
case "week":
|
|
|
|
fieldCont.Types = "varchar"
|
|
fieldCont.ControlType = subUnit.Control.Type
|
|
fieldCont.DefaultValue = ""
|
|
fieldCont.ControlType = "string"
|
|
fieldCont.FieldLenght = 255
|
|
|
|
case "datetimerange", "daterange", "monthrange":
|
|
|
|
fieldCont.Types = "bigint"
|
|
fieldCont.ControlType = "array"
|
|
fieldCont.DefaultValue = 0
|
|
fieldCont.FieldLenght = 20
|
|
|
|
default:
|
|
|
|
fieldCont.Types = "mediumtext"
|
|
fieldCont.ControlType = subUnit.Control.Type
|
|
fieldCont.DefaultValue = ""
|
|
fieldCont.ControlType = "string"
|
|
|
|
}
|
|
case "input", "password":
|
|
if len(subUnit.CustomRules) > 0 {
|
|
zdType, signed := CustomRulesInput(subUnit.CustomRules)
|
|
fieldCont.Types = zdType
|
|
fieldCont.Signed = signed
|
|
switch zdType {
|
|
case "float":
|
|
fieldCont.DefaultValue = 0
|
|
fieldCont.FieldLenght = 20
|
|
fieldCont.ControlType = "float"
|
|
case "decimal":
|
|
fieldCont.DefaultValue = 0
|
|
fieldCont.FieldLenght = 20
|
|
fieldCont.ControlType = "decimal"
|
|
case "bigint":
|
|
fieldCont.DefaultValue = 0
|
|
fieldCont.FieldLenght = 20
|
|
fieldCont.ControlType = "bigint"
|
|
case "int":
|
|
fieldCont.DefaultValue = 0
|
|
fieldCont.FieldLenght = 6
|
|
fieldCont.ControlType = "int"
|
|
default:
|
|
fieldCont.DefaultValue = ""
|
|
fieldCont.FieldLenght = 255
|
|
fieldCont.ControlType = "string"
|
|
}
|
|
} else {
|
|
fieldCont.Types = "varchar"
|
|
fieldCont.DefaultValue = ""
|
|
fieldCont.FieldLenght = 255
|
|
fieldCont.ControlType = "string"
|
|
}
|
|
|
|
case "textarea", "cascader":
|
|
|
|
fieldCont.Types = "mediumtext"
|
|
fieldCont.DefaultValue = ""
|
|
fieldCont.ControlType = "string"
|
|
|
|
case "radio", "select":
|
|
var fieldVal string
|
|
if len(subUnit.Options) > 0 {
|
|
for _, ov := range subUnit.Options {
|
|
if len(fieldVal) < len(ov.Value) {
|
|
fieldVal = ov.Value
|
|
}
|
|
}
|
|
}
|
|
if subUnit.Config.TransformData == "number" {
|
|
size, fieldType := CalculateCharacterLength("int", fieldVal)
|
|
|
|
fieldCont.Types = fieldType
|
|
fieldCont.DefaultValue = 0
|
|
fieldCont.FieldLenght = size
|
|
fieldCont.ControlType = fieldType
|
|
|
|
} else {
|
|
size, fieldType := CalculateCharacterLength("string", fieldVal)
|
|
|
|
fieldCont.Types = fieldType
|
|
fieldCont.DefaultValue = ""
|
|
fieldCont.FieldLenght = size
|
|
fieldCont.ControlType = "string"
|
|
|
|
}
|
|
case "checkbox":
|
|
|
|
fieldCont.Types = "mediumtext"
|
|
fieldCont.DefaultValue = ""
|
|
fieldCont.ControlType = "array"
|
|
|
|
case "colorPicker", "timePicker":
|
|
|
|
fieldCont.Types = "varchar"
|
|
fieldCont.DefaultValue = ""
|
|
fieldCont.FieldLenght = 50
|
|
fieldCont.ControlType = "string"
|
|
|
|
case "switch":
|
|
var fieldVal string
|
|
if len(subUnit.Control.ActiveValue) < len(subUnit.Control.InactiveValue) {
|
|
fieldVal = subUnit.Control.InactiveValue
|
|
} else {
|
|
fieldVal = subUnit.Control.ActiveValue
|
|
}
|
|
size, fieldType := CalculateCharacterLength("int", fieldVal)
|
|
|
|
fieldCont.Types = fieldType
|
|
fieldCont.ControlType = "booble"
|
|
fieldCont.DefaultValue, _ = strconv.Atoi(subUnit.Control.ActiveValue)
|
|
fieldCont.FieldLenght = size
|
|
|
|
case "inputNumber":
|
|
|
|
fieldCont.Types = "bigint"
|
|
fieldCont.DefaultValue = 0
|
|
fieldCont.FieldLenght = 20
|
|
fieldCont.ControlType = "bigint"
|
|
|
|
case "rate", "slider":
|
|
fieldVal := strconv.Itoa(subUnit.Control.Max)
|
|
size, fieldType := CalculateCharacterLength("int", fieldVal)
|
|
|
|
fieldCont.Types = fieldType
|
|
fieldCont.ControlType = fieldType
|
|
if scm, scmIsok := subUnit.Control.ModelValue.(int); scmIsok {
|
|
fieldCont.DefaultValue = scm
|
|
}
|
|
fieldCont.FieldLenght = size
|
|
|
|
case "treeSelect":
|
|
case "upload":
|
|
|
|
fieldCont.Types = "longtext"
|
|
fieldCont.DefaultValue = ""
|
|
fieldCont.ControlType = "array" //返回值为数组
|
|
|
|
case "tinymce", "expand-user":
|
|
|
|
fieldCont.Types = "longtext"
|
|
fieldCont.DefaultValue = ""
|
|
fieldCont.ControlType = "string"
|
|
case "grid", "tabs", "card", "div", "table", "flex", "divider":
|
|
default:
|
|
|
|
fieldCont.Types = "varchar"
|
|
fieldCont.DefaultValue = ""
|
|
fieldCont.FieldLenght = 255
|
|
fieldCont.ControlType = "string"
|
|
|
|
}
|
|
return
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-09-27 09:28:33
|
|
@ 功能: 文本框校验规则
|
|
@ 参数
|
|
|
|
#
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func CustomRulesInput(list []CustomRulesStruct) (types string, signed bool) {
|
|
if len(list) == 0 {
|
|
types = "varchar"
|
|
return
|
|
}
|
|
var typeAry []string
|
|
for _, v := range list {
|
|
if !publicmethod.IsInTrue[string](v.Type, typeAry) {
|
|
typeAry = append(typeAry, v.Type)
|
|
}
|
|
}
|
|
if len(typeAry) == 0 {
|
|
types = "varchar"
|
|
return
|
|
}
|
|
stringType := []string{"mobile", "tel", "phone", "email", "card", "cn", "numberLetter", "网址"}
|
|
moneyType := []string{"money"}
|
|
floatType := []string{"longitude", "latitude"}
|
|
zhengZs := []string{"int"}
|
|
numberType := []string{"number"}
|
|
for _, tv := range typeAry {
|
|
if publicmethod.IsInTrue[string](tv, floatType) {
|
|
types = "float"
|
|
return
|
|
}
|
|
if publicmethod.IsInTrue[string](tv, moneyType) {
|
|
types = "decimal"
|
|
return
|
|
}
|
|
if publicmethod.IsInTrue[string](tv, numberType) {
|
|
types = "bigint"
|
|
signed = true
|
|
return
|
|
}
|
|
if publicmethod.IsInTrue[string](tv, zhengZs) {
|
|
types = "int"
|
|
return
|
|
}
|
|
if publicmethod.IsInTrue[string](tv, stringType) {
|
|
types = "varchar"
|
|
return
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-09-26 16:28:16
|
|
@ 功能: 计算字符长度
|
|
@ 参数
|
|
|
|
#class 类型
|
|
#str 值
|
|
|
|
@ 返回值
|
|
|
|
#size 字段长度
|
|
#fieldType 字段类型
|
|
|
|
@ 方法原型
|
|
|
|
#func CalculateCharacterLength(class, str string) (size int, fieldType string)
|
|
*/
|
|
func CalculateCharacterLength(class, str string) (size int, fieldType string) {
|
|
size = len(str) + 1
|
|
switch class {
|
|
case "int":
|
|
if size <= 9 {
|
|
fieldType = "int"
|
|
} else {
|
|
fieldType = "bigint"
|
|
}
|
|
case "string":
|
|
if size <= 255 {
|
|
fieldType = "varchar"
|
|
} else {
|
|
fieldType = "mediumtext"
|
|
}
|
|
default:
|
|
fieldType = "varchar"
|
|
size = 255
|
|
}
|
|
return
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-09-27 08:52:56
|
|
@ 功能: 创建自定义表单数据表
|
|
@ 参数
|
|
|
|
#
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func (c *CustomerFormMaster) CreateFormDatabaseTable() (relevance string, err error) {
|
|
err = CreateForm(c.Form.Name, c.Form.FormName, true) //创建主表
|
|
if err != nil {
|
|
return
|
|
}
|
|
var masterSql []string //主数据库添加字段语句集合
|
|
var sunFormName []string //子表名称集合
|
|
sunFormNameAry := publicmethod.MapOut[string]() //子表对应关系
|
|
sunForm := publicmethod.MapOut[string]()
|
|
for _, v := range c.List {
|
|
|
|
switch v.Type {
|
|
case "grid", "tabs":
|
|
if len(v.Columns) > 0 {
|
|
for _, cv := range v.Columns {
|
|
// fmt.Printf("type:%v <===========>label:%v <===========> Name:%v<===========> ModelValue:%v\n", v.Type, cv.Attr.Span, cv.Type, v.Control.ModelValue)
|
|
sqlStr := VesselSubUnitConvertSql(c.Form.Name, cv.List)
|
|
if len(sqlStr) > 0 {
|
|
masterSql = append(masterSql, sqlStr...)
|
|
}
|
|
|
|
}
|
|
}
|
|
case "card", "div":
|
|
if len(v.List) > 0 {
|
|
sqlStr := VesselSubUnitConvertSql(c.Form.Name, v.List)
|
|
if len(sqlStr) > 0 {
|
|
masterSql = append(masterSql, sqlStr...)
|
|
}
|
|
}
|
|
case "table", "flex":
|
|
if len(v.List) > 0 {
|
|
if !publicmethod.IsInTrue[string](v.Name, sunFormName) {
|
|
sunFormName = append(sunFormName, v.Name)
|
|
sunFormNameAry[v.Name] = v.Name
|
|
sqlStr := VesselSubUnitConvertSql(v.Name, v.List)
|
|
sunForm[v.Name] = sqlStr
|
|
CreateForm(v.Name, fmt.Sprintf("%v(%v)子表", c.Form.FormName, c.Form.Name), false)
|
|
} else {
|
|
sunTableName := fmt.Sprintf("%v%v", v.Name, publicmethod.GetUUid(1))
|
|
sunFormName = append(sunFormName, sunTableName)
|
|
sunFormNameAry[v.Name] = sunTableName
|
|
sqlStr := VesselSubUnitConvertSql(sunTableName, v.List)
|
|
sunForm[sunTableName] = sqlStr
|
|
CreateForm(sunTableName, fmt.Sprintf("%v(%v)子表", c.Form.FormName, c.Form.Name), false)
|
|
}
|
|
}
|
|
default:
|
|
sqlMasterStr := SubUnitConvertSql(c.Form.Name, v)
|
|
if sqlMasterStr != "not" {
|
|
masterSql = append(masterSql, sqlMasterStr)
|
|
}
|
|
// masterSql = append(masterSql, SubUnitConvertSql(c.Form.Name, v))
|
|
// fielfInfoClass := AnalysisTable(v)
|
|
// unsigned := ""
|
|
// if !fielfInfoClass.Signed {
|
|
// unsigned = "unsigned"
|
|
// }
|
|
// switch fielfInfoClass.Types {
|
|
// case "int", "bigint":
|
|
// masterSql = append(masterSql, fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v) %v NOT NULL DEFAULT %v COMMENT '%v'", c.Form.Name, v.Name, fielfInfoClass.Types, fielfInfoClass.FieldLenght, unsigned, fielfInfoClass.DefaultValue, v.Item.Label))
|
|
// case "booble":
|
|
// masterSql = append(masterSql, fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(1) %v NOT NULL DEFAULT %v COMMENT '%v'", c.Form.Name, v.Name, fielfInfoClass.Types, unsigned, fielfInfoClass.DefaultValue, v.Item.Label))
|
|
// case "float":
|
|
// masterSql = append(masterSql, fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v,%v) %v NOT NULL DEFAULT %v COMMENT '%v'", c.Form.Name, v.Name, fielfInfoClass.Types, fielfInfoClass.FieldLenght, fielfInfoClass.FieldLenght, unsigned, fielfInfoClass.DefaultValue, v.Item.Label))
|
|
// case "decimal":
|
|
// masterSql = append(masterSql, fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v,2) %v NOT NULL DEFAULT %v COMMENT '%v'", c.Form.Name, v.Name, fielfInfoClass.Types, fielfInfoClass.FieldLenght, unsigned, fielfInfoClass.DefaultValue, v.Item.Label))
|
|
// case "mediumtext", "longtext":
|
|
// masterSql = append(masterSql, fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v COMMENT '%v'", c.Form.Name, v.Name, fielfInfoClass.Types, v.Item.Label))
|
|
// default:
|
|
// masterSql = append(masterSql, fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v) COLLATE utf8mb4_general_ci NOT NULL DEFAULT %v COMMENT '%v'", c.Form.Name, v.Name, fielfInfoClass.Types, fielfInfoClass.FieldLenght, fielfInfoClass.DefaultValue, v.Item.Label))
|
|
// }
|
|
}
|
|
}
|
|
// if len(masterSql) > 0 {
|
|
// CreateFormFiled(c.Form.Name, c.Form.FormName, true, masterSql) //添加主表字段
|
|
// }
|
|
// if len(sunForm) > 0 { //子表操作
|
|
// relevanceByte, _ := json.Marshal(sunFormNameAry)
|
|
// relevance = string(relevanceByte)
|
|
// for i, v := range sunForm {
|
|
// // fmt.Printf("表单结构----拆解----》%v========>%v\n", i, v)
|
|
// CreateFormFiled(i, fmt.Sprintf("%v(%v)子表", c.Form.FormName, c.Form.Name), false, v)
|
|
// }
|
|
// }
|
|
fmt.Printf("主表数据:%v\n", masterSql)
|
|
fmt.Printf("子表表数据:%v\n", sunForm)
|
|
return
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-09-27 11:04:39
|
|
@ 功能: 容器组件生成数据库字段语句
|
|
@ 参数
|
|
|
|
#
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func VesselSubUnitConvertSql(tableName string, list []MasterStruct) (mastSql []string) {
|
|
if len(list) > 0 {
|
|
for _, v := range list {
|
|
sqlStr := SubUnitConvertSql(tableName, v)
|
|
if sqlStr != "not" {
|
|
mastSql = append(mastSql, sqlStr)
|
|
}
|
|
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-09-27 10:30:25
|
|
@ 功能: 单一组件转换Sql语句
|
|
@ 参数
|
|
|
|
#tablename 表单名称
|
|
#subUnit 第一组件结构体
|
|
|
|
@ 返回值
|
|
|
|
#sql 数据库字段添加语句
|
|
|
|
@ 方法原型
|
|
|
|
#func SubUnitConvertSql(tablename string, subUnit MasterStruct) (sql string)
|
|
*/
|
|
func SubUnitConvertSql(tablename string, subUnit MasterStruct) (sql string) {
|
|
if tablename == "" {
|
|
sql = "not"
|
|
return
|
|
}
|
|
fielfInfoClass := AnalysisTable(subUnit)
|
|
unsigned := ""
|
|
if !fielfInfoClass.Signed {
|
|
unsigned = "unsigned"
|
|
}
|
|
switch fielfInfoClass.Types {
|
|
case "int", "bigint":
|
|
sql = fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v) %v NOT NULL DEFAULT %v COMMENT '%v'", tablename, subUnit.Name, fielfInfoClass.Types, fielfInfoClass.FieldLenght, unsigned, fielfInfoClass.DefaultValue, subUnit.Item.Label)
|
|
case "booble":
|
|
sql = fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(1) %v NOT NULL DEFAULT %v COMMENT '%v'", tablename, subUnit.Name, fielfInfoClass.Types, unsigned, fielfInfoClass.DefaultValue, subUnit.Item.Label)
|
|
case "float":
|
|
sql = fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v,%v) %v NOT NULL DEFAULT %v COMMENT '%v'", tablename, subUnit.Name, fielfInfoClass.Types, fielfInfoClass.FieldLenght, fielfInfoClass.FieldLenght, unsigned, fielfInfoClass.DefaultValue, subUnit.Item.Label)
|
|
case "decimal":
|
|
sql = fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v,2) %v NOT NULL DEFAULT %v COMMENT '%v'", tablename, subUnit.Name, fielfInfoClass.Types, fielfInfoClass.FieldLenght, unsigned, fielfInfoClass.DefaultValue, subUnit.Item.Label)
|
|
case "mediumtext", "longtext":
|
|
sql = fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v COMMENT '%v'", tablename, subUnit.Name, fielfInfoClass.Types, subUnit.Item.Label)
|
|
default:
|
|
if fielfInfoClass.Types != "" {
|
|
sql = fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v) COLLATE utf8mb4_general_ci NOT NULL DEFAULT %v COMMENT '%v'", tablename, subUnit.Name, fielfInfoClass.Types, fielfInfoClass.FieldLenght, fielfInfoClass.DefaultValue, subUnit.Item.Label)
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|