Jelajahi Sumber

fix(审批节点):调整审批流

Roc 3 tahun lalu
induk
melakukan
dc96f43bc0

+ 0 - 2
models/tables/approval_flow_node/approval_flow_node.go

@@ -14,7 +14,6 @@ type ApprovalFlowNode struct {
 	NextNodeId int       `orm:"column(next_node_id);" json:"next_node_id"` //下级节点id,为0代表是结束节点
 	NodeType   string    `orm:"column(node_type);" json:"node_type"`       //节点类型,审批人:check;抄送人:cc(Carbon Copy),默认是:check
 	AuditType  int       `orm:"column(audit_type);" json:"audit_type"`     //多人审批时,1:或签(一名审批人同意即可),2:会签(需所有审批人同意)
-	UserType   string    `orm:"column(user_type);" json:"user_type"`       //用户类型,枚举值,user:指定人,manager:主管,role:角色
 	User       string    `orm:"column(user);" json:"user"`                 //所属用户,多个用英文,隔开;用户类型为user代表指定人id,manager代表几级主管,role代表角色类型
 	Version    int       `orm:"column(version);" json:"version"`           // 所属流程版本
 	CreateTime time.Time `orm:"column(create_time);" json:"create_time"`   // 创建时间
@@ -29,7 +28,6 @@ type ApprovalFlowNodeList struct {
 	NextNodeId int       `description:"下级节点id,为0代表是结束节点"`                             //下级节点id,为0代表是结束节点
 	NodeType   string    `description:"节点类型,审批人:check;抄送人:cc(Carbon Copy),默认是:check"` //节点类型,审批人:check;抄送人:cc(Carbon Copy),默认是:check
 	AuditType  int       `description:"多人审批时,1:或签(一名审批人同意即可),2:会签(需所有审批人同意)"`         //多人审批时,1:或签(一名审批人同意即可),2:会签(需所有审批人同意)
-	UserType   string    `description:"用户类型,枚举值,user:指定人,manager:主管,role:角色"`         //用户类型,枚举值,user:指定人,manager:主管,role:角色
 	User       string    `json:"-"`                                                   //所属用户,多个用英文,隔开;用户类型为user代表指定人id,manager代表几级主管,role代表角色类型
 	Version    int       `description:"所属流程版本"`                                       // 所属流程版本
 	CreateTime time.Time `description:"创建时间"`                                         // 创建时间

+ 51 - 27
services/flow/flow.go

@@ -1,6 +1,7 @@
 package flow
 
 import (
+	"encoding/json"
 	"errors"
 	"hongze/hongze_mobile_admin/models/tables/admin"
 	"hongze/hongze_mobile_admin/models/tables/approval_flow"
@@ -22,7 +23,7 @@ func GetApprovalFlow(flowId int) (approvalFlow *approval_flow.ApprovalFlowItem,
 		return
 	}
 	for _, approvalFlowNode := range approvalFlowNodeList {
-		userList, tmpErr := getAdminListByUserType(approvalFlowNode.UserType, approvalFlowNode.User, approvalFlow.ProductId)
+		userList, tmpErr := getAdminListByUserType(approvalFlowNode.User, approvalFlow.ProductId)
 		if tmpErr != nil {
 			err = errors.New("获取审批人失败:Err:" + tmpErr.Error())
 			return
@@ -67,39 +68,62 @@ func FormatApprovalFlow(approvalFlow *approval_flow.ApprovalFlowItem) (list [][]
 	return
 }
 
+type NodeUser struct {
+	UserType string `json:"user_type";description:"用户类型,枚举值,user:指定人,manager:主管,role:角色"`
+	User     string `json:"user";description:"所属用户,多个用英文,隔开;用户类型为user代表指定人id,manager代表几级主管,role代表角色类型"`
+}
+
 //获取审批人信息
-func getAdminListByUserType(userType, user string, productId int) (adminList []*admin.Admin, err error) {
-	switch userType {
-	case "user":
-		adminList, err = admin.GetAdminListByIds(user)
-		return
-	case "manager":
-		roleTypeCode := ``
-		if productId == 1 {
-			roleTypeCode = `ficc_admin`
-		} else if productId == 1 {
-			roleTypeCode = `rai_admin`
-		}
-		if roleTypeCode == `` {
-			err = errors.New("找不到对应的主管")
-			return
-		}
-		adminList, err = admin.GetAdminListByRoleCode(roleTypeCode)
+func getAdminListByUserType(userList string, productId int) (adminList []*admin.Admin, err error) {
+	nodeUserList := make([]NodeUser, 0)
+	err = json.Unmarshal([]byte(userList), &nodeUserList)
+	if err != nil {
 		return
-	case "role": //角色类型
-		roleSlice := strings.Split(user, ",")
-		for _, roleTypeCode := range roleSlice {
-			list, tmpErr := admin.GetAdminListByRoleCode(roleTypeCode)
-			if tmpErr != nil {
-				err = tmpErr
+	}
+	firstAdminList := make([]*admin.Admin, 0)
+	for _, userInfo := range nodeUserList {
+		userType := userInfo.UserType
+		user := userInfo.User
+		tmpAdminList := make([]*admin.Admin, 0)
+		switch userType {
+		case "user":
+			tmpAdminList, err = admin.GetAdminListByIds(user)
+		case "manager":
+			roleTypeCode := ``
+			if productId == 1 {
+				roleTypeCode = `ficc_admin`
+			} else if productId == 1 {
+				roleTypeCode = `rai_admin`
+			}
+			if roleTypeCode == `` {
+				err = errors.New("找不到对应的主管")
 				return
 			}
-			adminList = append(adminList, list...)
+			tmpAdminList, err = admin.GetAdminListByRoleCode(roleTypeCode)
+		case "role": //角色类型
+			roleSlice := strings.Split(user, ",")
+			for _, roleTypeCode := range roleSlice {
+				list, tmpErr := admin.GetAdminListByRoleCode(roleTypeCode)
+				if tmpErr != nil {
+					err = tmpErr
+					return
+				}
+				tmpAdminList = append(tmpAdminList, list...)
+			}
+		}
+		firstAdminList = append(firstAdminList, tmpAdminList...)
+	}
+
+	userMap := make(map[int]*admin.Admin)
+	for _, adminInfo := range firstAdminList {
+		//如果不在,那么就插入用户列表,避免同一个节点重复添加用户
+		if _, ok := userMap[adminInfo.AdminId]; !ok {
+			adminList = append(adminList, adminInfo)
 		}
-		return
 	}
-	err = errors.New("查找审批人信息异常")
+
 	return
+
 }
 
 //获取审批单的审批流程