ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-common/src/main/java/com/ruoyi/common/utils/TreeBuildUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java
@@ -1,11 +1,11 @@ package com.ruoyi.web.controller.system; import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.util.ArrayUtil; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.TreeSelect; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.StringUtils; @@ -76,7 +76,7 @@ */ @ApiOperation("è·åé¨é¨ä¸ææ å表") @GetMapping("/treeselect") public AjaxResult<List<TreeSelect>> treeselect(SysDept dept) { public AjaxResult<List<Tree<Long>>> treeselect(SysDept dept) { List<SysDept> depts = deptService.selectDeptList(dept); return AjaxResult.success(deptService.buildDeptTreeSelect(depts)); } ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java
@@ -1,10 +1,10 @@ package com.ruoyi.web.controller.system; import cn.hutool.core.lang.tree.Tree; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.TreeSelect; import com.ruoyi.common.core.domain.entity.SysMenu; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.StringUtils; @@ -61,7 +61,7 @@ */ @ApiOperation("è·åèå䏿æ å表") @GetMapping("/treeselect") public AjaxResult<List<TreeSelect>> treeselect(SysMenu menu) { public AjaxResult<List<Tree<Long>>> treeselect(SysMenu menu) { List<SysMenu> menus = menuService.selectMenuList(menu, getUserId()); return AjaxResult.success(menuService.buildMenuTreeSelect(menus)); } ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java
ÎļþÒÑɾ³ý ruoyi-common/src/main/java/com/ruoyi/common/utils/TreeBuildUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,31 @@ package com.ruoyi.common.utils; import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.lang.tree.TreeNodeConfig; import cn.hutool.core.lang.tree.TreeUtil; import cn.hutool.core.lang.tree.parser.NodeParser; import java.util.List; /** * æ©å± hutool TreeUtil å°è£ ç³»ç»æ æå»º * * @author Lion Li */ public class TreeBuildUtils extends TreeUtil { /** * æ ¹æ®å端å®å¶å·®å¼ååæ®µ */ public static final TreeNodeConfig DEFAULT_CONFIG = TreeNodeConfig.DEFAULT_CONFIG.setNameKey("label"); /** * é»è®¤æ ç¶èç¹id */ public static final Long DEFAULT_PARENT_ID = 0L; public static <T> List<Tree<Long>> build(List<T> list, NodeParser<T, Long> nodeParser) { return TreeUtil.build(list, DEFAULT_PARENT_ID, DEFAULT_CONFIG, nodeParser); } } ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java
@@ -1,7 +1,7 @@ package com.ruoyi.system.service; import cn.hutool.core.lang.tree.Tree; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.core.domain.TreeSelect; import com.ruoyi.common.core.domain.entity.SysDept; import java.util.List; @@ -21,20 +21,12 @@ List<SysDept> selectDeptList(SysDept dept); /** * æå»ºå端æéè¦æ ç»æ * * @param depts é¨é¨å表 * @return æ ç»æå表 */ List<SysDept> buildDeptTree(List<SysDept> depts); /** * æå»ºå端æéè¦ä¸ææ ç»æ * * @param depts é¨é¨å表 * @return 䏿æ ç»æå表 */ List<TreeSelect> buildDeptTreeSelect(List<SysDept> depts); List<Tree<Long>> buildDeptTreeSelect(List<SysDept> depts); /** * æ ¹æ®è§è²IDæ¥è¯¢é¨é¨æ ä¿¡æ¯ ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java
@@ -1,7 +1,7 @@ package com.ruoyi.system.service; import cn.hutool.core.lang.tree.Tree; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.core.domain.TreeSelect; import com.ruoyi.common.core.domain.entity.SysMenu; import com.ruoyi.system.domain.vo.RouterVo; @@ -65,20 +65,12 @@ List<RouterVo> buildMenus(List<SysMenu> menus); /** * æå»ºå端æéè¦æ ç»æ * * @param menus èåå表 * @return æ ç»æå表 */ List<SysMenu> buildMenuTree(List<SysMenu> menus); /** * æå»ºå端æéè¦ä¸ææ ç»æ * * @param menus èåå表 * @return 䏿æ ç»æå表 */ List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus); List<Tree<Long>> buildMenuTreeSelect(List<SysMenu> menus); /** * æ ¹æ®èåIDæ¥è¯¢ä¿¡æ¯ ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
@@ -1,11 +1,11 @@ package com.ruoyi.system.service.impl; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.tree.Tree; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.ruoyi.common.annotation.DataScope; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.TreeSelect; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.entity.SysUser; @@ -13,6 +13,7 @@ import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.TreeBuildUtils; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.system.mapper.SysDeptMapper; import com.ruoyi.system.mapper.SysRoleMapper; @@ -21,10 +22,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** * é¨é¨ç®¡ç æå¡å®ç° @@ -53,41 +52,18 @@ } /** * æå»ºå端æéè¦æ ç»æ * * @param depts é¨é¨å表 * @return æ ç»æå表 */ @Override public List<SysDept> buildDeptTree(List<SysDept> depts) { List<SysDept> returnList = new ArrayList<SysDept>(); List<Long> tempList = new ArrayList<Long>(); for (SysDept dept : depts) { tempList.add(dept.getDeptId()); } for (SysDept dept : depts) { // 妿æ¯é¡¶çº§èç¹, éå该ç¶èç¹çææåèç¹ if (!tempList.contains(dept.getParentId())) { recursionFn(depts, dept); returnList.add(dept); } } if (returnList.isEmpty()) { returnList = depts; } return returnList; } /** * æå»ºå端æéè¦ä¸ææ ç»æ * * @param depts é¨é¨å表 * @return 䏿æ ç»æå表 */ @Override public List<TreeSelect> buildDeptTreeSelect(List<SysDept> depts) { List<SysDept> deptTrees = buildDeptTree(depts); return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); public List<Tree<Long>> buildDeptTreeSelect(List<SysDept> depts) { return TreeBuildUtils.build(depts, (dept, tree) -> tree.setId(dept.getDeptId()) .setParentId(dept.getParentId()) .setName(dept.getDeptName()) .setWeight(dept.getOrderNum())); } /** @@ -122,8 +98,8 @@ @Override public long selectNormalChildrenDeptById(Long deptId) { return count(new LambdaQueryWrapper<SysDept>() .eq(SysDept::getStatus, 0) .apply("find_in_set({0}, ancestors)", deptId)); .eq(SysDept::getStatus, 0) .apply("find_in_set({0}, ancestors)", deptId)); } /** @@ -135,8 +111,8 @@ @Override public boolean hasChildByDeptId(Long deptId) { long result = count(new LambdaQueryWrapper<SysDept>() .eq(SysDept::getParentId, deptId) .last("limit 1")); .eq(SysDept::getParentId, deptId) .last("limit 1")); return result > 0; } @@ -149,7 +125,7 @@ @Override public boolean checkDeptExistUser(Long deptId) { long result = userMapper.selectCount(new LambdaQueryWrapper<SysUser>() .eq(SysUser::getDeptId, deptId)); .eq(SysUser::getDeptId, deptId)); return result > 0; } @@ -163,9 +139,9 @@ public String checkDeptNameUnique(SysDept dept) { Long deptId = StringUtils.isNull(dept.getDeptId()) ? -1L : dept.getDeptId(); SysDept info = getOne(new LambdaQueryWrapper<SysDept>() .eq(SysDept::getDeptName, dept.getDeptName()) .eq(SysDept::getParentId, dept.getParentId()) .last("limit 1")); .eq(SysDept::getDeptName, dept.getDeptName()) .eq(SysDept::getParentId, dept.getParentId()) .last("limit 1")); if (StringUtils.isNotNull(info) && info.getDeptId().longValue() != deptId.longValue()) { return UserConstants.NOT_UNIQUE; } @@ -224,7 +200,7 @@ } int result = baseMapper.updateById(dept); if (UserConstants.DEPT_NORMAL.equals(dept.getStatus()) && StringUtils.isNotEmpty(dept.getAncestors()) && !StringUtils.equals("0", dept.getAncestors())) { && !StringUtils.equals("0", dept.getAncestors())) { // å¦æè¯¥é¨é¨æ¯å¯ç¨ç¶æï¼åå¯ç¨è¯¥é¨é¨çææä¸çº§é¨é¨ updateParentDeptStatusNormal(dept); } @@ -240,8 +216,8 @@ String ancestors = dept.getAncestors(); Long[] deptIds = Convert.toLongArray(ancestors); update(null, new LambdaUpdateWrapper<SysDept>() .set(SysDept::getStatus, "0") .in(SysDept::getDeptId, Arrays.asList(deptIds))); .set(SysDept::getStatus, "0") .in(SysDept::getDeptId, Arrays.asList(deptIds))); } /** @@ -253,7 +229,7 @@ */ public void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors) { List<SysDept> children = list(new LambdaQueryWrapper<SysDept>() .apply("find_in_set({0},ancestors)", deptId)); .apply("find_in_set({0},ancestors)", deptId)); for (SysDept child : children) { child.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors)); } @@ -273,37 +249,4 @@ return baseMapper.deleteById(deptId); } /** * éå½å表 */ private void recursionFn(List<SysDept> list, SysDept t) { // å¾å°åèç¹å表 List<SysDept> childList = getChildList(list, t); t.setChildren(childList); for (SysDept tChild : childList) { if (hasChild(list, tChild)) { recursionFn(list, tChild); } } } /** * å¾å°åèç¹å表 */ private List<SysDept> getChildList(List<SysDept> list, SysDept t) { List<SysDept> tlist = new ArrayList<SysDept>(); for (SysDept n : list) { if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue()) { tlist.add(n); } } return tlist; } /** * 夿æ¯å¦æåèç¹ */ private boolean hasChild(List<SysDept> list, SysDept t) { return getChildList(list, t).size() > 0; } } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
@@ -1,15 +1,16 @@ package com.ruoyi.system.service.impl; import cn.hutool.core.lang.tree.Tree; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.TreeSelect; import com.ruoyi.common.core.domain.entity.SysMenu; import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.TreeBuildUtils; import com.ruoyi.system.domain.SysRoleMenu; import com.ruoyi.system.domain.vo.MetaVo; import com.ruoyi.system.domain.vo.RouterVo; @@ -21,7 +22,6 @@ import org.springframework.stereotype.Service; import java.util.*; import java.util.stream.Collectors; /** * èå ä¸å¡å±å¤ç @@ -60,11 +60,11 @@ // 管çåæ¾ç¤ºææèåä¿¡æ¯ if (SysUser.isAdmin(userId)) { menuList = list(new LambdaQueryWrapper<SysMenu>() .like(StringUtils.isNotBlank(menu.getMenuName()), SysMenu::getMenuName, menu.getMenuName()) .eq(StringUtils.isNotBlank(menu.getVisible()), SysMenu::getVisible, menu.getVisible()) .eq(StringUtils.isNotBlank(menu.getStatus()), SysMenu::getStatus, menu.getStatus()) .orderByAsc(SysMenu::getParentId) .orderByAsc(SysMenu::getOrderNum)); .like(StringUtils.isNotBlank(menu.getMenuName()), SysMenu::getMenuName, menu.getMenuName()) .eq(StringUtils.isNotBlank(menu.getVisible()), SysMenu::getVisible, menu.getVisible()) .eq(StringUtils.isNotBlank(menu.getStatus()), SysMenu::getStatus, menu.getStatus()) .orderByAsc(SysMenu::getParentId) .orderByAsc(SysMenu::getOrderNum)); } else { menu.getParams().put("userId", userId); menuList = baseMapper.selectMenuListByUserId(menu); @@ -171,41 +171,18 @@ } /** * æå»ºå端æéè¦æ ç»æ * * @param menus èåå表 * @return æ ç»æå表 */ @Override public List<SysMenu> buildMenuTree(List<SysMenu> menus) { List<SysMenu> returnList = new ArrayList<SysMenu>(); List<Long> tempList = new ArrayList<Long>(); for (SysMenu dept : menus) { tempList.add(dept.getMenuId()); } for (SysMenu menu : menus) { // 妿æ¯é¡¶çº§èç¹, éå该ç¶èç¹çææåèç¹ if (!tempList.contains(menu.getParentId())) { recursionFn(menus, menu); returnList.add(menu); } } if (returnList.isEmpty()) { returnList = menus; } return returnList; } /** * æå»ºå端æéè¦ä¸ææ ç»æ * * @param menus èåå表 * @return 䏿æ ç»æå表 */ @Override public List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus) { List<SysMenu> menuTrees = buildMenuTree(menus); return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); public List<Tree<Long>> buildMenuTreeSelect(List<SysMenu> menus) { return TreeBuildUtils.build(menus, (menu, tree) -> tree.setId(menu.getMenuId()) .setParentId(menu.getParentId()) .setName(menu.getMenuName()) .setWeight(menu.getOrderNum())); } /** @@ -286,9 +263,9 @@ public String checkMenuNameUnique(SysMenu menu) { Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId(); SysMenu info = getOne(new LambdaQueryWrapper<SysMenu>() .eq(SysMenu::getMenuName, menu.getMenuName()) .eq(SysMenu::getParentId, menu.getParentId()) .last("limit 1")); .eq(SysMenu::getMenuName, menu.getMenuName()) .eq(SysMenu::getParentId, menu.getParentId()) .last("limit 1")); if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue()) { return UserConstants.NOT_UNIQUE; } @@ -324,7 +301,7 @@ } // éå¤é¾å¹¶ä¸æ¯ä¸çº§ç®å½ï¼ç±»å为ç®å½ï¼ if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType()) && UserConstants.NO_FRAME.equals(menu.getIsFrame())) { && UserConstants.NO_FRAME.equals(menu.getIsFrame())) { routerPath = "/" + menu.getPath(); } // éå¤é¾å¹¶ä¸æ¯ä¸çº§ç®å½ï¼ç±»å为èåï¼ @@ -360,7 +337,7 @@ */ public boolean isMenuFrame(SysMenu menu) { return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType()) && menu.getIsFrame().equals(UserConstants.NO_FRAME); && menu.getIsFrame().equals(UserConstants.NO_FRAME); } /**