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