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

1388 lines
37 KiB

package customerform
import (
"appPlatform/models/customerForm"
"appPlatform/models/modelAppPlatform"
"appPlatform/models/modelshr"
"appPlatform/overall"
"appPlatform/overall/publicmethod"
"encoding/json"
"errors"
"fmt"
"strconv"
"strings"
"time"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
/*
*
@ 作者: 秦东
@ 时间: 2023-09-30 14:37:11
@ 功能: 分析表格组件转换值类型
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func AnalysisFormUnitClass(subUnit MasterStruct) (fieldCont AnalysisFormSubUnitClass) {
fieldCont.UnitName = subUnit.Type
fieldCont.WordName = subUnit.Name
fieldCont.Describe = subUnit.Item.Label
fieldCont.MinVal = 0
switch subUnit.Type {
case "input", "password": //单行文本
if len(subUnit.CustomRules) > 0 {
var fieldType []string
var valType []fieldStruct
for _, v := range subUnit.CustomRules {
switch v.Trigger {
case "mobile", "tel", "phone", "card":
if !publicmethod.IsInTrue[string]("varchar", fieldType) {
fieldType = append(fieldType, "varchar")
valType = append(valType, fieldStruct{Types: "varchar", MaxVal: 50})
} else {
for i := 0; i < len(valType); i++ {
if valType[i].Types == "varchar" {
valType[i].MaxVal = 50
}
}
}
case "email", "url", "numberLetter":
if !publicmethod.IsInTrue[string]("varchar", fieldType) {
fieldType = append(fieldType, "varchar")
valType = append(valType, fieldStruct{Types: "varchar", MaxVal: 255})
} else {
for i := 0; i < len(valType); i++ {
if valType[i].Types == "varchar" {
valType[i].MaxVal = 255
}
}
}
case "cn":
if !publicmethod.IsInTrue[string]("mediumtext", fieldType) {
fieldType = append(fieldType, "mediumtext")
valType = append(valType, fieldStruct{Types: "mediumtext", MaxVal: 0})
}
case "longitude", "latitude":
if !publicmethod.IsInTrue[string]("float", fieldType) {
fieldType = append(fieldType, "float")
valType = append(valType, fieldStruct{Types: "float", MaxVal: 20, MinVal: 20})
} else {
for i := 0; i < len(valType); i++ {
if valType[i].Types == "float" {
valType[i].MaxVal = 20
valType[i].MinVal = 20
}
}
}
case "money":
if !publicmethod.IsInTrue[string]("decimal", fieldType) {
fieldType = append(fieldType, "decimal")
valType = append(valType, fieldStruct{Types: "decimal", MaxVal: 20, MinVal: 4})
} else {
for i := 0; i < len(valType); i++ {
if valType[i].Types == "decimal" {
valType[i].MaxVal = 20
valType[i].MinVal = 4
}
}
}
case "int":
if !publicmethod.IsInTrue[string]("bigint", fieldType) {
fieldType = append(fieldType, "bigint")
valType = append(valType, fieldStruct{Types: "bigint", MaxVal: 20, Signed: true})
} else {
for i := 0; i < len(valType); i++ {
if valType[i].Types == "bigint" {
valType[i].MaxVal = 20
valType[i].Signed = true
}
}
}
case "number":
if !publicmethod.IsInTrue[string]("bigint", fieldType) {
fieldType = append(fieldType, "bigint")
valType = append(valType, fieldStruct{Types: "bigint", MaxVal: 20})
} else {
for i := 0; i < len(valType); i++ {
if valType[i].Types == "bigint" {
valType[i].MaxVal = 20
}
}
}
default:
}
if len(valType) > 0 {
for _, v := range valType {
if v.Types == "mediumtext" {
fieldCont.FieldType = "mediumtext"
} else if v.Types == "varchar" {
fieldCont.FieldType = "varchar"
fieldCont.MaxVal = v.MaxVal
} else if v.Types == "float" {
fieldCont.FieldType = "float"
fieldCont.MaxVal = v.MaxVal
fieldCont.MinVal = v.MinVal
} else if v.Types == "decimal" {
fieldCont.FieldType = "decimal"
fieldCont.MaxVal = v.MaxVal
fieldCont.MinVal = v.MinVal
} else if v.Types == "bigint" {
fieldCont.FieldType = "bigint"
fieldCont.MaxVal = v.MaxVal
fieldCont.Signed = v.Signed
} else {
fieldCont.FieldType = "varchar"
fieldCont.MaxVal = 255
}
}
} else {
fieldCont.FieldType = "varchar"
fieldCont.MaxVal = 255
}
}
} else {
fieldCont.FieldType = "varchar"
fieldCont.MaxVal = 255
}
case "textarea", "tinymce": //多行文本,富文本
fieldCont.FieldType = "mediumtext"
case "signaturemap":
fieldCont.FieldType = "longtext"
case "radio": //单选框组
if subUnit.Config.TransformData == "number" || subUnit.Config.TransformData == "" {
var fieldVal string
if len(subUnit.Options) > 0 {
for _, ov := range subUnit.Options {
if len(fieldVal) < len(ov.Value) {
fieldVal = ov.Value
}
}
}
size, fieldType := CalculateCharacterLength("int", fieldVal)
fieldCont.FieldType = fieldType
fieldCont.MaxVal = size
fieldCont.Signed = true
} else {
fieldCont.FieldType = "varchar"
fieldCont.MaxVal = 50
}
case "checkbox", "cascader", "treeSelect", "upload", "expand-user": //checkbox,级联选择器,树形控件,图片/文件: ,选择用户
fieldCont.FieldType = "mediumtext"
fieldCont.ValIsAry = true
case "select": //下拉选择框
if subUnit.Control.Multiple {
fieldCont.FieldType = "mediumtext"
fieldCont.ValIsAry = true
} else {
if subUnit.Config.TransformData == "number" {
var fieldVal string
if len(subUnit.Options) > 0 {
for _, ov := range subUnit.Options {
if len(fieldVal) < len(ov.Value) {
fieldVal = ov.Value
}
}
}
size, fieldType := CalculateCharacterLength("int", fieldVal)
fieldCont.FieldType = fieldType
fieldCont.MaxVal = size
fieldCont.Signed = true
} else {
fieldCont.FieldType = "varchar"
fieldCont.MaxVal = 50
}
}
case "datePicker": //日期选择器
fieldCont.UnitType = subUnit.Control.Type
switch subUnit.Control.Type {
case "year", "month", "date", "datetime", "week":
fieldCont.FieldType = "bigint"
fieldCont.MaxVal = 20
case "datetimerange", "daterange", "monthrange":
fieldCont.FieldType = "bigint"
fieldCont.MaxVal = 20
fieldCont.ValIsAry = true
default:
fieldCont.FieldType = "bigint"
fieldCont.MaxVal = 20
}
case "timePicker", "inputNumber": //时间选择器,计数器
fieldCont.FieldType = "bigint"
fieldCont.MaxVal = 20
case "colorPicker": //取色器
fieldCont.FieldType = "varchar"
fieldCont.MaxVal = 50
case "switch": //开关
var fieldVal string
if len(subUnit.Options) > 0 {
for _, ov := range subUnit.Options {
if len(fieldVal) < len(ov.Value) {
fieldVal = ov.Value
}
}
}
size, fieldType := CalculateCharacterLength("int", fieldVal)
fieldCont.FieldType = fieldType
fieldCont.MaxVal = size
fieldCont.Signed = true
case "rate", "slider": //评分,滑块
fieldVal := strconv.Itoa(subUnit.Control.Max)
size, fieldType := CalculateCharacterLength("int", fieldVal)
fieldCont.FieldType = fieldType
fieldCont.MaxVal = size
fieldCont.Signed = true
case "txt", "button", "title", "table", "grid", "tabs", "card", "flex", "divider", "div": //文本,按钮,标题,表格,格栅,标签,卡片布局,弹性布局,分割线,容器
case "component": //自定义组件 (格式待定)
default:
fieldCont.FieldType = "varchar"
fieldCont.MaxVal = 255
}
return
}
/*
*
@ 作者: 秦东
@ 时间: 2023-09-30 14:10:21
@ 功能: 自定义表格生成数据表
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (c *CustomerFormMaster) CreateFormTable() (relevance string, err error) {
// for _, v := range c.List {
// }
var tableFormSqlAry FormTableSql
tableFormSqlAry.TableSubUnitAnalysis(c.Form.Name, c.List, true)
// jsonStr, _ := json.Marshal(tableFormSqlAry)
// fmt.Printf("数据表-----》%v\n", string(jsonStr))
isSunForm := false
if len(tableFormSqlAry.MasterSql) <= 0 {
err = errors.New("没有主表!")
return
}
if len(tableFormSqlAry.SunSql) > 0 {
isSunForm = true
err = CreateForm(c.Form.Name, c.Form.FormName, "InnoDB", true)
} else {
err = CreateForm(c.Form.Name, c.Form.FormName, "MyISAM", true)
}
CreateFormFiled(c.Form.Name, c.Form.FormName, true, tableFormSqlAry.MasterSql) //添加主表字段
sunFormNameAry := make(map[string]string)
var sunTableNameAry []string
if isSunForm {
for _, v := range tableFormSqlAry.SunSql {
if len(v.SqlAry) > 0 {
sunFormTableName := v.TableName
if !publicmethod.IsInTrue[string](sunFormTableName, sunTableNameAry) {
sunTableNameAry = append(sunTableNameAry, sunFormTableName)
sunFormNameAry[v.TableName] = sunFormTableName
} else {
sunFormTableName = fmt.Sprintf("%v%v", v.TableName, publicmethod.GetUUid(1))
sunTableNameAry = append(sunTableNameAry, sunFormTableName)
sunFormNameAry[v.TableName] = sunFormTableName
}
err = CreateForm(sunFormTableName, fmt.Sprintf("%v(%v)子表", c.Form.FormName, c.Form.Name), "InnoDB", false)
// fmt.Printf("%v------->%v------->%v\n", sunFormTableName, err, v.SqlAry)
if err == nil {
CreateFormFiled(sunFormTableName, fmt.Sprintf("%v(%v)子表", c.Form.FormName, c.Form.Name), false, v.SqlAry)
}
}
}
}
if len(sunFormNameAry) > 0 {
relevanceByte, _ := json.Marshal(sunFormNameAry)
relevance = string(relevanceByte)
}
return
}
/*
*
@ 作者: 秦东
@ 时间: 2023-09-30 14:12:51
@ 功能: 表格组件拆分
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (f *FormTableSql) TableSubUnitAnalysis(tablename string, subUnitAry []MasterStruct, isMaster bool) {
if len(subUnitAry) > 0 {
var sqlAllAry []string
// fmt.Printf("tablename--->%v===>%v\n", tablename, isMaster)
for _, v := range subUnitAry {
wordClass := AnalysisFormUnitClass(v)
switch wordClass.UnitName {
case "flex", "table":
if len(v.List) > 0 {
f.TableSubUnitAnalysis(v.Name, v.List, false)
}
case "grid", "tabs":
if len(v.Columns) > 0 {
for _, mv := range v.Columns {
f.TableSubUnitAnalysis(tablename, mv.List, isMaster)
}
}
case "card", "div":
if len(v.List) > 0 {
f.TableSubUnitAnalysis(tablename, v.List, isMaster)
}
default:
masterSql := MakeSql(tablename, wordClass)
sqlAllAry = append(sqlAllAry, masterSql...)
// if len(masterSql) > 0 {
// if isMaster {
// f.MasterSql = append(f.MasterSql, masterSql...)
// } else {
// sunSqlAry := publicmethod.MapOut[string]()
// sunSqlAry[tablename] = masterSql
// f.SunSql = sunSqlAry
// }
// }
}
}
// fmt.Printf("tablename--->%v===>%v===>%v\n", tablename, isMaster, sqlAllAry)
if len(sqlAllAry) > 0 {
if isMaster {
f.MasterSql = append(f.MasterSql, sqlAllAry...)
} else {
if len(f.SunSql) > 0 {
isWrite := true
for sk, s := range f.SunSql {
if s.TableName == tablename {
f.SunSql[sk].SqlAry = append(f.SunSql[sk].SqlAry, sqlAllAry...)
isWrite = false
}
}
if isWrite {
var sunSqlInfo SunSqlCont
sunSqlInfo.TableName = tablename
sunSqlInfo.SqlAry = sqlAllAry
f.SunSql = append(f.SunSql, sunSqlInfo)
}
} else {
var sunSqlInfo SunSqlCont
sunSqlInfo.TableName = tablename
sunSqlInfo.SqlAry = sqlAllAry
f.SunSql = append(f.SunSql, sunSqlInfo)
}
}
}
}
}
/*
*
@ 作者: 秦东
@ 时间: 2023-10-01 08:22:23
@ 功能: 组装sql语句
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func MakeSql(tablename string, fieldCont AnalysisFormSubUnitClass) (sql []string) {
if tablename == "" || fieldCont.WordName == "" {
return
}
unsigned := ""
if !fieldCont.Signed {
unsigned = "unsigned"
}
// fmt.Printf("%v------->%v------->%v\n", fieldCont.WordName, fieldCont.FieldType, fieldCont.ValIsAry)
switch fieldCont.FieldType {
case "int":
sql = append(sql, fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v) %v NOT NULL DEFAULT %v COMMENT '%v'", tablename, fieldCont.WordName, fieldCont.FieldType, fieldCont.MaxVal, unsigned, fieldCont.MinVal, fieldCont.Describe))
case "bigint":
sql = append(sql, fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v) %v NOT NULL DEFAULT %v COMMENT '%v'", tablename, fieldCont.WordName, fieldCont.FieldType, fieldCont.MaxVal, unsigned, fieldCont.MinVal, fieldCont.Describe))
if fieldCont.ValIsAry {
endField := fmt.Sprintf("%v_end", fieldCont.WordName)
sql = append(sql, fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v) %v NOT NULL DEFAULT %v COMMENT '%v'", tablename, endField, fieldCont.FieldType, fieldCont.MaxVal, unsigned, fieldCont.MinVal, fieldCont.Describe))
}
case "float":
sql = append(sql, fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v,%v) %v NOT NULL DEFAULT 0 COMMENT '%v'", tablename, fieldCont.WordName, fieldCont.FieldType, fieldCont.MaxVal, fieldCont.MinVal, unsigned, fieldCont.Describe))
case "decimal":
sql = append(sql, fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v,%v) %v NOT NULL DEFAULT 0 COMMENT '%v'", tablename, fieldCont.WordName, fieldCont.FieldType, fieldCont.MaxVal, fieldCont.MinVal, unsigned, fieldCont.Describe))
case "mediumtext", "longtext":
sql = append(sql, fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v COMMENT '%v'", tablename, fieldCont.WordName, fieldCont.FieldType, fieldCont.Describe))
case "varchar":
sql = append(sql, fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '%v'", tablename, fieldCont.WordName, fieldCont.FieldType, fieldCont.MaxVal, fieldCont.Describe))
default:
}
return
}
/*
*
@ 作者: 秦东
@ 时间: 2023-10-07 14:18:23
@ 功能: 获取主表及子表相关组件
@ 参数
#tablename 当前表明
#subUnitAry 组件列表
#isMaster true:主表;false:子表
@ 返回值
#
@ 方法原型
#
*/
func (f *FormUnitInfo) GainMasterAndSunFormUnit(tablename string, subUnitAry []MasterStruct, isMaster bool) {
if len(subUnitAry) > 0 {
unitAry := make(map[string]MasterStruct)
for _, v := range subUnitAry {
wordClass := AnalysisFormUnitClass(v)
switch wordClass.UnitName {
case "flex", "table":
if len(v.List) > 0 {
f.GainMasterAndSunFormUnit(v.Name, v.List, false)
}
case "grid", "tabs":
if len(v.Columns) > 0 {
for _, mv := range v.Columns {
f.GainMasterAndSunFormUnit(tablename, mv.List, isMaster)
}
}
case "card", "div":
if len(v.List) > 0 {
f.GainMasterAndSunFormUnit(tablename, v.List, isMaster)
}
default:
// unitAry = append(unitAry, v)
if v.Name != "" {
unitAry[v.Name] = v
if isMaster {
f.MasterInfo = append(f.MasterInfo, v)
}
}
}
}
if len(unitAry) > 0 {
if isMaster {
} else {
if len(f.SunFormInfo) > 0 {
isWrite := true
for sk, s := range f.SunFormInfo {
if s.TableName == tablename {
f.SunFormInfo[sk].UbitInfo = unitAry
isWrite = false
}
}
if isWrite {
var sunTableCont SunFormInfoList
sunTableCont.TableName = tablename
sunTableCont.UbitInfo = unitAry
f.SunFormInfo = append(f.SunFormInfo, sunTableCont)
}
} else {
var sunTableCont SunFormInfoList
sunTableCont.TableName = tablename
sunTableCont.UbitInfo = unitAry
f.SunFormInfo = append(f.SunFormInfo, sunTableCont)
}
}
}
}
}
/*
*
@ 作者: 秦东
@ 时间: 2023-12-02 11:07:48
@ 功能: 组件名与关键字对照
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (f *FormUnitInfo) GainMasterAndSunFormUnitNameKey() (mastNameKey map[string]string, suanNameKey map[string]map[string]string) {
mastNameKeyInfo := make(map[string]string)
for _, v := range f.MasterInfo {
mastNameKeyInfo[v.Name] = v.Item.Label
}
mastNameKey = mastNameKeyInfo
sunTypeAry := make(map[string]map[string]string)
for _, v := range f.SunFormInfo {
sunUnitNameKey := make(map[string]string)
for _, uv := range v.UbitInfo {
sunUnitNameKey[uv.Name] = uv.Item.Label
}
sunTypeAry[v.TableName] = sunUnitNameKey
// sunTypeAry[v.TableName] = v.UbitInfo
// fmt.Printf("自定义表单结果值!tableName:%v---->%T---->%v\n", v.TableName, v.UbitInfo, v.UbitInfo)
}
suanNameKey = sunTypeAry
// fmt.Printf("自定义表单结果值!tableName:%v---->%T\n", sunTypeAry, sunTypeAry)
return
}
/*
*
@ 作者: 秦东
@ 时间: 2024-03-26 13:46:27
@ 功能: 获取数据库表字段
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) GainTableField(c *gin.Context) {
var requestData publicmethod.PublicId
err := c.ShouldBindJSON(&requestData)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if requestData.Id == "" {
publicmethod.Result(1, err, c, "未知表单!无法获取字段!")
return
}
var customerFormMaster modelAppPlatform.CustomerFormView
err = customerFormMaster.GetCont(map[string]interface{}{"`cfid`": requestData.Id, "`status`": 1}, "`tablekey`", "`table_structure`", "`mastesform`", "`mastesformjson`")
if err != nil {
publicmethod.Result(1, err, c, "未知表单!无法获取字段!")
return
}
masterTable, err := GainFormTableField(customerFormMaster.TableKey)
if err != nil {
publicmethod.Result(1, err, c, "未知表单!无法获取字段!")
return
}
sendTableList := publicmethod.MapOut[string]()
sendTableList["masterTable"] = masterTable
if customerFormMaster.TableStructure != "" { //判断是否有主体子表单
var sunTable map[string]interface{}
err = json.Unmarshal([]byte(customerFormMaster.TableStructure), &sunTable)
if err == nil {
sunTableMap := publicmethod.MapOut[string]()
for _, v := range sunTable { //遍历子表单名称
if vStr, ok := v.(string); ok {
sunTableMap[vStr], err = GainFormTableField(vStr)
}
}
sendTableList["sunTable"] = sunTableMap
}
}
publicmethod.Result(0, sendTableList, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2024-03-20 15:09:59
@ 功能: 获取表格字段
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) GainFormTableField(c *gin.Context) {
var requestData publicmethod.PublicId
err := c.ShouldBindJSON(&requestData)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if requestData.Id == "" {
publicmethod.Result(1, err, c, "未知表单!无法获取字段!")
return
}
var customerFormMaster modelAppPlatform.CustomerFormView
err = customerFormMaster.GetCont(map[string]interface{}{"`cfid`": requestData.Id, "`status`": 1}, "`tablekey`", "`table_structure`", "`mastesform`", "`mastesformjson`")
if err != nil {
publicmethod.Result(1, err, c, "未知表单!无法获取字段!")
return
}
masterTable, err := GainFormTableField(customerFormMaster.TableKey)
if err != nil {
publicmethod.Result(1, err, c, "未知表单!无法获取字段!")
return
}
var unitCont map[string]interface{}
json.Unmarshal([]byte(customerFormMaster.MastesFormJson), &unitCont)
var formFieldAry FormJsonFieldInfo
if list, ok := unitCont["list"]; ok {
if listAry, ok := list.([]interface{}); ok {
formFieldAry.AnalyzingFormJson("", listAry)
}
}
sendTableList := publicmethod.MapOut[string]()
if len(formFieldAry.MasterInfo) > 0 {
sendTableList["masterTable"] = TableFieldCompare(masterTable, formFieldAry.MasterInfo)
} else {
sendTableList["masterTable"] = masterTable
}
if customerFormMaster.TableStructure != "" { //判断是否有主体子表单
var sunTable map[string]interface{}
err = json.Unmarshal([]byte(customerFormMaster.TableStructure), &sunTable)
if err == nil {
sunTableMap := publicmethod.MapOut[string]()
for _, v := range sunTable { //遍历子表单名称
if vStr, ok := v.(string); ok {
sunField := GainSunFormTableField(vStr, formFieldAry.SunFormInfo)
if len(sunField) > 0 {
sunTableForm, formErr := GainFormTableField(vStr)
if formErr == nil {
sunTableMap[vStr] = TableFieldCompare(sunTableForm, sunField)
} else {
sunTableMap[vStr], _ = GainFormTableField(vStr) //获取表单字段
}
} else {
sunTableMap[vStr], _ = GainFormTableField(vStr) //获取表单字段
}
}
}
sendTableList["sunTable"] = sunTableMap
}
}
publicmethod.Result(0, sendTableList, c)
}
// 获取子表表单数据
func GainSunFormTableField(tableName string, SunFormInfo []SunFormFieldInfoList) (fieldList []FormFieldInfo) {
return
}
/*
*
@ 作者: 秦东
@ 时间: 2024-03-25 09:01:12
@ 功能: 表单数据对照
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func TableFieldCompare(tableFieldList []Result, jsonFieldList []FormFieldInfo) (fieldList []FormFieldInfo) {
if len(tableFieldList) > 0 {
if len(jsonFieldList) > 0 {
var writeTableField []string
for _, tv := range tableFieldList {
for _, jv := range jsonFieldList {
if tv.Field == jv.Id {
if !publicmethod.IsInTrue[string](tv.Field, writeTableField) {
writeTableField = append(writeTableField, tv.Field)
}
var fieldInfo FormFieldInfo
fieldInfo.Id = jv.Id
if tv.Comment == "" {
fieldInfo.Label = jv.Label
} else {
fieldInfo.Label = tv.Comment
}
fieldInfo.Field = tv.Field //field"`
attFiled := strings.Split(tv.Type, " ")
fmt.Printf("attFiled---->%v=========>%v\n", tv.Type, attFiled)
if len(attFiled) > 0 {
fieldInfo.Types = attFiled[0]
}
if len(attFiled) >= 2 {
fieldInfo.Attribute = attFiled[1]
}
patternInfo := strings.Split(tv.Type, "(")
if len(patternInfo) >= 1 {
fieldInfo.Pattern = patternInfo[0]
}
fieldInfo.FieldClass = jv.FieldClass //fieldClass"`
fieldInfo.ActiveValue = jv.ActiveValue //activeValue"`
fieldInfo.InactiveValue = jv.InactiveValue //inactiveValue"`
fieldInfo.Options = jv.Options //options"`
fieldList = append(fieldList, fieldInfo)
}
}
}
if len(writeTableField) > 0 {
for _, tv := range tableFieldList {
if !publicmethod.IsInTrue[string](tv.Field, writeTableField) {
var fieldInfo FormFieldInfo
fieldInfo.Id = tv.Field
if tv.Comment == "" {
fieldInfo.Label = tv.Field
} else {
fieldInfo.Label = tv.Comment
}
fieldInfo.Field = tv.Field //field"`
attFiled := strings.Split(tv.Type, " ")
if len(attFiled) > 0 {
fieldInfo.Types = attFiled[0]
}
if len(attFiled) >= 2 {
fieldInfo.Attribute = attFiled[1]
}
patternInfo := strings.Split(tv.Type, "(")
if len(patternInfo) >= 1 {
fieldInfo.Pattern = patternInfo[0]
}
fieldInfo.FieldClass = tv.Field //fieldClass"`
// fieldInfo.ActiveValue = v. //activeValue"`
// fieldInfo.InactiveValue = v. //inactiveValue"`
// fieldInfo.Options = v. //options"`
fieldList = append(fieldList, fieldInfo)
}
}
for _, jv := range jsonFieldList {
if !publicmethod.IsInTrue[string](jv.Id, writeTableField) {
fieldList = append(fieldList, jv)
}
}
}
} else {
for _, v := range tableFieldList {
var fieldInfo FormFieldInfo
fieldInfo.Id = v.Field
fieldInfo.Label = v.Comment
fieldInfo.Field = v.Field //field"`
attFiled := strings.Split(v.Type, " ")
if len(attFiled) >= 2 {
fieldInfo.Attribute = attFiled[1]
fieldInfo.Types = attFiled[0]
}
patternInfo := strings.Split(v.Type, "(")
if len(patternInfo) >= 1 {
fieldInfo.Pattern = patternInfo[0]
}
// fieldInfo.FieldClass = v. //fieldClass"`
// fieldInfo.ActiveValue = v. //activeValue"`
// fieldInfo.InactiveValue = v. //inactiveValue"`
// fieldInfo.Options = v. //options"`
fieldList = append(fieldList, fieldInfo)
}
}
} else {
fieldList = jsonFieldList
}
return
}
/*
*
@ 作者: 秦东
@ 时间: 2024-03-22 09:00:27
@ 功能: 获取表单字段
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func GainFormTableField(formTableName string) (fieldList []Result, err error) {
gormDb := overall.CONSTANT_DB_CustomerForm
sqlStr := fmt.Sprintf("SHOW FULL COLUMNS FROM `%v`", formTableName)
err = gormDb.Raw(sqlStr).Scan(&fieldList).Error
if err != nil {
return
}
for i, v := range fieldList {
attFiled := strings.Split(v.Type, " ")
if len(attFiled) >= 2 {
fieldList[i].Attribute = attFiled[1]
fieldList[i].Type = attFiled[0]
}
patternInfo := strings.Split(v.Type, "(")
if len(patternInfo) >= 1 {
fieldList[i].Pattern = patternInfo[0]
}
}
return
}
/*
*
@ 作者: 秦东
@ 时间: 2024-03-23 15:15:17
@ 功能: 解析表单字段
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (f *FormJsonFieldInfo) AnalyzingFormJson(tableName string, unitList []interface{}) {
if len(unitList) > 0 {
var fieldInfo []FormFieldInfo
for _, listVal := range unitList {
if listInfo, ok := listVal.(map[string]interface{}); ok {
if unitType, ok := listInfo["type"]; ok {
var unitInfo FormFieldInfo
if unitName, ok := listInfo["name"]; ok {
if unitNameStr, ok := unitName.(string); ok {
unitInfo.Id = unitNameStr
}
}
if itemVal, ok := listInfo["item"]; ok {
if itemInfo, ok := itemVal.(map[string]interface{}); ok {
if itemName, ok := itemInfo["label"]; ok {
if itemNameStr, ok := itemName.(string); ok {
unitInfo.Label = itemNameStr
}
}
}
}
switch unitType {
case "flex", "table":
if list, ok := listInfo["list"]; ok {
if listAry, ok := list.([]interface{}); ok {
f.AnalyzingFormJson(unitInfo.Id, listAry)
}
}
case "grid", "tabs":
if list, ok := listInfo["columns"]; ok {
if listAry, ok := list.([]interface{}); ok {
for _, colVal := range listAry {
if colList, ok := colVal.(map[string]interface{}); ok {
if listMap, ok := colList["list"]; ok {
if colListAry, ok := listMap.([]interface{}); ok {
f.AnalyzingFormJson(unitInfo.Id, colListAry)
}
}
}
}
}
}
case "card", "div":
case "title", "txt", "button":
default:
if unitTypeStr, ok := unitType.(string); ok {
unitInfo.FieldClass = unitTypeStr
}
// fmt.Printf("unitList---->%T====>%v\n", listInfo["control"], listInfo["control"])
if controlVal, ok := listInfo["control"]; ok {
if controlMap, ok := controlVal.(map[string]interface{}); ok {
if activeVal, ok := controlMap["activeValue"]; ok {
if activeValStr, ok := activeVal.(string); ok {
unitInfo.ActiveValue = activeValStr
}
}
if InactiveVal, ok := controlMap["inactiveValue"]; ok {
if InactiveValStr, ok := InactiveVal.(string); ok {
unitInfo.InactiveValue = InactiveValStr
}
}
}
}
if optionsVal, ok := listInfo["options"]; ok {
if optionsMap, ok := optionsVal.([]interface{}); ok {
for _, optv := range optionsMap {
if optvMap, ok := optv.(map[string]interface{}); ok {
var optInfo OptionsInfo
fmt.Printf("optvMap---->%T====>%v\n", optvMap["label"], optvMap["label"])
if labelVal, ok := optvMap["label"]; ok {
if labelValStr, ok := labelVal.(string); ok {
optInfo.Label = labelValStr
}
}
if valueVal, ok := optvMap["value"]; ok {
if valueValStr, ok := valueVal.(string); ok {
optInfo.Value = valueValStr
}
}
unitInfo.Options = append(unitInfo.Options, optInfo)
}
}
}
}
fieldInfo = append(fieldInfo, unitInfo)
}
}
}
}
if len(fieldInfo) > 0 {
if tableName != "" {
if len(f.SunFormInfo) > 0 {
isNewData := true
for i, v := range f.SunFormInfo {
if v.TableName == tableName {
f.SunFormInfo[i].UbitInfo = append(f.SunFormInfo[i].UbitInfo, fieldInfo...)
isNewData = false
}
}
if isNewData {
var sunFormInfo SunFormFieldInfoList
sunFormInfo.TableName = tableName
sunFormInfo.UbitInfo = fieldInfo
f.SunFormInfo = append(f.SunFormInfo, sunFormInfo)
}
} else {
var sunFormInfo SunFormFieldInfoList
sunFormInfo.TableName = tableName
sunFormInfo.UbitInfo = fieldInfo
f.SunFormInfo = append(f.SunFormInfo, sunFormInfo)
}
} else {
f.MasterInfo = append(f.MasterInfo, fieldInfo...)
}
}
}
}
/*
*
@ 作者: 秦东
@ 时间: 2024-03-29 16:43:17
@ 功能: 编辑自定义表单列表数据
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) EditCustomerFormList(c *gin.Context) {
var requestData EditCustFormList
err := c.ShouldBindJSON(&requestData)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if requestData.Id == "" {
publicmethod.Result(1, err, c, "未知表单!无法获取字段!2")
return
}
if requestData.Data == "" {
publicmethod.Result(1, err, c, "未知列表数据!无法获取字段!1")
return
}
var customerFormInfo modelAppPlatform.CustomerForm
err = customerFormInfo.GetCont(map[string]interface{}{"`id`": requestData.Id}, "`listjson`")
if err != nil {
publicmethod.Result(1, err, c, "未知表单!无法获取字段!3")
return
}
editInfo := publicmethod.MapOut[string]()
editInfo["listjson"] = requestData.Data
editInfo["edit_time"] = time.Now().Unix()
err = customerFormInfo.EiteCont(map[string]interface{}{"`id`": requestData.Id}, editInfo)
if err != nil {
publicmethod.Result(1, err, c, "编辑失败!请重新提交!")
return
}
publicmethod.Result(0, err, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2024-04-01 08:34:08
@ 功能: 获取表单列表数据
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) GainFormListCont(c *gin.Context) {
var requestData publicmethod.PublicId
err := c.ShouldBindJSON(&requestData)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if requestData.Id == "" {
publicmethod.Result(1, err, c, "未知表单!无法获取字段!2")
return
}
var customerFormInfo modelAppPlatform.CustomerForm
err = customerFormInfo.GetCont(map[string]interface{}{"`id`": requestData.Id})
if err != nil {
publicmethod.Result(1, err, c, "未知表单!无法获取字段!3")
return
}
publicmethod.Result(0, customerFormInfo, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2024-04-01 16:03:50
@ 功能:获取表单列表翻页数据
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) GainFormPageListCont(c *gin.Context) {
var requestData FormPageListAttr
err := c.ShouldBindJSON(&requestData)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if requestData.FormId == "" {
publicmethod.Result(1, err, c, "未知表单!无法获取字段!2")
return
}
if requestData.Page == 0 {
requestData.Page = 1
}
if requestData.PageSize == 0 {
requestData.Page = 20
}
var formInfo modelAppPlatform.CustomerFormView
err = formInfo.GetCont(map[string]interface{}{"`cfid`": requestData.FormId, "`status`": 1}, "`tablekey`", "`table_structure`", "`mastesform`", "`mastesformjson`", "`listjson`", "`flowIsOpen`", "`flowkey`")
if err != nil {
publicmethod.Result(1, err, c, "未知表单!无法获取字段!")
return
}
// why, err := AnalysisSerachTerm(requestData.SearchData)
// fmt.Printf("why---->%v\n", why)
var formList []map[string]interface{}
// gormDb := overall.CONSTANT_DB_CustomerForm.Table(formInfo.TableKey)
tableName := fmt.Sprintf("`%v` as f", formInfo.TableKey)
gormDb := overall.CONSTANT_DB_CustomerForm.Table(tableName).Select("f.*,t.status as taskStatus")
// if err == nil {
// gormDb = gormDb.Where(why)
// }
gormDb = gormDb.Joins("LEFT JOIN `taskrecord` as t ON f.masters_key = t.masters_key")
gormDb = gormDb.Where("`states` BETWEEN ? AND ?", 1, 2)
gormDb = AnalysisSerachTermSql(requestData.SearchData, gormDb)
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
}
// for i, _ := range formList {
// // formList[i]["flowIsOpen"] = formInfo.FlowIsOpen
// formList[i]["flowkey"] = strconv.FormatInt(formInfo.Flowkey, 10)
// }
if formInfo.ListJson != "" {
var listFieldsMap ListPageFields
err = json.Unmarshal([]byte(formInfo.ListJson), &listFieldsMap)
// fmt.Printf("%T----------->%v----------->%v\n", listFieldsMap, err, listFieldsMap)
if err == nil {
// fmt.Printf("%T----------->%v\n", listFieldsMap, listFieldsMap)
formList = listFieldsMap.DevelopSpecificationsSend(formList)
// formList = DevelopSpecificationsSend(formList, listFieldsMap)
}
}
context, _ := c.Get(overall.MyContJwt)
var userCont modelshr.ManCont
userCont.GetLoginCont(context) //当前操作人
//获取任务状态
for i, v := range formList {
formList[i]["isRetract"] = false
if mastrKey, ok := v["masters_key"]; ok {
// fmt.Printf("masters_key----------->%v\n", v["masters_key"])
var runFlowInfo customerForm.RunWorkflow
runFlowInfo.GetCont(map[string]interface{}{"`flow_key`": mastrKey}, "`current_step`", "`next_step`")
// fmt.Printf("runFlowInfo----------->%v--------->%v\n", runFlowInfo, v["taskStatus"])
if stateVal, ok := v["taskStatus"]; ok {
// fmt.Printf("NextStep----------->%T----------->%v--------->%v--------->%v\n", stateVal, stateVal, runFlowInfo.NextStep, runFlowInfo.CurrentStep)
if stauval, ok := stateVal.(string); ok {
if stauval == "3" && runFlowInfo.NextStep != 0 {
// fmt.Printf("IsRetract----------->%T----------->%v----------->%v\n", formList[i]["creater"], formList[i]["creater"], userCont.Name)
if runFlowInfo.CurrentStep == 1 {
if createrName, ok := formList[i]["creater"].(string); ok {
if createrName == userCont.Name {
formList[i]["isRetract"] = true
}
}
}
}
}
}
}
}
// publicmethod.Result(100, formList, c)
publicmethod.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(formList)), formList, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2024-04-02 08:14:10
@ 功能: 按照制定列表字段输出
*/
func (l *ListPageFields) DevelopSpecificationsSend(listData []map[string]interface{}) []map[string]interface{} {
var sendList []map[string]interface{}
for _, v := range listData {
sendInfo := publicmethod.MapOut[string]()
for mi, mv := range v {
// fmt.Printf("%v = %v\n", mi, mv)
switch mi {
case "creater":
var myInfo modelshr.PersonArchives
myInfo.GetCont(map[string]interface{}{"`key`": mv}, "`name`")
sendInfo[mi] = myInfo.Name
case "creater_time":
timeInt, _ := publicmethod.StringToInt64(mv)
sendInfo[mi] = publicmethod.UnixTimeToDay(timeInt, 27)
case "edit_time":
timeInt, _ := publicmethod.StringToInt64(mv)
sendInfo[mi] = publicmethod.UnixTimeToDay(timeInt, 27)
default:
sendInfo[mi] = l.BaseTableAttrField(mi, mv)
// sendInfo[mi] = publicmethod.TypeToInterface(mv)
}
}
// fmt.Printf("================================\n")
sendList = append(sendList, sendInfo)
}
return sendList
}
/*
*
@ 作者: 秦东
@ 时间: 2024-04-02 11:42:20
@ 功能: 根据字段显示格式处理数据
*/
func (l *ListPageFields) BaseTableAttrField(key string, val interface{}) interface{} {
if len(l.TableData.Columns) < 0 {
return val
}
for _, v := range l.TableData.Columns {
if v.Id == key {
switch v.FieldClass {
case "checkbox":
if val != nil {
var checkboxStrAry []interface{}
var checkboxAry []string
if valStr, ok := val.(string); ok {
err := json.Unmarshal([]byte(valStr), &checkboxStrAry)
if err == nil {
for _, v := range checkboxStrAry {
checkboxAry = append(checkboxAry, publicmethod.TypeToInterface(v))
}
}
}
if len(checkboxAry) > 0 {
var jieGuo []string
for _, ov := range v.Options {
if publicmethod.IsInTrue[string](ov.Value, checkboxAry) {
jieGuo = append(jieGuo, ov.Label)
}
}
val = strings.Join(jieGuo, ",")
}
}
case "orgCentent":
var orgCont modelshr.AdministrativeOrganization
orgCont.GetCont(map[string]interface{}{"`id`": val}, "name")
return orgCont.Name
case "baidumap":
var mapAry []string
if valStr, ok := val.(string); ok {
mapAry = strings.Split(valStr, "|*@*|")
}
if len(mapAry) > 0 {
return mapAry[0]
}
default:
return publicmethod.TypeToInterface(val)
}
}
}
return publicmethod.TypeToInterface(val)
}
/*
*
@ 作者: 秦东
@ 时间: 2024-04-01 16:16:28
@ 功能: 拆析查询条件
*/
func AnalysisSerachTerm(why string) (whereMap map[string]interface{}, err error) {
err = nil
if why == "" {
return
}
var listField []SearchButtonInfo
err = json.Unmarshal([]byte(why), &listField)
if err != nil {
return
}
whyMap := publicmethod.MapOut[string]()
for _, v := range listField {
// fmt.Printf("%v: %v\n", v.Field, v.Values)
if v.Values != nil && v.Values != "" {
whyMap[v.Field] = v.Values
}
}
if len(whyMap) < 1 {
err = errors.New("没有要查询的内容!")
return
}
whereMap = whyMap
return
}
/*
*
@ 作者: 秦东
@ 时间: 2024-04-02 13:26:45
@ 功能: 查询条件
*/
func AnalysisSerachTermSql(why string, gormDb *gorm.DB) *gorm.DB {
if why == "" {
return gormDb
}
var listField []SearchButtonInfo
err := json.Unmarshal([]byte(why), &listField)
if err != nil {
return gormDb
}
for _, v := range listField {
if v.Values != nil && v.Values != "" && v.Values != "" {
switch v.Pattern {
case "int":
likeSql := fmt.Sprintf("`%v` = %v", v.Field, v.Values)
gormDb = gormDb.Where(likeSql)
case "bigint":
likeSql := fmt.Sprintf("`%v` = %v", v.Field, v.Values)
gormDb = gormDb.Where(likeSql)
default:
likeSql := fmt.Sprintf("%v LIKE %v%v%v", v.Field, "'%", v.Values, "%'")
gormDb = gormDb.Where(likeSql)
}
}
}
return gormDb
}