123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- package com.usky.service.sys.menuService;
- import com.usky.annotion.DataScope;
- import com.usky.dao.impl.BaseDaoImpl;
- import com.usky.entity.sys.SysMenuDTO;
- import com.usky.entity.sys.vo.SysMenuVO;
- import com.usky.entity.sys.vo.SysUserVO;
- import com.usky.utils.BeanHelp;
- import com.usky.utils.ShiroUtils;
- import org.apache.commons.lang3.StringUtils;
- import org.hibernate.transform.Transformers;
- import org.springframework.stereotype.Service;
- import java.math.BigInteger;
- import java.sql.Timestamp;
- import java.util.*;
- /**
- * @author laowo
- * @version v1.0
- * @date 2021/8/23 15:13
- * @description TODO
- **/
- @Service
- public class MenuServiceImpl extends BaseDaoImpl implements MenuService {
- @Override
- public Set<String> qyeryPermsByUserId(long userId) {
- @SuppressWarnings("all")
- String sql = "SELECT DISTINCT\n" +
- "\tm.perms \n" +
- "FROM\n" +
- "\tsys_menu m\n" +
- "\tLEFT JOIN sys_role_menu rm ON m.menu_id = rm.menu_id\n" +
- "\tLEFT JOIN sys_user_role ur ON rm.role_id = ur.role_id\n" +
- "\tLEFT JOIN sys_role r ON r.role_id = ur.role_id \n" +
- "WHERE\n" +
- "\tm.visible = '0' \n" +
- "\tAND r.STATUS = '0' AND ur.user_id = " + userId + "";
- List<String> perms = getSession().createSQLQuery(sql).list();
- Set<String> permsSet = new HashSet<>();
- for (String perm : perms) {
- if (StringUtils.isNotBlank(perm)) {
- permsSet.addAll(Arrays.asList(perm.trim().split(",")));
- }
- }
- return permsSet;
- }
- @Override
- @SuppressWarnings("all")
- @DataScope(deptAlias = "d")
- public List<SysMenuVO> queryMenuList(SysUserVO user) {
- String sql = null;
- List<SysMenuVO> menus = new LinkedList<SysMenuVO>();
- // 管理员显示所有菜单信息
- if (user.isAdmin()) {
- sql = "SELECT DISTINCT\n" +
- "\tm.menu_id AS menuId,\n" +
- "\tm.parent_id AS parentId,\n" +
- "\tm.menu_name AS menuName,\n" +
- "\tm.url,\n" +
- "\tm.visible,\n" +
- "\tm.is_refresh as isRefresh,\n" +
- "\tifnull( m.perms, '' ) AS perms,\n" +
- "\tm.target,\n" +
- "\tm.menu_type AS menuType,\n" +
- "\tm.icon,\n" +
- "\tm.order_num AS orderNum\n" +
- // "\tm.create_time AS createTime \n" +
- "FROM\n" +
- "\tsys_menu m\n" +
- "\tLEFT JOIN sys_role_menu rm ON m.menu_id = rm.menu_id\n" +
- "\tLEFT JOIN sys_user_role ur ON rm.role_id = ur.role_id\n" +
- "\tLEFT JOIN sys_role ro ON ur.role_id = ro.role_id \n" +
- "WHERE\n" +
- "\t m.menu_type in ('M', 'C') and m.visible = 0 AND ro.status = 0\n" +
- "\t\n" +
- "ORDER BY\n" +
- "\tm.parent_id,\n" +
- "\tm.order_num";
- menus = getSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(SysMenuVO.class)).list();
- } else {
- String dataScope = (String) user.getParams().get("dataScope");
- sql = "SELECT DISTINCT\n" +
- "\tm.menu_id AS menuId,\n" +
- "\tm.parent_id AS parentId,\n" +
- "\tm.menu_name AS menuName,\n" +
- "\tm.url,\n" +
- "\tm.visible,\n" +
- "\tm.is_refresh as isRefresh,\n" +
- "\tifnull( m.perms, '' ) AS perms,\n" +
- "\tm.target,\n" +
- "\tm.menu_type AS menuType,\n" +
- "\tm.icon,\n" +
- "\tm.order_num AS orderNum,\n" +
- "\tm.create_time AS createTime \n" +
- "FROM\n" +
- "\tsys_menu m\n" +
- "\tLEFT JOIN sys_role_menu rm ON m.menu_id = rm.menu_id\n" +
- "\tLEFT JOIN sys_user_role ur ON rm.role_id = ur.role_id\n" +
- "\tLEFT JOIN sys_role ro ON ur.role_id = ro.role_id \n" +
- "WHERE\n" +
- "\tur.user_id = " + user.getUserId() + " and m.menu_type in ('M', 'C') and m.visible = 0 AND ro.status = 0 ORDER BY\n" +
- "\tm.parent_id,\n" +
- "\tm.order_num";
- menus = getSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(SysMenuVO.class)).list();
- }
- return getChildPerms(menus, 0);
- }
- @Override
- public List<SysMenuVO> list(SysMenuVO sysMenuVO, String menuName, String visible, Integer userId) {
- List<SysMenuVO> menuList = null;
- if (SysUserVO.isAdmin(userId))
- //管理员查看全部菜单
- {
- StringBuffer sb = new StringBuffer();
- 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");
- if (StringUtils.isNotBlank(menuName)) {
- sb.append(" and menu_name like '%" + menuName + "%'");
- }
- if (StringUtils.isNotBlank(visible)) {
- sb.append(" and visible='" + visible + "'");
- }
- sb.append(" order by parent_id, order_num");
- menuList = getSession().createSQLQuery(sb.toString()).setResultTransformer(Transformers.aliasToBean(SysMenuVO.class)).list();
- } else {
- StringBuffer sb = new StringBuffer();
- //根据用户id查询菜单
- 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" +
- "\t\tleft join sys_role_menu rm on m.menu_id = rm.menu_id\n" +
- "\t\tleft join sys_user_role ur on rm.role_id = ur.role_id\n" +
- "\t\tLEFT JOIN sys_role ro on ur.role_id = ro.role_id where ur.user_id = " + userId + "");
- if (StringUtils.isNotBlank(menuName)) {
- sb.append(" and menu_name like '%" + menuName + "%'");
- }
- if (StringUtils.isNotBlank(visible)) {
- sb.append(" and visible='" + visible + "'");
- }
- sb.append(" order by parent_id, order_num");
- menuList = getSession().createSQLQuery(sb.toString()).setResultTransformer(Transformers.aliasToBean(SysMenuVO.class)).list();
- }
- return menuList;
- }
- @Override
- public int queryMenuById(Integer menuId) {
- List list = getSession().createSQLQuery("select count(1) from sys_menu where parent_id=" + menuId + "").list();
- return ((BigInteger) list.get(0)).intValue();
- }
- @Override
- public int queryRoleMenuByMenuId(Integer menuId) {
- List list = getSession().createSQLQuery("select count(1) from sys_role_menu where menu_id=" + menuId + "").list();
- return ((BigInteger) list.get(0)).intValue();
- }
- @Override
- public void deleteMenuById(Integer menuId) {
- getSession().createSQLQuery("delete from sys_menu where menu_id = " + menuId + " or parent_id = " + menuId + "").executeUpdate();
- }
- @Override
- public List<SysMenuDTO> queryMenuByName(String menuName, Integer parentId) {
- List<SysMenuDTO> list = getSession().createQuery("from SysMenuDTO t where t.menuName='" + menuName + "' and t.parentId=parentId").list();
- return list;
- }
- @Override
- public void add(SysMenuVO menu) {
- menu.setCreateBy(ShiroUtils.getLoginName());
- menu.setCreateTime(new Timestamp(System.currentTimeMillis()));
- SysMenuDTO sysMenuDTO = BeanHelp.copyProperties(menu, SysMenuDTO.class);
- getSession().save(sysMenuDTO);
- }
- @Override
- public void updateMenu(SysMenuVO menu) {
- SysMenuDTO sysMenuDTO = BeanHelp.copyProperties(menu, SysMenuDTO.class);
- String loginName = ShiroUtils.getLoginName();
- sysMenuDTO.setUpdateBy(loginName);
- sysMenuDTO.setUpdateTime(new Timestamp(System.currentTimeMillis()));
- getSession().update(sysMenuDTO);
- }
- /**
- * 根据父节点的ID获取所有子节点
- *
- * @param list 分类表
- * @param parentId 传入的父节点ID
- * @return String
- */
- public List<SysMenuVO> getChildPerms(List<SysMenuVO> list, int parentId) {
- List<SysMenuVO> returnList = new ArrayList<SysMenuVO>();
- for (Iterator<SysMenuVO> iterator = list.iterator(); iterator.hasNext(); ) {
- SysMenuVO t = (SysMenuVO) iterator.next();
- // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
- if (t.getParentId() == parentId) {
- recursionFn(list, t);
- returnList.add(t);
- }
- }
- return returnList;
- }
- /**
- * 递归列表
- *
- * @param list
- * @param t
- */
- private void recursionFn(List<SysMenuVO> list, SysMenuVO t) {
- // 得到子节点列表
- List<SysMenuVO> childList = getChildList(list, t);
- t.setChildren(childList);
- for (SysMenuVO tChild : childList) {
- if (hasChild(list, tChild)) {
- recursionFn(list, tChild);
- }
- }
- }
- /**
- * 得到子节点列表
- */
- private List<SysMenuVO> getChildList(List<SysMenuVO> list, SysMenuVO t) {
- List<SysMenuVO> tlist = new ArrayList<SysMenuVO>();
- Iterator<SysMenuVO> it = list.iterator();
- while (it.hasNext()) {
- SysMenuVO n = (SysMenuVO) it.next();
- if (n.getParentId() == t.getMenuId()) {
- tlist.add(n);
- }
- }
- return tlist;
- }
- /**
- * 判断是否有子节点
- */
- private boolean hasChild(List<SysMenuVO> list, SysMenuVO t) {
- return getChildList(list, t).size() > 0 ? true : false;
- }
- }
|