应用集成平台服务端
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.
 
 
 

1165 lines
32 KiB

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-08-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`").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)
sendList = append(sendList, sendCont)
}
publicmethod.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(sendList)), sendList, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-09-08 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-08-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-08-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()
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()
publicmethod.Result(104, customerFormCont, c)
return
}
createDb.Commit()
err = createDb.Create(&customerFormCont).Error
if err != nil {
publicmethod.Result(104, customerFormCont, c)
return
}
publicmethod.Result(0, err, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-09-08 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-08-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-09-01 08: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-09-08 14:08: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-09-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-09-05 08:03:04
@ 功能: 拆解表单结构,设计创建数据库表
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (c *CustomerFormMaster) DisassembleForm() (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 "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 {
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), 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), 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)
}
}
// 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-09-13 09: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 _, v := range sql {
// fmt.Printf("%v\n", v)
overall.CONSTANT_DB_CustomerForm.Exec(v)
// err := overall.CONSTANT_DB_CustomerForm.Exec(v).Error
// fmt.Printf("字段创建----%v---%v\n", err, v)
}
}
}
/*
*
@ 作者: 秦东
@ 时间: 2023-09-13 08:12:23
@ 功能: 创建表单
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func CreateForm(formName, notes string, isMasters bool) (err error) {
//判断表单是否存在
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=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COMMENT='%v'", formName, 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=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COMMENT='%v'", formName, notes)
err = overall.CONSTANT_DB_CustomerForm.Exec(sqlCreateTable).Error
}
}
return
}
/*
*
@ 作者: 秦东
@ 时间: 2023-09-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-09-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-09-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-09-12 09: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-09-09 09: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()
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-09-09 09: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()
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-09-09 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-09-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-09-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
}