package taskflowing import ( "appPlatform/models/modelAppPlatform" "appPlatform/overall" "appPlatform/overall/publicmethod" "encoding/json" "fmt" "strconv" "strings" "time" "github.com/gin-gonic/gin" ) /* * @ 作者: 秦东 @ 时间: 2023-10-26 11:36:54 @ 功能: 写入工作流 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) SaveFlowCont(c *gin.Context) { var requestData FlowMainBody err := c.ShouldBindJSON(&requestData) if err != nil { publicmethod.Result(100, err, c) return } if requestData.NodeConfig.NodeNumber == "" { publicmethod.Result(1, err, c, "工作流数据错误!请检查后再提交") return } uuid := publicmethod.GetUUid(1) if requestData.TableId != "" { requestData.TableId = strconv.FormatInt(publicmethod.GetUUid(1), 10) uuid, _ = strconv.ParseInt(requestData.TableId, 10, 64) } if requestData.DirectorMaxLevel == 0 { requestData.DirectorMaxLevel = 4 } publicTime := time.Now().Unix() var worfFlowMain modelAppPlatform.WorkFlow //工作流主体 worfFlowMain.Id = uuid worfFlowMain.Name = requestData.WorkFlowDef.Name worfFlowMain.Describe = fmt.Sprintf("%v关联工作流", requestData.WorkFlowDef.Name) worfFlowMain.OpenWechat = 1 worfFlowMain.State = 1 if requestData.WorkFlowDef.FormKey != "" { formKey, _ := strconv.ParseInt(requestData.WorkFlowDef.FormKey, 10, 64) worfFlowMain.FormKey = formKey } worfFlowMain.Time = publicTime var numVal int64 var flowVersion modelAppPlatform.WorkFlowVersion overall.CONSTANT_DB_AppPlatform.Model(&flowVersion).Where("`key` = ?", uuid).Count(&numVal) flowVersion.Key = uuid flowVersion.Version = strconv.FormatInt(numVal+1, 10) var isVersionNum int64 overall.CONSTANT_DB_AppPlatform.Model(&flowVersion).Where("`state` = 1 AND `key` = ?", uuid).Count(&isVersionNum) flowVersion.State = 1 if isVersionNum > 0 { flowVersion.State = 2 } flowVersion.Time = publicTime jsonCont, _ := json.Marshal(requestData) flowVersion.Content = string(jsonCont) var userList []string var orgList []string isFormWrite := false if len(requestData.FlowPermission) > 0 { for _, v := range requestData.FlowPermission { if v.Types == 3 { // orgId, _ := strconv.ParseInt(v.TargetId, 10, 64) orgList = append(orgList, v.TargetId) isFormWrite = true } if v.Types == 1 { // userId, _ := strconv.ParseInt(v.TargetId, 10, 64) userList = append(userList, v.TargetId) isFormWrite = true } } } saveData := publicmethod.MapOut[string]() var customerForm modelAppPlatform.CustomerForm if isFormWrite { var customerForm modelAppPlatform.CustomerForm err = customerForm.GetCont(map[string]interface{}{"`id`": requestData.WorkFlowDef.FormKey}, "`permitstr`", "`userpermit`") if err == nil { if len(orgList) > 0 { if customerForm.PermitStr != "" { oldOrgList := strings.Split(customerForm.PermitStr, ",") orgNew := publicmethod.MergeStruct(orgList, oldOrgList) saveData["permitstr"] = strings.Join(orgNew, ",") flowVersion.OrgPermit = strings.Join(orgNew, ",") } } else { flowVersion.OrgPermit = customerForm.PermitStr } if len(userList) > 0 { if customerForm.UserPermit != "" { oldUserList := strings.Split(customerForm.UserPermit, ",") userNew := publicmethod.MergeStruct(userList, oldUserList) saveData["userpermit"] = strings.Join(userNew, ",") flowVersion.UserPermit = strings.Join(userNew, ",") } } else { flowVersion.UserPermit = customerForm.UserPermit } if len(saveData) > 0 { saveData["edit_time"] = time.Now().Unix() saveData["classify"] = 2 customerForm.EiteCont(map[string]interface{}{"`id`": requestData.WorkFlowDef.FormKey}, saveData) } } } saveData["flowkey"] = uuid saveData["edit_time"] = time.Now().Unix() saveData["classify"] = 2 customerForm.EiteCont(map[string]interface{}{"`id`": requestData.WorkFlowDef.FormKey}, saveData) sendMap := publicmethod.MapOut[string]() writeDb := overall.CONSTANT_DB_AppPlatform.Begin() flowErr := writeDb.Create(&worfFlowMain).Error versionErr := writeDb.Create(&flowVersion).Error sendMap["flowErr"] = flowErr sendMap["versionErr"] = versionErr if flowErr == nil && versionErr == nil { writeDb.Commit() } else { writeDb.Rollback() publicmethod.Result(104, sendMap, c) } publicmethod.Result(0, sendMap, c) } /* * @ 作者: 秦东 @ 时间: 2023-10-27 10:25:00 @ 功能: 获取工作流内容 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) GainFlowInfo(c *gin.Context) { var requestData publicmethod.CommonId[string] err := c.ShouldBindJSON(&requestData) if err != nil || requestData.Id == "" { publicmethod.Result(100, err, c) return } var flowVersionInfo modelAppPlatform.FlowVersion err = flowVersionInfo.GetCont(map[string]interface{}{"`id`": requestData.Id}, "`content`") if err != nil && flowVersionInfo.Content == "" { publicmethod.Result(104, err, c) return } var flowVersionCont FlowMainBody err = json.Unmarshal([]byte(flowVersionInfo.Content), &flowVersionCont) if err != nil { publicmethod.Result(104, err, c) return } publicmethod.Result(0, flowVersionCont, c) } /* * @ 作者: 秦东 @ 时间: 2023-10-27 14:41:00 @ 功能: 编辑工作流 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) EditFlowCont(c *gin.Context) { var requestData EditFlowInfo err := c.ShouldBindJSON(&requestData) if err != nil || requestData.Id == "" { publicmethod.Result(100, err, c) return } fmt.Printf("=======================>%v\n", requestData) why := publicmethod.MapOut[string]() why["`id`"] = requestData.Id var flowVersionInfo modelAppPlatform.FlowVersion err = flowVersionInfo.GetCont(why) if err != nil { publicmethod.Result(107, err, c) return } var userList []string var orgList []string isFormWrite := false if len(requestData.FlowInfo.FlowPermission) > 0 { for _, v := range requestData.FlowInfo.FlowPermission { if v.Types == 3 { // orgId, _ := strconv.ParseInt(v.TargetId, 10, 64) orgList = append(orgList, v.TargetId) isFormWrite = true } if v.Types == 1 { // userId, _ := strconv.ParseInt(v.TargetId, 10, 64) userList = append(userList, v.TargetId) isFormWrite = true } } } editInfo := publicmethod.MapOut[string]() jsonCont, _ := json.Marshal(requestData.FlowInfo) editInfo["`content`"] = jsonCont editInfo["`time`"] = time.Now().Unix() saveData := publicmethod.MapOut[string]() var customerForm modelAppPlatform.CustomerForm err = customerForm.GetCont(map[string]interface{}{"`id`": flowVersionInfo.FormKey}, "`permitstr`", "`userpermit`") if isFormWrite { if err == nil { if len(orgList) > 0 { if customerForm.PermitStr != "" { oldOrgList := strings.Split(customerForm.PermitStr, ",") orgNew := publicmethod.MergeStruct(orgList, oldOrgList) saveData["permitstr"] = strings.Join(orgNew, ",") editInfo["orgpermit"] = strings.Join(orgNew, ",") } } else { editInfo["orgpermit"] = customerForm.PermitStr } if len(userList) > 0 { if customerForm.UserPermit != "" { oldUserList := strings.Split(customerForm.UserPermit, ",") userNew := publicmethod.MergeStruct(userList, oldUserList) saveData["userpermit"] = strings.Join(userNew, ",") editInfo["userpermit"] = strings.Join(userNew, ",") } } else { editInfo["userpermit"] = customerForm.UserPermit } } } var flowVersion modelAppPlatform.WorkFlowVersion // err = flowVersionInfo.EiteCont(why, editInfo) err = flowVersion.EiteCont(why, editInfo) if err != nil { publicmethod.Result(106, err, c) return } saveData["flowkey"] = flowVersionInfo.Key saveData["classify"] = 2 saveData["edit_time"] = time.Now().Unix() customerForm.EiteCont(map[string]interface{}{"`id`": flowVersionInfo.FormKey}, saveData) publicmethod.Result(0, err, c) } /* * @ 作者: 秦东 @ 时间: 2023-10-27 15:54:31 @ 功能: 另存为新版 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) SaveNewFlow(c *gin.Context) { var requestData EditFlowInfo err := c.ShouldBindJSON(&requestData) if err != nil || requestData.Id == "" { publicmethod.Result(100, err, c) return } why := publicmethod.MapOut[string]() why["`id`"] = requestData.Id var flowVersionInfo modelAppPlatform.FlowVersion err = flowVersionInfo.GetCont(why) if err != nil { publicmethod.Result(107, err, c) return } uuid := flowVersionInfo.Key publicTime := time.Now().Unix() var numVal int64 var flowVersion modelAppPlatform.WorkFlowVersion overall.CONSTANT_DB_AppPlatform.Model(&flowVersion).Where("`key` = ?", uuid).Count(&numVal) flowVersion.Key = uuid flowVersion.Version = strconv.FormatInt(numVal+1, 10) var isVersionNum int64 overall.CONSTANT_DB_AppPlatform.Model(&flowVersion).Where("`state` = 1 AND `key` = ?", uuid).Count(&isVersionNum) flowVersion.State = 1 if isVersionNum > 0 { flowVersion.State = 2 } flowVersion.Time = publicTime jsonCont, _ := json.Marshal(requestData.FlowInfo) flowVersion.Content = string(jsonCont) var userList []string var orgList []string isFormWrite := false if len(requestData.FlowInfo.FlowPermission) > 0 { for _, v := range requestData.FlowInfo.FlowPermission { if v.Types == 3 { // orgId, _ := strconv.ParseInt(v.TargetId, 10, 64) orgList = append(orgList, v.TargetId) isFormWrite = true } if v.Types == 1 { // userId, _ := strconv.ParseInt(v.TargetId, 10, 64) userList = append(userList, v.TargetId) isFormWrite = true } } } var customerForm modelAppPlatform.CustomerForm err = customerForm.GetCont(map[string]interface{}{"`id`": flowVersionInfo.FormKey}, "`permitstr`", "`userpermit`") saveData := publicmethod.MapOut[string]() if isFormWrite { if err == nil { if len(orgList) > 0 { if customerForm.PermitStr != "" { oldOrgList := strings.Split(customerForm.PermitStr, ",") orgNew := publicmethod.MergeStruct(orgList, oldOrgList) saveData["permitstr"] = strings.Join(orgNew, ",") flowVersion.OrgPermit = strings.Join(orgNew, ",") } } else { flowVersion.OrgPermit = customerForm.PermitStr } if len(userList) > 0 { if customerForm.UserPermit != "" { oldUserList := strings.Split(customerForm.UserPermit, ",") userNew := publicmethod.MergeStruct(userList, oldUserList) saveData["userpermit"] = strings.Join(userNew, ",") flowVersion.UserPermit = strings.Join(userNew, ",") } } else { flowVersion.UserPermit = customerForm.UserPermit } saveData["flowkey"] = uuid // if len(saveData) > 0 { // saveData["edit_time"] = time.Now().Unix() // customerForm.EiteCont(map[string]interface{}{"`id`": flowVersionInfo.FormKey}, saveData) // } } } err = flowVersion.InSetCont() if err != nil { publicmethod.Result(104, err, c) return } saveData["flowkey"] = flowVersionInfo.Key saveData["classify"] = 2 saveData["edit_time"] = time.Now().Unix() customerForm.EiteCont(map[string]interface{}{"`id`": flowVersionInfo.FormKey}, saveData) publicmethod.Result(0, err, c) } /* * @ 作者: 秦东 @ 时间: 2023-10-27 16:33:54 @ 功能: 启用&禁用 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) SwitchFlowVersion(c *gin.Context) { var requestData SwitchFlowStatus err := c.ShouldBindJSON(&requestData) if err != nil || requestData.Id == "" { publicmethod.Result(100, err, c) return } if requestData.Status == 0 { requestData.Status = 2 } why := publicmethod.MapOut[string]() why["`id`"] = requestData.Id var flowVersionInfo modelAppPlatform.FlowVersion err = flowVersionInfo.GetCont(why) if err != nil { publicmethod.Result(107, err, c) return } publicTime := time.Now().Unix() var flowVersionCont modelAppPlatform.WorkFlowVersion saveVersion := publicmethod.MapOut[string]() saveVersion["`state`"] = requestData.Status saveVersion["`time`"] = publicTime var isVersionNum int64 overall.CONSTANT_DB_AppPlatform.Model(&flowVersionCont).Where("`state` = 1 AND `key` = ?", flowVersionInfo.Key).Count(&isVersionNum) if requestData.Status == 1 { if isVersionNum < 1 { err = flowVersionCont.EiteCont(why, saveVersion) if err == nil { var flowInfo modelAppPlatform.WorkFlow err = flowInfo.EiteCont(map[string]interface{}{"`id`": flowVersionInfo.Key}, map[string]interface{}{"`state`": requestData.Status, "`time`": publicTime}) } } else { err = flowVersionCont.EiteCont(map[string]interface{}{"`key`": flowVersionInfo.Key}, map[string]interface{}{"`state`": 2, "`time`": publicTime}) if err == nil { err = flowVersionCont.EiteCont(why, saveVersion) } } } else { err = flowVersionCont.EiteCont(why, saveVersion) if isVersionNum <= 1 { if err == nil { var flowInfo modelAppPlatform.WorkFlow err = flowInfo.EiteCont(map[string]interface{}{"`id`": flowVersionInfo.Key}, map[string]interface{}{"`state`": requestData.Status, "`time`": publicTime}) } } } if err != nil { publicmethod.Result(104, err, c) return } publicmethod.Result(0, err, c) }