package customerform
import (
"appPlatform/models/modelAppPlatform"
"appPlatform/models/modelshr"
"appPlatform/overall"
"appPlatform/overall/publicmethod"
"encoding/json"
"fmt"
"strconv"
"strings"
"time"
"github.com/gin-gonic/gin"
)
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 8 - 28 16 : 19 : 38
@ 功能 : 自定义表单列表
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) CustomerFormList ( c * gin . Context ) {
var requestData SearchForm
ersr := c . ShouldBindJSON ( & requestData )
if requestData . Page == 0 {
requestData . Page = 1
}
if requestData . PageSize == 0 {
requestData . PageSize = 15
}
fmt . Printf ( "requestData---->%v---->%v\n" , requestData , ersr )
var formList [ ] modelAppPlatform . CustomerForm
gormDb := overall . CONSTANT_DB_AppPlatform . Model ( & modelAppPlatform . CustomerForm { } ) . Select ( "`id`,`name`,`tablename`,`classify`,`permit`,`states`,`creater_time`,`flowkey`" ) . Where ( "`states` BETWEEN ? AND ?" , 1 , 2 )
if requestData . KeyWords != "" {
gormDb = gormDb . Where ( "`name` LIKE ? OR `tablename` LIKE ?" , "%" + requestData . KeyWords + "%" , "%" + requestData . KeyWords + "%" )
}
if requestData . Classify != 0 {
gormDb = gormDb . Where ( "`classify` = ?" , requestData . Classify )
}
var total int64
totalErr := gormDb . Count ( & total ) . Error
if totalErr != nil {
total = 0
}
gormDb = publicmethod . PageTurningSettings ( gormDb , requestData . Page , requestData . PageSize )
err := gormDb . Order ( "`id` DESC" ) . Find ( & formList ) . Error
if err != nil && len ( formList ) < 1 {
publicmethod . Result ( 0 , err , c )
return
}
var sendList [ ] SendCustomerForm
for _ , v := range formList {
var sendCont SendCustomerForm
sendCont . Id = strconv . FormatInt ( v . Id , 10 )
sendCont . Name = v . Name
sendCont . TableNames = v . TableNames
sendCont . States = v . States
sendCont . Classify = v . Classify
userCont := HaveCustomerFormCreaterUs ( v . TableNames )
sendCont . CreaterName = userCont . Name
sendCont . CreaterTime = publicmethod . UnixTimeToDay ( v . CreaterTime , 1 )
if v . FlowKey != 0 {
sendCont . FlowKey = strconv . FormatInt ( v . FlowKey , 10 )
}
sendList = append ( sendList , sendCont )
}
publicmethod . ResultList ( 0 , requestData . Page , requestData . PageSize , total , int64 ( len ( sendList ) ) , sendList , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 0 8 11 : 03 : 19
@ 功能 : 获取启用自定义表单创建人
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func HaveCustomerFormCreaterUs ( tableKey string ) ( userCont modelshr . PersonArchives ) {
var formVersion modelAppPlatform . CustomerFormVersion
err := formVersion . GetCont ( map [ string ] interface { } { "`tablekey`" : tableKey } , "`creater`" )
if err != nil {
return
}
userCont . GetCont ( map [ string ] interface { } { "`key`" : formVersion . Creater } , "`name`" , "`number`" )
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 8 - 29 13 : 16 : 12
@ 功能 : 生成表单基本信息
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) ProductionMarkOfCustomerForm ( c * gin . Context ) {
uuid := publicmethod . GetUUid ( 1 )
tableName := fmt . Sprintf ( "customer_form_%v" , uuid )
for {
isTrue := overall . CONSTANT_DB_CustomerForm . Migrator ( ) . HasTable ( tableName )
if ! isTrue {
break
} else {
uuid = publicmethod . GetUUid ( 1 )
tableName = fmt . Sprintf ( "customer_form_%v" , uuid )
}
}
var sendCont SendCustomerFormConfig
sendCont . FormName = fmt . Sprintf ( "未命名表单_%v" , uuid )
sendCont . FormLogo = tableName
publicmethod . Result ( 0 , sendCont , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 8 - 29 15 : 21 : 58
@ 功能 : 保存自定义表单
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) SaveCustomerForm ( c * gin . Context ) {
context , _ := c . Get ( overall . MyContJwt )
var requestData HaveCustomerFormConfig
err := c . ShouldBindJSON ( & requestData )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if requestData . Data == "" {
publicmethod . Result ( 1 , err , c , "自定义表单错误!" )
return
}
if requestData . Name == "" {
publicmethod . Result ( 1 , err , c , "未知表单名称!" )
return
}
if requestData . Classify == 0 {
requestData . Classify = 1
}
var formJsonCont CustomerFormMaster
json . Unmarshal ( [ ] byte ( requestData . JsonData ) , & formJsonCont )
if formJsonCont . Form . FormName == "" {
publicmethod . Result ( 1 , err , c , "未知表单名称!" )
return
}
if formJsonCont . Form . Name == "" {
publicmethod . Result ( 1 , err , c , "未知表单标识!" )
return
}
var userCont modelshr . ManCont
userCont . GetLoginCont ( context )
cureeTime := time . Now ( ) . Unix ( )
var customerFormCont modelAppPlatform . CustomerForm
err = customerFormCont . GetCont ( map [ string ] interface { } { "`tablename`" : formJsonCont . Form . Name } , "`id`" )
if err == nil || customerFormCont . Id != 0 {
publicmethod . Result ( 1 , err , c , "已有相同表单标识!请更换后再提交!" )
return
}
customerFormCont . Name = formJsonCont . Form . FormName //表单名称"`
customerFormCont . TableNames = formJsonCont . Form . Name //创建表单名称"`
customerFormCont . Classify = requestData . Classify //分类1:表单;2:流程表单"`
customerFormCont . Permit = "" //授权范围"`
customerFormCont . States = 1 //显示状态(1:启用;2:禁用,3:删除)"`
// customerFormCont.MastesForm = requestData.Data //表单结构"`
// customerFormCont.MastesFormJson = requestData.JsonData //表单结构json"`
// customerFormCont.Creater = userCont.Key //创建人"`
customerFormCont . CreaterTime = cureeTime //创建时间"`
customerFormCont . EditTime = cureeTime //编辑时间"`
// customerFormCont.TableStructure = "" //字表结构"`
// customerFormCont.Dict = requestData.Dict
var formVersion modelAppPlatform . CustomerFormVersion
formVersion . TableKey = formJsonCont . Form . Name //default:'';not null;comment:表单标识符"`
varsionNum := HageFormVersionNum ( formJsonCont . Form . Name )
formVersion . Version = varsionNum //1;not null;comment:版本号"`
if varsionNum > 1 {
formVersion . Status = 2
} else {
formVersion . Status = 1 //not null;comment:显示状态(1:启用;2:禁用,3:删除)"`
}
formVersion . MastesForm = requestData . Data //';comment:表单结构"`
formVersion . MastesFormJson = requestData . JsonData //efault:'';comment:表单结构json"`
formVersion . Creater = userCont . Key //ult:0;not null;comment:创建人"`
formVersion . CreaterTime = cureeTime //not null;comment:创建时间"`
formVersion . EditTime = cureeTime //efault:0;not null;comment:编辑时间"`
// mastSql, _ := formJsonCont.CreateFormDatabaseTable()
// mastSql, _ := formJsonCont.DisassembleForm()
mastSql , _ := formJsonCont . CreateFormTable ( )
formVersion . TableStructure = mastSql //;default:'';comment:字表结构"`
formVersion . Dict = requestData . Dict //字表结构"`
createDb := overall . CONSTANT_DB_AppPlatform . Begin ( )
errMain := createDb . Create ( & customerFormCont ) . Error
errVer := createDb . Create ( & formVersion ) . Error
if errMain != nil || errVer != nil {
createDb . Rollback ( )
sendErr := publicmethod . MapOut [ string ] ( )
sendErr [ "errMain" ] = errMain
sendErr [ "errVer" ] = errVer
publicmethod . Result ( 104 , sendErr , c )
return
}
err = createDb . Commit ( ) . Error
// err = createDb.Create(&customerFormCont).Error
// if err != nil {
// publicmethod.Result(104, customerFormCont, c)
// return
// }
publicmethod . Result ( 0 , err , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 0 8 11 : 23 : 48
@ 功能 : 获取自定义表单版本号
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func HageFormVersionNum ( tableKey string ) ( num int64 ) {
overall . CONSTANT_DB_AppPlatform . Model ( & modelAppPlatform . CustomerFormVersion { } ) . Where ( "`tablekey` = ?" , tableKey ) . Count ( & num )
num = num + 1
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 8 - 30 14 : 58 : 19
@ 功能 : 查看自定义表单
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) LookCustomerForm ( 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 ( 1 , requestData . Id , c , "未知表单!" )
return
}
var customerFormCont modelAppPlatform . CustomerForm
err = customerFormCont . GetCont ( map [ string ] interface { } { "id" : requestData . Id } )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
var sendCont LookCustomerFormInfo
sendCont . CfId = customerFormCont . Id
sendCont . Name = customerFormCont . Name //表单名称"`
sendCont . Classify = customerFormCont . Classify //分类1:表单;2:流程表单"`
sendCont . Permit = customerFormCont . Permit //授权范围"`
// sendCont.OpenClose = false
// if customerFormCont.States == 1 {
// sendCont.OpenClose = true
// }
sendCont . States = customerFormCont . States //显示状态(1:启用;2:禁用,3:删除)"`
// sendCont.MastesForm = customerFormCont.MastesForm //表单结构"`
// sendCont.MastesFormJson = customerFormCont.MastesFormJson //表单结构json"`
// sendCont.Creater = customerFormCont.Creater //创建人"`
sendCont . CreaterTime = customerFormCont . CreaterTime //创建时间"`
sendCont . EditTime = customerFormCont . EditTime //编辑时间"`
// sendCont.TableStructure = customerFormCont.TableStructure //字表结构"`
// sendCont.Dict = customerFormCont.Dict //字表结构"`
var formVersion modelAppPlatform . CustomerFormVersion
formVersion . GetCont ( map [ string ] interface { } { "tablekey" : customerFormCont . TableNames , "`status`" : 1 } )
sendCont . Id = formVersion . Id
sendCont . TableKey = customerFormCont . TableNames //创建表单名称"`
sendCont . MastesForm = formVersion . MastesForm //表单结构"`
sendCont . MastesFormJson = formVersion . MastesFormJson //表单结构json"`
sendCont . Creater = formVersion . Creater //创建人"`
sendCont . TableStructure = formVersion . TableStructure //字表结构"`
sendCont . Dict = formVersion . Dict //字表结构"`
sendCont . Status = formVersion . Status //显示状态(1:启用;2:禁用,3:删除)"`
json . Unmarshal ( [ ] byte ( customerFormCont . Permit ) , & sendCont . PermitList )
publicmethod . Result ( 0 , sendCont , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 01 0 8 : 26 : 14
@ 功能 : 编辑自定义表单状态
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) EditCustomerFormStatus ( c * gin . Context ) {
var requestData EditCustomerFormStatus
err := c . ShouldBindJSON ( & requestData )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if len ( requestData . Id ) < 1 {
publicmethod . Result ( 1 , err , c , "没有要删除得内容!" )
return
}
if requestData . Status == 0 {
requestData . Status = 2
}
editCustomerForm := publicmethod . MapOut [ string ] ( )
editCustomerForm [ "`states`" ] = requestData . Status
if requestData . Status != 3 {
err = overall . CONSTANT_DB_AppPlatform . Model ( & modelAppPlatform . CustomerForm { } ) . Where ( "`id` IN ?" , requestData . Id ) . Updates ( editCustomerForm ) . Error
if err != nil {
publicmethod . Result ( 108 , err , c )
return
}
} else {
if requestData . IsDelete {
err = overall . CONSTANT_DB_AppPlatform . Where ( "`id` IN ?" , requestData . Id ) . Delete ( & modelAppPlatform . CustomerForm { } ) . Error
} else {
err = overall . CONSTANT_DB_AppPlatform . Model ( & modelAppPlatform . CustomerForm { } ) . Where ( "`id` IN ?" , requestData . Id ) . Updates ( editCustomerForm ) . Error
if err != nil {
publicmethod . Result ( 108 , err , c )
return
}
}
}
publicmethod . Result ( 0 , err , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 0 8 14 : 0 8 : 34
@ 功能 : 获取版本列表
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) HaveCustomerFormVersion ( 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 ( 1 , err , c , "未知设置数据!请检查!" )
return
}
var list [ ] modelAppPlatform . CustomerFormVersion
overall . CONSTANT_DB_AppPlatform . Where ( "`tablekey` = ? AND `status` BETWEEN ? AND ?" , requestData . Id , 1 , 2 ) . Find ( & list )
publicmethod . Result ( 0 , list , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 01 15 : 14 : 38
@ 功能 : 编辑自定义表单设置
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) SaveSetupCont ( c * gin . Context ) {
var requestData HaveCustomerFormInfo
err := c . ShouldBindJSON ( & requestData )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if requestData . Id == 0 {
publicmethod . Result ( 1 , err , c , "未知设置数据!请检查!" )
return
}
if requestData . Name == "" {
publicmethod . Result ( 1 , err , c , "请输入表格名称!" )
return
}
if requestData . States == 0 {
requestData . States = 1
}
var saveCont modelAppPlatform . CustomerForm
err = saveCont . GetCont ( map [ string ] interface { } { "id" : requestData . Id } )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
var orgAry [ ] [ ] int64
json . Unmarshal ( [ ] byte ( requestData . Permit ) , & orgAry )
var orgList [ ] string
if len ( orgAry ) > 0 {
for i := 0 ; i < len ( orgAry ) ; i ++ {
if len ( orgAry [ i ] ) > 0 {
for j := 0 ; j < len ( orgAry [ i ] ) ; j ++ {
orgId := strconv . FormatInt ( orgAry [ i ] [ j ] , 10 )
if ! publicmethod . IsInTrue [ string ] ( orgId , orgList ) {
orgList = append ( orgList , orgId )
}
}
}
}
}
orgLists := strings . Join ( orgList , "," )
editCont := publicmethod . MapOut [ string ] ( )
editCont [ "`name`" ] = requestData . Name
editCont [ "`permit`" ] = requestData . Permit
editCont [ "`permitstr`" ] = orgLists
editCont [ "`states`" ] = requestData . States
editCont [ "`edit_time`" ] = time . Now ( ) . Unix ( )
err = saveCont . EiteCont ( map [ string ] interface { } { "id" : requestData . Id } , editCont )
if err != nil {
publicmethod . Result ( 106 , err , c )
return
}
publicmethod . Result ( 0 , orgLists , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 05 0 8 : 03 : 04
@ 功能 : 拆解表单结构 , 设计创建数据库表
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( c * CustomerFormMaster ) DisassembleForm ( ) ( relevance string , err error ) {
isSunTable := false
var masterSql [ ] string
var sunFormName [ ] string
sunFormNameAry := publicmethod . MapOut [ string ] ( )
sunForm := publicmethod . MapOut [ string ] ( )
for _ , v := range c . List {
switch v . Type {
// case "title":
// fmt.Printf("type:%v <===========>label:%v <===========> Name:%v <===========> ModelValue:%v\n", v.Type, v.Control, v.Name, v.Control.ModelValue)
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 := ComponentMappingDataTable ( c . Form . Name , cv . List )
masterSql = append ( masterSql , sqlStr ... )
}
}
case "card" , "div" :
if len ( v . List ) > 0 {
sqlStr := ComponentMappingDataTable ( c . Form . Name , v . List )
masterSql = append ( masterSql , sqlStr ... )
}
case "table" , "flex" :
if len ( v . List ) > 0 {
isSunTable = true
if ! publicmethod . IsInTrue [ string ] ( v . Name , sunFormName ) {
sunFormName = append ( sunFormName , v . Name )
sunFormNameAry [ v . Name ] = v . Name
sqlStr := ComponentMappingDataTable ( v . Name , v . List )
sunForm [ v . Name ] = sqlStr
CreateForm ( v . Name , fmt . Sprintf ( "%v(%v)子表" , c . Form . FormName , c . Form . Name ) , "InnoDB" , false )
} else {
sunTableName := fmt . Sprintf ( "%v%v" , v . Name , publicmethod . GetUUid ( 1 ) )
sunFormName = append ( sunFormName , sunTableName )
sunFormNameAry [ v . Name ] = sunTableName
sqlStr := ComponentMappingDataTable ( sunTableName , v . List )
sunForm [ sunTableName ] = sqlStr
CreateForm ( sunTableName , fmt . Sprintf ( "%v(%v)子表" , c . Form . FormName , c . Form . Name ) , "InnoDB" , false )
}
}
case "input" :
masterSql = append ( masterSql , fmt . Sprintf ( "ALTER TABLE `%v` ADD COLUMN `%v` %v COMMENT '%v'" , c . Form . Name , v . Name , CustomRules ( v . CustomRules ) , v . Item . Label ) )
case "password" , "colorPicker" , "component" :
// sqlStr = fmt.Sprintf("%v varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '%v'", sqlStr, lv.Item.Label)
masterSql = append ( masterSql , fmt . Sprintf ( "ALTER TABLE `%v` ADD COLUMN `%v` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '%v'" , c . Form . Name , v . Name , v . Item . Label ) )
case "datePicker" , "checkbox" , "cascader" , "treeSelect" , "textarea" , "upload" , "expand-user" :
// sqlStr = fmt.Sprintf("%v mediumtext COMMENT '%v'", sqlStr, lv.Item.Label)
masterSql = append ( masterSql , fmt . Sprintf ( "ALTER TABLE `%v` ADD COLUMN `%v` mediumtext COMMENT '%v'" , c . Form . Name , v . Name , v . Item . Label ) )
case "select" , "radio" , "inputSlot" :
// sqlStr = fmt.Sprintf("%v %v COMMENT '%v'", sqlStr, SelectUnit(lv.Config), lv.Item.Label)
masterSql = append ( masterSql , fmt . Sprintf ( "ALTER TABLE `%v` ADD COLUMN `%v` %v COMMENT '%v'" , c . Form . Name , v . Name , SelectUnit ( v . Config ) , v . Item . Label ) )
case "rate" , "inputNumber" , "slider" , "switch" :
// sqlStr = fmt.Sprintf("%v %v COMMENT '%v'", sqlStr, ControlJudge(lv.Type, lv.Control), lv.Item.Label)
masterSql = append ( masterSql , fmt . Sprintf ( "ALTER TABLE `%v` ADD COLUMN `%v` %v COMMENT '%v'" , c . Form . Name , v . Name , ControlJudge ( v . Type , v . Control ) , v . Item . Label ) )
case "tinymce" :
// sqlStr = fmt.Sprintf("%v longtext COMMENT '%v'", sqlStr, lv.Item.Label)
masterSql = append ( masterSql , fmt . Sprintf ( "ALTER TABLE `%v` ADD COLUMN `%v` longtext COMMENT '%v'" , c . Form . Name , v . Name , v . Item . Label ) )
default :
// fmt.Printf("type:%v <===========>label:%v <===========> Name:%v<===========> ModelValue:%v\n", v.Type, v.Item.Label, v.Name, v.Control.ModelValue)
}
}
if isSunTable {
err = CreateForm ( c . Form . Name , c . Form . FormName , "InnoDB" , true )
} else {
err = CreateForm ( c . Form . Name , c . Form . FormName , "MyISAM" , true )
}
if err != nil {
return
}
// fmt.Printf("主表单结构---》%v\n", masterSql)
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 )
}
}
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 13 0 9 : 28 : 58
@ 功能 : 创建数据表字段
@ 参数
# formName 表单名称
# formNotes 表单备注
# isMasters true 主表 ; false : 子表
# sqlList 语句列表
@ 返回值
#
@ 方法原型
#
* /
func CreateFormFiled ( formName , formNotes string , isMasters bool , sqlList interface { } ) {
// fmt.Printf("函数类型----%v---%T\n", reflect.TypeOf(sqlList), sqlList)
if sql , isOk := sqlList . ( [ ] string ) ; isOk {
for k , v := range sql {
// fmt.Printf("%v\n", v)
// overall.CONSTANT_DB_CustomerForm.Exec(v)
syncSeting . Add ( 1 )
go CoroutineExecuteSql ( k , v )
// err := overall.CONSTANT_DB_CustomerForm.Exec(v).Error
// fmt.Printf("字段创建----%v---%v\n", err, v)
}
syncSeting . Wait ( )
}
}
// 协程执行mysql语句
func CoroutineExecuteSql ( k int , sql string ) {
fmt . Printf ( "%v---------->%v\n" , k , sql )
defer syncSeting . Done ( )
overall . CONSTANT_DB_CustomerForm . Exec ( sql )
// overall.CONSTANT_DB_CustomerForm.Raw(sql)
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 13 0 8 : 12 : 23
@ 功能 : 创建表单
@ 参数
# formName 数据表名称
# notes 数据表描述
# engine 数据表引擎 MyISAM
@ 返回值
#
@ 方法原型
#
* /
func CreateForm ( formName , notes , engine string , isMasters bool ) ( err error ) {
if engine == "" {
engine = "MyISAM"
}
//判断表单是否存在
isTrue := overall . CONSTANT_DB_CustomerForm . Migrator ( ) . HasTable ( formName )
if ! isTrue { //当数据表不存在时进行创建
if isMasters {
//创建主表
sqlCreateTable := fmt . Sprintf ( "CREATE TABLE `%v` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`masters_key` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '主表标识',`creater` bigint(20) unsigned DEFAULT '0' COMMENT '创建人',`creater_time` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',`edit_time` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '编辑时间',`flow_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '流程识别标识',PRIMARY KEY (`id`) USING BTREE,UNIQUE KEY `id` (`id`) USING HASH,UNIQUE KEY `masters_key` (`masters_key`) USING HASH) ENGINE=%v DEFAULT CHARSET=utf8mb4 COMMENT='%v'" , formName , engine , notes )
err = overall . CONSTANT_DB_CustomerForm . Exec ( sqlCreateTable ) . Error
} else {
//创建子表
sqlCreateTable := fmt . Sprintf ( "CREATE TABLE `%v` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`masters_key` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '主表标识',`creater` bigint(20) unsigned DEFAULT '0' COMMENT '创建人',`creater_time` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',`edit_time` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '编辑时间',PRIMARY KEY (`id`) USING BTREE,UNIQUE KEY `id` (`id`) USING HASH,KEY `masters_key` (`masters_key`) USING HASH) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='%v'" , formName , notes )
err = overall . CONSTANT_DB_CustomerForm . Exec ( sqlCreateTable ) . Error
}
}
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 12 16 : 15 : 59
@ 功能 : 组件映射数据表
@ 参数
# tableName 表明
# list 组件列表
@ 返回值
# mastSql 数据库语句
@ 方法原型
# func ComponentMappingDataTable ( tableName string , list [ ] MasterStruct ) ( mastSql [ ] string )
* /
func ComponentMappingDataTable ( tableName string , list [ ] MasterStruct ) ( mastSql [ ] string ) {
if len ( list ) > 0 {
for _ , lv := range list {
sqlStr := fmt . Sprintf ( "ALTER TABLE `%v` ADD COLUMN `%v`" , tableName , lv . Name )
switch lv . Type {
case "input" :
sqlStr = fmt . Sprintf ( "%v %v COMMENT '%v'" , sqlStr , CustomRules ( lv . CustomRules ) , lv . Item . Label )
case "password" , "colorPicker" , "component" :
sqlStr = fmt . Sprintf ( "%v varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '%v'" , sqlStr , lv . Item . Label )
case "datePicker" , "checkbox" , "cascader" , "treeSelect" , "textarea" , "upload" , "expand-user" :
sqlStr = fmt . Sprintf ( "%v mediumtext COMMENT '%v'" , sqlStr , lv . Item . Label )
case "select" , "radio" , "inputSlot" :
sqlStr = fmt . Sprintf ( "%v %v COMMENT '%v'" , sqlStr , SelectUnit ( lv . Config ) , lv . Item . Label )
case "rate" , "inputNumber" , "slider" , "switch" :
sqlStr = fmt . Sprintf ( "%v %v COMMENT '%v'" , sqlStr , ControlJudge ( lv . Type , lv . Control ) , lv . Item . Label )
case "tinymce" :
sqlStr = fmt . Sprintf ( "%v longtext COMMENT '%v'" , sqlStr , lv . Item . Label )
default :
}
mastSql = append ( mastSql , sqlStr )
}
}
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 12 14 : 59 : 51
@ 功能 : 组件配置判断
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ControlJudge ( class string , control ControlStruct ) ( sqlStr string ) {
switch class {
case "rate" :
if control . Max < 10 {
sqlStr = " tinyint(1) unsigned NOT NULL DEFAULT '0' "
} else if control . Max <= 255 {
sqlStr = " tinyint(3) unsigned NOT NULL DEFAULT '0' "
} else if control . Max <= 4294967295 {
sqlStr = " int(10) unsigned NOT NULL DEFAULT '0' "
} else {
sqlStr = " bigint(20) unsigned NOT NULL DEFAULT '0' "
}
case "switch" :
switch control . ModelValue . ( type ) {
case bool :
if control . ModelValue == true {
sqlStr = " tinyint(1) unsigned NOT NULL DEFAULT '1' "
} else {
sqlStr = " tinyint(1) unsigned NOT NULL DEFAULT '0' "
}
case int , int8 , int16 :
sqlStr = " int(10) unsigned NOT NULL DEFAULT '0' "
case int32 , int64 :
sqlStr = " bigint(20) unsigned NOT NULL DEFAULT '0' "
case float32 , float64 :
sqlStr = " float(20,10) unsigned DEFAULT '0' "
default :
sqlStr = " varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' "
}
case "slider" :
if control . Max == 0 {
sqlStr = " tinyint(3) unsigned NOT NULL DEFAULT '0' "
} else if control . Max < 10 && control . Max > 0 {
sqlStr = " tinyint(1) unsigned NOT NULL DEFAULT '0' "
} else if control . Max <= 255 {
sqlStr = " tinyint(3) unsigned NOT NULL DEFAULT '0' "
} else if control . Max <= 4294967295 {
sqlStr = " int(10) unsigned NOT NULL DEFAULT '0' "
} else {
sqlStr = " bigint(20) unsigned NOT NULL DEFAULT '0' "
}
default :
sqlStr = " varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' "
}
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 12 10 : 17 : 58
@ 功能 : 下拉字段处理
@ 参数
# tableName 表名
# field 字段名
# rubric 备注
# control 控制器
@ 返回值
# sqlStr 补充SQL语句
@ 方法原型
#
* /
func SelectUnit ( config UnitConfigStruct ) ( sqlStr string ) {
switch config . TransformData {
case "number" :
sqlStr = " bigint(20) unsigned NOT NULL DEFAULT '0' "
default :
sqlStr = " varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' "
}
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 12 0 9 : 29 : 23
@ 功能 : 校验规则
@ 参数
# list 自定义规则
@ 返回值
# sqlStr 补充SQL语句
@ 方法原型
# func CustomRules ( list [ ] CustomRulesStruct ) ( sqlStr string )
* /
func CustomRules ( list [ ] CustomRulesStruct ) ( sqlStr string ) {
sqlStr = fmt . Sprintf ( "NOT NULL" )
if len ( list ) <= 0 {
sqlStr = fmt . Sprintf ( " varchar(255) COLLATE utf8mb4_general_ci %v DEFAULT '' " , sqlStr )
return
}
var typeAry [ ] string
for _ , v := range list {
if ! publicmethod . IsInTrue [ string ] ( v . Type , typeAry ) {
switch v . Type {
case "int" :
sqlStr = fmt . Sprintf ( " int(6) unsigned %v DEFAULT '1' " , sqlStr )
case "number" :
sqlStr = fmt . Sprintf ( " bigint(20) unsigned %v DEFAULT '0' " , sqlStr )
case "money" :
sqlStr = fmt . Sprintf ( " decimal(20,4) unsigned %v DEFAULT '0' " , sqlStr )
case "mobile" , "tel" , "phone" :
sqlStr = fmt . Sprintf ( " varchar(100) COLLATE utf8mb4_general_ci %v DEFAULT '' " , sqlStr )
default :
sqlStr = fmt . Sprintf ( " varchar(255) COLLATE utf8mb4_general_ci %v DEFAULT '' " , sqlStr )
}
}
}
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 0 9 0 9 : 31 : 55
@ 功能 : 编辑自定义表单内容
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) EditCustomerFormInfo ( c * gin . Context ) {
context , _ := c . Get ( overall . MyContJwt )
var requestData EditCustomerFormCont
err := c . ShouldBindJSON ( & requestData )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if requestData . Id == "" {
publicmethod . Result ( 1 , err , c , "自定义表单错误!" )
return
}
if requestData . Version == "" {
publicmethod . Result ( 1 , err , c , "自定义表单错误!" )
return
}
if requestData . Data == "" {
publicmethod . Result ( 1 , err , c , "自定义表单错误!" )
return
}
if requestData . Name == "" {
publicmethod . Result ( 1 , err , c , "未知表单名称!" )
return
}
if requestData . Classify == 0 {
requestData . Classify = 1
}
var formJsonCont CustomerFormMaster
json . Unmarshal ( [ ] byte ( requestData . JsonData ) , & formJsonCont )
if formJsonCont . Form . FormName == "" {
publicmethod . Result ( 1 , err , c , "未知表单名称!" )
return
}
if formJsonCont . Form . Name == "" {
publicmethod . Result ( 1 , err , c , "未知表单标识!" )
return
}
var customerFormCont modelAppPlatform . CustomerForm
err = customerFormCont . GetCont ( map [ string ] interface { } { "`id`" : requestData . Id } , "`tablename`" )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
var userCont modelshr . ManCont
userCont . GetLoginCont ( context )
cureeTime := time . Now ( ) . Unix ( )
mainData := publicmethod . MapOut [ string ] ( )
mainData [ "`name`" ] = formJsonCont . Form . FormName
mainData [ "`classify`" ] = requestData . Classify
mainData [ "`edit_time`" ] = cureeTime
customerFormCont . EiteCont ( map [ string ] interface { } { "`id`" : requestData . Id } , mainData )
versionData := publicmethod . MapOut [ string ] ( )
versionData [ "`mastesform`" ] = requestData . Data
versionData [ "`mastesformjson`" ] = requestData . JsonData
versionData [ "`creater`" ] = userCont . Key
// mastSql, _ := formJsonCont.DisassembleForm()
// mastSql, _ := formJsonCont.CreateFormDatabaseTable()
mastSql , _ := formJsonCont . CreateFormTable ( )
versionData [ "`table_structure`" ] = mastSql
versionData [ "`dict`" ] = requestData . Dict
var formVersion modelAppPlatform . CustomerFormVersion
formVersion . EiteCont ( map [ string ] interface { } { "`id`" : requestData . Version } , versionData )
publicmethod . Result ( 0 , err , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 0 9 0 9 : 45 : 42
@ 功能 : 另存为新版
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) SaveAsNewVersion ( c * gin . Context ) {
context , _ := c . Get ( overall . MyContJwt )
var requestData HaveCustomerFormConfig
err := c . ShouldBindJSON ( & requestData )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if requestData . Data == "" {
publicmethod . Result ( 1 , err , c , "自定义表单错误!" )
return
}
if requestData . Name == "" {
publicmethod . Result ( 1 , err , c , "未知表单名称!" )
return
}
if requestData . Classify == 0 {
requestData . Classify = 1
}
var formJsonCont CustomerFormMaster
json . Unmarshal ( [ ] byte ( requestData . JsonData ) , & formJsonCont )
if formJsonCont . Form . FormName == "" {
publicmethod . Result ( 1 , err , c , "未知表单名称!" )
return
}
if formJsonCont . Form . Name == "" {
publicmethod . Result ( 1 , err , c , "未知表单标识!" )
return
}
var userCont modelshr . ManCont
userCont . GetLoginCont ( context )
cureeTime := time . Now ( ) . Unix ( )
var customerFormCont modelAppPlatform . CustomerForm
err = customerFormCont . GetCont ( map [ string ] interface { } { "`tablename`" : formJsonCont . Form . Name } , "`id`" , "`tablename`" )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
var formVersion modelAppPlatform . CustomerFormVersion
formVersion . TableKey = customerFormCont . TableNames //default:'';not null;comment:表单标识符"`
varsionNum := HageFormVersionNum ( customerFormCont . TableNames )
formVersion . Version = varsionNum //1;not null;comment:版本号"`
if varsionNum > 1 {
formVersion . Status = 2
} else {
formVersion . Status = 1 //not null;comment:显示状态(1:启用;2:禁用,3:删除)"`
}
formVersion . MastesForm = requestData . Data //';comment:表单结构"`
formVersion . MastesFormJson = requestData . JsonData //efault:'';comment:表单结构json"`
formVersion . Creater = userCont . Key //ult:0;not null;comment:创建人"`
formVersion . CreaterTime = cureeTime //not null;comment:创建时间"`
formVersion . EditTime = cureeTime //efault:0;not null;comment:编辑时间"`
// mastSql, _ := formJsonCont.DisassembleForm()
// mastSql, _ := formJsonCont.CreateFormDatabaseTable()
mastSql , _ := formJsonCont . CreateFormTable ( )
formVersion . TableStructure = mastSql //;default:'';comment:字表结构"`
formVersion . Dict = requestData . Dict //字表结构"`
errVer := overall . CONSTANT_DB_AppPlatform . Create ( & formVersion ) . Error
if errVer != nil {
publicmethod . Result ( 104 , customerFormCont , c )
return
}
publicmethod . Result ( 0 , err , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 0 9 10 : 44 : 55
@ 功能 : 启用版本
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) EnableVersion ( 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 ( 1 , err , c , "未知启用版本!" )
return
}
var formVersion modelAppPlatform . CustomerFormVersion
err = formVersion . GetCont ( map [ string ] interface { } { "`id`" : requestData . Id } )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
overall . CONSTANT_DB_AppPlatform . Model ( & modelAppPlatform . CustomerFormVersion { } ) . Where ( "`tablekey` = ? AND `status` = 1" , formVersion . TableKey ) . Updates ( map [ string ] interface { } { "`status`" : 2 } )
err = formVersion . EiteCont ( map [ string ] interface { } { "`id`" : requestData . Id } , map [ string ] interface { } { "`status`" : 1 } )
publicmethod . Result ( 0 , err , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 15 10 : 29 : 39
@ 功能 : 检测是否存在提交和返回按钮
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) JudgeSubmitCancel ( c * gin . Context ) {
var requestData publicmethod . PublicName
err := c . ShouldBindJSON ( & requestData )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if requestData . Name == "" {
publicmethod . Result ( 1 , err , c , "未知表单数据!" )
return
}
isSubmit := false
isCancel := false
var formJsonCont CustomerFormMaster
json . Unmarshal ( [ ] byte ( requestData . Name ) , & formJsonCont )
if len ( formJsonCont . List ) > 0 {
for _ , v := range formJsonCont . List {
switch v . Type {
case "grid" , "tabs" :
if len ( v . Columns ) > 0 {
for _ , cv := range v . Columns {
isSubmits , isCancels := PublicUnitJieXi ( cv . List )
if isSubmits {
isSubmit = true
}
if isCancels {
isCancel = true
}
}
}
case "card" , "div" :
if len ( v . List ) > 0 {
isSubmits , isCancels := PublicUnitJieXi ( v . List )
if isSubmits {
isSubmit = true
}
if isCancels {
isCancel = true
}
}
case "button" :
if v . Control . Key == "submit" {
isSubmit = true
}
if v . Control . Key == "cancel" {
isCancel = true
}
default :
// fmt.Printf("type:%v <===========>label:%v <===========> Name:%v<===========> ModelValue:%v\n", v.Type, v.Item.Label, v.Name, v.Control.ModelValue)
}
}
}
buttonIsTrue := 0
if isSubmit && isCancel {
buttonIsTrue = 1
} else if isSubmit && ! isCancel {
buttonIsTrue = 2
} else if ! isSubmit && isCancel {
buttonIsTrue = 3
} else {
buttonIsTrue = 4
}
snedAry := publicmethod . MapOut [ string ] ( )
snedAry [ "buttonIsTrue" ] = buttonIsTrue
snedAry [ "formJsonCont" ] = formJsonCont
publicmethod . Result ( 0 , buttonIsTrue , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 15 10 : 44 : 20
@ 功能 : 通用组件解析
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func PublicUnitJieXi ( list [ ] MasterStruct ) ( isSubmit , isCancel bool ) {
if len ( list ) > 0 {
for _ , v := range list {
switch v . Type {
case "button" :
if v . Control . Key == "submit" {
isSubmit = true
}
if v . Control . Key == "cancel" {
isCancel = true
}
default :
}
}
}
return
}