package com.zt.modules.sys.service;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.zt.common.constant.Constant;
|
import com.zt.common.exception.ErrorCode;
|
import com.zt.common.exception.RenException;
|
import com.zt.common.service.BaseService;
|
import com.zt.common.utils.CacheUtils;
|
import com.zt.common.utils.TreeUtils;
|
import com.zt.core.context.User;
|
import com.zt.core.context.UserContext;
|
import com.zt.modules.sys.dao.SysMenuDao;
|
import com.zt.modules.sys.enums.MenuType;
|
import com.zt.modules.sys.model.SysMenu;
|
import com.zt.modules.sys.model.SysRole;
|
import com.zt.modules.sys.model.SysRoleMenu;
|
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;
|
import java.util.stream.Collectors;
|
|
/**
|
* 菜单管理
|
*
|
* @author hehz
|
*/
|
@Service
|
public class SysMenuService extends BaseService<SysMenuDao, SysMenu> {
|
@Autowired
|
private SysRoleMenuService sysRoleMenuService;
|
@Autowired
|
private SysRoleService sysRoleService;
|
|
public List<SysMenu> getAllList() {
|
List<SysMenu> menuList = baseDao.selectList(new QueryWrapper<SysMenu>().eq(Constant.TableColumn.IS_DELETE,
|
Constant.Bool.NO).orderByAsc(Constant.TableColumn.SORT));
|
return menuList;
|
}
|
|
public List<SysMenu> getAllTree() {
|
List<SysMenu> menuList = baseDao.selectList(new QueryWrapper<SysMenu>().eq(Constant.TableColumn.IS_DELETE,
|
Constant.Bool.NO).orderByAsc(Constant.TableColumn.SORT));
|
return TreeUtils.build(menuList);
|
}
|
|
public List<SysMenu> getAllTreeWithoutButtons() {
|
List<SysMenu> menuList = baseDao.selectList(new QueryWrapper<SysMenu>()
|
.eq(Constant.TableColumn.IS_DELETE, Constant.Bool.NO).lambda()
|
.ne(SysMenu::getType, MenuType.BUTTON.getValue()).orderByAsc(SysMenu::getSort));
|
return TreeUtils.build(menuList);
|
}
|
|
/**
|
* 获取所有系统菜单
|
*
|
* @return
|
*/
|
public List<SysMenu> getAllSystemTree() {
|
return getAllTree().stream().filter(menu -> menu.getType() == MenuType.SYSTEM.getValue())
|
.collect(Collectors.toList());
|
}
|
|
public List<SysMenu> getSystems(Integer type) {
|
User user = UserContext.getUser();
|
List<SysMenu> list = baseDao.getSystems(type, user.getId());
|
return list;
|
}
|
|
|
/**
|
* 当前用户菜单导航,不包括按钮
|
*
|
* @return
|
*/
|
public List<SysMenu> getCurrentUserMenuNav() {
|
User user = UserContext.getUser();
|
// 超级管理员,拥有最高权限
|
if (user.isSuperAdmin() && user.isSuperAdmin()) {
|
return getAllTreeWithoutButtons().stream().filter(menu -> menu.getType() == MenuType.PLATFORM.getValue())
|
.collect(Collectors.toList());
|
}
|
List<SysMenu> list;
|
if ("wxxt".equals(user.getSystemMarker())) {
|
list = baseDao.getUserMenuListComm("comm_zts");
|
}else{
|
list = baseDao.getUserMenuList(user.getTenantId(), user.getId());
|
String roleName = user.getRoleName();
|
//if (list.size() == 0 && ("smj".equals(user.getSystemMarker())
|
if ((roleName == null || "".endsWith(roleName)) && ("smj".equals(user.getSystemMarker())
|
|| "djxl".equals(user.getSystemMarker()))
|
) {
|
list = baseDao.getUserMenuListComm("comm_sy");
|
}
|
}
|
|
List<SysMenu> list_except = baseDao.getUserMenuListExcept(user.getTenantId(), user.getId());
|
for (SysMenu item : list_except) {
|
List<SysMenu> list_except2 = list.stream().filter(menu -> menu.getId().equals(item.getId()))
|
.collect(Collectors.toList());
|
for (SysMenu item2 : list_except2) {
|
item2.setShowMenu(0);
|
}
|
}
|
List<SysMenu> list2 = TreeUtils.build(list.stream().filter(menu -> !menu.getType().equals(MenuType.BUTTON.getValue()))
|
.collect(Collectors.toList()));
|
|
List<SysMenu> listOut = new ArrayList<>();
|
for (SysMenu item : list2) {
|
if ("smj".equals(user.getSystemMarker()) && (1283299421357899778L == item.getId() || 1582665097052971009L == item.getId())) {
|
//选择寿命件系统隐藏等级修理系统,维修系统, 1283299421357899778,1582665097052971009L
|
item.setShowMenu(0);
|
//continue;
|
}
|
if ("djxl".equals(user.getSystemMarker()) && (1471651415041593346L == item.getId() || 1582665097052971009L == item.getId())) {
|
//选择等级维修系统隐藏寿命件系统,维修系统, 1471651415041593346,1582665097052971009L
|
item.setShowMenu(0);
|
//continue;
|
}
|
/*
|
if ("wxxt".equals(user.getSystemMarker()) && (1283299421357899778L == item.getId() || 1471651415041593346L == item.getId())) {
|
//选择寿命件系统隐藏寿命件系统,等级修理系统, 1283299421357899778,1471651415041593346L
|
item.setShowMenu(0);
|
//continue;
|
}*/
|
listOut.add(item);
|
}
|
return listOut;
|
}
|
|
/**
|
* 当前用户可以看到的菜单列表,包括按钮
|
*
|
* @return
|
*/
|
public List<SysMenu> getCurrentUserMenu() {
|
User user = UserContext.getUser();
|
// 超级管理员,拥有最高权限
|
if (user.isPlatform() && user.isSuperAdmin()) {
|
return getAllTree().stream().filter(menu -> menu.getType() == MenuType.PLATFORM.getValue())
|
.collect(Collectors.toList());
|
}
|
|
List<SysMenu> list = baseDao.getUserMenuList(user.getTenantId(), null);
|
return TreeUtils.build(list);
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void insert(SysMenu entity) {
|
super.insert(entity);
|
CacheUtils.removeAll(Constant.Cache.TOKEN);// 清理用户权限缓存
|
/* SysRoleMenu sysRoleMenu = new SysRoleMenu();
|
sysRoleMenu.setMenuId(entity.getId());
|
sysRoleMenu.setRoleId(1271368584383188993L);
|
sysRoleMenu.setDelete(true);
|
sysRoleMenuService.insert(sysRoleMenu);
|
|
List<SysRole> allList = sysRoleService.getAllList();
|
for(SysRole sysRole:allList){
|
sysRoleMenu = new SysRoleMenu();
|
sysRoleMenu.setMenuId(entity.getId());
|
sysRoleMenu.setRoleId(sysRole.getId());
|
sysRoleMenu.setDelete(true);
|
sysRoleMenuService.insert(sysRoleMenu);
|
}*/
|
}
|
|
@Transactional(rollbackFor = Exception.class)
|
public void update(SysMenu menu) {
|
SysMenu tmp = baseDao.selectById(menu.getId());
|
if (tmp == null) {
|
throw new RenException("查询菜单信息失败");
|
}
|
List<SysMenu> all = baseDao.selectList(new QueryWrapper<SysMenu>().lambda().ne(SysMenu::getType,
|
MenuType.BUTTON.getValue()));
|
TreeUtils.updateValidate(all, menu, tmp);
|
|
// 更新菜单
|
super.update(menu);
|
CacheUtils.removeAll(Constant.Cache.TOKEN);// 清理用户权限缓存
|
}
|
|
@Transactional(rollbackFor = Exception.class)
|
public void delete(Long id) {
|
// 判断是否有子菜单或按钮
|
if (baseDao.selectCount(new QueryWrapper<SysMenu>().eq(Constant.TableColumn.IS_DELETE, Constant.Bool.NO)
|
.lambda().eq(SysMenu::getPid, id)) > 0) {
|
throw new RenException(ErrorCode.SUB_MENU_EXIST);
|
}
|
// 删除菜单
|
deleteLogic(id);
|
|
// 删除角色菜单关系
|
sysRoleMenuService.deleteByMenuId(id);
|
|
CacheUtils.removeAll(Constant.Cache.TOKEN);// 清理用户权限缓存
|
}
|
}
|