|
|
|
|
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
|
|
|
|
|
}
|