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<br>
|
*
|
* @Description: 菜单管理<br>
|
* @Project: <br>
|
* @CreateDate: Created in 2020/2/13 15:50 <br>
|
* @Author: <a href="4345453@kidgrow.com">liuke</a>
|
*/
|
|
@RestController
|
@Api(tags = "菜单模块api")
|
@Slf4j
|
@RequestMapping("/menus")
|
public class SysMenuController {
|
|
public static List<SysMenu> menus = new ArrayList<>();
|
|
@Autowired
|
private ISysMenuService menuService;
|
|
/**current
|
* 两层循环实现建树
|
*
|
* @param sysMenus
|
* @return
|
*/
|
public static List<SysMenu> treeBuilder(List<SysMenu> sysMenus) {
|
List<SysMenu> 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<String, Object> 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<List<Map<String, Object>>> findMenusByRoleId(@PathVariable Long roleId,@RequestParam Map<String, Object> params) {
|
Set<Long> roleIds = new HashSet<>();
|
roleIds.add(roleId);
|
//获取该角色对应的菜单
|
List<SysMenu> roleMenus = menuService.findByRoles(roleIds);
|
//全部的菜单列表
|
List<SysMenu> allMenus = menuService.findAll(params);
|
List<Map<String, Object>> authTrees = new ArrayList<>();
|
|
Map<Long, SysMenu> roleMenusMap = roleMenus.stream().collect(Collectors.toMap(SysMenu::getId, SysMenu -> SysMenu));
|
|
for (SysMenu sysMenu : allMenus) {
|
Map<String, Object> 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<SysMenu> findMenuByRoles(@PathVariable String roleCodes) {
|
List<SysMenu> result = null;
|
if (StringUtils.isNotEmpty(roleCodes)) {
|
Set<String> roleSet = (Set<String>)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<SysMenu> findAlls(@RequestParam Map<String, Object> params) {
|
List<SysMenu> list = menuService.findAll(params);
|
return PageResult.<SysMenu>builder().data(list).code(0).count((long) list.size()).build();
|
}
|
|
@ApiOperation(value = "获取菜单以及顶级菜单")
|
@GetMapping("/findOnes")
|
public PageResult<SysMenu> findOnes(@RequestParam String tenantId) {
|
List<SysMenu> list = menuService.findOnes(tenantId);
|
return PageResult.<SysMenu>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<List<SysMenu>> findMyMenu(@LoginUser SysUser user) {
|
List<SysRole> roles = user.getRoles();
|
if (CollectionUtil.isEmpty(roles)) {
|
return ResultBody.ok().data(Collections.emptyList());
|
}
|
Set<String> collect = roles.stream().map(e -> e.getCode()).collect(Collectors.toSet());
|
List<SysMenu> menus = menuService.findByRoleCodes(collect, CommonConstant.MENU);
|
return ResultBody.ok().data(treeBuilder(menus));
|
}
|
}
|