cloudroam
2025-03-31 f060439c675cb9185252cfc8f034853290863c62
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
127
128
129
130
131
132
133
134
135
136
137
138
139
package com.mzl.flower.service.system;
 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mzl.flower.config.exception.ValidationException;
import com.mzl.flower.config.security.SecurityUtils;
import com.mzl.flower.constant.Constants;
import com.mzl.flower.dto.request.system.CreateRoleDTO;
import com.mzl.flower.dto.request.system.SearchRoleDTO;
import com.mzl.flower.dto.request.system.UpdateRoleDTO;
import com.mzl.flower.dto.response.system.RoleDTO;
import com.mzl.flower.dto.response.system.RoleListDTO;
import com.mzl.flower.entity.system.Role;
import com.mzl.flower.entity.system.RoleMenu;
import com.mzl.flower.entity.system.UserRole;
import com.mzl.flower.mapper.system.RoleMapper;
import com.mzl.flower.mapper.system.RoleMenuMapper;
import com.mzl.flower.mapper.system.UserRoleMapper;
import com.mzl.flower.service.BaseService;
import com.mzl.flower.utils.UUIDGenerator;
import org.springframework.beans.BeanUtils;
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;
 
@Service
@Transactional
public class RoleService extends BaseService {
    @Autowired
    private RoleMapper roleMapper;
 
    @Autowired
    private RoleMenuMapper roleMenuMapper;
 
    @Autowired
    private UserRoleMapper userRoleMapper;
 
    public String addRole(CreateRoleDTO dto) {
        Role role1 = roleMapper.selectOne(new QueryWrapper<Role>().eq("ROLE_NAME", dto.getRoleName()));
        if(role1!=null){
            throw new ValidationException("角色名字重复");
        }
 
        Role role = new Role();
        role.setId(UUIDGenerator.getUUID());
        role.setRoleName(dto.getRoleName());
        role.setRoleDesc(dto.getRoleDesc());
        //设置非系统默认
        role.setIsSys(Constants.N);
        role.create(SecurityUtils.getUserId());
        roleMapper.insert(role);
 
        addRoleMenus(role.getId(), dto.getMenuIds());
        return role.getId();
    }
 
    public Page<RoleListDTO> searchRole(SearchRoleDTO dto, Page page) {
        //查询角色列表
        List<RoleListDTO> result = roleMapper.searchRole(page, dto);
        //给分页添加结果集
        page.setRecords(result);
        return page;
    }
 
    public RoleDTO getRoleDetail(final String id) {
        //获取角色详情
        Role role = roleMapper.selectById(id);
        //获取角色下的菜单
        QueryWrapper queryWrapper = new QueryWrapper<RoleMenu>().eq("ROLE_ID", id);
        List<RoleMenu> roleMenus = roleMenuMapper.selectList(queryWrapper);
 
        List<String> menuIds = new ArrayList<>();
        for (RoleMenu roleMenu : roleMenus) {
            menuIds.add(roleMenu.getMenuId());
        }
 
        //返回结果集
        RoleDTO result = new RoleDTO();
        BeanUtils.copyProperties(role, result);
        result.setMenuIds(menuIds);
        return result;
    }
 
    private void addRoleMenus(String id, List<String> menuIds){
        //删除角色已存在的菜单
        QueryWrapper deleteQuery = new QueryWrapper<RoleMenu>().eq("ROLE_ID", id);
        roleMenuMapper.delete(deleteQuery);
        //给角色添加可以访问的菜单
        for (String menuId : menuIds) {
            RoleMenu roleMenu = new RoleMenu();
            roleMenu.setId(UUIDGenerator.getUUID());
            roleMenu.setRoleId(id);
            roleMenu.setMenuId(menuId);
            roleMenuMapper.insert(roleMenu);
        }
    }
 
    public void updateRole(UpdateRoleDTO dto) {
        //获取角色详情
        Role role = roleMapper.selectById(dto.getId());
 
        Role role1 = roleMapper.selectOne(new QueryWrapper<Role>().eq("ROLE_NAME", dto.getRoleName()));
        if(role1!=null&&!role1.getId().equals(role.getId())){
            throw new ValidationException("角色名字重复");
        }
 
        role.setRoleName(dto.getRoleName());
        role.setRoleDesc(dto.getRoleDesc());
        role.update(SecurityUtils.getUserId());
        roleMapper.updateById(role);
 
        addRoleMenus(role.getId(), dto.getMenuIds());
    }
 
    /**
     * 删除角色
     *
     * @param id 角色主键
     */
    public void deleteRole(String id) {
        //删除角色
        roleMapper.deleteById(id);
 
        //删除角色关联的菜单
        QueryWrapper deleteQuery = new QueryWrapper<RoleMenu>().eq("ROLE_ID", id);
        roleMenuMapper.delete(deleteQuery);
 
        //删除角色关联的用户
        deleteQuery = new QueryWrapper<UserRole>().eq("ROLE_ID", id);
        userRoleMapper.delete(deleteQuery);
    }
 
    public List<Role> getUserRoleList(String userId) {
        return roleMapper.getUserRoleList(userId);
    }
}