应用集成平台服务端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

188 lines
4.8 KiB

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
}