package com.kidgrow.usercenter.controller; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.convert.Convert; import com.kidgrow.common.annotation.LoginUser; import com.kidgrow.common.constant.CommonConstant; import com.kidgrow.common.model.*; import com.kidgrow.usercenter.service.ISysMenuService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.web.bind.annotation.*; import java.util.*; import java.util.stream.Collectors; /** * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020
* * @Description: 菜单管理
* @Project:
* @CreateDate: Created in 2020/2/13 15:50
* @Author: liuke */ @RestController @Api(tags = "菜单模块api") @Slf4j @RequestMapping("/menus") public class SysMenuController { public static List menus = new ArrayList<>(); @Autowired private ISysMenuService menuService; /** * 两层循环实现建树 * * @param sysMenus * @return */ public static List treeBuilder(List sysMenus) { List menus = new ArrayList<>(); for (SysMenu sysMenu : sysMenus) { if (ObjectUtils.equals(-1L, sysMenu.getParentId())) { menus.add(sysMenu); } for (SysMenu menu : sysMenus) { if (menu.getParentId().equals(sysMenu.getId())) { if (sysMenu.getSubMenus() == null) { sysMenu.setSubMenus(new ArrayList<>()); } sysMenu.getSubMenus().add(menu); } } } return menus; } /** * 修改菜单状态 * * @param params * @return */ @ApiOperation(value = "修改菜单状态") @GetMapping("/updateEnabled") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "菜单id", required = true, dataType = "Integer"), @ApiImplicitParam(name = "enabled", value = "是否启用", required = true, dataType = "Boolean") }) public ResultBody updateEnabled(@RequestParam Map params) { Long id = MapUtils.getLong(params, "id"); return menuService.updateEnabled(params); } /** * 删除菜单 * * @param id */ @ApiOperation(value = "删除菜单") @DeleteMapping("/{id}") public ResultBody delete(@PathVariable Long id) { try { menuService.removeById(id); return ResultBody.ok().msg("操作成功"); } catch (Exception ex) { log.error("memu-delete-error", ex); return ResultBody.failed().msg("操作失败"); } } @ApiOperation(value = "根据roleId获取对应的菜单") @GetMapping("/{roleId}/menus") public ResultBody>> findMenusByRoleId(@PathVariable Long roleId,@RequestParam Map params) { Set roleIds = new HashSet<>(); roleIds.add(roleId); //获取该角色对应的菜单 List roleMenus = menuService.findByRoles(roleIds); //全部的菜单列表 List allMenus = menuService.findAll(params); List> authTrees = new ArrayList<>(); Map roleMenusMap = roleMenus.stream().collect(Collectors.toMap(SysMenu::getId, SysMenu -> SysMenu)); for (SysMenu sysMenu : allMenus) { Map authTree = new HashMap<>(); authTree.put("id", sysMenu.getId().toString()); authTree.put("name", sysMenu.getName()); authTree.put("pId", sysMenu.getParentId().toString()); authTree.put("open", true); authTree.put("checked", false); if (roleMenusMap.get(sysMenu.getId()) != null) { authTree.put("checked", true); } authTrees.add(authTree); } return ResultBody.ok().data(authTrees); } @ApiOperation(value = "根据roleCodes获取对应的权限") @SuppressWarnings("unchecked") @Cacheable(value = "menu", key ="#roleCodes") @GetMapping("/{roleCodes}") public List findMenuByRoles(@PathVariable String roleCodes) { List result = null; if (StringUtils.isNotEmpty(roleCodes)) { Set roleSet = (Set)Convert.toCollection(HashSet.class, String.class, roleCodes); result = menuService.findByRoleCodes(roleSet, CommonConstant.PERMISSION); } return result; } /** * 给角色分配菜单 */ @ApiOperation(value = "角色分配菜单") @PostMapping("/granted") public ResultBody setMenuToRole(@RequestBody SysMenu sysMenu) { menuService.setMenuToRole(sysMenu.getRoleId(), sysMenu.getMenuIds()); return ResultBody.ok().msg("操作成功"); } @ApiOperation(value = "查询所有菜单") @GetMapping("/findAlls") public PageResult findAlls(@RequestParam Map params) { List list = menuService.findAll(params); return PageResult.builder().data(list).code(0).count((long) list.size()).build(); } @ApiOperation(value = "获取菜单以及顶级菜单") @GetMapping("/findOnes") public PageResult findOnes(@RequestParam String tenantId) { List list = menuService.findOnes(tenantId); return PageResult.builder().data(list).code(0).count((long) list.size()).build(); } /** * 添加菜单 或者 更新 * * @param menu * @return */ @ApiOperation(value = "新增菜单") @PostMapping("saveOrUpdate") public ResultBody saveOrUpdate(@RequestBody SysMenu menu) { try { if(menu.getId()==menu.getParentId()){ return ResultBody.failed().msg("请选择正确的父级"); } else { menuService.saveOrUpdate(menu); return ResultBody.ok().msg("操作成功"); } } catch (Exception ex) { log.error("memu-saveOrUpdate-error", ex); return ResultBody.failed().msg("操作失败"); } } /** * 当前登录用户的菜单 * * @return */ @GetMapping("/current") @ApiOperation(value = "查询当前用户菜单") public ResultBody> findMyMenu(@LoginUser SysUser user) { List roles = user.getRoles(); if (CollectionUtil.isEmpty(roles)) { return ResultBody.ok().data(Collections.emptyList()); } List menus = menuService.findByRoleCodes(roles.parallelStream().map(SysRole::getCode).collect(Collectors.toSet()), CommonConstant.MENU); return ResultBody.ok().data(treeBuilder(menus)); } }