package taskflow import ( "appPlatform/api/version1/customerform" "appPlatform/models/modelAppPlatform" "appPlatform/overall" "appPlatform/overall/publicmethod" "encoding/json" "fmt" "strconv" "time" "github.com/gin-gonic/gin" ) /* * @ 作者: 秦东 @ 时间: 2023-10-10 13:44:07 @ 功能: 初始化工作流 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) InitializeWorkFlow(c *gin.Context) { var requestData publicmethod.PublicName c.ShouldBindJSON(&requestData) var workFlowStruct FlowStructIng workFlowStruct.TableId = strconv.FormatInt(publicmethod.GetUUid(2), 10) if requestData.Name != "" { workFlowStruct.WorkFlowDef.Name = requestData.Name } else { workFlowStruct.WorkFlowDef.Name = "自定义工作流" } workFlowStruct.NodeConfig.NodeNumber = strconv.FormatInt(publicmethod.GetUUid(5), 10) workFlowStruct.NodeConfig.NodeName = "发起人" workFlowStruct.DirectorMaxLevel = 4 workFlowStruct.NodeConfig.Attribute = 0 // err := json.Unmarshal([]byte(jsonStrSmaill), &workFlowStruct) outData := publicmethod.MapOut[string]() outData["workFlowStruct"] = workFlowStruct // outData["err"] = err fmt.Printf("初始化流程---》%v\n", requestData) publicmethod.Result(0, workFlowStruct, c) } /* * @ 作者: 秦东 @ 时间: 2023-10-19 14:02:54 @ 功能: 获取工作流版本列表 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) GainFlowVersionList(c *gin.Context) { var requestData publicmethod.CommonId[string] err := c.ShouldBindJSON(&requestData) if err != nil || requestData.Id == "" { publicmethod.Result(10001, err, c) return } var flowVersionList []modelAppPlatform.FlowVersion err = overall.CONSTANT_DB_AppPlatform.Where("`state` IN ? AND `formkey` = ?", []int{1, 2}, requestData.Id).Find(&flowVersionList).Error if err != nil || len(flowVersionList) < 1 { publicmethod.Result(10001, err, c) return } var sendList []SendSmaileFlowVersion for _, v := range flowVersionList { var sendCont SendSmaileFlowVersion sendCont.Id = strconv.FormatInt(v.Id, 10) sendCont.Version = v.Version sendCont.State = v.State sendCont.Key = strconv.FormatInt(v.Key, 10) sendList = append(sendList, sendCont) } publicmethod.Result(0, sendList, c) } /* * @ 作者: 秦东 @ 时间: 2023-10-19 16:18:36 @ 功能: 获取审批节点或条件节点 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) GainNodeFactor(c *gin.Context) { var requestData GainNodeFactor err := c.ShouldBindJSON(&requestData) if err != nil || requestData.Id == "" { publicmethod.Result(100, err, c) return } var customerFormCont modelAppPlatform.CustomerForm err = customerFormCont.GetCont(map[string]interface{}{"`id`": requestData.Id}, "`tablename`") if err != nil { publicmethod.Result(106, err, c) return } var customerFormVersionCont modelAppPlatform.CustomerFormVersion err = customerFormVersionCont.GetCont(map[string]interface{}{"`tablekey`": customerFormCont.TableNames, "`status`": 1}, "`mastesformjson`") if err != nil { publicmethod.Result(106, err, c) return } var sendList []SendFormNodeFactor if customerFormVersionCont.MastesFormJson != "" { var formJsonCont customerform.CustomerFormMaster json.Unmarshal([]byte(customerFormVersionCont.MastesFormJson), &formJsonCont) var unitList CustomerFormUnit unitList.GetFormUnit(formJsonCont.Form.Name, formJsonCont.List, true) sendData := publicmethod.MapOut[string]() // master, sunTable, jsonerr := taskmanagement.GainFormStruct(customerFormVersionCont.MastesFormJson) // if jsonerr != nil { // publicmethod.Result(104, err, c) // return // } if len(unitList.MasterInfo) > 0 { var masterUnit []customerform.MasterStruct for _, v := range unitList.MasterInfo { if v.IsMaster { masterUnit = v.Info } } for _, v := range masterUnit { var sendCont SendFormNodeFactor if requestData.Types == 1 && publicmethod.IsInTrue[string](v.Type, []string{"expand-user"}) { sendCont.Id = v.Name sendCont.Name = v.Name if v.Item.Label != "" { sendCont.Name = v.Item.Label } sendList = append(sendList, sendCont) } else if requestData.Types != 1 && publicmethod.IsInTrue[string](v.Type, []string{"radio", "checkbox", "select", "switch"}) { sendCont.Id = v.Name sendCont.Name = v.Name if v.Type == "switch" { jsonstr, _ := json.Marshal(v.Control) fmt.Printf("------>%v\n", string(jsonstr)) var optInfoOne customerform.OptionsStruct optInfoOne.Label = "是" optInfoOne.Value = v.Control.ActiveValue sendCont.Options = append(sendCont.Options, optInfoOne) var optInfoTwo customerform.OptionsStruct optInfoTwo.Label = "否" optInfoTwo.Value = v.Control.InactiveValue sendCont.Options = append(sendCont.Options, optInfoTwo) } else { sendCont.Options = v.Options } if v.Type == "checkbox" { sendCont.IsCheckbox = true } if v.Item.Label != "" { sendCont.Name = v.Item.Label } sendList = append(sendList, sendCont) } } } // sendData["master"] = master // sendData["sunTable"] = sunTable sendData["sendList"] = sendList sendData["unitList"] = unitList publicmethod.Result(0, sendList, c) } // publicmethod.Result(0, sendList, c) } // 获取表单组件 func (f *CustomerFormUnit) GetFormUnit(tablename string, subUnitAry []customerform.MasterStruct, isMaster bool) { if len(subUnitAry) > 0 { var sqlAllAry []customerform.MasterStruct for _, v := range subUnitAry { switch v.Type { case "flex", "table": if len(v.List) > 0 { f.GetFormUnit(v.Name, v.List, false) } case "grid", "tabs": if len(v.Columns) > 0 { for _, mv := range v.Columns { f.GetFormUnit(tablename, mv.List, isMaster) } } case "card", "div": if len(v.List) > 0 { f.GetFormUnit(tablename, v.List, isMaster) } default: sqlAllAry = append(sqlAllAry, v) } } if len(sqlAllAry) > 0 { if len(f.MasterInfo) > 0 { isWrite := true for sk, s := range f.MasterInfo { if s.UnitKey == tablename { f.MasterInfo[sk].Info = append(f.MasterInfo[sk].Info, sqlAllAry...) isWrite = false } } if isWrite { var sunSqlInfo SunFormUnit sunSqlInfo.UnitKey = tablename sunSqlInfo.IsMaster = isMaster sunSqlInfo.Info = sqlAllAry f.MasterInfo = append(f.MasterInfo, sunSqlInfo) } } else { var sunSqlInfo SunFormUnit sunSqlInfo.UnitKey = tablename sunSqlInfo.IsMaster = isMaster sunSqlInfo.Info = sqlAllAry f.MasterInfo = append(f.MasterInfo, sunSqlInfo) } } } } /* * @ 作者: 秦东 @ 时间: 2024-03-12 16:23:11 @ 功能: 判断是否已经存在工作流以及是否开启 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) JudgeFormFlowIsOpen(c *gin.Context) { var requestData publicmethod.PublicId err := c.ShouldBindJSON(&requestData) if err != nil || requestData.Id == "" { publicmethod.Result(100, err, c) return } sendData := publicmethod.MapOut[string]() var customerFormCont modelAppPlatform.CustomerForm err = customerFormCont.GetCont(map[string]interface{}{"`id`": requestData.Id}, "`flowkey`", "`flowIsOpen`") if err != nil { sendData["isOpen"] = 2 sendData["flowKey"] = customerFormCont.FlowKey publicmethod.Result(106, sendData, c) return } sendData["flowKey"] = customerFormCont.FlowKey sendData["isOpen"] = customerFormCont.FlowIsOpen publicmethod.Result(0, sendData, c) } /* * @ 作者: 秦东 @ 时间: 2024-03-12 16:27:46 @ 功能: 开启或关闭表单流程 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) OpenFormFlow(c *gin.Context) { var requestData publicmethod.PublicStates err := c.ShouldBindJSON(&requestData) if err != nil || requestData.Id == "" { publicmethod.Result(100, err, c) return } if requestData.Status == 0 { requestData.Status = 2 } editData := publicmethod.MapOut[string]() editData["flowIsOpen"] = requestData.Status editData["edit_time"] = time.Now().Unix() var customerFormCont modelAppPlatform.CustomerForm err = customerFormCont.EiteCont(map[string]interface{}{"`id`": requestData.Id}, editData) if err != nil { publicmethod.Result(106, err, c) return } publicmethod.Result(0, err, c) } /* * @ 作者: 秦东 @ 时间: 2024-03-13 09:28:40 @ 功能: 解析自定义表单组件 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) AnalysisForm(c *gin.Context) { var requestData AnalysisNodesUnitPower err := c.ShouldBindJSON(&requestData) if err != nil { publicmethod.Result(100, err, c) return } if requestData.NodeKey == "" { requestData.NodeKey = "begin" } // var unitAry map[string]interface{} // json.Unmarshal([]byte(requestData.NodeJson), &unitAry) // if list, ok := unitAry["list"]; ok { // fmt.Printf("list:%T--->%v\n", list, list) // if listAry, ok := list.([]interface{}); ok { // for i, v := range listAry { // fmt.Printf("%v:%T\n", i, v) // } // } // } var unitCont TypesAnalysisNodesUnit json.Unmarshal([]byte(requestData.NodeJson), &unitCont.UnitList) // unitCont.AnalysisNodesUnit() // var unitState []NodesUnitNameStatue // json.Unmarshal([]byte(requestData.NodeJson), &unitState) // var purview []map[string]interface{} var recUnitAry RecursionFormUnit recUnitAry.CurrentNodeName = requestData.NodeKey // var nodePower []NodePowerInfo if purviewList, ok := unitCont.UnitList["purview"]; ok { if purviewAry, ok := purviewList.([]interface{}); ok { // nodePower = SplitNodeUnitPurview(purviewAry) recUnitAry.NodePower = SplitNodeUnitPurview(purviewAry) } } // fmt.Printf("nodePower:%v\n", nodePower) if list, ok := unitCont.UnitList["list"]; ok { if listAry, ok := list.([]interface{}); ok { recUnitAry.AllUnitNodesAll("", listAry) } } if len(recUnitAry.UnitAllState) > 0 { recUnitAry.UnitAllState = QuChongUnit(recUnitAry.UnitAllState) } sendData := publicmethod.MapOut[string]() sendData["nodeKey"] = requestData.NodeKey sendData["recUnitAry"] = recUnitAry publicmethod.Result(0, sendData, c) } /* * @ 作者: 秦东 @ 时间: 2024-03-14 08:38:32 @ 功能: 拆分节点已有得权限 @ 参数 # @ 返回值 # @ 方法原型 # */ func SplitNodeUnitPurview(purviewAry []interface{}) (nodeUnitPowerAry []NodePowerInfo) { jsonCont, jsonErr := json.Marshal(purviewAry) // fmt.Printf("purviewList:%T--->%v--->%v\n", jsonCont, jsonErr, string(jsonCont)) if jsonErr == nil { json.Unmarshal(jsonCont, &nodeUnitPowerAry) } return } /* * @ 作者: 秦东 @ 时间: 2024-03-13 15:40:43 @ 功能: 数组去重 */ func QuChongUnit(unitList []NodesUnitNameStatue) []NodesUnitNameStatue { var newAry []NodesUnitNameStatue var unitKey []string for _, v := range unitList { if !publicmethod.IsInTrue[string](v.Id, unitKey) { unitKey = append(unitKey, v.Id) newAry = append(newAry, v) } } return newAry } /* * @ 作者: 秦东 @ 时间: 2024-03-13 10:40:19 @ 功能: 自定义组件类型断言分解 @ 参数 # @ 返回值 # @ 方法原型 # */ func (t *TypesAnalysisNodesUnit) AnalysisNodesUnit() { if list, ok := t.UnitList["list"]; ok { // fmt.Printf("list:%T--->%v\n", list, list) if listAry, ok := list.([]interface{}); ok { if len(listAry) > 0 { for _, listVal := range listAry { if listInfo, ok := listVal.(map[string]interface{}); ok { if unitType, ok := listInfo["type"]; ok { var unitInfo NodesUnitNameStatue if unitName, ok := listInfo["name"]; ok { // fmt.Printf("unitName:%T--->%v\n", unitName, unitName) if unitNameStr, ok := unitName.(string); ok { unitInfo.Name = unitNameStr } } switch unitType { case "flex", "table": fmt.Printf("list:%T--->%v\n", listInfo["list"], listInfo["list"]) case "grid", "tabs": fmt.Printf("columns:%T--->%v\n", listInfo["columns"], listInfo["columns"]) case "card", "div": case "title", "txt", "button": default: unitInfo.Status = 4 t.MasterUnitList = append(t.MasterUnitList, unitInfo) } } } } } } } } /* * @ 作者: 秦东 @ 时间: 2024-03-13 11:30:30 @ 功能: 递归解析所有组件 @ 参数 # @ 返回值 # @ 方法原型 # */ func (r *RecursionFormUnit) AllUnitNodes(tableName string, unitList []interface{}) { if len(unitList) > 0 { var unitIncoList []NodesUnitNameStatue for _, listVal := range unitList { if listInfo, ok := listVal.(map[string]interface{}); ok { if unitType, ok := listInfo["type"]; ok { var unitInfo NodesUnitNameStatue if unitName, ok := listInfo["name"]; ok { if unitNameStr, ok := unitName.(string); ok { unitInfo.Id = unitNameStr if !publicmethod.IsInTrue[string](unitNameStr, r.UnitAllKey) { r.UnitAllKey = append(r.UnitAllKey, unitNameStr) } } } if itemVal, ok := listInfo["item"]; ok { if itemInfo, ok := itemVal.(map[string]interface{}); ok { if itemName, ok := itemInfo["label"]; ok { if itemNameStr, ok := itemName.(string); ok { unitInfo.Name = itemNameStr } } } fmt.Printf("list:%T--->%v\n", itemVal, itemVal) } // fmt.Printf("list:%T--->%v\n", unitName, unitName) switch unitType { case "flex", "table": if list, ok := listInfo["list"]; ok { if listAry, ok := list.([]interface{}); ok { r.AllUnitNodes(unitInfo.Id, listAry) } } // fmt.Printf("list:%T--->%v\n", listInfo["list"], listInfo["list"]) case "grid", "tabs": if list, ok := listInfo["columns"]; ok { if listAry, ok := list.([]interface{}); ok { for _, colVal := range listAry { if colList, ok := colVal.(map[string]interface{}); ok { if listMap, ok := colList["list"]; ok { // fmt.Printf("list:%T--->%v\n", listMap, listMap) if colListAry, ok := listMap.([]interface{}); ok { r.AllUnitNodes(unitInfo.Id, colListAry) } } } } // // r.AllUnitNodes(unitInfo.Name, listAry) } } // fmt.Printf("columns:%T--->%v\n", listInfo["columns"], listInfo["columns"]) case "card", "div": if list, ok := listInfo["list"]; ok { fmt.Printf("list:%T--->%v\n", list, list) } // if len(listInfo["list"]) > 0 { // // f.TableSubUnitAnalysis(tablename, v.List, isMaster) // } case "title", "txt", "button": default: unitInfo.Status = 4 // t.MasterUnitList = append(t.MasterUnitList, unitInfo) unitIncoList = append(unitIncoList, unitInfo) } } } } if len(unitIncoList) > 0 { r.UnitAllState = append(r.UnitAllState, unitIncoList...) if tableName != "" { if len(r.SunUnitList) > 0 { isTrue := true for si, sv := range r.SunUnitList { if sv.Name == tableName { r.SunUnitList[si].UnitList = append(r.SunUnitList[si].UnitList, unitIncoList...) isTrue = false } } if isTrue { var sunUnitInfo SunNodesUnitNameStatue sunUnitInfo.Name = tableName sunUnitInfo.UnitList = unitIncoList r.SunUnitList = append(r.SunUnitList, sunUnitInfo) } } else { var sunUnitInfo SunNodesUnitNameStatue sunUnitInfo.Name = tableName sunUnitInfo.UnitList = unitIncoList r.SunUnitList = append(r.SunUnitList, sunUnitInfo) } } else { r.MasterUnitList = append(r.MasterUnitList, unitIncoList...) } } } } // func (r *RecursionFormUnit) AllUnitNodesAll(tableName string, unitList []interface{}, UnitState []NodesUnitNameStatue) { func (r *RecursionFormUnit) AllUnitNodesAll(tableName string, unitList []interface{}) { if len(unitList) > 0 { var unitIncoList []NodesUnitNameStatue for _, listVal := range unitList { if listInfo, ok := listVal.(map[string]interface{}); ok { if unitType, ok := listInfo["type"]; ok { var unitInfo NodesUnitNameStatue if unitName, ok := listInfo["name"]; ok { if unitNameStr, ok := unitName.(string); ok { unitInfo.Id = unitNameStr if !publicmethod.IsInTrue[string](unitNameStr, r.UnitAllKey) { r.UnitAllKey = append(r.UnitAllKey, unitNameStr) } if len(r.NodePower) > 0 { // fmt.Printf("判断权限-1->: %v\n", unitNameStr) //func (r *RecursionFormUnit) CalculateNodePower(key string) (isLook, isErit bool) unitInfo.IsLook, unitInfo.IsEdit = r.CalculateNodePower(unitNameStr) // for _, uvs := range UnitState { // if uvs.Id == unitNameStr { // unitInfo.IsLook = uvs.IsLook // unitInfo.IsEdit = uvs.IsEdit // } // } } else { // fmt.Printf("判断权限-3->: %v\n", unitNameStr) unitInfo.IsLook = true unitInfo.IsEdit = true } } } if itemVal, ok := listInfo["item"]; ok { if itemInfo, ok := itemVal.(map[string]interface{}); ok { if itemName, ok := itemInfo["label"]; ok { if itemNameStr, ok := itemName.(string); ok { unitInfo.Name = itemNameStr } } } // fmt.Printf("list:%T--->%v\n", itemVal, itemVal) } // fmt.Printf("list:%T--->%v\n", unitName, unitName) switch unitType { case "flex", "table": if list, ok := listInfo["list"]; ok { if listAry, ok := list.([]interface{}); ok { r.AllUnitNodesAll(unitInfo.Id, listAry) } } // fmt.Printf("list:%T--->%v\n", listInfo["list"], listInfo["list"]) case "grid", "tabs": if list, ok := listInfo["columns"]; ok { if listAry, ok := list.([]interface{}); ok { for _, colVal := range listAry { if colList, ok := colVal.(map[string]interface{}); ok { if listMap, ok := colList["list"]; ok { // fmt.Printf("list:%T--->%v\n", listMap, listMap) if colListAry, ok := listMap.([]interface{}); ok { r.AllUnitNodesAll(unitInfo.Id, colListAry) } } } } // // r.AllUnitNodes(unitInfo.Name, listAry) } } // fmt.Printf("columns:%T--->%v\n", listInfo["columns"], listInfo["columns"]) case "card", "div": if list, ok := listInfo["list"]; ok { fmt.Printf("list:%T--->%v\n", list, list) } // if len(listInfo["list"]) > 0 { // // f.TableSubUnitAnalysis(tablename, v.List, isMaster) // } case "title", "txt", "button": default: unitInfo.Status = 4 // t.MasterUnitList = append(t.MasterUnitList, unitInfo) unitIncoList = append(unitIncoList, unitInfo) } } } } if len(unitIncoList) > 0 { r.UnitAllState = append(r.UnitAllState, unitIncoList...) if tableName != "" { if len(r.SunUnitList) > 0 { isTrue := true for si, sv := range r.SunUnitList { if sv.Name == tableName { r.SunUnitList[si].UnitList = append(r.SunUnitList[si].UnitList, unitIncoList...) isTrue = false } } if isTrue { var sunUnitInfo SunNodesUnitNameStatue sunUnitInfo.Name = tableName sunUnitInfo.UnitList = unitIncoList r.SunUnitList = append(r.SunUnitList, sunUnitInfo) } } else { var sunUnitInfo SunNodesUnitNameStatue sunUnitInfo.Name = tableName sunUnitInfo.UnitList = unitIncoList r.SunUnitList = append(r.SunUnitList, sunUnitInfo) } } else { r.MasterUnitList = append(r.MasterUnitList, unitIncoList...) } } } } /* * @ 作者: 秦东 @ 时间: 2024-03-14 09:20:29 @ 功能: 计算字段权限 @ 参数 #key 字段识别符 @ 返回值 #isLook 可见 #isErit 可编辑 @ 方法原型 #func (r *RecursionFormUnit) CalculateNodePower(key string) (isLook, isErit bool) */ func (r *RecursionFormUnit) CalculateNodePower(key string) (isLook, isErit bool) { isLook = true isErit = true for _, v := range r.NodePower { if v.NodeKey == r.CurrentNodeName { for _, kv := range v.PowerAry { if kv.Id == key { isLook = kv.IsLook isErit = kv.IsEdit } } } } return } /* * @ 作者: 秦东 @ 时间: 2024-03-14 11:25:31 @ 功能: 设置工作流表单字段权限 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) SetFlowFormKeyPower(c *gin.Context) { var requestData FlowFormPowerInfo c.ShouldBindJSON(&requestData) if requestData.FormKey == "" && requestData.FormVersion == "" { publicmethod.Result(106, requestData, c) return } if requestData.FormData == "" && requestData.FormPower == "" { publicmethod.Result(106, requestData, c) return } var customerFormInfo modelAppPlatform.CustomerForm err := customerFormInfo.GetCont(map[string]interface{}{"`id`": requestData.FormKey}, "`tablename`") if err != nil { publicmethod.Result(106, err, c) return } if requestData.FormVersion == "" { var formVersionInfo modelAppPlatform.CustomerFormVersion formVersionInfo.GetCont(map[string]interface{}{"`tablekey`": customerFormInfo.TableNames, "`status`": 1}, "`id`") requestData.FormVersion = strconv.FormatInt(formVersionInfo.Id, 10) } var formVersion modelAppPlatform.CustomerFormVersion err = formVersion.GetCont(map[string]interface{}{"`id`": requestData.FormVersion}) if err != nil { publicmethod.Result(106, err, c) return } saveData := publicmethod.MapOut[string]() if requestData.FormData != "" { saveData["`mastesformjson`"] = requestData.FormData } if requestData.FormPower != "" { saveData["`powerstr`"] = requestData.FormPower } else { var nodePower map[string]interface{} err = json.Unmarshal([]byte(requestData.FormData), &nodePower) if err != nil { publicmethod.Result(106, err, c) return } if powerInf, ok := nodePower["purview"]; ok { fmt.Printf("nodePower:%T------>%v\n", powerInf, powerInf) powerJson, err := json.Marshal(powerInf) if err == nil { saveData["`powerstr`"] = string(powerJson) } } } if len(saveData) > 0 { saveData["`edit_time`"] = time.Now().Unix() formVersion.EiteCont(map[string]interface{}{"`id`": requestData.FormVersion}, saveData) } publicmethod.Result(0, requestData, c) }