审查视图

pkg/application/role/role_user_service.go 5.0 KB
1 2 3
package service

import (
4 5
	"strconv"
6
	"github.com/linmadan/egglib-go/core/application"
郑周 authored
7
	"github.com/linmadan/egglib-go/utils/tool_funs"
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/role/command"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain"
)

type RoleUserService struct {
}

func NewRoleUserService() *RoleUserService {
	newRoleUserService := &RoleUserService{}
	return newRoleUserService
}

// Create 创建
func (rs *RoleUserService) Create(in *command.UserRoleCreateCommand) (interface{}, error) {
	transactionContext, err := factory.ValidateStartTransaction(in)
	if err != nil {
		return nil, err
	}
	defer func() {
		transactionContext.RollbackTransaction()
	}()
	roleUserRepository := factory.CreateRoleUserRepository(map[string]interface{}{"transactionContext": transactionContext})
郑周 authored
32 33 34 35 36
	//int64Array := make([]int64, 0)
	//for i := range in.UserIds {
	//	int64Num, _ := strconv.ParseInt(in.UserIds[i], 10, 64)
	//	int64Array = append(int64Array, int64Num)
	//}
37
	// 检测已存在的关联用户
郑周 authored
38
	_, rus, err := roleUserRepository.Find(map[string]interface{}{"roleId": in.RoleId, "companyId": in.CompanyId, "userIds": in.UserIds, "limit": int64(9999999)})
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
	if err != nil {
		return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
	}
	existUserIds := make(map[int64]int64)
	for i := range rus {
		existUserIds[rus[i].UserId] = rus[i].UserId
	}
	for i := range in.UserIds {
		int64Num, _ := strconv.ParseInt(in.UserIds[i], 10, 64)
		// 不存在关联关系时,新增数据
		if _, ok := existUserIds[int64Num]; !ok {
			newRoleUser := &domain.RoleUser{
				Id:        0,
				RoleId:    in.RoleId,
				UserId:    int64Num,
				CompanyId: in.CompanyId,
			}
			_, err := roleUserRepository.Insert(newRoleUser)
			if err != nil {
				return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
			}
		}
	}

	if err := transactionContext.CommitTransaction(); err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	return nil, nil
}

func (rs *RoleUserService) Remove(in *command.UserRoleDeleteCommand) (interface{}, error) {
	transactionContext, err := factory.ValidateStartTransaction(in)
	if err != nil {
		return nil, err
	}
	defer func() {
		transactionContext.RollbackTransaction()
	}()

	roleUserRepository := factory.CreateRoleUserRepository(map[string]interface{}{"transactionContext": transactionContext})

	// 检测已存在的关联用户
	_, rus, err := roleUserRepository.Find(map[string]interface{}{"roleId": in.RoleId, "companyId": in.CompanyId, "userId": in.UserId})
	if err != nil {
		return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
	}
	if len(rus) == 0 {
		return nil, application.ThrowError(application.BUSINESS_ERROR, "数据不存在")
	}

	if _, err := roleUserRepository.Remove(rus[0]); err != nil {
		return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
	}
	if err := transactionContext.CommitTransaction(); err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	return rus, nil
}
郑周 authored
98
func (rs *RoleUserService) ListRole(in *command.UserRoleQueryCommand) (interface{}, error) {
郑周 authored
99
	transactionContext, err := factory.ValidateStartTransaction(in)
郑周 authored
100 101 102 103 104 105 106 107
	if err != nil {
		return nil, err
	}
	defer func() {
		transactionContext.RollbackTransaction()
	}()
	ruRepository := factory.CreateRoleUserRepository(map[string]interface{}{"transactionContext": transactionContext})
108
	total, tempList, err := ruRepository.FindAllContainUser(in.PageNumber, in.PageSize, in.CompanyId, in.RoleId)
郑周 authored
109 110 111 112 113 114
	if err != nil {
		return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
	}
	if err := transactionContext.CommitTransaction(); err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
115
	return tool_funs.SimpleWrapGridMap(total, tempList), nil
郑周 authored
116
}
郑周 authored
117 118

// GetHRBP 当前操作人是否拥有HRBP权限
119 120
// 返回 1 是 表示具有hrbp 权限
郑周 authored
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
func GetHRBP(transactionContext application.TransactionContext, companyId int, operatorId int) (int, error) {
	roleRepo := factory.CreateRoleRepository(map[string]interface{}{"transactionContext": transactionContext})
	roleUserRepo := factory.CreateRoleUserRepository(map[string]interface{}{"transactionContext": transactionContext})
	_, roleList, err := roleRepo.Find(map[string]interface{}{"type": domain.RoleTypeSystem, "companyId": companyId})
	if err != nil {
		return -1, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取角色信息列表"+err.Error())
	}
	_, userRoleList, err := roleUserRepo.Find(map[string]interface{}{"companyId": companyId, "userId": operatorId})
	if err != nil {
		return -1, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取用户的角色信息列表"+err.Error())
	}
	// 拥有HRBP权限
	hrbp := -1
	for _, v := range userRoleList {
		for _, v2 := range roleList {
			if v.RoleId == v2.Id {
				hrbp = 1
				break
			}
		}
		if hrbp == 1 {
			break
		}
	}
	return hrbp, nil
}