package com.huaxu.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.huaxu.dao.MenuMapper; import com.huaxu.dao.TenantMenuMapper; import com.huaxu.entity.MenuEntity; import com.huaxu.entity.TenantMenuEntity; import com.huaxu.model.LoginUser; import com.huaxu.util.UserUtil; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import javax.annotation.Resource; import org.springframework.transaction.annotation.Transactional; import java.util.*; import static com.google.common.collect.Lists.newArrayList; /** * * 菜单Service接口 * @author: WYY * @date 2020-10-26 16:15 */ @Service public class MenuService extends ServiceImpl { @Resource private MenuMapper menuMapper; @Resource private TenantMenuMapper tenantMenuMapper; /** * 自定义分页查询,含关联实体对像 */ public IPage findPage(IPage page, MenuEntity menuEntity) { Page ipage = menuMapper.findPage(page, menuEntity); return ipage; } /** * 查列表 */ public List findList(MenuEntity menuEntity) { LoginUser currentUser = UserUtil.getCurrentUser(); Integer userId = currentUser.getId(); //-999租户管理员 1超级管理员 2普通用户 String userType = currentUser.getType(); menuEntity.setTenantId(currentUser.getTenantId()); List menuEntities = new ArrayList<>(); switch (userType) { case "1"://超级管理员查询所有系统菜单 menuEntities = menuMapper.findList(menuEntity); break; case "2"://普通用户按角色查询租户菜单 menuEntities = menuMapper.findUserList(menuEntity); break; case "-999"://租户管理员查询租户菜单 menuEntities = menuMapper.findTenantList(menuEntity); break; } List menuTree = getMenuTree(menuEntities, Long.valueOf(0), 1); return menuTree; } public static List getMenuTree(List list, Long id, Integer leve) { List temList = newArrayList(); if (list != null) { for (MenuEntity menuEntity : list) { if (id.equals(menuEntity.getParentMenuId())) { List chidren = getMenuTree(list, menuEntity.getId(), ++leve); MenuEntity temMeanu = new MenuEntity(); BeanUtils.copyProperties(menuEntity, temMeanu); temMeanu.setChildren(chidren); temList.add(temMeanu); leve--; } } } if (temList.size() > 0) { return temList; } else { return null; } } /** * 按父级节点查列表 */ public List findMenuByParentIds(List ids) { LoginUser currentUser = UserUtil.getCurrentUser(); Integer userId = currentUser.getId(); //-999租户管理员 1超级管理员 2普通用户 String userType = currentUser.getType(); List menuEntities = new ArrayList<>(); switch (userType) { case "1"://超级管理员查询所有系统菜单 menuEntities = menuMapper.findMenuByParentIds(ids); break; case "2"://普通用户按角色查询租户菜单 menuEntities = menuMapper.findTenantMenuByParentIds(currentUser.getTenantId(), ids); break; case "-999"://租户管理员查询租户菜单 menuEntities = menuMapper.findTenantMenuByParentIds(currentUser.getTenantId(), ids); break; } return menuEntities; } /** * 批量删除 */ @Transactional(rollbackFor = Exception.class) public boolean delMenuByIds(Long[] ids) { LoginUser currentUser = UserUtil.getCurrentUser(); Integer userId = currentUser.getId(); //-999租户管理员 1超级管理员 2普通用户 String userType = currentUser.getType(); boolean isOk = false; for(Long id : ids) { switch (userType) { case "1"://超级管理员直接删除系统菜单 isOk = this.removeById(id); break; case "2"://普通用户按角色查询租户菜单 isOk = menuMapper.updateState(id); break; case "-999"://租户管理员查询租户菜单 isOk = menuMapper.updateState(id); break; } } return isOk; } /** * 单个删除 */ public boolean delMenuById(Long id) { LoginUser currentUser = UserUtil.getCurrentUser(); Integer userId = currentUser.getId(); //-999租户管理员 1超级管理员 2普通用户 String userType = currentUser.getType(); boolean isOk = false; switch (userType) { case "1"://超级管理员直接删除系统菜单 isOk = this.removeById(id); break; case "2"://普通用户按角色查询租户菜单 isOk = menuMapper.updateState(id); break; case "-999"://租户管理员查询租户菜单 isOk = menuMapper.updateState(id); break; } return isOk; } /** * 保存 */ public boolean addMenu(MenuEntity menu) { if (this.save(menu)) { return true; } return false; } /** * 修改根居ID */ public boolean updateMenuById(MenuEntity menu) { LoginUser currentUser = UserUtil.getCurrentUser(); Integer userId = currentUser.getId(); //-999租户管理员 1超级管理员 2普通用户 String userType = currentUser.getType(); TenantMenuEntity tenantMenuEntity = new TenantMenuEntity(); if(userType.equals("2")||userType.equals("-999")) { MenuEntity menuEntity = menuMapper.findTenantByMenuId(currentUser.getTenantId(), menu.getId()); tenantMenuEntity.setId(menuEntity.getId()); tenantMenuEntity.setDateUpdate(new Date()); tenantMenuEntity.setUpdateBy(currentUser.getUsername()); tenantMenuEntity.setLinkPath(menu.getLinkPath()); tenantMenuEntity.setMenuImage(menu.getMenuImage()); tenantMenuEntity.setMenuName(menu.getName()); tenantMenuEntity.setMenuSeq(menu.getSeq()); } boolean isOk = false; switch (userType) { case "1"://超级管理员查询所有系统菜单 isOk = this.updateById(menu); break; case "2"://普通用户按角色查询租户菜单 isOk = tenantMenuMapper.updateById(tenantMenuEntity) > 0 ? true : false; break; case "-999"://租户管理员查询租户菜单 isOk = tenantMenuMapper.updateById(tenantMenuEntity) > 0 ? true : false; break; } return isOk; } /** * 根居ID获取对象 */ public MenuEntity findMenuById(Long id) { LoginUser currentUser = UserUtil.getCurrentUser(); Integer userId = currentUser.getId(); //-999租户管理员 1超级管理员 2普通用户 String userType = currentUser.getType(); MenuEntity menuEntity = new MenuEntity(); switch (userType) { case "1"://超级管理员查询所有系统菜单 menuEntity = menuMapper.findMenuById(id);; break; case "2"://普通用户按角色查询租户菜单 menuEntity = menuMapper.findUserMenuById(currentUser.getTenantId(),id); break; case "-999"://租户管理员查询租户菜单 menuEntity = menuMapper.findUserMenuById(currentUser.getTenantId(),id); break; } return menuEntity; } public List findUserFirstMenu() { LoginUser currentUser = UserUtil.getCurrentUser(); Integer userId = currentUser.getId(); //-999租户管理员 1超级管理员 2普通用户 String userType = currentUser.getType(); List menuEntities= new ArrayList<>(); switch (userType) { // case "1"://超级管理员查询所有系统菜单 // menuEntities = menuMapper.findAllFirstMenu(); // break; // case "2"://普通用户按角色查询租户菜单 // menuEntities = menuMapper.findUserFirstMenu(currentUser.getTenantId(),userId); // break; case "-999"://租户管理员查询租户菜单 menuEntities = menuMapper.findTenantFirstMenu(currentUser.getTenantId()); break; case "-9999"://超级管理员查询所有系统菜单 menuEntities = menuMapper.findAllFirstMenu(); break; default: //其他租户用户暂时不区分类型 menuEntities = menuMapper.findUserFirstMenu(currentUser.getTenantId(),userId); break; } return menuEntities; } public List findUserMenu(String appId) { LoginUser currentUser = UserUtil.getCurrentUser(); Integer userId = currentUser.getId(); //-999租户管理员 1超级管理员 2普通用户 String userType = currentUser.getType(); List menuEntities= new ArrayList<>(); switch (userType) { case "1"://超级管理员查询所有系统菜单 menuEntities = menuMapper.findSystemUserMenu(appId); break; case "2"://普通用户按角色查询租户菜单 menuEntities = menuMapper.findUserMenu(currentUser.getTenantId(),userId, appId); break; case "-999"://租户管理员查询租户菜单 menuEntities = menuMapper.findTenantUserMenu(currentUser.getTenantId(),appId); break; } List menuTree = getMenuTree(menuEntities, Long.valueOf(0), 1); return menuTree; } }