diff --git a/api/shiyan/maptostruct/shiyan.go b/api/shiyan/maptostruct/shiyan.go index 120e17c..5ccb047 100644 --- a/api/shiyan/maptostruct/shiyan.go +++ b/api/shiyan/maptostruct/shiyan.go @@ -377,3 +377,41 @@ func (a *ApiMethod) HanZiZhuanPinYin(c *gin.Context) { str := pinyin.Slug(requestData.Name, pyObject) publicmethod.Result(0, str, c) } + +/* +* +@ 作者: 秦东 +@ 时间: 2023-09-28 15:35:07 +@ 功能: 测试表结构数值 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (a *ApiMethod) TestTable(c *gin.Context) { + var requestData publicmethod.PublicName + err := c.ShouldBindJSON(&requestData) + if err != nil { + publicmethod.Result(100, err, c) + return + } + if requestData.Name == "" { + requestData.Name = "shi_yang" + } + masterFormCont := publicmethod.MapOut[string]() + err = overall.CONSTANT_DB_CustomerForm.Table(requestData.Name).Find(&masterFormCont).Error + if err != nil { + publicmethod.Result(107, err, c) + return + } + for k, v := range masterFormCont { + fmt.Printf("%v => %T\n", k, v) + } +} diff --git a/api/shiyan/数据结构收集/所有组件平级.ts b/api/shiyan/数据结构收集/所有组件平级.ts new file mode 100644 index 0000000..ddb7d93 --- /dev/null +++ b/api/shiyan/数据结构收集/所有组件平级.ts @@ -0,0 +1,415 @@ +const optAll = { + list: [ + { + type: "input", + control: + { + modelValue: "" + }, + config: + {}, + name: "input1696058746993", + item: + { + label: "单行文本" + } + }, + { + type: "password", + control: + { + modelValue: "" + }, + config: + {}, + name: "input1696058918134", + item: + { + label: "单行文本" + } + }, + { + type: "textarea", + control: + { + modelValue: "" + }, + config: + {}, + name: "textarea1696058748248", + item: + { + label: "多行文本" + } + }, + { + type: "radio", + control: + { + modelValue: "" + }, + options: [], + config: + { + optionsType: 0 + }, + name: "radio1696058749689", + item: + { + label: "单选框组" + } + }, + { + type: "checkbox", + control: + { + modelValue: [] + }, + options: [], + config: + { + optionsType: 0 + }, + name: "checkbox1696058751136", + item: + { + label: "多选框组" + } + }, + { + type: "select", + control: + { + modelValue: "", + appendToBody: true + }, + options: [], + config: + { + optionsType: 0 + }, + name: "select1696058753224", + item: + { + label: "下拉选择框" + } + }, + { + type: "datePicker", + control: + { + modelValue: "", + type: "date", + valueFormat: "x" + }, + config: + {}, + name: "datePicker1696058754895", + item: + { + label: "日期选择器" + } + }, + { + type: "timePicker", + control: + { + modelValue: "" + }, + config: + {}, + name: "timePicker1696058756240", + item: + { + label: "时间选择器" + } + }, + { + type: "colorPicker", + control: + { + modelValue: "" + }, + config: + {}, + name: "colorPicker1696058757846", + item: + { + label: "取色器" + } + }, + { + type: "switch", + control: + { + modelValue: false + }, + config: + {}, + name: "switch1696058780439", + item: + { + label: "开关" + } + }, + { + type: "inputNumber", + control: + { + modelValue: 0 + }, + config: + {}, + name: "inputNumber1696058782096", + item: + { + label: "计数器" + } + }, + { + type: "cascader", + control: + { + modelValue: [] + }, + options: [], + config: + { + optionsType: 0 + }, + name: "cascader1696058783721", + item: + { + label: "级联选择器" + } + }, + { + type: "rate", + control: + { + modelValue: 0 + }, + config: + {}, + name: "rate1696058785728", + item: + { + label: "评分" + } + }, + { + type: "slider", + control: + { + modelValue: 0 + }, + config: + {}, + name: "slider1696058788101", + item: + { + label: "滑块" + } + }, + { + type: "treeSelect", + control: + { + modelValue: "", + data: [], + renderAfterExpand: false + }, + config: + { + optionsType: 0 + }, + name: "treeSelect1696058790114", + item: + { + label: "树形控件" + } + }, + { + type: "txt", + control: + { + modelValue: "" + }, + config: + {} + }, + { + type: "title", + control: + { + modelValue: "标题" + }, + config: + {} + }, + { + type: "button", + control: + { + label: "保存" + }, + config: + {} + }, + { + type: "table", + list: [], + tableData: [], + control: + { + border: true + }, + config: + { + addBtnText: "添加一行" + }, + name: "table1696058799887" + }, + { + type: "component", + control: + { + modelValue: "" + }, + config: + {}, + name: "component1696058802415", + item: + { + label: "自定义组件" + } + }, + { + type: "upload", + control: + { + modelValue: "", + action: "/dev-api/api/upordown" + }, + config: + {}, + name: "upload1696058806299", + item: + { + label: "图片/文件" + } + }, + { + type: "tinymce", + control: + { + modelValue: "" + }, + config: + {}, + name: "tinymce1696058809231", + item: + { + label: "富文本" + } + }, + { + type: "grid", + columns: [ + { + attr: + { + span: 12 + }, + list: [] + }, + { + attr: + { + span: 12 + }, + list: [] + }], + control: + {}, + config: + {} + }, + { + type: "tabs", + columns: [ + { + label: "Tab1", + list: [] + }], + control: + {}, + config: + {} + }, + { + type: "card", + list: [], + control: + {}, + config: + {}, + item: + { + label: "卡片布局" + } + }, + { + type: "flex", + list: [], + tableData: [], + control: + {}, + config: + { + addBtnText: "添加一行" + }, + name: "flex1696058823576" + }, + { + type: "divider", + control: + {}, + config: + {}, + item: + { + label: "分割线" + } + }, + { + type: "div", + control: + {}, + config: + {}, + list: [] + }, + { + type: "expand-user", + control: + { + modelValue: "" + }, + config: + {}, + name: "expand-user1696058834253", + item: + { + label: "选择用户" + } + }], + form: + { + size: "default", + name: "customer_form_168743329826082816", + formName: "未命名表单_168743329826082816" + }, + config: + {} +} \ No newline at end of file diff --git a/api/shiyan/数据结构收集/所有组件组合.ts b/api/shiyan/数据结构收集/所有组件组合.ts new file mode 100644 index 0000000..1d1787e --- /dev/null +++ b/api/shiyan/数据结构收集/所有组件组合.ts @@ -0,0 +1,1253 @@ +const opt = { + list: [ + { + type: "input", + control: + { + modelValue: "" + }, + config: + {}, + name: "input1696038556127", + item: + { + label: "单行文本" + } + }, + { + type: "password", + control: + { + modelValue: "" + }, + config: + {}, + name: "mi4ma3", + item: + { + label: "密码" + }, + customRules: [ + { + type: "required", + message: "必填项", + trigger: "blur" + }, + { + type: "int", + message: "请输入正整数", + trigger: "blur" + }] + }, + { + type: "textarea", + control: + { + modelValue: "" + }, + config: + {}, + name: "textarea1696038558485", + item: + { + label: "多行文本" + } + }, + { + type: "grid", + columns: [ + { + attr: + { + span: 12 + }, + list: [ + { + type: "radio", + control: + { + modelValue: "" + }, + options: [ + { + label: "男", + value: "1" + }, + { + label: "女", + value: "2" + }], + config: + { + optionsType: 0, + transformData: "number" + }, + name: "radio1696038570431", + item: + { + label: "单选框组" + } + }] + }, + { + attr: + { + span: 12 + }, + list: [ + { + type: "checkbox", + control: + { + modelValue: [] + }, + options: [ + { + label: "琴", + value: "1" + }, + { + label: "棋", + value: "2" + }, + { + label: "书", + value: "3" + }, + { + label: "画", + value: "4" + }], + config: + { + optionsType: 0, + transformData: "number" + }, + name: "checkbox1696038572631", + item: + { + label: "多选框组" + } + }] + }], + control: + {}, + config: + {} + }, + { + type: "card", + list: [ + { + type: "flex", + list: [ + { + type: "input", + control: + { + modelValue: "" + }, + config: + { + span: 11 + }, + name: "input1696038664966", + item: + { + label: "单行文本" + } + }, + { + type: "input", + control: + { + modelValue: "" + }, + config: + { + span: 11 + }, + name: "input1696038667373", + item: + { + label: "单行文本" + } + }], + tableData: [], + control: + {}, + config: + { + addBtnText: "添加一行" + }, + name: "flex1696038652102" + }], + control: + {}, + config: + {}, + item: + { + label: "卡片布局" + } + }, + { + type: "div", + control: + {}, + config: + {}, + list: [ + { + type: "input", + control: + { + modelValue: "" + }, + config: + { + span: 11 + }, + name: "input1696038778855", + item: + { + label: "单行文本" + } + }, + { + type: "input", + control: + { + modelValue: "" + }, + config: + { + span: 11 + }, + name: "input1696038787973", + item: + { + label: "单行文本" + } + }] + }, + { + type: "divider", + control: + {}, + config: + {}, + item: + { + label: "分割线" + } + }, + { + type: "grid", + columns: [ + { + attr: + { + span: 12 + }, + list: [ + { + type: "datePicker", + control: + { + modelValue: "", + type: "year", + valueFormat: "x" + }, + config: + {}, + name: "nian2", + item: + { + label: "年" + } + }], + type: "gridChild" + }, + { + attr: + { + span: 12 + }, + list: [ + { + type: "datePicker", + control: + { + modelValue: "", + type: "month", + valueFormat: "x" + }, + config: + {}, + name: "yue4", + item: + { + label: "月" + } + }], + type: "gridChild" + }, + { + list: [ + { + type: "datePicker", + control: + { + modelValue: "", + type: "date", + valueFormat: "x", + placeholder: "日期" + }, + config: + {}, + name: "ri4qi1", + item: + { + label: "日期" + } + }], + attr: + { + span: 12 + } + }, + { + list: [ + { + type: "datePicker", + control: + { + modelValue: "", + type: "datetime", + valueFormat: "x" + }, + config: + {}, + name: "ri4qi1shi2jian1", + item: + { + label: "日期时间" + } + }], + attr: + { + span: 12 + }, + type: "gridChild" + }, + { + list: [ + { + type: "datePicker", + control: + { + modelValue: "", + type: "week", + valueFormat: "x" + }, + config: + {}, + name: "zhou1", + item: + { + label: "周" + } + }], + attr: + { + span: 12 + } + }, + { + list: [ + { + type: "datePicker", + control: + { + modelValue: "", + type: "datetimerange", + valueFormat: "x" + }, + config: + {}, + name: "shi2jian1qu1jian1", + item: + { + label: "时间区间" + } + }], + attr: + { + span: 12 + } + }, + { + list: [ + { + type: "datePicker", + control: + { + modelValue: "", + type: "daterange", + valueFormat: "x" + }, + config: + {}, + name: "ri4qi1qu1jian1", + item: + { + label: "日期区间" + } + }], + attr: + { + span: 12 + } + }, + { + list: [ + { + type: "datePicker", + control: + { + modelValue: "", + type: "monthrange", + valueFormat: "x" + }, + config: + {}, + name: "yue4qu1jian1", + item: + { + label: "月区间" + } + }], + attr: + { + span: 12 + } + }, + { + list: [ + { + type: "timePicker", + control: + { + modelValue: "" + }, + config: + {}, + name: "xiao3shi2fen1zhong1", + item: + { + label: "小时分钟" + } + }], + attr: + { + span: 12 + } + }, + { + list: [ + { + type: "switch", + control: + { + modelValue: false, + activeValue: 1, + inactiveValue: 2 + }, + config: + {}, + name: "switch1696039103927", + item: + { + label: "开关" + } + }], + attr: + { + span: 12 + } + }], + control: + {}, + config: + {} + }, + { + type: "select", + control: + { + modelValue: "", + appendToBody: true + }, + options: [ + { + label: "笔", + value: "1" + }, + { + label: "墨", + value: "2" + }, + { + label: "纸", + value: "3" + }, + { + label: "砚", + value: "4" + }], + config: + { + optionsType: 0, + transformData: "number" + }, + name: "select1696039053901", + item: + { + label: "下拉选择框" + } + }, + { + type: "grid", + columns: [ + { + attr: + { + span: 6 + }, + list: [ + { + type: "colorPicker", + control: + { + modelValue: "", + colorFormat: "hsl" + }, + config: + {}, + name: "colorPicker1696039098586", + item: + { + label: "取色器" + } + }], + type: "gridChild" + }, + { + attr: + { + span: 6 + }, + list: [ + { + type: "colorPicker", + control: + { + modelValue: "", + colorFormat: "hsv" + }, + config: + {}, + name: "colorPicker1696055097699", + item: + { + label: "取色器" + } + }], + type: "gridChild" + }, + { + list: [ + { + type: "colorPicker", + control: + { + modelValue: "", + colorFormat: "hex" + }, + config: + {}, + name: "colorPicker1696055100707", + item: + { + label: "取色器" + } + }], + attr: + { + span: 6 + }, + type: "gridChild" + }, + { + list: [ + { + type: "colorPicker", + control: + { + modelValue: "", + colorFormat: "rgb" + }, + config: + {}, + name: "colorPicker1696055102938", + item: + { + label: "取色器" + } + }], + attr: + { + span: 6 + }, + type: "gridChild" + }], + control: + {}, + config: + {} + }, + { + type: "inputNumber", + control: + { + modelValue: 0 + }, + config: + {}, + name: "inputNumber1696039114696", + item: + { + label: "计数器" + } + }, + { + type: "cascader", + control: + { + modelValue: [] + }, + options: [ + { + value: "guide", + label: "Guide", + children: [ + { + value: "disciplines", + label: "Disciplines", + children: [ + { + value: "consistency", + label: "Consistency" + }, + { + value: "feedback", + label: "Feedback" + }, + { + value: "efficiency", + label: "Efficiency" + }, + { + value: "controllability", + label: "Controllability" + }] + }, + { + value: "navigation", + label: "Navigation", + children: [ + { + value: "side nav", + label: "Side Navigation" + }, + { + value: "top nav", + label: "Top Navigation" + }] + }] + }, + { + value: "component", + label: "Component", + children: [ + { + value: "basic", + label: "Basic", + children: [ + { + value: "layout", + label: "Layout" + }, + { + value: "color", + label: "Color" + }, + { + value: "typography", + label: "Typography" + }, + { + value: "icon", + label: "Icon" + }, + { + value: "button", + label: "Button" + }] + }, + { + value: "form", + label: "Form", + children: [ + { + value: "radio", + label: "Radio" + }, + { + value: "checkbox", + label: "Checkbox" + }, + { + value: "input", + label: "Input" + }, + { + value: "input-number", + label: "InputNumber" + }, + { + value: "select", + label: "Select" + }, + { + value: "cascader", + label: "Cascader" + }, + { + value: "switch", + label: "Switch" + }, + { + value: "slider", + label: "Slider" + }, + { + value: "time-picker", + label: "TimePicker" + }, + { + value: "date-picker", + label: "DatePicker" + }, + { + value: "datetime-picker", + label: "DateTimePicker" + }, + { + value: "upload", + label: "Upload" + }, + { + value: "rate", + label: "Rate" + }, + { + value: "form", + label: "Form" + }] + }, + { + value: "data", + label: "Data", + children: [ + { + value: "table", + label: "Table" + }, + { + value: "tag", + label: "Tag" + }, + { + value: "progress", + label: "Progress" + }, + { + value: "tree", + label: "Tree" + }, + { + value: "pagination", + label: "Pagination" + }, + { + value: "badge", + label: "Badge" + }] + }, + { + value: "notice", + label: "Notice", + children: [ + { + value: "alert", + label: "Alert" + }, + { + value: "loading", + label: "Loading" + }, + { + value: "message", + label: "Message" + }, + { + value: "message-box", + label: "MessageBox" + }, + { + value: "notification", + label: "Notification" + }] + }, + { + value: "navigation", + label: "Navigation", + children: [ + { + value: "menu", + label: "Menu" + }, + { + value: "tabs", + label: "Tabs" + }, + { + value: "breadcrumb", + label: "Breadcrumb" + }, + { + value: "dropdown", + label: "Dropdown" + }, + { + value: "steps", + label: "Steps" + }] + }, + { + value: "others", + label: "Others", + children: [ + { + value: "dialog", + label: "Dialog" + }, + { + value: "tooltip", + label: "Tooltip" + }, + { + value: "popover", + label: "Popover" + }, + { + value: "card", + label: "Card" + }, + { + value: "carousel", + label: "Carousel" + }, + { + value: "collapse", + label: "Collapse" + }] + }] + }, + { + value: "resource", + label: "Resource", + children: [ + { + value: "axure", + label: "Axure Components" + }, + { + value: "sketch", + label: "Sketch Templates" + }, + { + value: "docs", + label: "Design Documentation" + }] + }], + config: + { + optionsType: 0, + transformData: "number" + }, + name: "cascader1696039118457", + item: + { + label: "级联选择器" + } + }, + { + type: "rate", + control: + { + modelValue: 0, + max: 10 + }, + config: + {}, + name: "rate1696039573947", + item: + { + label: "评分" + } + }, + { + type: "slider", + control: + { + modelValue: 0, + min: 0, + max: 100, + step: 1 + }, + config: + {}, + name: "slider1696039578478", + item: + { + label: "滑块" + } + }, + { + type: "treeSelect", + control: + { + modelValue: [], + data: [ + { + value: "1", + label: "Level one 1", + children: [ + { + value: "1-1", + label: "Level two 1-1", + children: [ + { + value: "1-1-1", + label: "Level three 1-1-1" + }] + }] + }, + { + value: "2", + label: "Level one 2", + children: [ + { + value: "2-1", + label: "Level two 2-1", + children: [ + { + value: "2-1-1", + label: "Level three 2-1-1" + }] + }, + { + value: "2-2", + label: "Level two 2-2", + children: [ + { + value: "2-2-1", + label: "Level three 2-2-1" + }] + }] + }, + { + value: "3", + label: "Level one 3", + children: [ + { + value: "3-1", + label: "Level two 3-1", + children: [ + { + value: "3-1-1", + label: "Level three 3-1-1" + }] + }, + { + value: "3-2", + label: "Level two 3-2", + children: [ + { + value: "3-2-1", + label: "Level three 3-2-1" + }] + }] + }], + renderAfterExpand: false, + multiple: true + }, + config: + { + optionsType: 0, + transformData: "number" + }, + name: "treeSelect1696039582299", + item: + { + label: "树形控件" + } + }, + { + type: "txt", + control: + { + modelValue: "文字组件" + }, + config: + {} + }, + { + type: "title", + control: + { + modelValue: "标题" + }, + config: + {} + }, + { + type: "button", + control: + { + label: "按钮组件", + type: "danger" + }, + config: + {} + }, + { + type: "tabs", + columns: [ + { + label: "子表", + list: [ + { + type: "table", + list: [ + { + type: "datePicker", + control: + { + modelValue: "", + type: "date", + valueFormat: "x" + }, + config: + {}, + name: "datePicker1696039696844", + item: + { + label: "日期选择器" + } + }, + { + type: "input", + control: + { + modelValue: "" + }, + config: + {}, + name: "input1696039686403", + item: + { + label: "单行文本" + } + }, + { + type: "input", + control: + { + modelValue: "" + }, + config: + {}, + name: "input1696039688913", + item: + { + label: "单行文本" + } + }, + { + type: "input", + control: + { + modelValue: "" + }, + config: + {}, + name: "input1696039692171", + item: + { + label: "单行文本" + } + }], + tableData: [], + control: + { + border: true + }, + config: + { + addBtnText: "添加一行" + }, + name: "table1696039683345" + }] + }, + { + label: "富文本", + list: [ + { + type: "tinymce", + control: + { + modelValue: "" + }, + config: + {}, + name: "tinymce1696039759698", + item: + { + label: "富文本" + } + }] + }], + control: + {}, + config: + {} + }, + { + type: "table", + list: [ + { + type: "datePicker", + control: + { + modelValue: "", + type: "date", + valueFormat: "x" + }, + config: + {}, + name: "datePicker1696039722523", + item: + { + label: "日期选择器" + } + }, + { + type: "datePicker", + control: + { + modelValue: "", + type: "date", + valueFormat: "x" + }, + config: + {}, + name: "datePicker1696039719302", + item: + { + label: "日期选择器" + } + }], + tableData: [], + control: + { + border: true + }, + config: + { + addBtnText: "添加一行" + }, + name: "table1696039713655" + }, + { + type: "upload", + control: + { + modelValue: "", + action: "/dev-api/api/upordown", + listType: "picture-card" + }, + config: + { + btnText: "", + tip: "" + }, + name: "upload1696039763960", + item: + { + label: "图片/文件" + } + }, + { + type: "component", + control: + { + modelValue: "", + placeholder: "请选择地理位置" + }, + config: + { + componentName: "ComponentTest" + }, + name: "xuan3ze2wei4zhi4", + item: + { + label: "选择位置" + } + }, + { + type: "expand-user", + control: + { + modelValue: "" + }, + config: + {}, + name: "expand-user1696039883861", + item: + { + label: "选择用户" + } + }], + form: + { + size: "default", + name: "customer_form_168658492905754624", + formName: "未命名表单_168658492905754624" + }, + config: + {} +} \ No newline at end of file diff --git a/api/shiyan/数据结构收集/表达组件布局.ts b/api/shiyan/数据结构收集/表达组件布局.ts new file mode 100644 index 0000000..936773a --- /dev/null +++ b/api/shiyan/数据结构收集/表达组件布局.ts @@ -0,0 +1,1506 @@ +const optDiv = { + list: [ + { + type: "grid", + columns: [ + { + attr: + { + span: 12 + }, + list: [ + { + type: "input", + control: + { + modelValue: "" + }, + config: + {}, + name: "input1696056349902", + item: + { + label: "单行文本" + } + }] + }, + { + attr: + { + span: 12 + }, + list: [ + { + type: "password", + control: + { + modelValue: "" + }, + config: + {}, + name: "input1696056351350", + item: + { + label: "单行文本" + } + }] + }, + { + list: [ + { + type: "input", + control: + { + modelValue: "" + }, + config: + {}, + name: "shou3ji1hao4ma3", + item: + { + label: "手机号码" + }, + customRules: [ + { + type: "mobile", + message: "请输入手机号码", + trigger: "blur" + }] + }], + attr: + { + span: 12 + } + }, + { + list: [ + { + type: "input", + control: + { + modelValue: "" + }, + config: + {}, + name: "zheng4zheng3shu4", + item: + { + label: "正整数" + }, + customRules: [ + { + type: "int", + message: "请输入正整数", + trigger: "blur" + }] + }], + attr: + { + span: 12 + } + }], + control: + {}, + config: + {} + }, + { + type: "textarea", + control: + { + modelValue: "" + }, + config: + {}, + name: "textarea1696056414270", + item: + { + label: "多行文本", + rules: [] + } + }, + { + type: "grid", + columns: [ + { + attr: + { + span: 12 + }, + list: [ + { + type: "radio", + control: + { + modelValue: "" + }, + options: [ + { + label: "男", + value: "1" + }, + { + label: "女", + value: "2" + }], + config: + { + optionsType: 0, + transformData: "string" + }, + name: "radio1696056432702", + item: + { + label: "单选框组" + } + }] + }, + { + attr: + { + span: 12 + }, + list: [ + { + type: "radio", + control: + { + modelValue: "" + }, + options: [ + { + label: "已婚", + value: "1" + }, + { + label: "未婚", + value: "2" + }], + config: + { + optionsType: 0, + transformData: "number" + }, + name: "radio1696056434726", + item: + { + label: "单选框组" + } + }] + }], + control: + {}, + config: + {} + }, + { + type: "grid", + columns: [ + { + attr: + { + span: 12 + }, + list: [ + { + type: "checkbox", + control: + { + modelValue: [] + }, + options: [ + { + label: "笔", + value: "1" + }, + { + label: "墨", + value: "2" + }, + { + label: "纸", + value: "3" + }, + { + label: "砚", + value: "4" + }], + config: + { + optionsType: 0 + }, + name: "checkbox1696056484534", + item: + { + label: "多选框组" + } + }] + }, + { + attr: + { + span: 12 + }, + list: [ + { + type: "checkbox", + control: + { + modelValue: [] + }, + options: [ + { + label: "琴", + value: "1" + }, + { + label: "棋", + value: "2" + }, + { + label: "书", + value: "3" + }, + { + label: "画", + value: "4" + }], + config: + { + optionsType: 0, + transformData: "number" + }, + name: "checkbox1696056498622", + item: + { + label: "多选框组" + } + }] + }, + { + list: [ + { + type: "checkbox", + control: + { + modelValue: [] + }, + options: [], + config: + { + optionsType: 1, + optionsFun: "ok", + label: "label", + value: "val" + }, + name: "checkbox1696056591607", + item: + { + label: "多选框组" + } + }], + attr: + { + span: 12 + } + }], + control: + {}, + config: + {} + }, + { + type: "grid", + columns: [ + { + attr: + { + span: 12 + }, + list: [ + { + type: "select", + control: + { + modelValue: "", + appendToBody: true + }, + options: [ + { + label: "东", + value: "1" + }, + { + label: "北", + value: "2" + }, + { + label: "西", + value: "3" + }, + { + label: "南", + value: "4" + }], + config: + { + optionsType: 0, + transformData: "number" + }, + name: "select1696056760598", + item: + { + label: "下拉选择框" + } + }] + }, + { + attr: + { + span: 12 + }, + list: [ + { + type: "select", + control: + { + modelValue: [], + appendToBody: true, + multiple: true + }, + options: [ + { + label: "上", + value: "1" + }, + { + label: "下", + value: "2" + }, + { + label: "左", + value: "3" + }, + { + label: "右", + value: "4" + }], + config: + { + optionsType: 0, + transformData: "number" + }, + name: "select1696056777901", + item: + { + label: "下拉选择框" + } + }] + }], + control: + {}, + config: + {} + }, + { + type: "grid", + columns: [ + { + attr: + { + span: 12 + }, + list: [ + { + type: "datePicker", + control: + { + modelValue: "", + type: "year", + valueFormat: "x" + }, + config: + {}, + name: "nian2", + item: + { + label: "年" + } + }] + }, + { + attr: + { + span: 12 + }, + list: [ + { + type: "datePicker", + control: + { + modelValue: "", + type: "month", + valueFormat: "x" + }, + config: + {}, + name: "yue4", + item: + { + label: "月" + } + }] + }, + { + list: [ + { + type: "datePicker", + control: + { + modelValue: "", + type: "date", + valueFormat: "x" + }, + config: + {}, + name: "ri4qi1", + item: + { + label: "日期" + } + }], + attr: + { + span: 12 + } + }, + { + list: [ + { + type: "datePicker", + control: + { + modelValue: "", + type: "datetime", + valueFormat: "x" + }, + config: + {}, + name: "ri4qi1shi2jian1", + item: + { + label: "日期时间" + } + }], + attr: + { + span: 12 + }, + type: "gridChild" + }, + { + list: [ + { + type: "datePicker", + control: + { + modelValue: "", + type: "week", + valueFormat: "x" + }, + config: + {}, + name: "zhou1", + item: + { + label: "周" + } + }], + attr: + { + span: 12 + } + }, + { + list: [ + { + type: "datePicker", + control: + { + modelValue: "", + type: "datetimerange", + valueFormat: "x" + }, + config: + {}, + name: "ri4qi1shi2jian1qu1jian1", + item: + { + label: "日期时间区间" + } + }], + attr: + { + span: 12 + } + }, + { + list: [ + { + type: "datePicker", + control: + { + modelValue: "", + type: "daterange", + valueFormat: "x" + }, + config: + {}, + name: "ri4qi1qu1jian1", + item: + { + label: "日期区间" + } + }], + attr: + { + span: 12 + } + }, + { + list: [ + { + type: "datePicker", + control: + { + modelValue: "", + type: "monthrange", + valueFormat: "x" + }, + config: + {}, + name: "yue4qu1jian1", + item: + { + label: "月区间" + } + }], + attr: + { + span: 12 + } + }, + { + list: [ + { + type: "timePicker", + control: + { + modelValue: "" + }, + config: + {}, + name: "timePicker1696057023384", + item: + { + label: "时间选择器" + } + }], + attr: + { + span: 12 + } + }, + { + list: [ + { + type: "inputNumber", + control: + { + modelValue: 0 + }, + config: + {}, + name: "inputNumber1696057034649", + item: + { + label: "计数器" + } + }], + attr: + { + span: 12 + } + }], + control: + {}, + config: + {} + }, + { + type: "grid", + columns: [ + { + attr: + { + span: 12 + }, + list: [ + { + type: "colorPicker", + control: + { + modelValue: "", + colorFormat: "hsl" + }, + config: + {}, + name: "colorPicker1696057060631", + item: + { + label: "取色器" + } + }] + }, + { + attr: + { + span: 12 + }, + list: [ + { + type: "colorPicker", + control: + { + modelValue: "", + colorFormat: "hsv" + }, + config: + {}, + name: "colorPicker1696057063173", + item: + { + label: "取色器" + } + }] + }, + { + list: [ + { + type: "colorPicker", + control: + { + modelValue: "", + colorFormat: "hex" + }, + config: + {}, + name: "colorPicker1696057066341", + item: + { + label: "取色器" + } + }], + attr: + { + span: 12 + } + }, + { + list: [ + { + type: "colorPicker", + control: + { + modelValue: "", + colorFormat: "rgb" + }, + config: + {}, + name: "colorPicker1696057069348", + item: + { + label: "取色器" + } + }], + attr: + { + span: 12 + } + }], + control: + {}, + config: + {} + }, + { + type: "grid", + columns: [ + { + attr: + { + span: 12 + }, + list: [ + { + type: "switch", + control: + { + modelValue: false, + activeValue: 1, + inactiveValue: 2 + }, + config: + {}, + name: "switch1696057096626", + item: + { + label: "开关" + } + }] + }, + { + attr: + { + span: 12 + }, + list: [ + { + type: "rate", + control: + { + modelValue: 0, + max: 5 + }, + config: + {}, + name: "rate1696057109699", + item: + { + label: "评分" + } + }] + }], + control: + {}, + config: + {} + }, + { + type: "grid", + columns: [ + { + attr: + { + span: 12 + }, + list: [ + { + type: "cascader", + control: + { + modelValue: [] + }, + options: [ + { + value: "1", + label: "Guide", + children: [ + { + value: "2", + label: "Disciplines", + children: [ + { + value: "3", + label: "Consistency" + }, + { + value: "4", + label: "Feedback" + }, + { + value: "5", + label: "Efficiency" + }, + { + value: "6", + label: "Controllability" + }] + }, + { + value: "7", + label: "Navigation", + children: [ + { + value: "8", + label: "Side Navigation" + }, + { + value: "9", + label: "Top Navigation" + }] + }] + }, + { + value: "10", + label: "Component", + children: [ + { + value: "11", + label: "Basic", + children: [ + { + value: "12", + label: "Layout" + }, + { + value: "13", + label: "Color" + }, + { + value: "14", + label: "Typography" + }, + { + value: "15", + label: "Icon" + }, + { + value: "16", + label: "Button" + }] + }, + { + value: "17", + label: "Form", + children: [ + { + value: "18", + label: "Radio" + }, + { + value: "19", + label: "Checkbox" + }, + { + value: "20", + label: "Input" + }, + { + value: "21", + label: "InputNumber" + }, + { + value: "22", + label: "Select" + }, + { + value: "23", + label: "Cascader" + }, + { + value: "24", + label: "Switch" + }, + { + value: "25", + label: "Slider" + }, + { + value: "26", + label: "TimePicker" + }, + { + value: "27", + label: "DatePicker" + }, + { + value: "28", + label: "DateTimePicker" + }, + { + value: "29", + label: "Upload" + }, + { + value: "30", + label: "Rate" + }, + { + value: "31", + label: "Form" + }] + }, + { + value: "32", + label: "Data", + children: [ + { + value: "33", + label: "Table" + }, + { + value: "34", + label: "Tag" + }, + { + value: "35", + label: "Progress" + }, + { + value: "36", + label: "Tree" + }, + { + value: "37", + label: "Pagination" + }, + { + value: "38", + label: "Badge" + }] + }, + { + value: "39", + label: "Notice", + children: [ + { + value: "40", + label: "Alert" + }, + { + value: "41", + label: "Loading" + }, + { + value: "42", + label: "Message" + }, + { + value: "43", + label: "MessageBox" + }, + { + value: "44", + label: "Notification" + }] + }, + { + value: "45", + label: "Navigation", + children: [ + { + value: "46", + label: "Menu" + }, + { + value: "47", + label: "Tabs" + }, + { + value: "48", + label: "Breadcrumb" + }, + { + value: "49", + label: "Dropdown" + }, + { + value: "50", + label: "Steps" + }] + }, + { + value: "51", + label: "Others", + children: [ + { + value: "52", + label: "Dialog" + }, + { + value: "53", + label: "Tooltip" + }, + { + value: "54", + label: "Popover" + }, + { + value: "55", + label: "Card" + }, + { + value: "56", + label: "Carousel" + }, + { + value: "57", + label: "Collapse" + }] + }] + }, + { + value: "58", + label: "Resource", + children: [ + { + value: "59", + label: "Axure Components" + }, + { + value: "60", + label: "Sketch Templates" + }, + { + value: "61", + label: "Design Documentation" + }] + }], + config: + { + optionsType: 0, + transformData: "number" + }, + name: "cascader1696057130695", + item: + { + label: "级联选择器" + } + }] + }, + { + attr: + { + span: 12 + }, + list: [ + { + type: "cascader", + control: + { + modelValue: [] + }, + options: [ + { + value: 1, + label: "Guide", + children: [ + { + value: 2, + label: "Disciplines", + children: [ + { + value: 3, + label: "Consistency" + }, + { + value: 4, + label: "Feedback" + }, + { + value: 5, + label: "Efficiency" + }, + { + value: 6, + label: "Controllability" + }] + }, + { + value: 7, + label: "Navigation", + children: [ + { + value: 8, + label: "Side Navigation" + }, + { + value: 9, + label: "Top Navigation" + }] + }] + }], + config: + { + optionsType: 0, + transformData: "number" + }, + name: "cascader1696057148654", + item: + { + label: "级联选择器" + } + }] + }], + control: + {}, + config: + {} + }, + { + type: "slider", + control: + { + modelValue: 0, + min: 0, + max: 100, + step: 1 + }, + config: + { + linkKey: false + }, + name: "slider1696057260572", + item: + { + label: "滑块" + } + }, + { + type: "grid", + columns: [ + { + attr: + { + span: 12 + }, + list: [ + { + type: "treeSelect", + control: + { + modelValue: "", + data: [ + { + label: "Level one 1", + children: [ + { + label: "Level two 1-1", + children: [ + { + label: "Level three 1-1-1" + }] + }] + }, + { + label: "Level one 2", + children: [ + { + label: "Level two 2-1", + children: [ + { + label: "Level three 2-1-1" + }] + }, + { + label: "Level two 2-2", + children: [ + { + label: "Level three 2-2-1" + }] + }] + }, + { + label: "Level one 3", + children: [ + { + label: "Level two 3-1", + children: [ + { + label: "Level three 3-1-1" + }] + }, + { + label: "Level two 3-2", + children: [ + { + label: "Level three 3-2-1" + }] + }] + }], + renderAfterExpand: false + }, + config: + { + optionsType: 0 + }, + name: "treeSelect1696057295212", + item: + { + label: "树形控件" + } + }] + }, + { + attr: + { + span: 12 + }, + list: [ + { + type: "treeSelect", + control: + { + modelValue: [], + data: [ + { + label: "Level one 1", + children: [ + { + label: "Level two 1-1", + children: [ + { + label: "Level three 1-1-1" + }] + }] + }, + { + label: "Level one 2", + children: [ + { + label: "Level two 2-1", + children: [ + { + label: "Level three 2-1-1" + }] + }, + { + label: "Level two 2-2", + children: [ + { + label: "Level three 2-2-1" + }] + }] + }, + { + label: "Level one 3", + children: [ + { + label: "Level two 3-1", + children: [ + { + label: "Level three 3-1-1" + }] + }, + { + label: "Level two 3-2", + children: [ + { + label: "Level three 3-2-1" + }] + }] + }], + renderAfterExpand: false, + multiple: true + }, + config: + { + optionsType: 0, + transformData: "number" + }, + name: "treeSelect1696057297865", + item: + { + label: "树形控件" + } + }] + }], + control: + {}, + config: + {} + }, + { + type: "txt", + control: + { + modelValue: "文字" + }, + config: + {} + }, + { + type: "button", + control: + { + label: "保存" + }, + config: + {} + }, + { + type: "title", + control: + { + modelValue: "标题" + }, + config: + {} + }, + { + type: "tabs", + columns: [ + { + label: "子表", + list: [ + { + type: "table", + list: [], + tableData: [], + control: + { + border: true + }, + config: + { + addBtnText: "添加一行" + }, + name: "table1696057477706" + }] + }, + { + label: "弹性布局", + list: [ + { + type: "flex", + list: [], + tableData: [], + control: + {}, + config: + { + addBtnText: "添加一行" + }, + name: "flex1696057495954" + }] + }], + control: + {}, + config: + {} + }, + { + type: "table", + list: [ + { + type: "input", + control: + { + modelValue: "" + }, + config: + {}, + name: "input1696057438056", + item: + { + label: "单行文本" + } + }, + { + type: "input", + control: + { + modelValue: "" + }, + config: + {}, + name: "input1696057440559", + item: + { + label: "单行文本" + } + }, + { + type: "input", + control: + { + modelValue: "" + }, + config: + {}, + name: "input1696057443486", + item: + { + label: "单行文本" + } + }], + tableData: [], + control: + { + border: true + }, + config: + { + addBtnText: "添加一行" + }, + name: "table1696057434595" + }, + { + type: "divider", + control: + {}, + config: + {}, + item: + { + label: "分割线" + } + }, + { + type: "div", + control: + {}, + config: + {}, + list: [ + { + type: "input", + control: + { + modelValue: "" + }, + config: + {}, + name: "input1696057521381", + item: + { + label: "单行文本" + } + }] + }, + { + type: "card", + list: [ + { + type: "expand-user", + control: + { + modelValue: "" + }, + config: + {}, + name: "expand-user1696057511845", + item: + { + label: "选择用户" + } + }], + control: + {}, + config: + {}, + item: + { + label: "卡片布局" + } + }], + form: + { + size: "default", + name: "customer_form_168733253488873472", + formName: "未命名表单_168733253488873472" + }, + config: + {} + } \ No newline at end of file diff --git a/api/version1/customerform/analysis_table.go b/api/version1/customerform/analysis_table.go index 9e3febc..8455380 100644 --- a/api/version1/customerform/analysis_table.go +++ b/api/version1/customerform/analysis_table.go @@ -2,6 +2,7 @@ package customerform import ( "appPlatform/overall/publicmethod" + "encoding/json" "fmt" "strconv" ) @@ -50,7 +51,7 @@ func AnalysisTable(subUnit MasterStruct) (fieldCont TableFormStruct) { fieldCont.ControlType = "array" fieldCont.DefaultValue = 0 fieldCont.FieldLenght = 20 - + fieldCont.Signed = true default: fieldCont.Types = "mediumtext" @@ -150,8 +151,9 @@ func AnalysisTable(subUnit MasterStruct) (fieldCont TableFormStruct) { fieldCont.Types = fieldType fieldCont.ControlType = "booble" fieldCont.DefaultValue, _ = strconv.Atoi(subUnit.Control.ActiveValue) + fieldCont.DefaultValuees, _ = strconv.Atoi(subUnit.Control.InactiveValue) fieldCont.FieldLenght = size - + // fmt.Printf("subUnit.Control.ActiveValu--->%v\nsubUnit.Control.ActiveValu------>%v\n\n\n", subUnit.Control.ActiveValue, subUnit.Control.InactiveValue) case "inputNumber": fieldCont.Types = "bigint" @@ -167,6 +169,8 @@ func AnalysisTable(subUnit MasterStruct) (fieldCont TableFormStruct) { fieldCont.ControlType = fieldType if scm, scmIsok := subUnit.Control.ModelValue.(int); scmIsok { fieldCont.DefaultValue = scm + } else { + fieldCont.DefaultValue = 0 } fieldCont.FieldLenght = size @@ -316,10 +320,8 @@ func CalculateCharacterLength(class, str string) (size int, fieldType string) { # */ func (c *CustomerFormMaster) CreateFormDatabaseTable() (relevance string, err error) { - err = CreateForm(c.Form.Name, c.Form.FormName, true) //创建主表 - if err != nil { - return - } + isSunTable := false + var masterSql []string //主数据库添加字段语句集合 var sunFormName []string //子表名称集合 sunFormNameAry := publicmethod.MapOut[string]() //子表对应关系 @@ -330,7 +332,6 @@ func (c *CustomerFormMaster) CreateFormDatabaseTable() (relevance string, err er case "grid", "tabs": if len(v.Columns) > 0 { for _, cv := range v.Columns { - // fmt.Printf("type:%v <===========>label:%v <===========> Name:%v<===========> ModelValue:%v\n", v.Type, cv.Attr.Span, cv.Type, v.Control.ModelValue) sqlStr := VesselSubUnitConvertSql(c.Form.Name, cv.List) if len(sqlStr) > 0 { masterSql = append(masterSql, sqlStr...) @@ -347,61 +348,57 @@ func (c *CustomerFormMaster) CreateFormDatabaseTable() (relevance string, err er } 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 := VesselSubUnitConvertSql(v.Name, v.List) sunForm[v.Name] = sqlStr - CreateForm(v.Name, fmt.Sprintf("%v(%v)子表", c.Form.FormName, c.Form.Name), false) + 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 := VesselSubUnitConvertSql(sunTableName, v.List) sunForm[sunTableName] = sqlStr - CreateForm(sunTableName, fmt.Sprintf("%v(%v)子表", c.Form.FormName, c.Form.Name), false) + CreateForm(sunTableName, fmt.Sprintf("%v(%v)子表", c.Form.FormName, c.Form.Name), "InnoDB", false) } } default: - sqlMasterStr := SubUnitConvertSql(c.Form.Name, v) - if sqlMasterStr != "not" { - masterSql = append(masterSql, sqlMasterStr) + if v.Name != "" { + sqlMasterStr, sqlMasterStrAry := SubUnitConvertSql(c.Form.Name, v) + if len(sqlMasterStrAry) > 0 { + masterSql = append(masterSql, sqlMasterStrAry...) + } else { + if sqlMasterStr != "not" { + masterSql = append(masterSql, sqlMasterStr) + } + } } - // masterSql = append(masterSql, SubUnitConvertSql(c.Form.Name, v)) - // fielfInfoClass := AnalysisTable(v) - // unsigned := "" - // if !fielfInfoClass.Signed { - // unsigned = "unsigned" - // } - // switch fielfInfoClass.Types { - // case "int", "bigint": - // masterSql = append(masterSql, fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v) %v NOT NULL DEFAULT %v COMMENT '%v'", c.Form.Name, v.Name, fielfInfoClass.Types, fielfInfoClass.FieldLenght, unsigned, fielfInfoClass.DefaultValue, v.Item.Label)) - // case "booble": - // masterSql = append(masterSql, fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(1) %v NOT NULL DEFAULT %v COMMENT '%v'", c.Form.Name, v.Name, fielfInfoClass.Types, unsigned, fielfInfoClass.DefaultValue, v.Item.Label)) - // case "float": - // masterSql = append(masterSql, fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v,%v) %v NOT NULL DEFAULT %v COMMENT '%v'", c.Form.Name, v.Name, fielfInfoClass.Types, fielfInfoClass.FieldLenght, fielfInfoClass.FieldLenght, unsigned, fielfInfoClass.DefaultValue, v.Item.Label)) - // case "decimal": - // masterSql = append(masterSql, fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v,2) %v NOT NULL DEFAULT %v COMMENT '%v'", c.Form.Name, v.Name, fielfInfoClass.Types, fielfInfoClass.FieldLenght, unsigned, fielfInfoClass.DefaultValue, v.Item.Label)) - // case "mediumtext", "longtext": - // masterSql = append(masterSql, fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v COMMENT '%v'", c.Form.Name, v.Name, fielfInfoClass.Types, v.Item.Label)) - // default: - // masterSql = append(masterSql, fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v) COLLATE utf8mb4_general_ci NOT NULL DEFAULT %v COMMENT '%v'", c.Form.Name, v.Name, fielfInfoClass.Types, fielfInfoClass.FieldLenght, fielfInfoClass.DefaultValue, v.Item.Label)) - // } } } - // if len(masterSql) > 0 { - // CreateFormFiled(c.Form.Name, c.Form.FormName, true, masterSql) //添加主表字段 - // } - // if len(sunForm) > 0 { //子表操作 - // relevanceByte, _ := json.Marshal(sunFormNameAry) - // relevance = string(relevanceByte) - // for i, v := range sunForm { - // // fmt.Printf("表单结构----拆解----》%v========>%v\n", i, v) - // CreateFormFiled(i, fmt.Sprintf("%v(%v)子表", c.Form.FormName, c.Form.Name), false, v) - // } - // } - fmt.Printf("主表数据:%v\n", masterSql) - fmt.Printf("子表表数据:%v\n", sunForm) + //创建主表 + 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 + } + if len(masterSql) > 0 { + CreateFormFiled(c.Form.Name, c.Form.FormName, true, masterSql) //添加主表字段 + } + if len(sunForm) > 0 { //子表操作 + relevanceByte, _ := json.Marshal(sunFormNameAry) + relevance = string(relevanceByte) + for i, v := range sunForm { + // fmt.Printf("表单结构----拆解----》%v========>%v\n", i, v) + CreateFormFiled(i, fmt.Sprintf("%v(%v)子表", c.Form.FormName, c.Form.Name), false, v) + } + } + // fmt.Printf("主表数据:%v\n", masterSql) + // fmt.Printf("子表表数据:%v\n", sunForm) return } @@ -425,11 +422,22 @@ func (c *CustomerFormMaster) CreateFormDatabaseTable() (relevance string, err er func VesselSubUnitConvertSql(tableName string, list []MasterStruct) (mastSql []string) { if len(list) > 0 { for _, v := range list { - sqlStr := SubUnitConvertSql(tableName, v) - if sqlStr != "not" { - mastSql = append(mastSql, sqlStr) + if v.Name != "" { + sqlStr, sqlStrAry := SubUnitConvertSql(tableName, v) + + if len(sqlStrAry) > 0 { + mastSql = append(mastSql, sqlStrAry...) + } else { + if sqlStr != "not" { + mastSql = append(mastSql, sqlStr) + } + } } + // if sqlStr != "not" { + // mastSql = append(mastSql, sqlStr) + // } + } } return @@ -453,7 +461,7 @@ func VesselSubUnitConvertSql(tableName string, list []MasterStruct) (mastSql []s #func SubUnitConvertSql(tablename string, subUnit MasterStruct) (sql string) */ -func SubUnitConvertSql(tablename string, subUnit MasterStruct) (sql string) { +func SubUnitConvertSql(tablename string, subUnit MasterStruct) (sql string, sqlAry []string) { if tablename == "" { sql = "not" return @@ -463,9 +471,21 @@ func SubUnitConvertSql(tablename string, subUnit MasterStruct) (sql string) { if !fielfInfoClass.Signed { unsigned = "unsigned" } + switch fielfInfoClass.Types { case "int", "bigint": - sql = fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v) %v NOT NULL DEFAULT %v COMMENT '%v'", tablename, subUnit.Name, fielfInfoClass.Types, fielfInfoClass.FieldLenght, unsigned, fielfInfoClass.DefaultValue, subUnit.Item.Label) + //值类型是数组,并且需要分开存储 + if fielfInfoClass.ControlType == "array" && fielfInfoClass.Signed { + sqlAry = append(sqlAry, fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v) %v NOT NULL DEFAULT %v COMMENT '%v'", tablename, subUnit.Name, fielfInfoClass.Types, fielfInfoClass.FieldLenght, unsigned, fielfInfoClass.DefaultValue, subUnit.Item.Label)) + tableField := fmt.Sprintf("%v_end", subUnit.Name) + sqlAry = append(sqlAry, fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v) %v NOT NULL DEFAULT %v COMMENT '%v'", tablename, tableField, fielfInfoClass.Types, fielfInfoClass.FieldLenght, unsigned, fielfInfoClass.DefaultValue, subUnit.Item.Label)) + + // sql = fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v) %v NOT NULL DEFAULT %v COMMENT '%v';", tablename, subUnit.Name, fielfInfoClass.Types, fielfInfoClass.FieldLenght, unsigned, fielfInfoClass.DefaultValue, subUnit.Item.Label) + // sql = fmt.Sprintf("%v ALTER TABLE `%v` ADD COLUMN `%v` %v(%v) %v NOT NULL DEFAULT %v COMMENT '%v';", sql, tablename, tableField, fielfInfoClass.Types, fielfInfoClass.FieldLenght, unsigned, fielfInfoClass.DefaultValue, subUnit.Item.Label) + } else { + sql = fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v) %v NOT NULL DEFAULT %v COMMENT '%v'", tablename, subUnit.Name, fielfInfoClass.Types, fielfInfoClass.FieldLenght, unsigned, fielfInfoClass.DefaultValue, subUnit.Item.Label) + } + case "booble": sql = fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(1) %v NOT NULL DEFAULT %v COMMENT '%v'", tablename, subUnit.Name, fielfInfoClass.Types, unsigned, fielfInfoClass.DefaultValue, subUnit.Item.Label) case "float": @@ -476,7 +496,7 @@ func SubUnitConvertSql(tablename string, subUnit MasterStruct) (sql string) { sql = fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v COMMENT '%v'", tablename, subUnit.Name, fielfInfoClass.Types, subUnit.Item.Label) default: if fielfInfoClass.Types != "" { - sql = fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v) COLLATE utf8mb4_general_ci NOT NULL DEFAULT %v COMMENT '%v'", tablename, subUnit.Name, fielfInfoClass.Types, fielfInfoClass.FieldLenght, fielfInfoClass.DefaultValue, subUnit.Item.Label) + sql = fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v(%v) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '%v'", tablename, subUnit.Name, fielfInfoClass.Types, fielfInfoClass.FieldLenght, subUnit.Item.Label) } } return diff --git a/api/version1/customerform/datatable.go b/api/version1/customerform/datatable.go index f575fe7..23eaf75 100644 --- a/api/version1/customerform/datatable.go +++ b/api/version1/customerform/datatable.go @@ -214,7 +214,7 @@ func (a *ApiMethod) HaveFormTabelCont(c *gin.Context) { publicmethod.Result(107, err, c) return } - fmt.Printf("%s\n", masterForm) + fmt.Printf("masterForm---->%s---->%s\n", requestData.Name, versionCont.TableKey) sendMap := make(map[string]interface{}) // sendMap["masterForm"] = masterForm // sendMap["sunForm"] = sunForm @@ -244,18 +244,23 @@ func (a *ApiMethod) HaveFormTabelCont(c *gin.Context) { // filedList = append(filedList, v) } } else { - if fieldAry, isOk := sunForm[requestData.Name]; isOk { - for _, v := range formStruct { - if publicmethod.IsInTrue[string](v.Field, fieldAry.([]string)) { - attFiled := strings.Split(v.Type, " ") - if len(attFiled) >= 2 { - v.Attribute = attFiled[1] - v.Type = attFiled[0] - } - filedList = append(filedList, v) + fmt.Printf("sunForm[requestData.Name]=====>%v\n", sunForm) + // if fieldAry, isOk := sunForm[requestData.Name]; isOk { + for _, v := range formStruct { + // if publicmethod.IsInTrue[string](v.Field, fieldAry.([]string)) { + + if !publicmethod.IsInTrue[string](v.Field, []string{"id", "masters_key", "creater", "creater_time", "edit_time"}) { + attFiled := strings.Split(v.Type, " ") + if len(attFiled) >= 2 { + v.Attribute = attFiled[1] + v.Type = attFiled[0] } + filedList = append(filedList, v) } + + // } } + // } } sendMap["filedlist"] = filedList if num := HaveTableLog(requestData.Name); num > 0 { diff --git a/api/version1/customerform/form.go b/api/version1/customerform/form.go index 275e4f8..86199d4 100644 --- a/api/version1/customerform/form.go +++ b/api/version1/customerform/form.go @@ -221,8 +221,10 @@ func (a *ApiMethod) SaveCustomerForm(c *gin.Context) { 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.CreateFormDatabaseTable() // mastSql, _ := formJsonCont.DisassembleForm() + mastSql, _ := formJsonCont.CreateFormTable() + formVersion.TableStructure = mastSql //;default:'';comment:字表结构"` formVersion.Dict = requestData.Dict //字表结构"` @@ -235,12 +237,13 @@ func (a *ApiMethod) SaveCustomerForm(c *gin.Context) { publicmethod.Result(104, customerFormCont, c) return } - createDb.Commit() - err = createDb.Create(&customerFormCont).Error - if err != nil { - publicmethod.Result(104, customerFormCont, 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) } @@ -509,10 +512,7 @@ func (a *ApiMethod) SaveSetupCont(c *gin.Context) { # */ func (c *CustomerFormMaster) DisassembleForm() (relevance string, err error) { - err = CreateForm(c.Form.Name, c.Form.FormName, true) - if err != nil { - return - } + isSunTable := false var masterSql []string var sunFormName []string sunFormNameAry := publicmethod.MapOut[string]() @@ -536,19 +536,20 @@ func (c *CustomerFormMaster) DisassembleForm() (relevance string, err error) { } 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), false) + 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), false) + CreateForm(sunTableName, fmt.Sprintf("%v(%v)子表", c.Form.FormName, c.Form.Name), "InnoDB", false) } } @@ -574,6 +575,15 @@ func (c *CustomerFormMaster) DisassembleForm() (relevance string, err error) { } } + 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 { @@ -610,15 +620,28 @@ func (c *CustomerFormMaster) DisassembleForm() (relevance string, err error) { 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 { + + for k, v := range sql { // fmt.Printf("%v\n", v) - overall.CONSTANT_DB_CustomerForm.Exec(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) + +} + /* * @ 作者: 秦东 @@ -626,7 +649,9 @@ func CreateFormFiled(formName, formNotes string, isMasters bool, sqlList interfa @ 功能: 创建表单 @ 参数 - # + #formName 数据表名称 + #notes 数据表描述 + #engine 数据表引擎 MyISAM @ 返回值 @@ -636,18 +661,21 @@ func CreateFormFiled(formName, formNotes string, isMasters bool, sqlList interfa # */ -func CreateForm(formName, notes string, isMasters bool) (err error) { +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=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COMMENT='%v'", formName, notes) + 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=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COMMENT='%v'", formName, notes) + 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 } } @@ -911,7 +939,8 @@ func (a *ApiMethod) EditCustomerFormInfo(c *gin.Context) { versionData["`mastesformjson`"] = requestData.JsonData versionData["`creater`"] = userCont.Key // mastSql, _ := formJsonCont.DisassembleForm() - mastSql, _ := formJsonCont.CreateFormDatabaseTable() + // mastSql, _ := formJsonCont.CreateFormDatabaseTable() + mastSql, _ := formJsonCont.CreateFormTable() versionData["`table_structure`"] = mastSql versionData["`dict`"] = requestData.Dict var formVersion modelAppPlatform.CustomerFormVersion @@ -990,7 +1019,8 @@ func (a *ApiMethod) SaveAsNewVersion(c *gin.Context) { formVersion.CreaterTime = cureeTime //not null;comment:创建时间"` formVersion.EditTime = cureeTime //efault:0;not null;comment:编辑时间"` // mastSql, _ := formJsonCont.DisassembleForm() - mastSql, _ := formJsonCont.CreateFormDatabaseTable() + // mastSql, _ := formJsonCont.CreateFormDatabaseTable() + mastSql, _ := formJsonCont.CreateFormTable() formVersion.TableStructure = mastSql //;default:'';comment:字表结构"` formVersion.Dict = requestData.Dict //字表结构"` errVer := overall.CONSTANT_DB_AppPlatform.Create(&formVersion).Error diff --git a/api/version1/customerform/formTable.go b/api/version1/customerform/formTable.go new file mode 100644 index 0000000..d37d925 --- /dev/null +++ b/api/version1/customerform/formTable.go @@ -0,0 +1,520 @@ +package customerform + +import ( + "appPlatform/overall/publicmethod" + "encoding/json" + "errors" + "fmt" + "strconv" +) + +/* +* +@ 作者: 秦东 +@ 时间: 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 "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) + } + } + } + } +} diff --git a/api/version1/customerform/type.go b/api/version1/customerform/type.go index 091a4e0..45611c1 100644 --- a/api/version1/customerform/type.go +++ b/api/version1/customerform/type.go @@ -288,10 +288,52 @@ type EditDatabaseFormField struct { // 分析表单结构 type TableFormStruct struct { - TableName string `json:"tablename"` //字段名称 - Types string `json:"types"` //组件类型 - FieldLenght int `json:"fieldlenght"` //字段长度 - ControlType string `json:"controlType"` // - DefaultValue interface{} `json:"defaultValue"` // - Signed bool `json:"signed"` // + TableName string `json:"tablename"` //字段名称 + Types string `json:"types"` //组件类型 + FieldLenght int `json:"fieldlenght"` //字段长度 + ControlType string `json:"controlType"` // + DefaultValue interface{} `json:"defaultValue"` // + DefaultValuees interface{} `json:"defaultValue"` // + Signed bool `json:"signed"` // +} + +// 自定义表单转sql语句 +type FormTableSql struct { + MasterSql []string + SunSql []SunSqlCont +} + +type SunSqlCont struct { + TableName string //表格名称 + SqlAry []string //语句 +} + +// 分析表格组件数据类型 +type AnalysisFormSubUnitClass struct { + UnitName string //组件名称 + UnitType string //组件类型 + ValIsAry bool //结果是否为数组 + FieldType string //值类型 + MaxVal interface{} //最大默认值 + MinVal interface{} //最小默认值 + Signed bool //值是否有符号(只针对数字型组件) + WordName string //组件数据表名称 + Describe string //字段描述 +} + +type fieldStruct struct { + Types string // + MaxVal int + MinVal int + Signed bool //值是否有符号(只针对数字型组件) +} + +// 表单组件 +type FormUnitInfo struct { + MasterInfo []MasterStruct //主表组件列表 + SunFormInfo []SunFormInfoList //子表 +} +type SunFormInfoList struct { + TableName string //表名称 + UbitInfo map[string]MasterStruct //相关组件 } diff --git a/api/version1/taskplatform/taskmanagement/appform.go b/api/version1/taskplatform/taskmanagement/appform.go index 83b1547..be6916f 100644 --- a/api/version1/taskplatform/taskmanagement/appform.go +++ b/api/version1/taskplatform/taskmanagement/appform.go @@ -1,6 +1,7 @@ package taskmanagement import ( + "appPlatform/api/version1/customerform" "appPlatform/models/modelAppPlatform" "appPlatform/models/modelshr" "appPlatform/overall" @@ -9,6 +10,7 @@ import ( "errors" "fmt" "strconv" + "strings" "time" "github.com/gin-gonic/gin" @@ -255,6 +257,9 @@ func (a *ApiMethod) CustomerFormAddData(c *gin.Context) { } } } + var formJsonCont customerform.CustomerFormMaster + json.Unmarshal([]byte(formCont.MastesFormJson), &formJsonCont) + context, _ := c.Get(overall.MyContJwt) var userCont modelshr.ManCont userCont.GetLoginCont(context) @@ -410,12 +415,105 @@ func WriteDatabase(uuid, creater, createrTime int64, taskCont modelAppPlatform.T # */ func (a *ApiMethod) CustomerFormEditData(c *gin.Context) { - requestData := publicmethod.MapOut[string]() - err := c.ShouldBindQuery(&requestData) + data, err := c.GetRawData() //接收表单提交得数据 + if err != nil { + publicmethod.Result(100, err, c) + return + } + mapData := publicmethod.MapOut[string]() //初始化MAP + err = json.Unmarshal(data, &mapData) //将json字符串转换成Map + if err != nil { + publicmethod.Result(100, err, c) + return + } + + if _, ok := mapData["formId"]; !ok { + publicmethod.Result(1, err, c, "非法表单!不能提交数据!") + return + } + if _, ok := mapData["id"]; !ok { + publicmethod.Result(1, err, c, "非法表单!不能提交数据!") + return + } + var formCont modelAppPlatform.CustomerFormView //获取指定版本的表单 + err = formCont.GetCont(map[string]interface{}{"`id`": mapData["id"]}) + if err != nil { + publicmethod.Result(107, err, c) + return + } + var sunFormName []string //子表名称集合 + if formCont.TableStructure != "" { //拆解获取子表名称 + var sunFormStruct map[string]string + err = json.Unmarshal([]byte(formCont.TableStructure), &sunFormStruct) + if err == nil { + for _, v := range sunFormStruct { + if !publicmethod.IsInTrue[string](v, sunFormName) { + sunFormName = append(sunFormName, v) + } + } + } + } + + masterField := publicmethod.MapOut[string]() //主表数据 + sunFieldAry := publicmethod.MapOut[string]() //子表数据 + for k, v := range mapData { + if !publicmethod.IsInTrue[string](k, sunFormName) { + if !publicmethod.IsInTrue[string](k, []string{"formId", "id"}) { + masterField[k] = v + } + } else { + sunFieldAry[k] = v + } + } + context, _ := c.Get(overall.MyContJwt) + var userCont modelshr.ManCont + userCont.GetLoginCont(context) //当前操作人 + cureeTime := time.Now().Unix() + + var formJsonCont customerform.CustomerFormMaster + json.Unmarshal([]byte(formCont.MastesFormJson), &formJsonCont) + + var formUnitCont customerform.FormUnitInfo + formUnitCont.GainMasterAndSunFormUnit(formCont.TableKey, formJsonCont.List, true) + masterUnitList := make(map[string]customerform.MasterStruct) + for _, v := range formUnitCont.MasterInfo { + masterUnitList[v.Name] = v + } + uuid, _ := strconv.ParseInt(mapData["formId"].(string), 10, 64) + masrWriteMap := MakeFormMapData(uuid, userCont.Key, cureeTime, masterField, masterUnitList, 2) + + //判断是否 + if len(sunFieldAry) > 0 { + //有子表 + sunTypeAry := make(map[string]map[string]customerform.MasterStruct) + for _, v := range formUnitCont.SunFormInfo { + sunTypeAry[v.TableName] = v.UbitInfo + } + err = EditWriteSunDatabase(uuid, userCont.Key, cureeTime, formCont.TableKey, masrWriteMap, sunFieldAry, sunTypeAry) + } else { + err = overall.CONSTANT_DB_CustomerForm.Table(formCont.TableKey).Where("`masters_key` = ?", uuid).Updates(masterUnitList).Error + } + + if err != nil { + publicmethod.Result(104, err, c) + return + } + + var taskCont modelAppPlatform.Task + // taskCont.Creater = userCont.Key + // taskCont.EditTime = cureeTime + saveData := publicmethod.MapOut[string]() + saveData["`edit_time`"] = time.Now().Unix() + saveData["`creater`"] = userCont.Key + err = taskCont.EiteCont(map[string]interface{}{"`masters_key`": uuid}, saveData) + sendData := publicmethod.MapOut[string]() sendData["err"] = err - sendData["requestData"] = sendData - publicmethod.Result(0, sendData, c) + sendData["cureeTime"] = cureeTime + sendData["formJsonCont"] = formJsonCont + sendData["masterUnitList"] = masterUnitList + sendData["masrWriteMap"] = masrWriteMap + publicmethod.Result(0, err, c) } /* @@ -451,22 +549,59 @@ func (a *ApiMethod) LookCustomerFormData(c *gin.Context) { return } var customerFormCont modelAppPlatform.CustomerFormView - err = customerFormCont.GetCont(map[string]interface{}{"`id`": requestData.MastersKey}, "`tablekey`", "`table_structure`", "`name`", "`classify`") + err = customerFormCont.GetCont(map[string]interface{}{"`id`": requestData.MastersKey}, "`tablekey`", "`table_structure`", "`name`", "`classify`", "`mastesformjson`") if err != nil { publicmethod.Result(107, err, c) return } + + var formJsonCont customerform.CustomerFormMaster + json.Unmarshal([]byte(customerFormCont.MastesFormJson), &formJsonCont) + + var formUnitCont customerform.FormUnitInfo + formUnitCont.GainMasterAndSunFormUnit(customerFormCont.TableKey, formJsonCont.List, true) + masterUnitList := make(map[string]customerform.MasterStruct) + for _, v := range formUnitCont.MasterInfo { + masterUnitList[v.Name] = v + } + + // fmt.Printf("formUnitCont--->%v\n", formUnitCont) + masterFormCont := publicmethod.MapOut[string]() - err = overall.CONSTANT_DB_CustomerForm.Table(customerFormCont.TableKey).Where("`masters_key` = ?", requestData.Id).Find(&masterFormCont).Error + err = overall.CONSTANT_DB_CustomerForm.Table(customerFormCont.TableKey).Where("`masters_key` = ?", requestData.Id).Take(&masterFormCont).Error + if err != nil { + publicmethod.Result(107, err, c) + return + } + + // CallBackVal(masterFormCont, masterUnitList) + masterFormCont = CustomerFormCallBackVal(masterFormCont, masterUnitList) + if customerFormCont.TableStructure != "" { sunFormTable := publicmethod.MapOut[string]() err = json.Unmarshal([]byte(customerFormCont.TableStructure), &sunFormTable) + + sunTypeAry := make(map[string]map[string]customerform.MasterStruct) + for _, v := range formUnitCont.SunFormInfo { + sunTypeAry[v.TableName] = v.UbitInfo + } if err == nil { for _, v := range sunFormTable { var sunContList []map[string]interface{} if tableName, isOk := v.(string); isOk { overall.CONSTANT_DB_CustomerForm.Table(tableName).Where("`masters_key` = ?", requestData.Id).Find(&sunContList) - masterFormCont[tableName] = sunContList + var sunContListZhuanBian []map[string]interface{} + if len(sunContList) > 0 { + for _, sclv := range sunContList { + if sunTableType, sunIsOk := sunTypeAry[tableName]; sunIsOk { + masterFormCont := CustomerFormCallBackVal(sclv, sunTableType) + sunContListZhuanBian = append(sunContListZhuanBian, masterFormCont) + } else { + sunContListZhuanBian = append(sunContListZhuanBian, sclv) + } + } + } + masterFormCont[tableName] = sunContListZhuanBian } } } @@ -475,5 +610,371 @@ func (a *ApiMethod) LookCustomerFormData(c *gin.Context) { sendData["err"] = err sendData["customerFormCont"] = customerFormCont sendData["masterFormCont"] = masterFormCont + sendData["formJsonCont"] = formJsonCont + sendData["customerFormCont.MastesFormJson"] = customerFormCont.MastesFormJson publicmethod.Result(0, masterFormCont, c) } + +/* +* +@ 作者: 秦东 +@ 时间: 2023-09-28 11:22:08 +@ 功能: 自定义表单返回值处理 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func CallBackVal(val map[string]interface{}, valClass map[string]customerform.MasterStruct) map[string]interface{} { + convertVal := publicmethod.MapOut[string]() + if len(val) > 0 { + for k, v := range val { + + if val, isOk := valClass[k]; isOk { + fielfInfoClass := customerform.AnalysisTable(val) + switch fielfInfoClass.Types { + case "int", "bigint": + //值类型是数组,并且需要分开存储 + switch fielfInfoClass.ControlType { + case "year": + convertVal[k] = publicmethod.TypeToClass(v, 16) + case "month": + convertVal[k] = publicmethod.TypeToClass(v, 15) + case "date": + convertVal[k] = publicmethod.TypeToClass(v, 14) + case "datetime": + convertVal[k] = publicmethod.TypeToClass(v, 11) + case "booble": + if v == fielfInfoClass.DefaultValue { + convertVal[k] = true + } else { + convertVal[k] = false + } + case "array": + var timeAry []string + sterTrime := convertVal[k] + timeAry = append(timeAry, publicmethod.TypeToClass(sterTrime, 14)) + endKey := fmt.Sprintf("%v_end", k) + // var endTrime int64 + if endVal, ok := convertVal[endKey]; ok { + // convertVal[endKey] = publicmethod.TypeToClass(endVal, 14) + timeAry = append(timeAry, publicmethod.TypeToClass(endVal, 14)) + } + convertVal[k] = timeAry + default: + convertVal[k] = v + } + case "booble": + if v == fielfInfoClass.DefaultValue { + convertVal[k] = true + } else { + convertVal[k] = false + } + case "decimal", "float": + convertVal[k] = v + case "mediumtext", "longtext": + if fielfInfoClass.ControlType == "array" { + if v != "" { + if vStr, ok := v.(string); ok { + var vJson []string + json.Unmarshal([]byte(vStr), &vJson) + convertVal[k] = vJson + } + } + } else { + convertVal[k] = v + } + default: + if fielfInfoClass.ControlType == "array" { + if v != "" { + if vStr, ok := v.(string); ok { + var vJson []string + json.Unmarshal([]byte(vStr), &vJson) + convertVal[k] = vJson + } + } + } else { + convertVal[k] = v + } + + } + } else { + convertVal[k] = v + } + } + } + return convertVal +} + +/* +* +@ 作者: 秦东 +@ 时间: 2023-10-08 13:32:06 +@ 功能: 自定义表单返回值处理 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func CustomerFormCallBackVal(val map[string]interface{}, valClass map[string]customerform.MasterStruct) map[string]interface{} { + convertVal := publicmethod.MapOut[string]() + // fmt.Printf("fielfInfoClass---1-->%v: %v\n", val, valClass) + if len(val) > 0 { + for k, v := range val { + if vals, isOk := valClass[k]; isOk { + fielfInfoClass := customerform.AnalysisFormUnitClass(vals) + // fmt.Printf("fielfInfoClass----->%v: %v\n", k, fielfInfoClass.FieldType) + switch fielfInfoClass.FieldType { + case "int": + if strVal, ok := v.(string); ok { + convertVal[k], _ = strconv.Atoi(strVal) + } else { + convertVal[k] = v + } + case "bigint": + if fielfInfoClass.ValIsAry { //判断值是否为数组 + endField := fmt.Sprintf("%v_end", k) + var sendVal []interface{} + if strVal, ok := v.(string); ok { + vInt64, _ := strconv.ParseInt(strVal, 10, 64) + sendVal = append(sendVal, vInt64) + } else { + sendVal = append(sendVal, v) + } + if endKeyVal, ok := val[endField]; ok { + if endVal, endOk := endKeyVal.(string); endOk { + endValInt64, _ := strconv.ParseInt(endVal, 10, 64) + sendVal = append(sendVal, endValInt64) + } else { + sendVal = append(sendVal, endVal) + } + } + convertVal[k] = sendVal + } else { + if strVal, ok := v.(string); ok { + fieldVal, _ := strconv.ParseInt(strVal, 10, 64) + convertVal[k] = fieldVal + } else { + convertVal[k] = v + } + } + case "float": + if strVal, ok := v.(string); ok { + floatVal, _ := strconv.ParseFloat(strVal, 64) + convertVal[k] = floatVal + } else { + convertVal[k] = v + } + case "decimal": + if strVal, ok := v.(string); ok { + floatVal, _ := strconv.ParseFloat(strVal, 64) + convertVal[k] = floatVal + } else { + convertVal[k] = v + } + case "mediumtext", "longtext": + if valAry, ok := v.([]interface{}); ok { + if len(valAry) > 0 { + valStrJson, _ := json.Marshal(valAry) + convertVal[k] = string(valStrJson) + } else { + convertVal[k] = "" + } + } else { + if fielfInfoClass.ValIsAry { + if valStr, ok := v.(string); ok { + valStrAry := strings.Split(valStr, ",") + if len(valStrAry) > 0 { + valStrJson, _ := json.Marshal(valStrAry) + convertVal[k] = string(valStrJson) + } else { + convertVal[k] = "" + } + } else { + convertVal[k] = v + } + } else { + convertVal[k] = v + } + } + case "varchar": + if valAry, ok := v.([]interface{}); ok { + if len(valAry) > 0 { + valStrJson, _ := json.Marshal(valAry) + convertVal[k] = string(valStrJson) + } else { + convertVal[k] = "" + } + } else { + if fielfInfoClass.ValIsAry { + if valStr, ok := v.(string); ok { + valStrAry := strings.Split(valStr, ",") + if len(valStrAry) > 0 { + valStrJson, _ := json.Marshal(valStrAry) + convertVal[k] = string(valStrJson) + } else { + convertVal[k] = "" + } + } else { + convertVal[k] = v + } + } else { + convertVal[k] = v + } + } + default: + } + } else { + convertVal[k] = v + } + } + } + return convertVal +} + +/* +* +@ 作者: 秦东 +@ 时间: 2023-10-08 16:44:58 +@ 功能: +@ 参数 + + #uuid 唯一标识 + #creater 创建人 + #createrTime 创建时间 + #masterTableName 主表标识 + #masterDataCont 主表数据 + #sunDataList 字表数据列表 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func EditWriteSunDatabase(uuid, creater, createrTime int64, masterTableName string, masterDataCont, sunDataList map[string]interface{}, sunTable map[string]map[string]customerform.MasterStruct) (err error) { + if len(masterDataCont) > 0 { + if len(sunDataList) > 0 { + sunMasterMap := publicmethod.MapOut[string]() + //子表存在时,执行主表和子表数据写入 + for k, v := range sunDataList { + // if k == "table1693811044212" { + s, ok := v.([]interface{}) //获取值类型 + if !ok { + err = errors.New("表单数据错误!请验证后重新提交!") + return + } else { + //判断是否有数据 + if len(s) > 0 { + var sunCont []map[string]interface{} + for _, sv := range s { //拆分子表 + if sdf, isOk := sv.(map[string]interface{}); isOk { + if sunTableType, sunIsOk := sunTable[k]; sunIsOk { + masterWriteVal := MakeFormMapData(uuid, creater, createrTime, sdf, sunTableType, 2) //转换数据表值 + if len(masterWriteVal) > 0 { + sunCont = append(sunCont, masterWriteVal) + } + } + } + } + if len(sunCont) > 0 { + sunMasterMap[k] = sunCont + } + } + } + } + if len(sunMasterMap) > 0 { + gormDb := overall.CONSTANT_DB_CustomerForm.Begin() + masterErr := gormDb.Table(masterTableName).Where("`masters_key` = ?", uuid).Updates(masterDataCont).Error + sunCreateIsOk := true + for k, v := range sunMasterMap { + delSql := fmt.Sprintf("DELETE FROM %v WHERE `masters_key` = %v", k, uuid) + delErr := overall.CONSTANT_DB_CustomerForm.Exec(delSql).Error + if delErr == nil { + sunErr := gormDb.Table(k).Create(v).Error + if sunErr != nil { + sunCreateIsOk = false + break + } + } else { + sunCreateIsOk = false + } + + } + if masterErr == nil && sunCreateIsOk { + err = gormDb.Commit().Error + } else { + gormDb.Rollback() + err = errors.New("表单数据提交失败!请重新提交") + } + } + } else { + //子表不存在时,写入主表数据 + err = overall.CONSTANT_DB_CustomerForm.Table(masterTableName).Where("`masters_key` = ?", uuid).Updates(masterDataCont).Error + } + } else { + err = errors.New("表单数据提交失败!请重新提交") + } + return +} + +/* +* +@ 作者: 秦东 +@ 时间: 2023-10-09 08:37:50 +@ 功能: 删除自定义表单记录数据 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (a *ApiMethod) DelCustomerFormDataLog(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 taskCont modelAppPlatform.Task + err = taskCont.GetCont(map[string]interface{}{"`id`": requestData.Id}) + if err != nil { + publicmethod.Result(107, err, c) + return + } + saveData := publicmethod.MapOut[string]() + saveData["`edit_time`"] = time.Now().Unix() + saveData["`status`"] = 5 + err = taskCont.EiteCont(map[string]interface{}{"`id`": requestData.Id}, saveData) + if err != nil { + publicmethod.Result(106, err, c) + return + } + publicmethod.Result(0, err, c) +} diff --git a/api/version1/taskplatform/taskmanagement/formcontrol.go b/api/version1/taskplatform/taskmanagement/formcontrol.go new file mode 100644 index 0000000..a15ee0b --- /dev/null +++ b/api/version1/taskplatform/taskmanagement/formcontrol.go @@ -0,0 +1,734 @@ +package taskmanagement + +import ( + "appPlatform/api/version1/customerform" + "appPlatform/models/modelAppPlatform" + "appPlatform/models/modelshr" + "appPlatform/overall" + "appPlatform/overall/publicmethod" + "encoding/json" + "errors" + "fmt" + "strconv" + "strings" + "time" + + "github.com/gin-gonic/gin" +) + +/* +* +@ 作者: 秦东 +@ 时间: 2023-09-27 14:21:08 +@ 功能: 用户端自定义表单新增记录 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (a *ApiMethod) AddFormAddData(c *gin.Context) { + data, err := c.GetRawData() //接收表单提交得数据 + if err != nil { + publicmethod.Result(100, err, c) + return + } + mapData := publicmethod.MapOut[string]() //初始化MAP + err = json.Unmarshal(data, &mapData) //将接收的json字符串参数转换成Map + if err != nil { + publicmethod.Result(100, err, c) + return + } + if _, ok := mapData["formId"]; !ok { + publicmethod.Result(1, err, c, "非法表单!不能提交数据!") + return + } + sendData := publicmethod.MapOut[string]() + var formCont modelAppPlatform.CustomerFormView //获取指定版本的表单 + err = formCont.GetCont(map[string]interface{}{"`id`": mapData["formId"]}) + if err != nil { + publicmethod.Result(107, err, c) + return + } + var sunFormName []string //子表名称集合 + if formCont.TableStructure != "" { //拆解获取子表名称 + var sunFormStruct map[string]string + err = json.Unmarshal([]byte(formCont.TableStructure), &sunFormStruct) + if err == nil { + for _, v := range sunFormStruct { + if !publicmethod.IsInTrue[string](v, sunFormName) { + sunFormName = append(sunFormName, v) + } + } + } + } + + masterField := publicmethod.MapOut[string]() + sunFieldAry := publicmethod.MapOut[string]() + for k, v := range mapData { + if !publicmethod.IsInTrue[string](k, sunFormName) { + if !publicmethod.IsInTrue[string](k, []string{"formId", "id"}) { + masterField[k] = v + } + } else { + sunFieldAry[k] = v + } + } + + context, _ := c.Get(overall.MyContJwt) + var userCont modelshr.ManCont + userCont.GetLoginCont(context) + uuid := publicmethod.GetUUid(1) + cureeTime := time.Now().Unix() + + master, sunTable, jsonerr := GainFormStruct(formCont.MastesFormJson) + if jsonerr != nil { + publicmethod.Result(104, err, c) + return + } + // master, _, _ := GainFormStruct(formCont.MastesFormJson) + masterWriteVal := MakeTableVal(uuid, userCont.Key, cureeTime, masterField, master) + + //任务列表 + var taskCont modelAppPlatform.Task + taskCont.MastersKey = uuid + taskCont.Title = fmt.Sprintf("%v-%v(%v)-%v", formCont.Name, userCont.Name, userCont.Number, publicmethod.UnixTimeToDay(cureeTime, 14)) //标题"` + taskCont.Creater = userCont.Key //创建人"` + taskCont.CreaterTime = cureeTime //创建时间"` + taskCont.EditTime = cureeTime //编辑时间"` + taskCont.Types = 1 //类型(1:普通表单;2:流程表单)"` + taskCont.VersionId = formCont.Id //来源于哪个表单"` + taskCont.Status = 2 + //判断是否 + if len(sunFieldAry) > 0 { + //有子表 + err = WriteSunDatabase(uuid, userCont.Key, cureeTime, formCont.TableKey, masterWriteVal, sunFieldAry, sunTable) + } else { + //无子表 + err = overall.CONSTANT_DB_CustomerForm.Table(formCont.TableKey).Create(masterWriteVal).Error + } + if err != nil { + publicmethod.Result(104, err, c) + return + } + overall.CONSTANT_DB_AppPlatform.Create(&taskCont) + // sendData["err"] = err + // sendData["data"] = data + // sendData["mapData"] = mapData + // sendData["formCont"] = formCont + sendData["master"] = master + sendData["sunTable"] = sunTable + // sendData["jsonerr"] = jsonerr + // sendData["jsondfg"] = jsondfg + // sendData["formJsonCont"] = formJsonCont + + sendData["master_len"] = len(master) + sendData["sunTable_len"] = len(sunTable) + // sendData["masterWriteVal"] = masterWriteVal + // sendData["sunFormName"] = sunFormName + // sendData["sunFieldAry"] = sunFieldAry + sendData["masterField"] = masterField + publicmethod.Result(0, sendData, c) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2023-09-28 09:37:49 +@ 功能: 主表与子表数据写入 +@ 参数 + + #uuid 唯一标识 + #creater 创建人 + #createrTime 创建时间 + #masterTableName 主表标识 + #masterDataCont 主表数据 + #sunDataList 字表数据列表 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func WriteSunDatabase(uuid, creater, createrTime int64, masterTableName string, masterDataCont, sunDataList map[string]interface{}, sunTable map[string]map[string]customerform.MasterStruct) (err error) { + if len(masterDataCont) > 0 { + if len(sunDataList) > 0 { + sunMasterMap := publicmethod.MapOut[string]() + //子表存在时,执行主表和子表数据写入 + for k, v := range sunDataList { + // if k == "table1693811044212" { + s, ok := v.([]interface{}) //获取值类型 + if !ok { + err = errors.New("表单数据错误!请验证后重新提交!") + return + } else { + //判断是否有数据 + if len(s) > 0 { + var sunCont []map[string]interface{} + for _, sv := range s { //拆分子表 + if sdf, isOk := sv.(map[string]interface{}); isOk { + if sunTableType, sunIsOk := sunTable[k]; sunIsOk { + masterWriteVal := MakeFormMapData(uuid, creater, createrTime, sdf, sunTableType, 2) //转换数据表值 + if len(masterWriteVal) > 0 { + sunCont = append(sunCont, masterWriteVal) + } + } + } + } + if len(sunCont) > 0 { + sunMasterMap[k] = sunCont + } + } + } + } + if len(sunMasterMap) > 0 { + gormDb := overall.CONSTANT_DB_CustomerForm.Begin() + masterErr := gormDb.Table(masterTableName).Create(masterDataCont).Error + sunCreateIsOk := true + for k, v := range sunMasterMap { + sunErr := gormDb.Table(k).Create(v).Error + if sunErr != nil { + sunCreateIsOk = false + break + } + } + if masterErr == nil && sunCreateIsOk { + err = gormDb.Commit().Error + } else { + gormDb.Rollback() + err = errors.New("表单数据提交失败!请重新提交") + } + } + } else { + //子表不存在时,写入主表数据 + err = overall.CONSTANT_DB_CustomerForm.Table(masterTableName).Create(masterDataCont).Error + } + } else { + err = errors.New("表单数据提交失败!请重新提交") + } + return +} + +/* +* +@ 作者: 秦东 +@ 时间: 2023-09-27 16:01:48 +@ 功能: 组装数据表值 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func MakeTableVal(uuid, userKey, cureeTime int64, fieldVal map[string]interface{}, subUnit map[string]customerform.MasterStruct) map[string]interface{} { + keyAndVal := make(map[string]interface{}) + keyAndVal["masters_key"] = uuid + keyAndVal["creater"] = userKey + keyAndVal["creater_time"] = cureeTime + keyAndVal["edit_time"] = cureeTime + for k, v := range fieldVal { + if v != "" { + if val, isOk := subUnit[k]; isOk { + fielfInfoClass := customerform.AnalysisTable(val) + // fmt.Printf("k--->%v\nv--->%T\nfielfInfoClass------>%v\n\n\n", k, v, fielfInfoClass) + switch fielfInfoClass.Types { + case "int", "bigint": + //值类型是数组,并且需要分开存储 + switch fielfInfoClass.ControlType { + case "year", "month", "date", "datetime": + if strVal, ok := v.(string); ok { + localTime, _ := time.ParseInLocation(time.RFC3339, strVal, time.Local) + keyAndVal[k] = localTime.Unix() + } else { + keyAndVal[k] = v + } + case "array": + if fielfInfoClass.Signed { + kEnd := fmt.Sprintf("%v_end", k) + if strVal, ok := v.([]interface{}); ok { + if len(strVal) >= 2 { + if starTimeStr, tOk := strVal[0].(string); tOk { + starTime, _ := time.ParseInLocation(time.RFC3339, starTimeStr, time.Local) + keyAndVal[k] = starTime.Unix() + } else { + keyAndVal[k] = strVal[0] + } + if endTimeStr, tOk := strVal[len(strVal)-1].(string); tOk { + endTime, _ := time.ParseInLocation(time.RFC3339, endTimeStr, time.Local) + keyAndVal[kEnd] = endTime.Unix() + } else { + keyAndVal[kEnd] = strVal[len(strVal)-1] + } + } + } + + } else { + if strVal, ok := v.(string); ok { + floatVal, _ := strconv.ParseInt(strVal, 10, 64) + keyAndVal[k] = floatVal + } else { + keyAndVal[k] = v + } + } + case "bigint": + if strVal, ok := v.(string); ok { + floatVal, _ := strconv.ParseInt(strVal, 10, 64) + keyAndVal[k] = floatVal + } else { + keyAndVal[k] = v + } + case "int": + if strVal, ok := v.(string); ok { + floatVal, _ := strconv.Atoi(strVal) + keyAndVal[k] = floatVal + } else { + keyAndVal[k] = v + } + case "booble": + if strVal, ok := v.(string); ok { + floatVal, _ := strconv.Atoi(strVal) + keyAndVal[k] = floatVal + } else if strVal, ok := v.(bool); ok { + if strVal { + keyAndVal[k] = fielfInfoClass.DefaultValue + } else { + keyAndVal[k] = fielfInfoClass.DefaultValuees + } + + } else { + keyAndVal[k] = v + } + default: + } + case "booble": + if strVal, ok := v.(string); ok { + floatVal, _ := strconv.Atoi(strVal) + keyAndVal[k] = floatVal + } else if strVal, ok := v.(bool); ok { + if strVal { + keyAndVal[k] = fielfInfoClass.DefaultValue + } else { + keyAndVal[k] = fielfInfoClass.DefaultValuees + } + + } else { + keyAndVal[k] = v + } + case "float": + if strVal, ok := v.(string); ok { + floatVal, _ := strconv.ParseFloat(strVal, 64) + keyAndVal[k] = floatVal + } else { + keyAndVal[k] = v + } + case "decimal": + if strVal, ok := v.(string); ok { + floatVal, _ := strconv.ParseFloat(strVal, 64) + keyAndVal[k] = floatVal + } else { + keyAndVal[k] = v + } + case "mediumtext", "longtext": + if valAry, ok := v.([]interface{}); ok { + if len(valAry) > 0 { + valStrJson, _ := json.Marshal(valAry) + keyAndVal[k] = string(valStrJson) + } else { + keyAndVal[k] = "" + } + } else { + if fielfInfoClass.ControlType == "array" { + if valStr, ok := v.(string); ok { + valStrAry := strings.Split(valStr, ",") + if len(valStrAry) > 0 { + valStrJson, _ := json.Marshal(valStrAry) + keyAndVal[k] = string(valStrJson) + } else { + keyAndVal[k] = "" + } + } else { + keyAndVal[k] = v + } + } else { + keyAndVal[k] = v + } + } + default: + if fielfInfoClass.Types != "" { + if valAry, ok := v.([]interface{}); ok { + if len(valAry) > 0 { + valStrJson, _ := json.Marshal(valAry) + keyAndVal[k] = string(valStrJson) + } else { + keyAndVal[k] = "" + } + } else { + if fielfInfoClass.ControlType == "array" { + if valStr, ok := v.(string); ok { + valStrAry := strings.Split(valStr, ",") + if len(valStrAry) > 0 { + valStrJson, _ := json.Marshal(valStrAry) + keyAndVal[k] = string(valStrJson) + } else { + keyAndVal[k] = "" + } + } else { + keyAndVal[k] = v + } + } else { + keyAndVal[k] = v + } + } + } + } + } + } + // } else { + // keyAndVal[k] = v + // } + + } + return keyAndVal +} + +/* +* +@ 作者: 秦东 +@ 时间: 2023-09-27 14:30:57 +@ 功能: 获取组件结构体 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func GainFormStruct(formTabelJson string) (master map[string]customerform.MasterStruct, sunTable map[string]map[string]customerform.MasterStruct, err error) { + //将表格组件json数据转化成结构体 + var formJsonCont customerform.CustomerFormMaster + json.Unmarshal([]byte(formTabelJson), &formJsonCont) + // fmt.Printf("将表格组件json数据转化成结构体---->%v---->%v\n", err, formTabelJson) + // if err != nil { + // return + // } + masterAry := make(map[string]customerform.MasterStruct) + sunTableAry := make(map[string]map[string]customerform.MasterStruct) + for _, v := range formJsonCont.List { + switch v.Type { + case "grid", "tabs": + if len(v.Columns) > 0 { + for _, cv := range v.Columns { + for _, cvl := range cv.List { + masterAry[cvl.Name] = cvl + } + } + } + case "card", "div": + if len(v.List) > 0 { + for _, cvl := range v.List { + masterAry[cvl.Name] = cvl + } + } + case "table", "flex": + if len(v.List) > 0 { + sunTableGd := make(map[string]customerform.MasterStruct) + for _, vl := range v.List { + sunTableGd[vl.Name] = vl + } + sunTableAry[v.Name] = sunTableGd + } + default: + // fmt.Printf("获取组件结构体-->%v-->%v\n", v.Name, v) + if v.Name != "" { + masterAry[v.Name] = v + } + + } + } + master = masterAry + sunTable = sunTableAry + return +} + +/* +* +@ 作者: 秦东 +@ 时间: 2023-10-07 13:18:35 +@ 功能: 用户端自定义表单新增记录(新版) +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (a *ApiMethod) AddFormAddNewData(c *gin.Context) { + data, err := c.GetRawData() //接收表单提交得数据 + if err != nil { + publicmethod.Result(100, err, c) + return + } + mapData := publicmethod.MapOut[string]() //初始化MAP + err = json.Unmarshal(data, &mapData) //将接收的json字符串参数转换成Map + if err != nil { + publicmethod.Result(100, err, c) + return + } + if _, ok := mapData["formId"]; !ok { + publicmethod.Result(1, err, c, "非法表单!不能提交数据!") + return + } + var formCont modelAppPlatform.CustomerFormView //获取指定版本的表单 + err = formCont.GetCont(map[string]interface{}{"`id`": mapData["formId"]}) + if err != nil { + publicmethod.Result(107, err, c) + return + } + var sunFormName []string //子表名称集合 + if formCont.TableStructure != "" { //拆解获取子表名称 + var sunFormStruct map[string]string + err = json.Unmarshal([]byte(formCont.TableStructure), &sunFormStruct) + if err == nil { + for _, v := range sunFormStruct { + if !publicmethod.IsInTrue[string](v, sunFormName) { + sunFormName = append(sunFormName, v) + } + } + } + } + + masterField := publicmethod.MapOut[string]() //主表数据 + sunFieldAry := publicmethod.MapOut[string]() //子表数据 + for k, v := range mapData { + if !publicmethod.IsInTrue[string](k, sunFormName) { + if !publicmethod.IsInTrue[string](k, []string{"formId", "id"}) { + masterField[k] = v + } + } else { + sunFieldAry[k] = v + } + } + context, _ := c.Get(overall.MyContJwt) + var userCont modelshr.ManCont + userCont.GetLoginCont(context) //当前操作人 + uuid := publicmethod.GetUUid(1) //统一识别符 + cureeTime := time.Now().Unix() //写入时间 + + var formJsonCont customerform.CustomerFormMaster + json.Unmarshal([]byte(formCont.MastesFormJson), &formJsonCont) + + var formUnitCont customerform.FormUnitInfo + formUnitCont.GainMasterAndSunFormUnit(formCont.TableKey, formJsonCont.List, true) + masterUnitList := make(map[string]customerform.MasterStruct) + for _, v := range formUnitCont.MasterInfo { + masterUnitList[v.Name] = v + } + masrWriteMap := MakeFormMapData(uuid, userCont.Key, cureeTime, masterField, masterUnitList, 1) + + //任务列表 + var taskCont modelAppPlatform.Task + taskCont.MastersKey = uuid + taskCont.Title = fmt.Sprintf("%v-%v(%v)-%v", formCont.Name, userCont.Name, userCont.Number, publicmethod.UnixTimeToDay(cureeTime, 14)) //标题"` + taskCont.Creater = userCont.Key //创建人"` + taskCont.CreaterTime = cureeTime //创建时间"` + taskCont.EditTime = cureeTime //编辑时间"` + taskCont.Types = 1 //类型(1:普通表单;2:流程表单)"` + taskCont.VersionId = formCont.Id //来源于哪个表单"` + taskCont.Status = 2 + + //判断是否 + if len(sunFieldAry) > 0 { + //有子表 + sunTypeAry := make(map[string]map[string]customerform.MasterStruct) + for _, v := range formUnitCont.SunFormInfo { + sunTypeAry[v.TableName] = v.UbitInfo + } + + err = WriteSunDatabase(uuid, userCont.Key, cureeTime, formCont.TableKey, masrWriteMap, sunFieldAry, sunTypeAry) + } else { + // //无子表 + err = overall.CONSTANT_DB_CustomerForm.Table(formCont.TableKey).Create(masterUnitList).Error + } + if err != nil { + publicmethod.Result(104, err, c) + return + } + err = overall.CONSTANT_DB_AppPlatform.Create(&taskCont).Error + + sendData := publicmethod.MapOut[string]() + sendData["uuid"] = uuid + sendData["cureeTime"] = cureeTime + sendData["formUnitCont"] = formUnitCont + sendData["masterField"] = masterField + sendData["sunFieldAry"] = sunFieldAry + sendData["masrWriteMap"] = masrWriteMap + sendData["sunFormName"] = sunFormName + sendData["mapData"] = mapData + + publicmethod.Result(0, err, c) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2023-10-07 15:35:07 +@ 功能: 组装数据表新增数据 +@ 参数 + + #uuid 统一识别符 + #userKey 当前操作人 + #cureeTime 操作时间 + #fieldVal 提交数据得键值对 + #subUnit 组件信息 + #calss 1:新增;2:编辑 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func MakeFormMapData(uuid, userKey, cureeTime int64, fieldVal map[string]interface{}, subUnit map[string]customerform.MasterStruct, calss int) map[string]interface{} { + keyAndVal := make(map[string]interface{}) + if calss == 1 { + keyAndVal["creater_time"] = cureeTime + } + keyAndVal["masters_key"] = uuid + keyAndVal["creater"] = userKey + keyAndVal["edit_time"] = cureeTime + for k, v := range fieldVal { + // fmt.Printf("写入字段:%v->%v\n", k, v) + if v != "" { + if val, isOk := subUnit[k]; isOk { + // fmt.Printf("写入字段:%v->%v\n", k, val) + fielfInfoClass := customerform.AnalysisFormUnitClass(val) + switch fielfInfoClass.FieldType { + case "int": + if strVal, ok := v.(string); ok { + keyAndVal[k], _ = strconv.Atoi(strVal) + } else { + keyAndVal[k] = v + } + case "bigint": + if fielfInfoClass.ValIsAry { //判断值是否为数组 + endField := fmt.Sprintf("%v_end", k) + if strVal, ok := v.([]interface{}); ok { + if len(strVal) >= 2 { + if starTimeStr, tOk := strVal[0].(string); tOk { + keyAndVal[k], _ = strconv.ParseInt(starTimeStr, 10, 64) + } else { + keyAndVal[k] = strVal[0] + } + if endTimeStr, tOk := strVal[len(strVal)-1].(string); tOk { + keyAndVal[endField], _ = strconv.ParseInt(endTimeStr, 10, 64) + } else { + keyAndVal[endField] = strVal[len(strVal)-1] + } + } + } + } else { + if strVal, ok := v.(string); ok { + fieldVal, _ := strconv.ParseInt(strVal, 10, 64) + keyAndVal[k] = fieldVal + } else { + keyAndVal[k] = v + } + } + case "float": + if strVal, ok := v.(string); ok { + floatVal, _ := strconv.ParseFloat(strVal, 64) + keyAndVal[k] = floatVal + } else { + keyAndVal[k] = v + } + case "decimal": + if strVal, ok := v.(string); ok { + floatVal, _ := strconv.ParseFloat(strVal, 64) + keyAndVal[k] = floatVal + } else { + keyAndVal[k] = v + } + case "mediumtext", "longtext": + if valAry, ok := v.([]interface{}); ok { + if len(valAry) > 0 { + valStrJson, _ := json.Marshal(valAry) + keyAndVal[k] = string(valStrJson) + } else { + keyAndVal[k] = "" + } + } else { + if fielfInfoClass.ValIsAry { + if valStr, ok := v.(string); ok { + valStrAry := strings.Split(valStr, ",") + if len(valStrAry) > 0 { + valStrJson, _ := json.Marshal(valStrAry) + keyAndVal[k] = string(valStrJson) + } else { + keyAndVal[k] = "" + } + } else { + keyAndVal[k] = v + } + } else { + keyAndVal[k] = v + } + } + case "varchar": + if valAry, ok := v.([]interface{}); ok { + if len(valAry) > 0 { + valStrJson, _ := json.Marshal(valAry) + keyAndVal[k] = string(valStrJson) + } else { + keyAndVal[k] = "" + } + } else { + if fielfInfoClass.ValIsAry { + if valStr, ok := v.(string); ok { + valStrAry := strings.Split(valStr, ",") + if len(valStrAry) > 0 { + valStrJson, _ := json.Marshal(valStrAry) + keyAndVal[k] = string(valStrJson) + } else { + keyAndVal[k] = "" + } + } else { + keyAndVal[k] = v + } + } else { + keyAndVal[k] = v + } + } + default: + } + } + } + } + return keyAndVal +} diff --git a/apirouter/apishiyan/maptostruct.go b/apirouter/apishiyan/maptostruct.go index 4c6a558..7785c60 100644 --- a/apirouter/apishiyan/maptostruct.go +++ b/apirouter/apishiyan/maptostruct.go @@ -27,5 +27,7 @@ func (a *ApiRouter) RouterGroup(router *gin.RouterGroup) { apiRouter.POST("LookTableStruct", methodBinding.LookTableStruct) //查询表结构 apiRouter.POST("hzzpy", methodBinding.HanZiZhuanPinYin) //汉字转拼音 + + apiRouter.POST("test_table", methodBinding.TestTable) //测试表格字段类型 } } diff --git a/apirouter/v1/taskrouter/taskrouter.go b/apirouter/v1/taskrouter/taskrouter.go index 7dc78a1..125cc20 100644 --- a/apirouter/v1/taskrouter/taskrouter.go +++ b/apirouter/v1/taskrouter/taskrouter.go @@ -11,14 +11,18 @@ func (a *ApiRouter) RouterGroupPc(router *gin.RouterGroup) { apiRouter := router.Group("task_management") var taskManagementRouter = version1.AppApiEntry.TaskManagementApi { - apiRouter.GET("", taskManagementRouter.Index) //入口 - apiRouter.POST("", taskManagementRouter.Index) //入口 - apiRouter.POST("app_formdata_log", taskManagementRouter.AppFormDataLog) //非流程表单提交数据记录 - apiRouter.POST("gain_task_list", taskManagementRouter.GainTaskList) //获取可执行得任务列表 - apiRouter.POST("gain_task_versioncont", taskManagementRouter.GianTaskVersionCont) //根据版本获取表单内容 - apiRouter.POST("customer_form_adddata", taskManagementRouter.CustomerFormAddData) //自定义表单新增记录数据 - apiRouter.POST("customer_form_editdata", taskManagementRouter.CustomerFormEditData) //自定义表单编辑记录数据 - apiRouter.POST("look_customer_formdata", taskManagementRouter.LookCustomerFormData) //查看自定义表单记录数据列表 + apiRouter.GET("", taskManagementRouter.Index) //入口 + apiRouter.POST("", taskManagementRouter.Index) //入口 + apiRouter.POST("app_formdata_log", taskManagementRouter.AppFormDataLog) //非流程表单提交数据记录 + apiRouter.POST("gain_task_list", taskManagementRouter.GainTaskList) //获取可执行得任务列表 + apiRouter.POST("gain_task_versioncont", taskManagementRouter.GianTaskVersionCont) //根据版本获取表单内容 + apiRouter.POST("customer_form_adddata", taskManagementRouter.CustomerFormAddData) //自定义表单新增记录数据 + apiRouter.POST("customer_form_editdata", taskManagementRouter.CustomerFormEditData) //自定义表单编辑记录数据 + apiRouter.POST("look_customer_formdata", taskManagementRouter.LookCustomerFormData) //查看自定义表单记录数据列表 + apiRouter.POST("del_customer_formdata", taskManagementRouter.DelCustomerFormDataLog) //删除自定义表单记录数据 + + apiRouter.POST("add_form_data", taskManagementRouter.AddFormAddData) //用户端自定义表单新增记录 + apiRouter.POST("add_form_newdata", taskManagementRouter.AddFormAddNewData) //用户端自定义表单新增记录(新版) } taskFlowApi := router.Group("task_flow") diff --git a/main.go b/main.go index a3f08de..70fbc00 100644 --- a/main.go +++ b/main.go @@ -5,9 +5,20 @@ import ( "appPlatform/initialization/databaseinit" "appPlatform/initialization/nosql" "appPlatform/scheduledtask" + "fmt" + "runtime" ) func main() { + var Ncpu = runtime.NumCPU() + fmt.Printf("服务器核心数量:%v\n", Ncpu) + if Ncpu-1 <= 0 { + Ncpu = 1 + } else { + Ncpu = Ncpu - 1 + } + + runtime.GOMAXPROCS(Ncpu) //加载数据库 databaseinit.LoadDatabase() //加载Redis diff --git a/overall/publicmethod/technique.go b/overall/publicmethod/technique.go index f3771a3..7aff549 100644 --- a/overall/publicmethod/technique.go +++ b/overall/publicmethod/technique.go @@ -2373,3 +2373,50 @@ func (g *GetOrgAllParent) GetOrgSun(superior int64) { g.GetOrgSun(v) } } + +// 类型转换 +func TypeToClass(val interface{}, timeClass int) (str string) { + + if typeVal, ok := val.(uint); ok { + str = UnixTimeToDay(int64(typeVal), timeClass) + } else if typeVal, ok := val.(uint8); ok { + str = UnixTimeToDay(int64(typeVal), timeClass) + } else if typeVal, ok := val.(uint16); ok { + str = UnixTimeToDay(int64(typeVal), timeClass) + } else if typeVal, ok := val.(uint32); ok { + str = UnixTimeToDay(int64(typeVal), timeClass) + } else if typeVal, ok := val.(uint64); ok { + str = UnixTimeToDay(int64(typeVal), timeClass) + } else if typeVal, ok := val.(int); ok { + str = UnixTimeToDay(int64(typeVal), timeClass) + } else if typeVal, ok := val.(int8); ok { + str = UnixTimeToDay(int64(typeVal), timeClass) + } else if typeVal, ok := val.(int16); ok { + str = UnixTimeToDay(int64(typeVal), timeClass) + } else if typeVal, ok := val.(int32); ok { + str = UnixTimeToDay(int64(typeVal), timeClass) + } else if typeVal, ok := val.(int64); ok { + str = UnixTimeToDay(typeVal, timeClass) + } else if typeVal, ok := val.(float32); ok { + str = UnixTimeToDay(int64(typeVal), timeClass) + } else if typeVal, ok := val.(float64); ok { + str = UnixTimeToDay(int64(typeVal), timeClass) + } else if typeVal, ok := val.(byte); ok { + valInt, valErr := strconv.ParseInt(string(typeVal), 10, 64) + if valErr == nil { + str = UnixTimeToDay(valInt, timeClass) + } else { + str = "" + } + } else if typeVal, ok := val.(string); ok { + valInt, valErr := strconv.ParseInt(typeVal, 10, 64) + if valErr == nil { + str = UnixTimeToDay(valInt, timeClass) + } else { + str = "" + } + } else { + str = "" + } + return +}