MenuServiceImpl.java 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. package com.ruoyi.project.system.menu.service;
  2. import java.text.MessageFormat;
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.HashMap;
  6. import java.util.HashSet;
  7. import java.util.LinkedHashMap;
  8. import java.util.LinkedList;
  9. import java.util.List;
  10. import java.util.Map;
  11. import java.util.Set;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.stereotype.Service;
  14. import com.ruoyi.common.constant.UserConstants;
  15. import com.ruoyi.common.utils.StringUtils;
  16. import com.ruoyi.common.utils.TreeUtils;
  17. import com.ruoyi.common.utils.security.ShiroUtils;
  18. import com.ruoyi.project.system.menu.domain.Menu;
  19. import com.ruoyi.project.system.menu.mapper.MenuMapper;
  20. import com.ruoyi.project.system.role.domain.Role;
  21. import com.ruoyi.project.system.role.mapper.RoleMenuMapper;
  22. import com.ruoyi.project.system.user.domain.User;
  23. /**
  24. * 菜单 业务层处理
  25. *
  26. * @author ruoyi
  27. */
  28. @Service
  29. public class MenuServiceImpl implements IMenuService
  30. {
  31. public static final String PREMISSION_STRING = "perms[\"{0}\"]";
  32. @Autowired
  33. private MenuMapper menuMapper;
  34. @Autowired
  35. private RoleMenuMapper roleMenuMapper;
  36. /**
  37. * 根据用户查询菜单
  38. *
  39. * @param userId 用户信息
  40. * @return 菜单列表
  41. */
  42. @Override
  43. public List<Menu> selectMenusByUser(User user)
  44. {
  45. List<Menu> menus = new LinkedList<Menu>();
  46. // 管理员显示所有菜单信息
  47. if (user.isAdmin())
  48. {
  49. menus = menuMapper.selectMenuNormalAll();
  50. }
  51. else
  52. {
  53. menus = menuMapper.selectMenusByUserId(user.getUserId());
  54. }
  55. return TreeUtils.getChildPerms(menus, 0);
  56. }
  57. /**
  58. * 查询菜单集合
  59. *
  60. * @return 所有菜单信息
  61. */
  62. @Override
  63. public List<Menu> selectMenuList(Menu menu)
  64. {
  65. return menuMapper.selectMenuList(menu);
  66. }
  67. /**
  68. * 查询菜单集合
  69. *
  70. * @return 所有菜单信息
  71. */
  72. @Override
  73. public List<Menu> selectMenuAll()
  74. {
  75. return menuMapper.selectMenuAll();
  76. }
  77. /**
  78. * 根据用户ID查询权限
  79. *
  80. * @param userId 用户ID
  81. * @return 权限列表
  82. */
  83. @Override
  84. public Set<String> selectPermsByUserId(Long userId)
  85. {
  86. List<String> perms = menuMapper.selectPermsByUserId(userId);
  87. Set<String> permsSet = new HashSet<>();
  88. for (String perm : perms)
  89. {
  90. if (StringUtils.isNotEmpty(perm))
  91. {
  92. permsSet.addAll(Arrays.asList(perm.trim().split(",")));
  93. }
  94. }
  95. return permsSet;
  96. }
  97. /**
  98. * 根据角色ID查询菜单
  99. *
  100. * @param role 角色对象
  101. * @return 菜单列表
  102. */
  103. @Override
  104. public List<Map<String, Object>> roleMenuTreeData(Role role)
  105. {
  106. Long roleId = role.getRoleId();
  107. List<Map<String, Object>> trees = new ArrayList<Map<String, Object>>();
  108. List<Menu> menuList = menuMapper.selectMenuAll();
  109. if (StringUtils.isNotNull(roleId))
  110. {
  111. List<String> roleMenuList = menuMapper.selectMenuTree(roleId);
  112. trees = getTrees(menuList, true, roleMenuList, true);
  113. }
  114. else
  115. {
  116. trees = getTrees(menuList, false, null, true);
  117. }
  118. return trees;
  119. }
  120. /**
  121. * 查询所有菜单
  122. *
  123. * @return 菜单列表
  124. */
  125. @Override
  126. public List<Map<String, Object>> menuTreeData()
  127. {
  128. List<Map<String, Object>> trees = new ArrayList<Map<String, Object>>();
  129. List<Menu> menuList = menuMapper.selectMenuAll();
  130. trees = getTrees(menuList, false, null, false);
  131. return trees;
  132. }
  133. /**
  134. * 查询系统所有权限
  135. *
  136. * @return 权限列表
  137. */
  138. @Override
  139. public LinkedHashMap<String, String> selectPermsAll()
  140. {
  141. LinkedHashMap<String, String> section = new LinkedHashMap<>();
  142. List<Menu> permissions = menuMapper.selectMenuAll();
  143. if (StringUtils.isNotEmpty(permissions))
  144. {
  145. for (Menu menu : permissions)
  146. {
  147. section.put(menu.getUrl(), MessageFormat.format(PREMISSION_STRING, menu.getPerms()));
  148. }
  149. }
  150. return section;
  151. }
  152. /**
  153. * 对象转菜单树
  154. *
  155. * @param menuList 菜单列表
  156. * @param isCheck 是否需要选中
  157. * @param roleMenuList 角色已存在菜单列表
  158. * @param permsFlag 是否需要显示权限标识
  159. * @return
  160. */
  161. public List<Map<String, Object>> getTrees(List<Menu> menuList, boolean isCheck, List<String> roleMenuList,
  162. boolean permsFlag)
  163. {
  164. List<Map<String, Object>> trees = new ArrayList<Map<String, Object>>();
  165. for (Menu menu : menuList)
  166. {
  167. Map<String, Object> deptMap = new HashMap<String, Object>();
  168. deptMap.put("id", menu.getMenuId());
  169. deptMap.put("pId", menu.getParentId());
  170. deptMap.put("name", transMenuName(menu, roleMenuList, permsFlag));
  171. deptMap.put("title", menu.getMenuName());
  172. if (isCheck)
  173. {
  174. deptMap.put("checked", roleMenuList.contains(menu.getMenuId() + menu.getPerms()));
  175. }
  176. else
  177. {
  178. deptMap.put("checked", false);
  179. }
  180. trees.add(deptMap);
  181. }
  182. return trees;
  183. }
  184. public String transMenuName(Menu menu, List<String> roleMenuList, boolean permsFlag)
  185. {
  186. StringBuffer sb = new StringBuffer();
  187. sb.append(menu.getMenuName());
  188. if (permsFlag)
  189. {
  190. sb.append("<font color=\"#888\">&nbsp;&nbsp;&nbsp;" + menu.getPerms() + "</font>");
  191. }
  192. return sb.toString();
  193. }
  194. /**
  195. * 删除菜单管理信息
  196. *
  197. * @param menuId 菜单ID
  198. * @return 结果
  199. */
  200. @Override
  201. public int deleteMenuById(Long menuId)
  202. {
  203. ShiroUtils.clearCachedAuthorizationInfo();
  204. return menuMapper.deleteMenuById(menuId);
  205. }
  206. /**
  207. * 根据菜单ID查询信息
  208. *
  209. * @param menuId 菜单ID
  210. * @return 菜单信息
  211. */
  212. @Override
  213. public Menu selectMenuById(Long menuId)
  214. {
  215. return menuMapper.selectMenuById(menuId);
  216. }
  217. /**
  218. * 查询子菜单数量
  219. *
  220. * @param menuId 菜单ID
  221. * @return 结果
  222. */
  223. @Override
  224. public int selectCountMenuByParentId(Long parentId)
  225. {
  226. return menuMapper.selectCountMenuByParentId(parentId);
  227. }
  228. /**
  229. * 查询菜单使用数量
  230. *
  231. * @param menuId 菜单ID
  232. * @return 结果
  233. */
  234. @Override
  235. public int selectCountRoleMenuByMenuId(Long menuId)
  236. {
  237. return roleMenuMapper.selectCountRoleMenuByMenuId(menuId);
  238. }
  239. /**
  240. * 新增保存菜单信息
  241. *
  242. * @param menu 菜单信息
  243. * @return 结果
  244. */
  245. @Override
  246. public int insertMenu(Menu menu)
  247. {
  248. menu.setCreateBy(ShiroUtils.getLoginName());
  249. ShiroUtils.clearCachedAuthorizationInfo();
  250. return menuMapper.insertMenu(menu);
  251. }
  252. /**
  253. * 修改保存菜单信息
  254. *
  255. * @param menu 菜单信息
  256. * @return 结果
  257. */
  258. @Override
  259. public int updateMenu(Menu menu)
  260. {
  261. menu.setUpdateBy(ShiroUtils.getLoginName());
  262. ShiroUtils.clearCachedAuthorizationInfo();
  263. return menuMapper.updateMenu(menu);
  264. }
  265. /**
  266. * 校验菜单名称是否唯一
  267. *
  268. * @param menu 菜单信息
  269. * @return 结果
  270. */
  271. @Override
  272. public String checkMenuNameUnique(Menu menu)
  273. {
  274. Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId();
  275. Menu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId());
  276. if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue())
  277. {
  278. return UserConstants.MENU_NAME_NOT_UNIQUE;
  279. }
  280. return UserConstants.MENU_NAME_UNIQUE;
  281. }
  282. }