ADD file via upload

ptapqzhfn 10 months ago
parent 3503c764cf
commit 921917ddb7

@ -0,0 +1,270 @@
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);
}
}
Loading…
Cancel
Save