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 { @Autowired private SysRoleMenuService sysRoleMenuService; @Autowired private SysRoleService sysRoleService; public List getAllList() { List menuList = baseDao.selectList(new QueryWrapper().eq(Constant.TableColumn.IS_DELETE, Constant.Bool.NO).orderByAsc(Constant.TableColumn.SORT)); return menuList; } public List getAllTree() { List menuList = baseDao.selectList(new QueryWrapper().eq(Constant.TableColumn.IS_DELETE, Constant.Bool.NO).orderByAsc(Constant.TableColumn.SORT)); return TreeUtils.build(menuList); } public List getAllTreeWithoutButtons() { List menuList = baseDao.selectList(new QueryWrapper() .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 getAllSystemTree() { return getAllTree().stream().filter(menu -> menu.getType() == MenuType.SYSTEM.getValue()) .collect(Collectors.toList()); } public List getSystems(Integer type) { User user = UserContext.getUser(); List list = baseDao.getSystems(type, user.getId()); return list; } /** * 当前用户菜单导航,不包括按钮 * * @return */ public List getCurrentUserMenuNav() { User user = UserContext.getUser(); // 超级管理员,拥有最高权限 if (user.isSuperAdmin() && user.isSuperAdmin()) { return getAllTreeWithoutButtons().stream().filter(menu -> menu.getType() == MenuType.PLATFORM.getValue()) .collect(Collectors.toList()); } List 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 list_except = baseDao.getUserMenuListExcept(user.getTenantId(), user.getId()); for (SysMenu item : list_except) { List list_except2 = list.stream().filter(menu -> menu.getId().equals(item.getId())) .collect(Collectors.toList()); for (SysMenu item2 : list_except2) { item2.setShowMenu(0); } } List list2 = TreeUtils.build(list.stream().filter(menu -> !menu.getType().equals(MenuType.BUTTON.getValue())) .collect(Collectors.toList())); List 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 getCurrentUserMenu() { User user = UserContext.getUser(); // 超级管理员,拥有最高权限 if (user.isPlatform() && user.isSuperAdmin()) { return getAllTree().stream().filter(menu -> menu.getType() == MenuType.PLATFORM.getValue()) .collect(Collectors.toList()); } List 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 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 all = baseDao.selectList(new QueryWrapper().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().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);// 清理用户权限缓存 } }