zhangf
2024-08-08 71706ced3375f4c18148516d0477d8fd645de2ee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package com.gkhy.huataiFourierSpecialGasMonitor.domain.account.service.impl;
 
import cn.hutool.core.util.ObjectUtil;
import com.gkhy.huataiFourierSpecialGasMonitor.commons.enums.ResultCode;
import com.gkhy.huataiFourierSpecialGasMonitor.commons.exception.BusinessException;
import com.gkhy.huataiFourierSpecialGasMonitor.domain.account.converter.UserRoleBindConverter;
import com.gkhy.huataiFourierSpecialGasMonitor.domain.account.entity.SysUserRoleBind;
import com.gkhy.huataiFourierSpecialGasMonitor.domain.account.model.dto.RoleInfoDoaminDTO;
import com.gkhy.huataiFourierSpecialGasMonitor.domain.account.model.dto.SysUserRoleBindDomainDTO;
import com.gkhy.huataiFourierSpecialGasMonitor.domain.account.model.dto.UserInfoDomainDTO;
 
import com.gkhy.huataiFourierSpecialGasMonitor.domain.account.repository.jpa.UserRoleBindReposity;
import com.gkhy.huataiFourierSpecialGasMonitor.domain.account.service.RoleDomainService;
import com.gkhy.huataiFourierSpecialGasMonitor.domain.account.service.UserDomainService;
import com.gkhy.huataiFourierSpecialGasMonitor.domain.account.service.UserRoleDomainService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
 
/**
 * @email 1603559716@qq.com
 * @author: zf
 * @date: 2023/3/13
 * @time: 9:26
 */
@Service
public class UserRoleDomainServiceImpl implements UserRoleDomainService {
    @Autowired
    private UserRoleBindReposity userRoleBindReposity;
 
    @Autowired
    private RoleDomainService roleDomainService;
 
    @Autowired
    private UserDomainService userDomainService;
 
    @Autowired
    private UserRoleBindConverter converter;
 
    @Override
    public List<SysUserRoleBindDomainDTO> insertBatchUserBindRole(List<Long> roleIds, Long userId) {
        if(ObjectUtil.isEmpty(roleIds) || ObjectUtil.isEmpty(userId)){
            throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "参数缺失");
        }
        //验证用户
        UserInfoDomainDTO user = userDomainService.getUserInfoById(userId);
        if(ObjectUtil.isEmpty(user)){
            throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_DATA_NOT_EXISIST.getCode(), "用户不存在");
        }
        //验证角色是否都存在
        List<RoleInfoDoaminDTO> roleList = roleDomainService.findAllByIdIn(roleIds);
        for(Long roleId : roleIds){
            List<RoleInfoDoaminDTO> collect = roleList.stream().filter(role -> role.getId().equals(roleId)).collect(Collectors.toList());
            if(collect.size() == 0){
                throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_DATA_NOT_EXISIST.getCode(), "角色不存在");
            }
        }
        //绑定用户角色
        List<SysUserRoleBind> sysUserRoleBindList = new ArrayList<>();
        for(Long roleId : roleIds){
            SysUserRoleBind sysUserRoleBind = new SysUserRoleBind();
            sysUserRoleBind.setRoleId(roleId);
            sysUserRoleBind.setUserId(userId);
            sysUserRoleBindList.add(sysUserRoleBind);
        }
        List<SysUserRoleBindDomainDTO> list = converter.userRoleBindDomainConverter(userRoleBindReposity.saveAll(sysUserRoleBindList));
        return list;
    }
 
    @Transactional
    @Override
    public void updateUserRole(Long userId, List<Long> roleIds) {
        if(ObjectUtil.isEmpty(roleIds) || ObjectUtil.isEmpty(userId)){
            throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "参数缺失");
        }
        //获取原来的角色id
        List<Long> oldRoleIds = userRoleBindReposity.getByUserId(userId);
        List<Long> deleteRoleIdList = new ArrayList<>();
        List<Long> addRoleIdList = roleIds;
        if (ObjectUtil.isNotEmpty(oldRoleIds)) {
            //新增
            addRoleIdList = roleIds.stream().filter(item -> !oldRoleIds.contains(item)).collect(Collectors.toList());
            //删除
            deleteRoleIdList = oldRoleIds.stream().filter(item -> !roleIds.contains(item)).collect(Collectors.toList());
 
        }
        List<SysUserRoleBind> saveList = new ArrayList<>();
        for(Long roleId : addRoleIdList){
            SysUserRoleBind sysUserRoleBind = new SysUserRoleBind();
            sysUserRoleBind.setRoleId(roleId);
            sysUserRoleBind.setUserId(userId);
            saveList.add(sysUserRoleBind);
        }
        //删除不需要角色
        if(deleteRoleIdList.size()>0){
            userRoleBindReposity.deleteByUserIdAndRoleIds(userId, deleteRoleIdList);
        }
        //绑定新增角色
        if(saveList.size()>0){
            userRoleBindReposity.saveAll(saveList);
        }
    }
 
    @Override
    public boolean deleteByUser(Long userId) {
        if(null == userId){
            throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "参数缺失");
        }
        if(userRoleBindReposity.deleteByUserId(userId) > 0){
            return true;
        }
        return false;
    }
 
    /*@Override
    public List<SysUserRoleBindDomainDTO> getUserRoleBind(Long userId) {
        if(null == userId){
            throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "参数缺失");
        }
        return null;
    }*/
}