作者 若依

!200 update ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java.

Merge pull request !200 from yvan7123/N/A
1 -package com.ruoyi.system.service.impl;  
2 -  
3 -import java.util.ArrayList;  
4 -import java.util.Arrays;  
5 -import java.util.HashSet;  
6 -import java.util.Iterator;  
7 -import java.util.LinkedList;  
8 -import java.util.List;  
9 -import java.util.Set;  
10 -import java.util.stream.Collectors;  
11 -import org.springframework.beans.factory.annotation.Autowired;  
12 -import org.springframework.stereotype.Service;  
13 -import com.ruoyi.common.constant.UserConstants;  
14 -import com.ruoyi.common.core.domain.TreeSelect;  
15 -import com.ruoyi.common.core.domain.entity.SysMenu;  
16 -import com.ruoyi.common.core.domain.entity.SysRole;  
17 -import com.ruoyi.common.core.domain.entity.SysUser;  
18 -import com.ruoyi.common.utils.SecurityUtils;  
19 -import com.ruoyi.common.utils.StringUtils;  
20 -import com.ruoyi.system.domain.vo.MetaVo;  
21 -import com.ruoyi.system.domain.vo.RouterVo;  
22 -import com.ruoyi.system.mapper.SysMenuMapper;  
23 -import com.ruoyi.system.mapper.SysRoleMapper;  
24 -import com.ruoyi.system.mapper.SysRoleMenuMapper;  
25 -import com.ruoyi.system.service.ISysMenuService;  
26 -  
27 -/**  
28 - * 菜单 业务层处理  
29 - *  
30 - * @author ruoyi  
31 - */  
32 -@Service  
33 -public class SysMenuServiceImpl implements ISysMenuService  
34 -{  
35 - public static final String PREMISSION_STRING = "perms[\"{0}\"]";  
36 -  
37 - @Autowired  
38 - private SysMenuMapper menuMapper;  
39 -  
40 - @Autowired  
41 - private SysRoleMapper roleMapper;  
42 -  
43 - @Autowired  
44 - private SysRoleMenuMapper roleMenuMapper;  
45 -  
46 - /**  
47 - * 根据用户查询系统菜单列表  
48 - *  
49 - * @param userId 用户ID  
50 - * @return 菜单列表  
51 - */  
52 - @Override  
53 - public List<SysMenu> selectMenuList(Long userId)  
54 - {  
55 - return selectMenuList(new SysMenu(), userId);  
56 - }  
57 -  
58 - /**  
59 - * 查询系统菜单列表  
60 - *  
61 - * @param menu 菜单信息  
62 - * @return 菜单列表  
63 - */  
64 - @Override  
65 - public List<SysMenu> selectMenuList(SysMenu menu, Long userId)  
66 - {  
67 - List<SysMenu> menuList = null;  
68 - // 管理员显示所有菜单信息  
69 - if (SysUser.isAdmin(userId))  
70 - {  
71 - menuList = menuMapper.selectMenuList(menu);  
72 - }  
73 - else  
74 - {  
75 - menu.getParams().put("userId", userId);  
76 - menuList = menuMapper.selectMenuListByUserId(menu);  
77 - }  
78 - return menuList;  
79 - }  
80 -  
81 - /**  
82 - * 根据用户ID查询权限  
83 - *  
84 - * @param userId 用户ID  
85 - * @return 权限列表  
86 - */  
87 - @Override  
88 - public Set<String> selectMenuPermsByUserId(Long userId)  
89 - {  
90 - List<String> perms = menuMapper.selectMenuPermsByUserId(userId);  
91 - Set<String> permsSet = new HashSet<>();  
92 - for (String perm : perms)  
93 - {  
94 - if (StringUtils.isNotEmpty(perm))  
95 - {  
96 - permsSet.addAll(Arrays.asList(perm.trim().split(",")));  
97 - }  
98 - }  
99 - return permsSet;  
100 - }  
101 -  
102 - /**  
103 - * 根据用户ID查询菜单  
104 - *  
105 - * @param userId 用户名称  
106 - * @return 菜单列表  
107 - */  
108 - @Override  
109 - public List<SysMenu> selectMenuTreeByUserId(Long userId)  
110 - {  
111 - List<SysMenu> menus = null;  
112 - if (SecurityUtils.isAdmin(userId))  
113 - {  
114 - menus = menuMapper.selectMenuTreeAll();  
115 - }  
116 - else  
117 - {  
118 - menus = menuMapper.selectMenuTreeByUserId(userId);  
119 - }  
120 - return getChildPerms(menus, 0);  
121 - }  
122 -  
123 - /**  
124 - * 根据角色ID查询菜单树信息  
125 - *  
126 - * @param roleId 角色ID  
127 - * @return 选中菜单列表  
128 - */  
129 - @Override  
130 - public List<Integer> selectMenuListByRoleId(Long roleId)  
131 - {  
132 - SysRole role = roleMapper.selectRoleById(roleId);  
133 - return menuMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly());  
134 - }  
135 -  
136 - /**  
137 - * 构建前端路由所需要的菜单  
138 - *  
139 - * @param menus 菜单列表  
140 - * @return 路由列表  
141 - */  
142 - @Override  
143 - public List<RouterVo> buildMenus(List<SysMenu> menus)  
144 - {  
145 - List<RouterVo> routers = new LinkedList<RouterVo>();  
146 - for (SysMenu menu : menus)  
147 - {  
148 - RouterVo router = new RouterVo();  
149 - router.setHidden("1".equals(menu.getVisible()));  
150 - router.setName(getRouteName(menu));  
151 - router.setPath(getRouterPath(menu));  
152 - router.setComponent(getComponent(menu));  
153 - router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache())));  
154 - List<SysMenu> cMenus = menu.getChildren();  
155 - if (!cMenus.isEmpty() && cMenus.size() > 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType()))  
156 - {  
157 - router.setAlwaysShow(true);  
158 - router.setRedirect("noRedirect");  
159 - router.setChildren(buildMenus(cMenus));  
160 - }  
161 - else if (isMeunFrame(menu))  
162 - {  
163 - List<RouterVo> childrenList = new ArrayList<RouterVo>();  
164 - RouterVo children = new RouterVo();  
165 - children.setPath(menu.getPath());  
166 - children.setComponent(menu.getComponent());  
167 - children.setName(StringUtils.capitalize(menu.getPath()));  
168 - children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache())));  
169 - childrenList.add(children);  
170 - router.setChildren(childrenList);  
171 - }  
172 - routers.add(router);  
173 - }  
174 - return routers;  
175 - }  
176 -  
177 - /**  
178 - * 构建前端所需要树结构  
179 - *  
180 - * @param menus 菜单列表  
181 - * @return 树结构列表  
182 - */  
183 - @Override  
184 - public List<SysMenu> buildMenuTree(List<SysMenu> menus)  
185 - {  
186 - List<SysMenu> returnList = new ArrayList<SysMenu>();  
187 - List<Long> tempList = new ArrayList<Long>();  
188 - for (SysMenu dept : menus)  
189 - {  
190 - tempList.add(dept.getMenuId());  
191 - }  
192 - for (Iterator<SysMenu> iterator = menus.iterator(); iterator.hasNext();)  
193 - {  
194 - SysMenu menu = (SysMenu) iterator.next();  
195 - // 如果是顶级节点, 遍历该父节点的所有子节点  
196 - if (!tempList.contains(menu.getParentId()))  
197 - {  
198 - recursionFn(menus, menu);  
199 - returnList.add(menu);  
200 - }  
201 - }  
202 - if (returnList.isEmpty())  
203 - {  
204 - returnList = menus;  
205 - }  
206 - return returnList;  
207 - }  
208 -  
209 - /**  
210 - * 构建前端所需要下拉树结构  
211 - *  
212 - * @param menus 菜单列表  
213 - * @return 下拉树结构列表  
214 - */  
215 - @Override  
216 - public List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus)  
217 - {  
218 - List<SysMenu> menuTrees = buildMenuTree(menus);  
219 - return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList());  
220 - }  
221 -  
222 - /**  
223 - * 根据菜单ID查询信息  
224 - *  
225 - * @param menuId 菜单ID  
226 - * @return 菜单信息  
227 - */  
228 - @Override  
229 - public SysMenu selectMenuById(Long menuId)  
230 - {  
231 - return menuMapper.selectMenuById(menuId);  
232 - }  
233 -  
234 - /**  
235 - * 是否存在菜单子节点  
236 - *  
237 - * @param menuId 菜单ID  
238 - * @return 结果  
239 - */  
240 - @Override  
241 - public boolean hasChildByMenuId(Long menuId)  
242 - {  
243 - int result = menuMapper.hasChildByMenuId(menuId);  
244 - return result > 0 ? true : false;  
245 - }  
246 -  
247 - /**  
248 - * 查询菜单使用数量  
249 - *  
250 - * @param menuId 菜单ID  
251 - * @return 结果  
252 - */  
253 - @Override  
254 - public boolean checkMenuExistRole(Long menuId)  
255 - {  
256 - int result = roleMenuMapper.checkMenuExistRole(menuId);  
257 - return result > 0 ? true : false;  
258 - }  
259 -  
260 - /**  
261 - * 新增保存菜单信息  
262 - *  
263 - * @param menu 菜单信息  
264 - * @return 结果  
265 - */  
266 - @Override  
267 - public int insertMenu(SysMenu menu)  
268 - {  
269 - return menuMapper.insertMenu(menu);  
270 - }  
271 -  
272 - /**  
273 - * 修改保存菜单信息  
274 - *  
275 - * @param menu 菜单信息  
276 - * @return 结果  
277 - */  
278 - @Override  
279 - public int updateMenu(SysMenu menu)  
280 - {  
281 - return menuMapper.updateMenu(menu);  
282 - }  
283 -  
284 - /**  
285 - * 删除菜单管理信息  
286 - *  
287 - * @param menuId 菜单ID  
288 - * @return 结果  
289 - */  
290 - @Override  
291 - public int deleteMenuById(Long menuId)  
292 - {  
293 - return menuMapper.deleteMenuById(menuId);  
294 - }  
295 -  
296 - /**  
297 - * 校验菜单名称是否唯一  
298 - *  
299 - * @param menu 菜单信息  
300 - * @return 结果  
301 - */  
302 - @Override  
303 - public String checkMenuNameUnique(SysMenu menu)  
304 - {  
305 - Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId();  
306 - SysMenu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId());  
307 - if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue())  
308 - {  
309 - return UserConstants.NOT_UNIQUE;  
310 - }  
311 - return UserConstants.UNIQUE;  
312 - }  
313 -  
314 - /**  
315 - * 获取路由名称  
316 - *  
317 - * @param menu 菜单信息  
318 - * @return 路由名称  
319 - */  
320 - public String getRouteName(SysMenu menu)  
321 - {  
322 - String routerName = StringUtils.capitalize(menu.getPath());  
323 - // 非外链并且是一级目录(类型为目录)  
324 - if (isMeunFrame(menu))  
325 - {  
326 - routerName = StringUtils.EMPTY;  
327 - }  
328 - return routerName;  
329 - }  
330 -  
331 - /**  
332 - * 获取路由地址  
333 - *  
334 - * @param menu 菜单信息  
335 - * @return 路由地址  
336 - */  
337 - public String getRouterPath(SysMenu menu)  
338 - {  
339 - String routerPath = menu.getPath();  
340 - // 非外链并且是一级目录(类型为目录)  
341 - if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType())  
342 - && UserConstants.NO_FRAME.equals(menu.getIsFrame()))  
343 - {  
344 - routerPath = "/" + menu.getPath();  
345 - }  
346 - // 非外链并且是一级目录(类型为菜单)  
347 - else if (isMeunFrame(menu))  
348 - {  
349 - routerPath = "/";  
350 - }  
351 - return routerPath;  
352 - }  
353 -  
354 - /**  
355 - * 获取组件信息  
356 - *  
357 - * @param menu 菜单信息  
358 - * @return 组件信息  
359 - */  
360 - public String getComponent(SysMenu menu)  
361 - {  
362 - String component = UserConstants.LAYOUT;  
363 - if (StringUtils.isNotEmpty(menu.getComponent()) && !isMeunFrame(menu))  
364 - {  
365 - component = menu.getComponent();  
366 - }  
367 - else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu))  
368 - {  
369 - component = UserConstants.PARENT_VIEW;  
370 - }  
371 - return component;  
372 - }  
373 -  
374 - /**  
375 - * 是否为菜单内部跳转  
376 - *  
377 - * @param menu 菜单信息  
378 - * @return 结果  
379 - */  
380 - public boolean isMeunFrame(SysMenu menu)  
381 - {  
382 - return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType())  
383 - && menu.getIsFrame().equals(UserConstants.NO_FRAME);  
384 - }  
385 -  
386 - /**  
387 - * 是否为parent_view组件  
388 - *  
389 - * @param menu 菜单信息  
390 - * @return 结果  
391 - */  
392 - public boolean isParentView(SysMenu menu)  
393 - {  
394 - return menu.getParentId().intValue() != 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType());  
395 - }  
396 -  
397 - /**  
398 - * 根据父节点的ID获取所有子节点  
399 - *  
400 - * @param list 分类表  
401 - * @param parentId 传入的父节点ID  
402 - * @return String  
403 - */  
404 - public List<SysMenu> getChildPerms(List<SysMenu> list, int parentId)  
405 - {  
406 - List<SysMenu> returnList = new ArrayList<SysMenu>();  
407 - for (Iterator<SysMenu> iterator = list.iterator(); iterator.hasNext();)  
408 - {  
409 - SysMenu t = (SysMenu) iterator.next();  
410 - // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点  
411 - if (t.getParentId() == parentId)  
412 - {  
413 - recursionFn(list, t);  
414 - returnList.add(t);  
415 - }  
416 - }  
417 - return returnList;  
418 - }  
419 -  
420 - /**  
421 - * 递归列表  
422 - *  
423 - * @param list  
424 - * @param t  
425 - */  
426 - private void recursionFn(List<SysMenu> list, SysMenu t)  
427 - {  
428 - // 得到子节点列表  
429 - List<SysMenu> childList = getChildList(list, t);  
430 - t.setChildren(childList);  
431 - for (SysMenu tChild : childList)  
432 - {  
433 - if (hasChild(list, tChild))  
434 - {  
435 - recursionFn(list, tChild);  
436 - }  
437 - }  
438 - }  
439 -  
440 - /**  
441 - * 得到子节点列表  
442 - */  
443 - private List<SysMenu> getChildList(List<SysMenu> list, SysMenu t)  
444 - {  
445 - List<SysMenu> tlist = new ArrayList<SysMenu>();  
446 - Iterator<SysMenu> it = list.iterator();  
447 - while (it.hasNext())  
448 - {  
449 - SysMenu n = (SysMenu) it.next();  
450 - if (n.getParentId().longValue() == t.getMenuId().longValue())  
451 - {  
452 - tlist.add(n);  
453 - }  
454 - }  
455 - return tlist;  
456 - }  
457 -  
458 - /**  
459 - * 判断是否有子节点  
460 - */  
461 - private boolean hasChild(List<SysMenu> list, SysMenu t)  
462 - {  
463 - return getChildList(list, t).size() > 0 ? true : false;  
464 - }  
465 -} 1 +package com.ruoyi.system.service.impl;
  2 +
  3 +import java.util.ArrayList;
  4 +import java.util.Arrays;
  5 +import java.util.HashSet;
  6 +import java.util.Iterator;
  7 +import java.util.LinkedList;
  8 +import java.util.List;
  9 +import java.util.Set;
  10 +import java.util.stream.Collectors;
  11 +import org.springframework.beans.factory.annotation.Autowired;
  12 +import org.springframework.stereotype.Service;
  13 +import com.ruoyi.common.constant.UserConstants;
  14 +import com.ruoyi.common.core.domain.TreeSelect;
  15 +import com.ruoyi.common.core.domain.entity.SysMenu;
  16 +import com.ruoyi.common.core.domain.entity.SysRole;
  17 +import com.ruoyi.common.core.domain.entity.SysUser;
  18 +import com.ruoyi.common.utils.SecurityUtils;
  19 +import com.ruoyi.common.utils.StringUtils;
  20 +import com.ruoyi.system.domain.vo.MetaVo;
  21 +import com.ruoyi.system.domain.vo.RouterVo;
  22 +import com.ruoyi.system.mapper.SysMenuMapper;
  23 +import com.ruoyi.system.mapper.SysRoleMapper;
  24 +import com.ruoyi.system.mapper.SysRoleMenuMapper;
  25 +import com.ruoyi.system.service.ISysMenuService;
  26 +
  27 +/**
  28 + * 菜单 业务层处理
  29 + *
  30 + * @author ruoyi
  31 + */
  32 +@Service
  33 +public class SysMenuServiceImpl implements ISysMenuService
  34 +{
  35 + public static final String PREMISSION_STRING = "perms[\"{0}\"]";
  36 +
  37 + @Autowired
  38 + private SysMenuMapper menuMapper;
  39 +
  40 + @Autowired
  41 + private SysRoleMapper roleMapper;
  42 +
  43 + @Autowired
  44 + private SysRoleMenuMapper roleMenuMapper;
  45 +
  46 + /**
  47 + * 根据用户查询系统菜单列表
  48 + *
  49 + * @param userId 用户ID
  50 + * @return 菜单列表
  51 + */
  52 + @Override
  53 + public List<SysMenu> selectMenuList(Long userId)
  54 + {
  55 + return selectMenuList(new SysMenu(), userId);
  56 + }
  57 +
  58 + /**
  59 + * 查询系统菜单列表
  60 + *
  61 + * @param menu 菜单信息
  62 + * @return 菜单列表
  63 + */
  64 + @Override
  65 + public List<SysMenu> selectMenuList(SysMenu menu, Long userId)
  66 + {
  67 + List<SysMenu> menuList = null;
  68 + // 管理员显示所有菜单信息
  69 + if (SysUser.isAdmin(userId))
  70 + {
  71 + menuList = menuMapper.selectMenuList(menu);
  72 + }
  73 + else
  74 + {
  75 + menu.getParams().put("userId", userId);
  76 + menuList = menuMapper.selectMenuListByUserId(menu);
  77 + }
  78 + return menuList;
  79 + }
  80 +
  81 + /**
  82 + * 根据用户ID查询权限
  83 + *
  84 + * @param userId 用户ID
  85 + * @return 权限列表
  86 + */
  87 + @Override
  88 + public Set<String> selectMenuPermsByUserId(Long userId)
  89 + {
  90 + List<String> perms = menuMapper.selectMenuPermsByUserId(userId);
  91 + Set<String> permsSet = new HashSet<>();
  92 + for (String perm : perms)
  93 + {
  94 + if (StringUtils.isNotEmpty(perm))
  95 + {
  96 + permsSet.addAll(Arrays.asList(perm.trim().split(",")));
  97 + }
  98 + }
  99 + return permsSet;
  100 + }
  101 +
  102 + /**
  103 + * 根据用户ID查询菜单
  104 + *
  105 + * @param userId 用户名称
  106 + * @return 菜单列表
  107 + */
  108 + @Override
  109 + public List<SysMenu> selectMenuTreeByUserId(Long userId)
  110 + {
  111 + List<SysMenu> menus = null;
  112 + if (SecurityUtils.isAdmin(userId))
  113 + {
  114 + menus = menuMapper.selectMenuTreeAll();
  115 + }
  116 + else
  117 + {
  118 + menus = menuMapper.selectMenuTreeByUserId(userId);
  119 + }
  120 + return getChildPerms(menus, 0);
  121 + }
  122 +
  123 + /**
  124 + * 根据角色ID查询菜单树信息
  125 + *
  126 + * @param roleId 角色ID
  127 + * @return 选中菜单列表
  128 + */
  129 + @Override
  130 + public List<Integer> selectMenuListByRoleId(Long roleId)
  131 + {
  132 + SysRole role = roleMapper.selectRoleById(roleId);
  133 + return menuMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly());
  134 + }
  135 +
  136 + /**
  137 + * 构建前端路由所需要的菜单
  138 + *
  139 + * @param menus 菜单列表
  140 + * @return 路由列表
  141 + */
  142 + @Override
  143 + public List<RouterVo> buildMenus(List<SysMenu> menus)
  144 + {
  145 + List<RouterVo> routers = new LinkedList<RouterVo>();
  146 + for (SysMenu menu : menus)
  147 + {
  148 + RouterVo router = new RouterVo();
  149 + router.setHidden("1".equals(menu.getVisible()));
  150 + router.setName(getRouteName(menu));
  151 + router.setPath(getRouterPath(menu));
  152 + router.setComponent(getComponent(menu));
  153 + router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache())));
  154 + List<SysMenu> cMenus = menu.getChildren();
  155 + if (!cMenus.isEmpty() && cMenus.size() > 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType()))
  156 + {
  157 + router.setAlwaysShow(true);
  158 + router.setRedirect("noRedirect");
  159 + router.setChildren(buildMenus(cMenus));
  160 + }
  161 + else if (isMenuFrame(menu))
  162 + {
  163 + List<RouterVo> childrenList = new ArrayList<RouterVo>();
  164 + RouterVo children = new RouterVo();
  165 + children.setPath(menu.getPath());
  166 + children.setComponent(menu.getComponent());
  167 + children.setName(StringUtils.capitalize(menu.getPath()));
  168 + children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache())));
  169 + childrenList.add(children);
  170 + router.setChildren(childrenList);
  171 + }
  172 + routers.add(router);
  173 + }
  174 + return routers;
  175 + }
  176 +
  177 + /**
  178 + * 构建前端所需要树结构
  179 + *
  180 + * @param menus 菜单列表
  181 + * @return 树结构列表
  182 + */
  183 + @Override
  184 + public List<SysMenu> buildMenuTree(List<SysMenu> menus)
  185 + {
  186 + List<SysMenu> returnList = new ArrayList<SysMenu>();
  187 + List<Long> tempList = new ArrayList<Long>();
  188 + for (SysMenu dept : menus)
  189 + {
  190 + tempList.add(dept.getMenuId());
  191 + }
  192 + for (Iterator<SysMenu> iterator = menus.iterator(); iterator.hasNext();)
  193 + {
  194 + SysMenu menu = (SysMenu) iterator.next();
  195 + // 如果是顶级节点, 遍历该父节点的所有子节点
  196 + if (!tempList.contains(menu.getParentId()))
  197 + {
  198 + recursionFn(menus, menu);
  199 + returnList.add(menu);
  200 + }
  201 + }
  202 + if (returnList.isEmpty())
  203 + {
  204 + returnList = menus;
  205 + }
  206 + return returnList;
  207 + }
  208 +
  209 + /**
  210 + * 构建前端所需要下拉树结构
  211 + *
  212 + * @param menus 菜单列表
  213 + * @return 下拉树结构列表
  214 + */
  215 + @Override
  216 + public List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus)
  217 + {
  218 + List<SysMenu> menuTrees = buildMenuTree(menus);
  219 + return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
  220 + }
  221 +
  222 + /**
  223 + * 根据菜单ID查询信息
  224 + *
  225 + * @param menuId 菜单ID
  226 + * @return 菜单信息
  227 + */
  228 + @Override
  229 + public SysMenu selectMenuById(Long menuId)
  230 + {
  231 + return menuMapper.selectMenuById(menuId);
  232 + }
  233 +
  234 + /**
  235 + * 是否存在菜单子节点
  236 + *
  237 + * @param menuId 菜单ID
  238 + * @return 结果
  239 + */
  240 + @Override
  241 + public boolean hasChildByMenuId(Long menuId)
  242 + {
  243 + int result = menuMapper.hasChildByMenuId(menuId);
  244 + return result > 0 ? true : false;
  245 + }
  246 +
  247 + /**
  248 + * 查询菜单使用数量
  249 + *
  250 + * @param menuId 菜单ID
  251 + * @return 结果
  252 + */
  253 + @Override
  254 + public boolean checkMenuExistRole(Long menuId)
  255 + {
  256 + int result = roleMenuMapper.checkMenuExistRole(menuId);
  257 + return result > 0 ? true : false;
  258 + }
  259 +
  260 + /**
  261 + * 新增保存菜单信息
  262 + *
  263 + * @param menu 菜单信息
  264 + * @return 结果
  265 + */
  266 + @Override
  267 + public int insertMenu(SysMenu menu)
  268 + {
  269 + return menuMapper.insertMenu(menu);
  270 + }
  271 +
  272 + /**
  273 + * 修改保存菜单信息
  274 + *
  275 + * @param menu 菜单信息
  276 + * @return 结果
  277 + */
  278 + @Override
  279 + public int updateMenu(SysMenu menu)
  280 + {
  281 + return menuMapper.updateMenu(menu);
  282 + }
  283 +
  284 + /**
  285 + * 删除菜单管理信息
  286 + *
  287 + * @param menuId 菜单ID
  288 + * @return 结果
  289 + */
  290 + @Override
  291 + public int deleteMenuById(Long menuId)
  292 + {
  293 + return menuMapper.deleteMenuById(menuId);
  294 + }
  295 +
  296 + /**
  297 + * 校验菜单名称是否唯一
  298 + *
  299 + * @param menu 菜单信息
  300 + * @return 结果
  301 + */
  302 + @Override
  303 + public String checkMenuNameUnique(SysMenu menu)
  304 + {
  305 + Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId();
  306 + SysMenu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId());
  307 + if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue())
  308 + {
  309 + return UserConstants.NOT_UNIQUE;
  310 + }
  311 + return UserConstants.UNIQUE;
  312 + }
  313 +
  314 + /**
  315 + * 获取路由名称
  316 + *
  317 + * @param menu 菜单信息
  318 + * @return 路由名称
  319 + */
  320 + public String getRouteName(SysMenu menu)
  321 + {
  322 + String routerName = StringUtils.capitalize(menu.getPath());
  323 + // 非外链并且是一级目录(类型为目录)
  324 + if (isMenuFrame(menu))
  325 + {
  326 + routerName = StringUtils.EMPTY;
  327 + }
  328 + return routerName;
  329 + }
  330 +
  331 + /**
  332 + * 获取路由地址
  333 + *
  334 + * @param menu 菜单信息
  335 + * @return 路由地址
  336 + */
  337 + public String getRouterPath(SysMenu menu)
  338 + {
  339 + String routerPath = menu.getPath();
  340 + // 非外链并且是一级目录(类型为目录)
  341 + if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType())
  342 + && UserConstants.NO_FRAME.equals(menu.getIsFrame()))
  343 + {
  344 + routerPath = "/" + menu.getPath();
  345 + }
  346 + // 非外链并且是一级目录(类型为菜单)
  347 + else if (isMenuFrame(menu))
  348 + {
  349 + routerPath = "/";
  350 + }
  351 + return routerPath;
  352 + }
  353 +
  354 + /**
  355 + * 获取组件信息
  356 + *
  357 + * @param menu 菜单信息
  358 + * @return 组件信息
  359 + */
  360 + public String getComponent(SysMenu menu)
  361 + {
  362 + String component = UserConstants.LAYOUT;
  363 + if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu))
  364 + {
  365 + component = menu.getComponent();
  366 + }
  367 + else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu))
  368 + {
  369 + component = UserConstants.PARENT_VIEW;
  370 + }
  371 + return component;
  372 + }
  373 +
  374 + /**
  375 + * 是否为菜单内部跳转
  376 + *
  377 + * @param menu 菜单信息
  378 + * @return 结果
  379 + */
  380 + public boolean isMenuFrame(SysMenu menu)
  381 + {
  382 + return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType())
  383 + && menu.getIsFrame().equals(UserConstants.NO_FRAME);
  384 + }
  385 +
  386 + /**
  387 + * 是否为parent_view组件
  388 + *
  389 + * @param menu 菜单信息
  390 + * @return 结果
  391 + */
  392 + public boolean isParentView(SysMenu menu)
  393 + {
  394 + return menu.getParentId().intValue() != 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType());
  395 + }
  396 +
  397 + /**
  398 + * 根据父节点的ID获取所有子节点
  399 + *
  400 + * @param list 分类表
  401 + * @param parentId 传入的父节点ID
  402 + * @return String
  403 + */
  404 + public List<SysMenu> getChildPerms(List<SysMenu> list, int parentId)
  405 + {
  406 + List<SysMenu> returnList = new ArrayList<SysMenu>();
  407 + for (Iterator<SysMenu> iterator = list.iterator(); iterator.hasNext();)
  408 + {
  409 + SysMenu t = (SysMenu) iterator.next();
  410 + // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
  411 + if (t.getParentId() == parentId)
  412 + {
  413 + recursionFn(list, t);
  414 + returnList.add(t);
  415 + }
  416 + }
  417 + return returnList;
  418 + }
  419 +
  420 + /**
  421 + * 递归列表
  422 + *
  423 + * @param list
  424 + * @param t
  425 + */
  426 + private void recursionFn(List<SysMenu> list, SysMenu t)
  427 + {
  428 + // 得到子节点列表
  429 + List<SysMenu> childList = getChildList(list, t);
  430 + t.setChildren(childList);
  431 + for (SysMenu tChild : childList)
  432 + {
  433 + if (hasChild(list, tChild))
  434 + {
  435 + recursionFn(list, tChild);
  436 + }
  437 + }
  438 + }
  439 +
  440 + /**
  441 + * 得到子节点列表
  442 + */
  443 + private List<SysMenu> getChildList(List<SysMenu> list, SysMenu t)
  444 + {
  445 + List<SysMenu> tlist = new ArrayList<SysMenu>();
  446 + Iterator<SysMenu> it = list.iterator();
  447 + while (it.hasNext())
  448 + {
  449 + SysMenu n = (SysMenu) it.next();
  450 + if (n.getParentId().longValue() == t.getMenuId().longValue())
  451 + {
  452 + tlist.add(n);
  453 + }
  454 + }
  455 + return tlist;
  456 + }
  457 +
  458 + /**
  459 + * 判断是否有子节点
  460 + */
  461 + private boolean hasChild(List<SysMenu> list, SysMenu t)
  462 + {
  463 + return getChildList(list, t).size() > 0 ? true : false;
  464 + }
  465 +}