| 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);// 清理用户权限缓存 | 
|     } | 
| } |