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