package com.yanzhen.controller; import com.yanzhen.entity.Menu; import com.yanzhen.entity.User; import com.yanzhen.service.MenuService; import com.yanzhen.utils.Result; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; //菜单管理的控制器 @RestController @RequestMapping("/menu") public class MenuController { //注入实例 //注入菜单服务类 @Autowired private MenuService menuService; //查询菜单信息 @GetMapping("/query") public Result query(HttpServletRequest request){ //创建菜单列表 List menus = new ArrayList<>(); //判断查询请求的属性 //如果是用户属性 if(request.getAttribute("user") != null){ //获取用户信息 User user = (User) request.getAttribute("user"); //根据用户ID查询菜单 menus = menuService.query(user.getId()); } //如果是学生属性 else if(request.getAttribute("student") != null){ //查询所有学生类型的菜单 menus = menuService.queryByType(); } //创建菜单 List menuList1 = new ArrayList<>(); //找出一级菜单 //遍历所有菜单项 for (Menu menu : menus) { //判断是否为一级菜单 if(menu.getParentId() == 0){ //添加到一级菜单中 menuList1.add(menu); } } //嵌套循环找出关联设置child属性 //遍历一级菜单 for (Menu parent : menuList1) { //创建子菜单 List child = new ArrayList<>(); //遍历所有菜单项 for (Menu entity : menus) { //判断当前菜单是否为子菜单 if(parent.getId() == entity.getParentId()){ //添加到子菜单中 child.add(entity); } } //设置一级菜单 parent.setChild(child); } //返回结果 return Result.ok(menuList1); } //获取tree信息 @GetMapping("/tree") public Result tree(Integer checked,HttpServletRequest request){ //check查询的时候是否选中状态 //创建已选中菜单ID列表 List checkedMenuId = new ArrayList<>(); //判断是否包含checked if(checked != null){ // 获取用户信息 User user = (User) request.getAttribute("user"); //查询出来自己已经设置过的menuId checkedMenuId = menuService.queryCheckMenuId(user.getId()); } //获取菜单 List list = menuService.list(); //菜单存入tree List> menus = new ArrayList<>(); //嵌套循环所有菜单项找出一级菜单 for (Menu menu : list) { //判断是否为一级菜单 if(menu.getParentId()==0){ Map map = new HashMap<>(); //添加菜单ID map.put("id",menu.getId()); //添加菜单名称 map.put("name",menu.getTitle()); //标记为父节点 map.put("isParent",true); map.put("open",true); //判断是否已选中 if(checked != null){ map.put("checked",checkedMenuId.contains(menu.getId())); } //创建子菜单 List> child = new ArrayList<>(); // 遍历所有菜单项 for (Menu menu1 : list) { //判断当前菜单是否为子菜单 if(menu1.getParentId()!=0 && menu.getId() == menu1.getParentId()){ Map map2 = new HashMap<>(); //添加子菜单ID map2.put("id",menu1.getId()); //添加子菜单名称 map2.put("name",menu1.getTitle()); //标记为子节点 map2.put("isParent",false); //判断是否已选中 if(checked != null){ map2.put("checked",checkedMenuId.contains(menu1.getId())); } //添加到子菜单中 child.add(map2); } } //将子菜单列表添加到一级菜单中 map.put("children",child); //将一级菜单添加到结果中 menus.add(map); } } //返回结果 return Result.ok(menus); } }