MenuServiceImpl.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. package com.usky.service.sys.menuService;
  2. import com.usky.annotion.DataScope;
  3. import com.usky.dao.impl.BaseDaoImpl;
  4. import com.usky.entity.sys.SysMenuDTO;
  5. import com.usky.entity.sys.vo.SysMenuVO;
  6. import com.usky.entity.sys.vo.SysUserVO;
  7. import com.usky.utils.BeanHelp;
  8. import com.usky.utils.ShiroUtils;
  9. import org.apache.commons.lang3.StringUtils;
  10. import org.hibernate.transform.Transformers;
  11. import org.springframework.stereotype.Service;
  12. import java.math.BigInteger;
  13. import java.sql.Timestamp;
  14. import java.util.*;
  15. /**
  16. * @author laowo
  17. * @version v1.0
  18. * @date 2021/8/23 15:13
  19. * @description TODO
  20. **/
  21. @Service
  22. public class MenuServiceImpl extends BaseDaoImpl implements MenuService {
  23. @Override
  24. public Set<String> qyeryPermsByUserId(long userId) {
  25. @SuppressWarnings("all")
  26. String sql = "SELECT DISTINCT\n" +
  27. "\tm.perms \n" +
  28. "FROM\n" +
  29. "\tsys_menu m\n" +
  30. "\tLEFT JOIN sys_role_menu rm ON m.menu_id = rm.menu_id\n" +
  31. "\tLEFT JOIN sys_user_role ur ON rm.role_id = ur.role_id\n" +
  32. "\tLEFT JOIN sys_role r ON r.role_id = ur.role_id \n" +
  33. "WHERE\n" +
  34. "\tm.visible = '0' \n" +
  35. "\tAND r.STATUS = '0' AND ur.user_id = " + userId + "";
  36. List<String> perms = getSession().createSQLQuery(sql).list();
  37. Set<String> permsSet = new HashSet<>();
  38. for (String perm : perms) {
  39. if (StringUtils.isNotBlank(perm)) {
  40. permsSet.addAll(Arrays.asList(perm.trim().split(",")));
  41. }
  42. }
  43. return permsSet;
  44. }
  45. @Override
  46. @SuppressWarnings("all")
  47. @DataScope(deptAlias = "d")
  48. public List<SysMenuVO> queryMenuList(SysUserVO user) {
  49. String sql = null;
  50. List<SysMenuVO> menus = new LinkedList<SysMenuVO>();
  51. // 管理员显示所有菜单信息
  52. if (user.isAdmin()) {
  53. sql = "SELECT DISTINCT\n" +
  54. "\tm.menu_id AS menuId,\n" +
  55. "\tm.parent_id AS parentId,\n" +
  56. "\tm.menu_name AS menuName,\n" +
  57. "\tm.url,\n" +
  58. "\tm.visible,\n" +
  59. "\tm.is_refresh as isRefresh,\n" +
  60. "\tifnull( m.perms, '' ) AS perms,\n" +
  61. "\tm.target,\n" +
  62. "\tm.menu_type AS menuType,\n" +
  63. "\tm.icon,\n" +
  64. "\tm.order_num AS orderNum\n" +
  65. // "\tm.create_time AS createTime \n" +
  66. "FROM\n" +
  67. "\tsys_menu m\n" +
  68. "\tLEFT JOIN sys_role_menu rm ON m.menu_id = rm.menu_id\n" +
  69. "\tLEFT JOIN sys_user_role ur ON rm.role_id = ur.role_id\n" +
  70. "\tLEFT JOIN sys_role ro ON ur.role_id = ro.role_id \n" +
  71. "WHERE\n" +
  72. "\t m.menu_type in ('M', 'C') and m.visible = 0 AND ro.status = 0\n" +
  73. "\t\n" +
  74. "ORDER BY\n" +
  75. "\tm.parent_id,\n" +
  76. "\tm.order_num";
  77. menus = getSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(SysMenuVO.class)).list();
  78. } else {
  79. String dataScope = (String) user.getParams().get("dataScope");
  80. sql = "SELECT DISTINCT\n" +
  81. "\tm.menu_id AS menuId,\n" +
  82. "\tm.parent_id AS parentId,\n" +
  83. "\tm.menu_name AS menuName,\n" +
  84. "\tm.url,\n" +
  85. "\tm.visible,\n" +
  86. "\tm.is_refresh as isRefresh,\n" +
  87. "\tifnull( m.perms, '' ) AS perms,\n" +
  88. "\tm.target,\n" +
  89. "\tm.menu_type AS menuType,\n" +
  90. "\tm.icon,\n" +
  91. "\tm.order_num AS orderNum,\n" +
  92. "\tm.create_time AS createTime \n" +
  93. "FROM\n" +
  94. "\tsys_menu m\n" +
  95. "\tLEFT JOIN sys_role_menu rm ON m.menu_id = rm.menu_id\n" +
  96. "\tLEFT JOIN sys_user_role ur ON rm.role_id = ur.role_id\n" +
  97. "\tLEFT JOIN sys_role ro ON ur.role_id = ro.role_id \n" +
  98. "WHERE\n" +
  99. "\tur.user_id = " + user.getUserId() + " and m.menu_type in ('M', 'C') and m.visible = 0 AND ro.status = 0 ORDER BY\n" +
  100. "\tm.parent_id,\n" +
  101. "\tm.order_num";
  102. menus = getSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(SysMenuVO.class)).list();
  103. }
  104. return getChildPerms(menus, 0);
  105. }
  106. @Override
  107. public List<SysMenuVO> list(SysMenuVO sysMenuVO, String menuName, String visible, Integer userId) {
  108. List<SysMenuVO> menuList = null;
  109. if (SysUserVO.isAdmin(userId))
  110. //管理员查看全部菜单
  111. {
  112. StringBuffer sb = new StringBuffer();
  113. sb.append("select menu_id AS menuId, menu_name AS menuName, parent_id AS parentId, order_num AS orderNum, url, target, menu_type AS menuType, visible, is_refresh as isRefresh, ifnull(perms,'') as perms, icon, create_by AS createBy, create_time AS createTime from sys_menu where 1 = 1");
  114. if (StringUtils.isNotBlank(menuName)) {
  115. sb.append(" and menu_name like '%" + menuName + "%'");
  116. }
  117. if (StringUtils.isNotBlank(visible)) {
  118. sb.append(" and visible='" + visible + "'");
  119. }
  120. sb.append(" order by parent_id, order_num");
  121. menuList = getSession().createSQLQuery(sb.toString()).setResultTransformer(Transformers.aliasToBean(SysMenuVO.class)).list();
  122. } else {
  123. StringBuffer sb = new StringBuffer();
  124. //根据用户id查询菜单
  125. sb.append("select distinct m.menu_id AS menuId, m.parent_id AS parentId, m.menu_name AS menuName, m.url, m.visible, m.is_refresh AS isRefresh, ifnull(m.perms,'') as perms, m.target, m.menu_type AS menuType, m.icon, m.order_num AS orderNum, m.create_time AS createTime from sys_menu m\n" +
  126. "\t\tleft join sys_role_menu rm on m.menu_id = rm.menu_id\n" +
  127. "\t\tleft join sys_user_role ur on rm.role_id = ur.role_id\n" +
  128. "\t\tLEFT JOIN sys_role ro on ur.role_id = ro.role_id where ur.user_id = " + userId + "");
  129. if (StringUtils.isNotBlank(menuName)) {
  130. sb.append(" and menu_name like '%" + menuName + "%'");
  131. }
  132. if (StringUtils.isNotBlank(visible)) {
  133. sb.append(" and visible='" + visible + "'");
  134. }
  135. sb.append(" order by parent_id, order_num");
  136. menuList = getSession().createSQLQuery(sb.toString()).setResultTransformer(Transformers.aliasToBean(SysMenuVO.class)).list();
  137. }
  138. return menuList;
  139. }
  140. @Override
  141. public int queryMenuById(Integer menuId) {
  142. List list = getSession().createSQLQuery("select count(1) from sys_menu where parent_id=" + menuId + "").list();
  143. return ((BigInteger) list.get(0)).intValue();
  144. }
  145. @Override
  146. public int queryRoleMenuByMenuId(Integer menuId) {
  147. List list = getSession().createSQLQuery("select count(1) from sys_role_menu where menu_id=" + menuId + "").list();
  148. return ((BigInteger) list.get(0)).intValue();
  149. }
  150. @Override
  151. public void deleteMenuById(Integer menuId) {
  152. getSession().createSQLQuery("delete from sys_menu where menu_id = " + menuId + " or parent_id = " + menuId + "").executeUpdate();
  153. }
  154. @Override
  155. public List<SysMenuDTO> queryMenuByName(String menuName, Integer parentId) {
  156. List<SysMenuDTO> list = getSession().createQuery("from SysMenuDTO t where t.menuName='" + menuName + "' and t.parentId=parentId").list();
  157. return list;
  158. }
  159. @Override
  160. public void add(SysMenuVO menu) {
  161. menu.setCreateBy(ShiroUtils.getLoginName());
  162. menu.setCreateTime(new Timestamp(System.currentTimeMillis()));
  163. SysMenuDTO sysMenuDTO = BeanHelp.copyProperties(menu, SysMenuDTO.class);
  164. getSession().save(sysMenuDTO);
  165. }
  166. @Override
  167. public void updateMenu(SysMenuVO menu) {
  168. SysMenuDTO sysMenuDTO = BeanHelp.copyProperties(menu, SysMenuDTO.class);
  169. String loginName = ShiroUtils.getLoginName();
  170. sysMenuDTO.setUpdateBy(loginName);
  171. sysMenuDTO.setUpdateTime(new Timestamp(System.currentTimeMillis()));
  172. getSession().update(sysMenuDTO);
  173. }
  174. /**
  175. * 根据父节点的ID获取所有子节点
  176. *
  177. * @param list 分类表
  178. * @param parentId 传入的父节点ID
  179. * @return String
  180. */
  181. public List<SysMenuVO> getChildPerms(List<SysMenuVO> list, int parentId) {
  182. List<SysMenuVO> returnList = new ArrayList<SysMenuVO>();
  183. for (Iterator<SysMenuVO> iterator = list.iterator(); iterator.hasNext(); ) {
  184. SysMenuVO t = (SysMenuVO) iterator.next();
  185. // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
  186. if (t.getParentId() == parentId) {
  187. recursionFn(list, t);
  188. returnList.add(t);
  189. }
  190. }
  191. return returnList;
  192. }
  193. /**
  194. * 递归列表
  195. *
  196. * @param list
  197. * @param t
  198. */
  199. private void recursionFn(List<SysMenuVO> list, SysMenuVO t) {
  200. // 得到子节点列表
  201. List<SysMenuVO> childList = getChildList(list, t);
  202. t.setChildren(childList);
  203. for (SysMenuVO tChild : childList) {
  204. if (hasChild(list, tChild)) {
  205. recursionFn(list, tChild);
  206. }
  207. }
  208. }
  209. /**
  210. * 得到子节点列表
  211. */
  212. private List<SysMenuVO> getChildList(List<SysMenuVO> list, SysMenuVO t) {
  213. List<SysMenuVO> tlist = new ArrayList<SysMenuVO>();
  214. Iterator<SysMenuVO> it = list.iterator();
  215. while (it.hasNext()) {
  216. SysMenuVO n = (SysMenuVO) it.next();
  217. if (n.getParentId() == t.getMenuId()) {
  218. tlist.add(n);
  219. }
  220. }
  221. return tlist;
  222. }
  223. /**
  224. * 判断是否有子节点
  225. */
  226. private boolean hasChild(List<SysMenuVO> list, SysMenuVO t) {
  227. return getChildList(list, t).size() > 0 ? true : false;
  228. }
  229. }