diff --git a/dragon-system-common/src/main/java/com/dragon/system/common/domain/SysMenu.java b/dragon-system-common/src/main/java/com/dragon/system/common/domain/SysMenu.java index 702b7c7..836f09b 100644 --- a/dragon-system-common/src/main/java/com/dragon/system/common/domain/SysMenu.java +++ b/dragon-system-common/src/main/java/com/dragon/system/common/domain/SysMenu.java @@ -1,5 +1,8 @@ package com.dragon.system.common.domain; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import com.dragon.common.core.web.domain.BaseEntity; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; @@ -15,12 +18,14 @@ import java.util.List; * * @author dragon */ +@TableName(value = "sys_menu") public class SysMenu extends BaseEntity { private static final long serialVersionUID = 1L; /** * 菜单ID */ + @TableId(type = IdType.AUTO) private Long menuId; /** diff --git a/dragon-system-server/src/main/java/com/dragon/system/server/controller/SysMenuPlusController.java b/dragon-system-server/src/main/java/com/dragon/system/server/controller/SysMenuPlusController.java new file mode 100644 index 0000000..7837541 --- /dev/null +++ b/dragon-system-server/src/main/java/com/dragon/system/server/controller/SysMenuPlusController.java @@ -0,0 +1,141 @@ +package com.dragon.system.server.controller; + +import com.dragon.common.core.constant.UserConstants; +import com.dragon.common.core.domain.Result; +import com.dragon.common.core.utils.StringUtils; +import com.dragon.common.core.web.controller.BaseController; +import com.dragon.common.log.annotation.Log; +import com.dragon.common.log.enums.BusinessType; +import com.dragon.common.security.annotation.RequiresPermissions; +import com.dragon.common.security.utils.SecurityUtils; +import com.dragon.system.common.domain.SysMenu; +import com.dragon.system.common.domain.res.RoleMenuTreeRes; +import com.dragon.system.server.service.ISysMenuPlusService; +import com.dragon.system.server.service.ISysMenuService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +; + +/** + * 菜单信息 + * + * @author dragon + */ +@RestController +@RequestMapping("/menu/plus") +public class SysMenuPlusController extends BaseController { + @Autowired + private ISysMenuPlusService menuService; + + /** + * 获取菜单列表 + */ + @RequiresPermissions("system:menu:list") + @GetMapping("/list") + public Result list(SysMenu menu) { + Long userId = SecurityUtils.getUserId(); + List menus = menuService.selectMenuList(menu, userId); + return success(menus); + } + + /** + * 根据菜单编号获取详细信息 + */ + @RequiresPermissions("system:menu:query") + @GetMapping(value = "/{menuId}") + public Result getInfo(@PathVariable Long menuId) { + + return success(menuService.getById(menuId)); + } + + /** + * 获取菜单下拉树列表 + */ + @GetMapping("/treeselect") + public Result treeselect(SysMenu menu) { + Long userId = SecurityUtils.getUserId(); + List menus = menuService.selectMenuList(menu, userId); + return success(menuService.buildMenuTreeSelect(menus)); + } + + /** + * 加载对应角色菜单列表树 + */ + @GetMapping(value = "/roleMenuTreeselect/{roleId}") + public Result roleMenuTreeselect(@PathVariable("roleId") Long roleId) { + Long userId = SecurityUtils.getUserId(); + List menus = menuService.selectMenuList(userId); + return Result.success(RoleMenuTreeRes.builder() + .checkedKeys(menuService.selectMenuListByRoleId(roleId)) + .menus(menuService.buildMenuTreeSelect(menus)) + .build() + ); + } + + /** + * 新增菜单 + */ + @RequiresPermissions("system:menu:add") + @Log(title = "菜单管理", businessType = BusinessType.INSERT) + @PostMapping + public Result add(@Validated @RequestBody SysMenu menu) { + if (!menuService.checkMenuNameUnique(menu)) { + return error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); + } else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) { + return error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); + } + menu.setCreateBy(SecurityUtils.getUsername()); + return toAjax(menuService.save(menu)); + } + + /** + * 修改菜单 + */ + @RequiresPermissions("system:menu:edit") + @Log(title = "菜单管理", businessType = BusinessType.UPDATE) + @PutMapping + public Result edit(@Validated @RequestBody SysMenu menu) { + if (!menuService.checkMenuNameUnique(menu)) { + return error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); + } else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) { + return error("修改菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); + } else if (menu.getMenuId().equals(menu.getParentId())) { + return error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己"); + } + + menu.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(menuService.updateById(menu)); + } + + /** + * 删除菜单 + */ + @RequiresPermissions("system:menu:remove") + @Log(title = "菜单管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{menuId}") + public Result remove(@PathVariable("menuId") Long menuId) { + if (menuService.hasChildByMenuId(menuId)) { + return warn("存在子菜单,不允许删除"); + } + if (menuService.checkMenuExistRole(menuId)) { + return warn("菜单已分配,不允许删除"); + } + return toAjax(menuService.removeById(menuId)); + } + + /** + * 获取路由信息 + * + * @return 路由信息 + */ + @GetMapping("getRouters") + public Result getRouters() { + Long userId = SecurityUtils.getUserId(); + List menus = menuService.selectMenuTreeByUserId(userId); + return success(menuService.buildMenus(menus)); + } +} diff --git a/dragon-system-server/src/main/java/com/dragon/system/server/mapper/SysMenuPlusMapper.java b/dragon-system-server/src/main/java/com/dragon/system/server/mapper/SysMenuPlusMapper.java new file mode 100644 index 0000000..935a079 --- /dev/null +++ b/dragon-system-server/src/main/java/com/dragon/system/server/mapper/SysMenuPlusMapper.java @@ -0,0 +1,24 @@ +package com.dragon.system.server.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dragon.system.common.domain.SysMenu; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * @author 冯凯 + * @version 1.0 + * @description: + * @date 2023/11/20 20:36 + */ +@Mapper +public interface SysMenuPlusMapper extends BaseMapper { + List selectMenuPermsByRoleId(Long roleId); + + List selectMenuPermsByUserId(Long userId); + + List selectMenuTreeByUserId(Long userId); + + List selectMenuListByRoleId(Long roleId, boolean menuCheckStrictly); +} diff --git a/dragon-system-server/src/main/java/com/dragon/system/server/service/ISysMenuPlusService.java b/dragon-system-server/src/main/java/com/dragon/system/server/service/ISysMenuPlusService.java new file mode 100644 index 0000000..a3d557d --- /dev/null +++ b/dragon-system-server/src/main/java/com/dragon/system/server/service/ISysMenuPlusService.java @@ -0,0 +1,117 @@ +package com.dragon.system.server.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dragon.system.common.domain.SysMenu; +import com.dragon.system.common.domain.vo.RouterVo; +import com.dragon.system.common.domain.vo.TreeSelect; + +import java.util.List; +import java.util.Set; + +/** + * 菜单 业务层 + * + * @author dragon + */ +public interface ISysMenuPlusService extends IService { + /** + * 根据用户查询系统菜单列表 + * + * @param userId 用户ID + * @return 菜单列表 + */ + public List selectMenuList(Long userId); + + /** + * 根据用户查询系统菜单列表 + * + * @param menu 菜单信息 + * @param userId 用户ID + * @return 菜单列表 + */ + public List selectMenuList(SysMenu menu, Long userId); + + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * @return 权限列表 + */ + public Set selectMenuPermsByUserId(Long userId); + + /** + * 根据角色ID查询权限 + * + * @param roleId 角色ID + * @return 权限列表 + */ + public Set selectMenuPermsByRoleId(Long roleId); + + /** + * 根据用户ID查询菜单树信息 + * + * @param userId 用户ID + * @return 菜单列表 + */ + public List selectMenuTreeByUserId(Long userId); + + /** + * 根据角色ID查询菜单树信息 + * + * @param roleId 角色ID + * @return 选中菜单列表 + */ + public List selectMenuListByRoleId(Long roleId); + + /** + * 构建前端路由所需要的菜单 + * + * @param menus 菜单列表 + * @return 路由列表 + */ + public List buildMenus(List menus); + + /** + * 构建前端所需要树结构 + * + * @param menus 菜单列表 + * @return 树结构列表 + */ + public List buildMenuTree(List menus); + + /** + * 构建前端所需要下拉树结构 + * + * @param menus 菜单列表 + * @return 下拉树结构列表 + */ + public List buildMenuTreeSelect(List menus); + + + + /** + * 是否存在菜单子节点 + * + * @param menuId 菜单ID + * @return 结果 true 存在 false 不存在 + */ + public boolean hasChildByMenuId(Long menuId); + + /** + * 查询菜单是否存在角色 + * + * @param menuId 菜单ID + * @return 结果 true 存在 false 不存在 + */ + public boolean checkMenuExistRole(Long menuId); + + + + /** + * 校验菜单名称是否唯一 + * + * @param menu 菜单信息 + * @return 结果 + */ + public boolean checkMenuNameUnique(SysMenu menu); +} diff --git a/dragon-system-server/src/main/java/com/dragon/system/server/service/impl/SysMenuServicePlusImpl.java b/dragon-system-server/src/main/java/com/dragon/system/server/service/impl/SysMenuServicePlusImpl.java new file mode 100644 index 0000000..da6cd47 --- /dev/null +++ b/dragon-system-server/src/main/java/com/dragon/system/server/service/impl/SysMenuServicePlusImpl.java @@ -0,0 +1,481 @@ +package com.dragon.system.server.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dragon.common.core.constant.Constants; +import com.dragon.common.core.constant.UserConstants; +import com.dragon.common.core.utils.StringUtils; +import com.dragon.common.security.utils.SecurityUtils; +import com.dragon.system.common.domain.SysMenu; +import com.dragon.system.common.domain.SysRole; +import com.dragon.system.common.domain.SysUser; +import com.dragon.system.common.domain.vo.MetaVo; +import com.dragon.system.common.domain.vo.RouterVo; +import com.dragon.system.common.domain.vo.TreeSelect; +import com.dragon.system.server.mapper.SysMenuMapper; +import com.dragon.system.server.mapper.SysMenuPlusMapper; +import com.dragon.system.server.mapper.SysRoleMapper; +import com.dragon.system.server.mapper.SysRoleMenuMapper; +import com.dragon.system.server.service.ISysMenuPlusService; +import com.dragon.system.server.service.ISysMenuService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 菜单 业务层处理 + * + * @author dragon + */ +@Service +public class SysMenuServicePlusImpl extends ServiceImpl implements ISysMenuPlusService { + public static final String PREMISSION_STRING = "perms[\"{0}\"]"; + + @Autowired + private SysMenuPlusMapper menuMapper; + + @Autowired + private SysRoleMapper roleMapper; + + @Autowired + private SysRoleMenuMapper roleMenuMapper; + + /** + * 根据用户查询系统菜单列表 + * + * @param userId 用户ID + * @return 菜单列表 + */ + @Override + public List selectMenuList(Long userId) { + return selectMenuList(new SysMenu(), userId); + } + + /** + * 查询系统菜单列表 + * + * @param menu 菜单信息 + * @return 菜单列表 + */ + @Override + public List selectMenuList(SysMenu menu, Long userId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (StringUtils.isNotEmpty(menu.getMenuName())){ + queryWrapper.like(SysMenu::getMenuName,menu.getMenuName()); + }if (StringUtils.isNotEmpty(menu.getVisible())){ + queryWrapper.like(SysMenu::getVisible,menu.getVisible()); + }if (StringUtils.isNotEmpty(menu.getStatus())){ + queryWrapper.like(SysMenu::getStatus,menu.getStatus()); + } + queryWrapper.orderByAsc(SysMenu::getParentId,SysMenu::getOrderNum); + List menuList = null; + // 管理员显示所有菜单信息 + if (SysUser.isAdmin(userId)) { + + menuList = menuMapper.selectList(queryWrapper); + } else { + menu.getParams().put("userId", userId); + menuList = menuMapper.selectList(queryWrapper); + } + return menuList; + } + + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * @return 权限列表 + */ + @Override + public Set selectMenuPermsByUserId(Long userId) { + List perms = menuMapper.selectMenuPermsByUserId(userId); + Set permsSet = new HashSet<>(); + for (String perm : perms) { + if (StringUtils.isNotEmpty(perm)) { + permsSet.addAll(Arrays.asList(perm.trim().split(","))); + } + } + return permsSet; + } + + /** + * 根据角色ID查询权限 + * + * @param roleId 角色ID + * @return 权限列表 + */ + @Override + public Set selectMenuPermsByRoleId(Long roleId) { + List perms = menuMapper.selectMenuPermsByRoleId(roleId); + Set permsSet = new HashSet<>(); + for (String perm : perms) { + if (StringUtils.isNotEmpty(perm)) { + permsSet.addAll(Arrays.asList(perm.trim().split(","))); + } + } + return permsSet; + } + + /** + * 根据用户ID查询菜单 + * + * @param userId 用户名称 + * @return 菜单列表 + */ + @Override + public List selectMenuTreeByUserId(Long userId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + ArrayList strings = new ArrayList<>(); + Collections.addAll(strings,"M","C"); + queryWrapper.in(SysMenu::getMenuType,strings); + queryWrapper.eq(SysMenu::getStatus,0); + queryWrapper.orderByAsc(SysMenu::getParentId,SysMenu::getOrderNum); + List menus = null; + if (SecurityUtils.isAdmin(userId)) { + menus = menuMapper.selectList(queryWrapper); + } else { + menus = menuMapper.selectMenuTreeByUserId(userId); + } + return getChildPerms(menus, 0); + } + + /** + * 根据角色ID查询菜单树信息 + * + * @param roleId 角色ID + * @return 选中菜单列表 + */ + @Override + public List selectMenuListByRoleId(Long roleId) { + SysRole role = roleMapper.selectRoleById(roleId); + return menuMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly()); + } + + /** + * 构建前端路由所需要的菜单 + * + * @param menus 菜单列表 + * @return 路由列表 + */ + @Override + public List buildMenus(List menus) { + List routers = new LinkedList(); + for (SysMenu menu : menus) { + RouterVo router = new RouterVo(); + router.setHidden("1".equals(menu.getVisible())); + router.setName(getRouteName(menu)); + router.setPath(getRouterPath(menu)); + router.setComponent(getComponent(menu)); + router.setQuery(menu.getQuery()); + router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); + List cMenus = menu.getChildren(); + if (StringUtils.isNotEmpty(cMenus) && UserConstants.TYPE_DIR.equals(menu.getMenuType())) { + router.setAlwaysShow(true); + router.setRedirect("noRedirect"); + router.setChildren(buildMenus(cMenus)); + } else if (isMenuFrame(menu)) { + router.setMeta(null); + List childrenList = new ArrayList(); + RouterVo children = new RouterVo(); + children.setPath(menu.getPath()); + children.setComponent(menu.getComponent()); + children.setName(StringUtils.capitalize(menu.getPath())); + children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); + children.setQuery(menu.getQuery()); + childrenList.add(children); + router.setChildren(childrenList); + } else if (menu.getParentId().intValue() == 0 && isInnerLink(menu)) { + router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon())); + router.setPath("/"); + List childrenList = new ArrayList(); + RouterVo children = new RouterVo(); + String routerPath = innerLinkReplaceEach(menu.getPath()); + children.setPath(routerPath); + children.setComponent(UserConstants.INNER_LINK); + children.setName(StringUtils.capitalize(routerPath)); + children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), menu.getPath())); + childrenList.add(children); + router.setChildren(childrenList); + } + routers.add(router); + } + return routers; + } + + /** + * 构建前端所需要树结构 + * + * @param menus 菜单列表 + * @return 树结构列表 + */ + @Override + public List buildMenuTree(List menus) { + List returnList = new ArrayList(); + List tempList = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList()); + for (Iterator iterator = menus.iterator(); iterator.hasNext(); ) { + SysMenu menu = (SysMenu) iterator.next(); + // 如果是顶级节点, 遍历该父节点的所有子节点 + if (!tempList.contains(menu.getParentId())) { + recursionFn(menus, menu); + returnList.add(menu); + } + } + if (returnList.isEmpty()) { + returnList = menus; + } + return returnList; + } + + /** + * 构建前端所需要下拉树结构 + * + * @param menus 菜单列表 + * @return 下拉树结构列表 + */ + @Override + public List buildMenuTreeSelect(List menus) { + List menuTrees = buildMenuTree(menus); + return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + + + /** + * 是否存在菜单子节点 + * + * @param menuId 菜单ID + * @return 结果 + */ + @Override + public boolean hasChildByMenuId(Long menuId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (menuId!=null && !menuId.equals("")){ + queryWrapper.eq(SysMenu::getParentId,menuId); + } + Long result = menuMapper.selectCount(queryWrapper); + return result > 0; + } + + /** + * 查询菜单使用数量 + * + * @param menuId 菜单ID + * @return 结果 + */ + @Override + public boolean checkMenuExistRole(Long menuId) { + int result = roleMenuMapper.checkMenuExistRole(menuId); + return result > 0; + } + + /** + * 新增保存菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ +// @Override +// public int insertMenu(SysMenu menu) { +// return menuMapper.insertMenu(menu); +// } + + /** + * 修改保存菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + + + /** + * 删除菜单管理信息 + * + * @param menuId 菜单ID + * @return 结果 + */ +// @Override +// public int deleteMenuById(Long menuId) { +// return menuMapper.deleteMenuById(menuId); +// } + + /** + * 校验菜单名称是否唯一 + * + * @param menu 菜单信息 + * @return 结果 + */ + @Override + public boolean checkMenuNameUnique(SysMenu menu) { + Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (StringUtils.isNotEmpty(menu.getMenuName())){ + queryWrapper.eq(SysMenu::getMenuName,menu.getMenuName()); + }if (menu.getParentId()!=null && !menu.getParentId().equals("")){ + queryWrapper.eq(SysMenu::getParentId,menu.getParentId()); + } + SysMenu info = menuMapper.selectOne(queryWrapper); + if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 获取路由名称 + * + * @param menu 菜单信息 + * @return 路由名称 + */ + public String getRouteName(SysMenu menu) { + String routerName = StringUtils.capitalize(menu.getPath()); + // 非外链并且是一级目录(类型为目录) + if (isMenuFrame(menu)) { + routerName = StringUtils.EMPTY; + } + return routerName; + } + + /** + * 获取路由地址 + * + * @param menu 菜单信息 + * @return 路由地址 + */ + public String getRouterPath(SysMenu menu) { + String routerPath = menu.getPath(); + // 内链打开外网方式 + if (menu.getParentId().intValue() != 0 && isInnerLink(menu)) { + routerPath = innerLinkReplaceEach(routerPath); + } + // 非外链并且是一级目录(类型为目录) + if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType()) + && UserConstants.NO_FRAME.equals(menu.getIsFrame())) { + routerPath = "/" + menu.getPath(); + } + // 非外链并且是一级目录(类型为菜单) + else if (isMenuFrame(menu)) { + routerPath = "/"; + } + return routerPath; + } + + /** + * 获取组件信息 + * + * @param menu 菜单信息 + * @return 组件信息 + */ + public String getComponent(SysMenu menu) { + String component = UserConstants.LAYOUT; + if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu)) { + component = menu.getComponent(); + } else if (StringUtils.isEmpty(menu.getComponent()) && menu.getParentId().intValue() != 0 && isInnerLink(menu)) { + component = UserConstants.INNER_LINK; + } else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu)) { + component = UserConstants.PARENT_VIEW; + } + return component; + } + + /** + * 是否为菜单内部跳转 + * + * @param menu 菜单信息 + * @return 结果 + */ + public boolean isMenuFrame(SysMenu menu) { + return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType()) + && menu.getIsFrame().equals(UserConstants.NO_FRAME); + } + + /** + * 是否为内链组件 + * + * @param menu 菜单信息 + * @return 结果 + */ + public boolean isInnerLink(SysMenu menu) { + return menu.getIsFrame().equals(UserConstants.NO_FRAME) && StringUtils.ishttp(menu.getPath()); + } + + /** + * 是否为parent_view组件 + * + * @param menu 菜单信息 + * @return 结果 + */ + public boolean isParentView(SysMenu menu) { + return menu.getParentId().intValue() != 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType()); + } + + /** + * 根据父节点的ID获取所有子节点 + * + * @param list 分类表 + * @param parentId 传入的父节点ID + * @return String + */ + public List getChildPerms(List list, int parentId) { + List returnList = new ArrayList(); + for (Iterator iterator = list.iterator(); iterator.hasNext(); ) { + SysMenu t = (SysMenu) iterator.next(); + // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点 + if (t.getParentId() == parentId) { + recursionFn(list, t); + returnList.add(t); + } + } + return returnList; + } + + /** + * 递归列表 + * + * @param list 分类表 + * @param t 子节点 + */ + private void recursionFn(List list, SysMenu t) { + // 得到子节点列表 + List childList = getChildList(list, t); + t.setChildren(childList); + for (SysMenu tChild : childList) { + if (hasChild(list, tChild)) { + recursionFn(list, tChild); + } + } + } + + /** + * 得到子节点列表 + */ + private List getChildList(List list, SysMenu t) { + List tlist = new ArrayList(); + Iterator it = list.iterator(); + while (it.hasNext()) { + SysMenu n = (SysMenu) it.next(); + if (n.getParentId().longValue() == t.getMenuId().longValue()) { + tlist.add(n); + } + } + return tlist; + } + + /** + * 判断是否有子节点 + */ + private boolean hasChild(List list, SysMenu t) { + return getChildList(list, t).size() > 0; + } + + /** + * 内链域名特殊字符替换 + * + * @return 替换后的内链域名 + */ + public String innerLinkReplaceEach(String path) { + return StringUtils.replaceEach(path, new String[]{Constants.HTTP, Constants.HTTPS, Constants.WWW, ".", ":"}, + new String[]{"", "", "", "/", "/"}); + } +} diff --git a/dragon-system-server/src/main/resources/mapper/system/SysMenuPlusMapper.xml b/dragon-system-server/src/main/resources/mapper/system/SysMenuPlusMapper.xml new file mode 100644 index 0000000..f2e3810 --- /dev/null +++ b/dragon-system-server/src/main/resources/mapper/system/SysMenuPlusMapper.xml @@ -0,0 +1,62 @@ + + + + + + + + + + +