You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
null/RoleServiceImpl.java

271 lines
10 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.rabbiter.market.service.system.role.impl;
import com.rabbiter.market.common.exception.BusinessException;
import com.rabbiter.market.common.redis.service.RedisTemplateService;
import com.rabbiter.market.domain.personnel_management.employee.Employee;
import com.rabbiter.market.domain.system.menu.Menu;
import com.rabbiter.market.domain.system.role.Role;
import com.rabbiter.market.mapper.system.role.RoleMapper;
import com.rabbiter.market.qo.system.RoleQuery;
import com.rabbiter.market.service.personnel_management.employee.IEmployeeService;
import com.rabbiter.market.service.system.menu.IMenuService;
import com.rabbiter.market.service.system.role.IRoleService;
import com.rabbiter.market.vo.role.RolePermissonVo;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.util.*;
@Service
public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IRoleService {
@Autowired
private RoleMapper roleMapper;
@Autowired
private IMenuService menuService;
@Autowired
private RedisTemplateService redisTemplateService;
@Autowired
private IEmployeeService employeeService;
@Override
public Set<Role> queryByEid(Long eid) {
Set<Role> roles = roleMapper.queryByEid(eid);
return roles;
}
@Override
public List<Role> listByQo(RoleQuery qo) {
QueryWrapper<Role> wrapper = new QueryWrapper<>();
wrapper.like(StringUtils.hasText(qo.getName()), "name", qo.getName());
wrapper.eq(StringUtils.hasText(qo.getState()), "state", qo.getState());
wrapper.ne("id",Role.SYS_ID);
wrapper.ne("id",2L);
List<Role> list = super.list(wrapper);
return list;
}
@Override
public void forbiddenRole(Long rid) {
Role role = super.getById(rid);
if (Role.SYS_ID==role.getId() || 2L==role.getId()) {
throw new BusinessException("不能停用系统拥有者");
}
UpdateWrapper<Role> wrapper = new UpdateWrapper<Role>()
.set("state", Role.STATE_BAN)
.eq("id", rid);
super.update(wrapper);
}
@Override
public void saveRole(Role role) {
if (role == null) {
throw new BusinessException("操作失败");
}
if (StringUtils.hasText(role.getName())) {
//查询是否保存过
Role role1 = super.getOne(new QueryWrapper<Role>().eq("name", role.getName()));
if (role1 != null) {
throw new BusinessException("操作失败,角色名重复");
} else {
role.setState(Role.STATE_NORMAL);
super.save(role);
}
} else {
throw new BusinessException("角色名称格式有误");
}
}
@Transactional
@Override
public RolePermissonVo checkPermissons(Long rid) {
RolePermissonVo vo = new RolePermissonVo();
/*角色所拥有的菜单id集合*/
List<Long> menuIds = new ArrayList<>();
/*所有的菜单信息*/
List<RolePermissonVo.RoleMenu> menus1 = new ArrayList<>();
//步骤1查询所有的菜单信息
List<Menu> menus = menuService.findAll();
if (menus == null) {
throw new BusinessException("授权功能还待上线...");
}
//封装菜单信息
for (Menu menu : menus) {
RolePermissonVo.RoleMenu roleMenu_catalogs = vo.getRoleMenu();
roleMenu_catalogs.setValue(menu.getId());
roleMenu_catalogs.setLabel(menu.getLabel());
/*目录下的菜单*/
List<RolePermissonVo.RoleMenu> children = new ArrayList<>();
//目录
if (menu.getChildren() != null) {
for (Menu child : menu.getChildren()) {
//菜单
RolePermissonVo.RoleMenu roleMenu_menu = vo.getRoleMenu();
roleMenu_menu.setValue(child.getId());
roleMenu_menu.setLabel(child.getLabel());
List<RolePermissonVo.RoleMenu> children1 = new ArrayList<>();
if (child.getChildren() != null) {
for (Menu childChild : child.getChildren()) {
//按钮
RolePermissonVo.RoleMenu roleMenu_button = vo.getRoleMenu();
roleMenu_button.setValue(childChild.getId());
roleMenu_button.setLabel(childChild.getLabel());
children1.add(roleMenu_button);
}
roleMenu_menu.setChildren(children1);
}
children.add(roleMenu_menu);
}
roleMenu_catalogs.setChildren(children);
}
menus1.add(roleMenu_catalogs);
}
vo.setMenus(menus1);
//步骤2是否是系统管理员
if (rid == Role.SYS_ID) {
//系统管理员
//封装角色拥有的菜单id集合
for (Menu menu : menus) {
menuIds.add(menu.getId());
//目录
if (menu.getChildren() != null) {
for (Menu child : menu.getChildren()) {
//菜单
menuIds.add(child.getId());
if (child.getChildren() != null) {
for (Menu childChild : child.getChildren()) {
//按钮
menuIds.add(childChild.getId());
}
}
}
}
}
vo.setMenuIds(menuIds);
} else {
//非系统管理员
menuIds = roleMapper.getMenuIdByRid(rid);
vo.setMenuIds(menuIds);
}
return vo;
}
@Transactional
@Override
public void saveRolePermissons(Long rid, Long[] menuIds) {
//判断是否是系统管理员
if (rid == Role.SYS_ID || rid==2L) {
//系统管理员
throw new BusinessException("系统管理员的权限不可操作");
} else {
//非系统管理员
//重新建立关系
if (menuIds == null || menuIds.length == 0) {
return;
} else {
List<Long> ids = new ArrayList<>();
for (Long menuId : menuIds) {
ids.add(menuId);
}
Set<Long> totalIds = new HashSet<>();
QueryWrapper<Menu> qoWrapper = new QueryWrapper<Menu>().in("id", ids);
List<Menu> list1 = menuService.list(qoWrapper);
for (Menu menu : list1) {
//按钮
if (menu.getParentId()!=null && Menu.TYPE_BUTTON.equals(menu.getType())){
totalIds.add(menu.getId());
QueryWrapper<Menu> btnWrapper = new QueryWrapper<Menu>().eq("id", menu.getParentId())
.eq("type",Menu.TYPE_MENU);
Menu menu1 = menuService.getOne(btnWrapper);
totalIds.add(menu1.getId());
totalIds.add(menu1.getParentId());
} else if (menu.getParentId()!=null && Menu.TYPE_MENU.equals(menu.getType())){
//菜单
totalIds.add(menu.getId());
totalIds.add(menu.getParentId());
}else if (menu.getParentId()==null && Menu.TYPE_CATALOGUE.equals(menu.getType())){
//目录
totalIds.add(menu.getId());
}
}
//清除关系
roleMapper.clearRecordsByRid(rid);
List<Map<String, Object>> list = new ArrayList<>();
for (Long id : totalIds) {
Map<String, Object> map = new HashMap<>();
map.put("rid", rid);
map.put("mid", id);
list.add(map);
}
roleMapper.saveRolePermissons(list);
}
}
}
@Override
public List<Map<String, Object>> getRoleAll() {
List<Map<String, Object>> list = new ArrayList<>();
QueryWrapper<Role> wrapper = new QueryWrapper<Role>().eq("state", Role.STATE_NORMAL).ne("id",Role.SYS_ID).ne("id",2L);
List<Role> roles = super.list(wrapper);
for (Role role : roles) {
Map<String, Object> map=new HashMap<>();
map.put("id",role.getId());
map.put("label",role.getName());
list.add(map);
}
return list;
}
@Override
public List<Long> queryRoleIdsByEid(Long eid) {
Employee emp = employeeService.getById(eid);
if (emp.getIsAdmin()){
return roleMapper.queryRoleIdsAll();
}else {
return roleMapper.queryRoleIdsByEid(eid);
}
}
@Override
public void saveRoleEmp(Long eid, Long[] roleIds,String token) {
Employee emp = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class);
if (emp.getId()==eid){
throw new BusinessException("无法为自己赋予职务");
}
//查询用户的信息,判断是否是系统管理员
Employee employee = employeeService.getById(eid);
if (employee.getIsAdmin()){
throw new BusinessException("无法操作系统管理员的职务");
}
/*根据员工编号清除关系*/
roleMapper.clearRelationByEid(eid);
/*重新保存关系*/
List<Map<String,Object>> list=new ArrayList<>();
for (Long roleId : roleIds) {
Map<String, Object> map = new HashMap<>();
map.put("eid",eid);
map.put("rid",roleId);
list.add(map);
}
if (list.size()>0){
roleMapper.reSaveRelation(list);
}
}
@Override
public void clearEmpPermission(Long id) {
roleMapper.clearRelationByEid(id);
}
}