package taskflow import ( "appPlatform/models/modelshr" "appPlatform/overall" "appPlatform/overall/publicmethod" "strconv" ) /* * @ 作者: 秦东 @ 时间: 2023-11-01 10:28:48 @ 功能: 生成步进工作流 @ 参数 # @ 返回值 # @ 方法原型 # */ func (f *NodePublicInfo) GenerateFlow(creater publicmethod.AuthenticationPower) { //寻找发起节点 } /* * @ 作者: 秦东 @ 时间: 2023-11-01 10:52:35 @ 功能: 无限极循环节点 @ 参数 #step 步进值 @ 返回值 # @ 方法原型 # */ func (n *NodePublicInfo) CircularParsing(step int) (nodeList []RunFlow) { var nodeInfo RunFlow nodeInfo.Step = step nodeInfo.Types = n.Types nodeInfo.NodeKey = n.NodeNumber nodeInfo.NodeName = n.NodeName nodeInfo.Status = 1 nodeInfo.FromNode = n.FromNode if n.SendBackNode == "" { nodeInfo.GoBackNode = "beginnode" } else { nodeInfo.GoBackNode = n.SendBackNode } nodeInfo.ExamineMode = n.ExamineMode nodeInfo.NoHanderAction = n.NoHanderAction //判断节点类型 //0:发起人;1:审批;2:抄送;3:执行人;4:条件;5:路由 switch n.Types { case 1, 3: // 审批人设置 1:指定成员; 2:主管;3:行政岗位; 4:发起人自选; 5:发起人自己;6:连续多级主管;7:指定前置审批为本节点设置审批人;8:表单字段;9:权限矩阵 switch n.Settype { case 1: //指定成员 nodeInfo.Operator = OperatorHandle(n.NodeUserList) case 2: //主管 case 3: //行政岗位 case 4: //发起人自选 case 5: //发起人自己 case 6: //连续多级主管 case 7: //指定前置审批为本节点设置审批人 case 8: //表单字段 case 9: //权限矩阵 default: } nodeList = append(nodeList, nodeInfo) if n.ChildNode != nil { nodeList = append(nodeList, n.ChildNode.CircularParsing(step+1)...) } case 2: nodeInfo.Operator = OperatorHandle(n.NodeUserList) nodeList = append(nodeList, nodeInfo) if n.ChildNode != nil { nodeList = append(nodeList, n.ChildNode.CircularParsing(step+1)...) } case 4: case 5: default: } return } /* * @ 作者: 秦东 @ 时间: 2023-11-01 16:16:33 @ 功能: 处理操作人 @ 参数 #userList 节点处理人 @ 返回值 #userAry 人员列表信息 @ 方法原型 # */ func OperatorHandle(userList []NodeUserListInfo) (userAry []OperatorList) { if len(userList) > 0 { var userIdAry []int64 for _, v := range userList { switch v.Types { //1:人员;2:角色;3:行政组织 case 1: myKey, myErr := strconv.ParseInt(v.TargetId, 10, 64) if myErr == nil { userIdAry = append(userIdAry, myKey) } case 2: //角色 var usIdList []int64 overall.CONSTANT_DB_HR.Model(&modelshr.PersonArchives{}).Select("`key`").Where("FIND_IN_SET(?,`role`)", v.TargetId).Find(&usIdList) if len(usIdList) > 0 { userIdAry = append(userIdAry, usIdList...) } case 3: //行政组织 myKey, myErr := strconv.ParseInt(v.TargetId, 10, 64) if myErr == nil { var sunOrg publicmethod.GetOrgAllParent sunOrg.GetOrgSonAllId(myKey) sunOrg.Id = append(sunOrg.Id, myKey) var usIdList []int64 overall.CONSTANT_DB_HR.Model(&modelshr.PersonArchives{}).Select("`key`").Where("`admin_org` IN ?", sunOrg.Id).Find(&usIdList) if len(usIdList) > 0 { userIdAry = append(userIdAry, usIdList...) } } default: } } var userContMap []modelshr.PersonArchives overall.CONSTANT_DB_HR.Model(&modelshr.PersonArchives{}).Where("`key` IN ?", userIdAry).Find(&userContMap) for _, v := range userContMap { var userCont OperatorList userCont.Types = 1 //1:人员;2:角色;3:行政组织 userCont.Name = v.Name //操作人姓名 userCont.Number = v.Number //操作人工号 userCont.Icon = v.Icon //操作人头像 userCont.IconBase64 = v.IconPhoto //操作人头像 userCont.Wechat = v.Wechat //微信Openid if v.WorkWechat != "" { userCont.Wechat = v.WorkWechat //微信Openid } _, companyId, _, _, _ := publicmethod.GetOrgStructurees(v.AdminOrg) userCont.DepartmentId = companyId //分厂Id if companyId != 0 { var orgCont modelshr.AdministrativeOrganization orgCont.GetCont(map[string]interface{}{"`id`": companyId}, "`name`") userCont.DepartmentName = orgCont.Name //分厂名称 } //获取岗位 if v.Position != 0 { var postCont modelshr.Position postCont.GetCont(map[string]interface{}{"`id`": v.Position}, "`name`") userCont.PostId = v.Position //职务Id userCont.PostName = postCont.Name //职务名称 } if v.TeamId != 0 { var teamCont modelshr.TeamGroup teamCont.GetCont(map[string]interface{}{"`id`": v.TeamId}, "`name`") userCont.Tema = v.TeamId //班组Id userCont.TemaName = teamCont.Name //班组名称 } userAry = append(userAry, userCont) } } return }