package com.zt.modules.sys.service; 
 | 
  
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.zt.common.constant.Constant; 
 | 
import com.zt.common.exception.ErrorCode; 
 | 
import com.zt.common.exception.RenException; 
 | 
import com.zt.common.service.BaseService; 
 | 
import com.zt.common.utils.CacheUtils; 
 | 
import com.zt.common.utils.TreeUtils; 
 | 
import com.zt.core.context.User; 
 | 
import com.zt.core.context.UserContext; 
 | 
import com.zt.modules.sys.dao.SysMenuDao; 
 | 
import com.zt.modules.sys.enums.MenuType; 
 | 
import com.zt.modules.sys.model.SysMenu; 
 | 
import com.zt.modules.sys.model.SysRole; 
 | 
import com.zt.modules.sys.model.SysRoleMenu; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.transaction.annotation.Transactional; 
 | 
  
 | 
import java.util.ArrayList; 
 | 
import java.util.List; 
 | 
import java.util.stream.Collectors; 
 | 
  
 | 
/** 
 | 
 * 菜单管理 
 | 
 * 
 | 
 * @author hehz 
 | 
 */ 
 | 
@Service 
 | 
public class SysMenuService extends BaseService<SysMenuDao, SysMenu> { 
 | 
    @Autowired 
 | 
    private SysRoleMenuService sysRoleMenuService; 
 | 
    @Autowired 
 | 
    private SysRoleService sysRoleService; 
 | 
  
 | 
    public List<SysMenu> getAllList() { 
 | 
        List<SysMenu> menuList = baseDao.selectList(new QueryWrapper<SysMenu>().eq(Constant.TableColumn.IS_DELETE, 
 | 
                Constant.Bool.NO).orderByAsc(Constant.TableColumn.SORT)); 
 | 
        return menuList; 
 | 
    } 
 | 
  
 | 
    public List<SysMenu> getAllTree() { 
 | 
        List<SysMenu> menuList = baseDao.selectList(new QueryWrapper<SysMenu>().eq(Constant.TableColumn.IS_DELETE, 
 | 
                Constant.Bool.NO).orderByAsc(Constant.TableColumn.SORT)); 
 | 
        return TreeUtils.build(menuList); 
 | 
    } 
 | 
  
 | 
    public List<SysMenu> getAllTreeWithoutButtons() { 
 | 
        List<SysMenu> menuList = baseDao.selectList(new QueryWrapper<SysMenu>() 
 | 
                .eq(Constant.TableColumn.IS_DELETE, Constant.Bool.NO).lambda() 
 | 
                .ne(SysMenu::getType, MenuType.BUTTON.getValue()).orderByAsc(SysMenu::getSort)); 
 | 
        return TreeUtils.build(menuList); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取所有系统菜单 
 | 
     * 
 | 
     * @return 
 | 
     */ 
 | 
    public List<SysMenu> getAllSystemTree() { 
 | 
        return getAllTree().stream().filter(menu -> menu.getType() == MenuType.SYSTEM.getValue()) 
 | 
                .collect(Collectors.toList()); 
 | 
    } 
 | 
  
 | 
    public List<SysMenu> getSystems(Integer type) { 
 | 
        User user = UserContext.getUser(); 
 | 
        List<SysMenu> list = baseDao.getSystems(type, user.getId()); 
 | 
        return list; 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 当前用户菜单导航,不包括按钮 
 | 
     * 
 | 
     * @return 
 | 
     */ 
 | 
    public List<SysMenu> getCurrentUserMenuNav() { 
 | 
        User user = UserContext.getUser(); 
 | 
        // 超级管理员,拥有最高权限 
 | 
        if (user.isSuperAdmin() && user.isSuperAdmin()) { 
 | 
            return getAllTreeWithoutButtons().stream().filter(menu -> menu.getType() == MenuType.PLATFORM.getValue()) 
 | 
                    .collect(Collectors.toList()); 
 | 
        } 
 | 
        List<SysMenu> list; 
 | 
        if ("wxxt".equals(user.getSystemMarker())) { 
 | 
            list = baseDao.getUserMenuListComm("comm_zts"); 
 | 
        }else{ 
 | 
            list = baseDao.getUserMenuList(user.getTenantId(), user.getId()); 
 | 
            String roleName = user.getRoleName(); 
 | 
            //if (list.size() == 0 && ("smj".equals(user.getSystemMarker()) 
 | 
            if ((roleName == null || "".endsWith(roleName)) && ("smj".equals(user.getSystemMarker()) 
 | 
                    || "djxl".equals(user.getSystemMarker())) 
 | 
            ) { 
 | 
                list = baseDao.getUserMenuListComm("comm_sy"); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        List<SysMenu> list_except = baseDao.getUserMenuListExcept(user.getTenantId(), user.getId()); 
 | 
        for (SysMenu item : list_except) { 
 | 
            List<SysMenu> list_except2 = list.stream().filter(menu -> menu.getId().equals(item.getId())) 
 | 
                    .collect(Collectors.toList()); 
 | 
            for (SysMenu item2 : list_except2) { 
 | 
                item2.setShowMenu(0); 
 | 
            } 
 | 
        } 
 | 
        List<SysMenu> list2 = TreeUtils.build(list.stream().filter(menu -> !menu.getType().equals(MenuType.BUTTON.getValue())) 
 | 
                .collect(Collectors.toList())); 
 | 
  
 | 
        List<SysMenu> listOut = new ArrayList<>(); 
 | 
        for (SysMenu item : list2) { 
 | 
            if ("smj".equals(user.getSystemMarker()) && (1283299421357899778L == item.getId() || 1582665097052971009L == item.getId())) { 
 | 
                //选择寿命件系统隐藏等级修理系统,维修系统, 1283299421357899778,1582665097052971009L 
 | 
                item.setShowMenu(0); 
 | 
                //continue; 
 | 
            } 
 | 
            if ("djxl".equals(user.getSystemMarker()) && (1471651415041593346L == item.getId() || 1582665097052971009L == item.getId())) { 
 | 
                //选择等级维修系统隐藏寿命件系统,维修系统, 1471651415041593346,1582665097052971009L 
 | 
                item.setShowMenu(0); 
 | 
                //continue; 
 | 
            } 
 | 
/* 
 | 
            if ("wxxt".equals(user.getSystemMarker()) && (1283299421357899778L == item.getId() || 1471651415041593346L == item.getId())) { 
 | 
                //选择寿命件系统隐藏寿命件系统,等级修理系统, 1283299421357899778,1471651415041593346L 
 | 
                item.setShowMenu(0); 
 | 
                //continue; 
 | 
            }*/ 
 | 
            listOut.add(item); 
 | 
        } 
 | 
        return listOut; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 当前用户可以看到的菜单列表,包括按钮 
 | 
     * 
 | 
     * @return 
 | 
     */ 
 | 
    public List<SysMenu> getCurrentUserMenu() { 
 | 
        User user = UserContext.getUser(); 
 | 
        // 超级管理员,拥有最高权限 
 | 
        if (user.isPlatform() && user.isSuperAdmin()) { 
 | 
            return getAllTree().stream().filter(menu -> menu.getType() == MenuType.PLATFORM.getValue()) 
 | 
                    .collect(Collectors.toList()); 
 | 
        } 
 | 
  
 | 
        List<SysMenu> list = baseDao.getUserMenuList(user.getTenantId(), null); 
 | 
        return TreeUtils.build(list); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    @Transactional(rollbackFor = Exception.class) 
 | 
    public void insert(SysMenu entity) { 
 | 
        super.insert(entity); 
 | 
        CacheUtils.removeAll(Constant.Cache.TOKEN);// 清理用户权限缓存 
 | 
/*        SysRoleMenu sysRoleMenu = new SysRoleMenu(); 
 | 
        sysRoleMenu.setMenuId(entity.getId()); 
 | 
        sysRoleMenu.setRoleId(1271368584383188993L); 
 | 
        sysRoleMenu.setDelete(true); 
 | 
        sysRoleMenuService.insert(sysRoleMenu); 
 | 
  
 | 
        List<SysRole> allList = sysRoleService.getAllList(); 
 | 
        for(SysRole sysRole:allList){ 
 | 
            sysRoleMenu = new SysRoleMenu(); 
 | 
            sysRoleMenu.setMenuId(entity.getId()); 
 | 
            sysRoleMenu.setRoleId(sysRole.getId()); 
 | 
            sysRoleMenu.setDelete(true); 
 | 
            sysRoleMenuService.insert(sysRoleMenu); 
 | 
        }*/ 
 | 
    } 
 | 
  
 | 
    @Transactional(rollbackFor = Exception.class) 
 | 
    public void update(SysMenu menu) { 
 | 
        SysMenu tmp = baseDao.selectById(menu.getId()); 
 | 
        if (tmp == null) { 
 | 
            throw new RenException("查询菜单信息失败"); 
 | 
        } 
 | 
        List<SysMenu> all = baseDao.selectList(new QueryWrapper<SysMenu>().lambda().ne(SysMenu::getType, 
 | 
                MenuType.BUTTON.getValue())); 
 | 
        TreeUtils.updateValidate(all, menu, tmp); 
 | 
  
 | 
        // 更新菜单 
 | 
        super.update(menu); 
 | 
        CacheUtils.removeAll(Constant.Cache.TOKEN);// 清理用户权限缓存 
 | 
    } 
 | 
  
 | 
    @Transactional(rollbackFor = Exception.class) 
 | 
    public void delete(Long id) { 
 | 
        // 判断是否有子菜单或按钮 
 | 
        if (baseDao.selectCount(new QueryWrapper<SysMenu>().eq(Constant.TableColumn.IS_DELETE, Constant.Bool.NO) 
 | 
                .lambda().eq(SysMenu::getPid, id)) > 0) { 
 | 
            throw new RenException(ErrorCode.SUB_MENU_EXIST); 
 | 
        } 
 | 
        // 删除菜单 
 | 
        deleteLogic(id); 
 | 
  
 | 
        // 删除角色菜单关系 
 | 
        sysRoleMenuService.deleteByMenuId(id); 
 | 
  
 | 
        CacheUtils.removeAll(Constant.Cache.TOKEN);// 清理用户权限缓存 
 | 
    } 
 | 
} 
 |