package com.ruoyi.system.service.impl; import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.system.api.domain.SysRole; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.domain.SysMenuVisu; import com.ruoyi.system.domain.vo.TreeSelect; import com.ruoyi.system.mapper.SysMenuVisuMapper; import com.ruoyi.system.mapper.SysRoleMapper; import com.ruoyi.system.mapper.SysRoleMenuvisuMapper; import com.ruoyi.system.service.ISysMenuVisuService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.stream.Collectors; /** * 可视化菜单权限Service业务层处理 * * @author ruoyi * @date 2022-05-24 */ @Service public class SysMenuVisuServiceImpl implements ISysMenuVisuService { public static final String PREMISSION_STRING = "perms[\"{0}\"]"; @Autowired private SysMenuVisuMapper sysMenuVisuMapper; @Autowired private SysRoleMenuvisuMapper sysRoleMenuvisuMapper; @Autowired private SysRoleMapper roleMapper; /** * 查询可视化菜单权限 * * @param menuId 可视化菜单权限主键 * @return 可视化菜单权限 */ @Override public SysMenuVisu selectSysMenuVisuByMenuId(Long menuId) { return sysMenuVisuMapper.selectSysMenuVisuByMenuId(menuId); } @Override public List selectSysMenuVisuList(SysMenuVisu sysMenuVisu) { return sysMenuVisuMapper.selectSysMenuVisuList(sysMenuVisu); } /** * 查询可视化菜单权限列表 * * @return 可视化菜单权限 */ @Override public List selectMenuList(Long userId) { return selectMenuList(new SysMenuVisu(), userId); } /** * 查询系统菜单列表 * * @param menu 菜单信息 * @return 菜单列表 */ @Override public List selectMenuList(SysMenuVisu menu, Long userId) { List menuList = null; // 管理员显示所有菜单信息 if (SysUser.isAdmin(userId)) { menuList = sysMenuVisuMapper.selectMenuList(menu); } else { menu.getParams().put("userId", userId); menuList = sysMenuVisuMapper.selectMenuListByUserId(menu); } return menuList; } /* { return sysMenuVisuMapper.selectSysMenuVisuList(sysMenuVisu); } */ /** * 新增可视化菜单权限 * * @param sysMenuVisu 可视化菜单权限 * @return 结果 */ @Override public int insertSysMenuVisu(SysMenuVisu sysMenuVisu) { sysMenuVisu.setCreateTime(DateUtils.getNowDate()); return sysMenuVisuMapper.insertSysMenuVisu(sysMenuVisu); } /** * 修改可视化菜单权限 * * @param sysMenuVisu 可视化菜单权限 * @return 结果 */ @Override public int updateSysMenuVisu(SysMenuVisu sysMenuVisu) { sysMenuVisu.setUpdateTime(DateUtils.getNowDate()); return sysMenuVisuMapper.updateSysMenuVisu(sysMenuVisu); } /* *//** * 批量删除可视化菜单权限 * * @param menuIds 需要删除的可视化菜单权限主键 * @return 结果 *//* @Override public int deleteSysMenuVisuByMenuIds(Long[] menuIds) { return sysMenuVisuMapper.deleteSysMenuVisuByMenuIds(menuIds); }*/ /** * 删除可视化菜单权限信息 * * @param menuId 可视化菜单权限主键 * @return 结果 */ @Override public int deleteSysMenuVisuByMenuId(Long menuId) { return sysMenuVisuMapper.deleteSysMenuVisuByMenuId(menuId); } /** * 校验菜单名称是否唯一 * * @param menu 菜单信息 * @return 结果 */ @Override public String checkMenuNameUnique(SysMenuVisu menu) { Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId(); SysMenuVisu info = sysMenuVisuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId()); if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue()) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; } /** * 是否存在菜单子节点 * * @param menuId 菜单ID * @return 结果 */ @Override public boolean hasChildByMenuId(Long menuId) { int result = sysMenuVisuMapper.hasChildByMenuId(menuId); return result > 0 ? true : false; } /** * 查询菜单使用数量 * * @param menuId 菜单ID * @return 结果 */ @Override public boolean checkMenuExistRole(Long menuId) { int result = sysRoleMenuvisuMapper.checkMenuExistRole(menuId); return result > 0 ? true : false; } /** * 构建前端所需要下拉树结构 * * @param menus 菜单列表 * @return 下拉树结构列表 */ @Override public List buildMenuTreeSelect(List menus) { List menuTrees = buildMenuTree(menus); return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); } /** * 构建前端所需要树结构 * * @param menus 菜单列表 * @return 树结构列表 */ @Override public List buildMenuTree(List menus) { List returnList = new ArrayList(); List tempList = new ArrayList(); for (SysMenuVisu dept : menus) { tempList.add(dept.getMenuId()); } for (Iterator iterator = menus.iterator(); iterator.hasNext();) { SysMenuVisu menu = (SysMenuVisu) iterator.next(); // 如果是顶级节点, 遍历该父节点的所有子节点 if (!tempList.contains(menu.getParentId())) { recursionFn(menus, menu); returnList.add(menu); } } if (returnList.isEmpty()) { returnList = menus; } return returnList; } /** * 递归列表 * * @param list * @param t */ private void recursionFn(List list, SysMenuVisu t) { // 得到子节点列表 List childList = getChildList(list, t); t.setChildren(childList); for (SysMenuVisu tChild : childList) { if (hasChild(list, tChild)) { recursionFn(list, tChild); } } } /** * 得到子节点列表 */ private List getChildList(List list, SysMenuVisu t) { List tlist = new ArrayList(); Iterator it = list.iterator(); while (it.hasNext()) { SysMenuVisu n = (SysMenuVisu) it.next(); if (n.getParentId().longValue() == t.getMenuId().longValue()) { tlist.add(n); } } return tlist; } /** * 判断是否有子节点 */ private boolean hasChild(List list, SysMenuVisu t) { return getChildList(list, t).size() > 0; } /** * 根据角色ID查询菜单树信息 * * @param roleId 角色ID * @return 选中菜单列表 */ @Override public List selectMenuListByRoleId(Long roleId) { SysRole role = roleMapper.selectRoleById(roleId); return sysMenuVisuMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly()); } }