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().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 searchRole(SearchRoleDTO dto, Page page) { //查询角色列表 List 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().eq("ROLE_ID", id); List roleMenus = roleMenuMapper.selectList(queryWrapper); List 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 menuIds){ //删除角色已存在的菜单 QueryWrapper deleteQuery = new QueryWrapper().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().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().eq("ROLE_ID", id); roleMenuMapper.delete(deleteQuery); //删除角色关联的用户 deleteQuery = new QueryWrapper().eq("ROLE_ID", id); userRoleMapper.delete(deleteQuery); } public List getUserRoleList(String userId) { return roleMapper.getUserRoleList(userId); } }