package me.zhengjie.modules.system.rest; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import me.zhengjie.aop.log.Log; import me.zhengjie.modules.system.domain.Menu; import me.zhengjie.exception.BadRequestException; import me.zhengjie.modules.system.service.MenuService; import me.zhengjie.modules.system.service.RoleService; import me.zhengjie.modules.system.service.UserService; import me.zhengjie.modules.system.service.dto.MenuDTO; import me.zhengjie.modules.system.service.dto.MenuQueryCriteria; import me.zhengjie.modules.system.service.dto.UserDTO; import me.zhengjie.utils.SecurityUtils; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.HashSet; import java.util.List; import java.util.Set; /** * @author Zheng Jie * @date 2018-12-03 */ @Api(tags = "系统:菜单管理") @RestController @RequestMapping("/api/menus") public class MenuController { private final MenuService menuService; private final UserService userService; private final RoleService roleService; private static final String ENTITY_NAME = "menu"; public MenuController(MenuService menuService, UserService userService, RoleService roleService) { this.menuService = menuService; this.userService = userService; this.roleService = roleService; } @ApiOperation("获取菜单树") @GetMapping(value = "/build") public ResponseEntity buildMenus(){ UserDTO user = userService.findByName(SecurityUtils.getUsername()); List menuDTOList = menuService.findByRoles(roleService.findByUsers_Id(user.getId())); return new ResponseEntity<>(menuService.buildMenus((List) menuService.buildTree(menuDTOList).get("content")),HttpStatus.OK); } @ApiOperation("返回全部的菜单") @GetMapping(value = "/tree") @PreAuthorize("hasAnyRole('ADMIN','MENU_ALL','MENU_CREATE','MENU_EDIT','ROLES_SELECT','ROLES_ALL')") public ResponseEntity getMenuTree(){ return new ResponseEntity<>(menuService.getMenuTree(menuService.findByPid(0L)),HttpStatus.OK); } @Log("查询菜单") @ApiOperation("查询菜单") @GetMapping @PreAuthorize("hasAnyRole('ADMIN','MENU_ALL','MENU_SELECT')") public ResponseEntity getMenus(MenuQueryCriteria criteria){ List menuDTOList = menuService.queryAll(criteria); return new ResponseEntity<>(menuService.buildTree(menuDTOList),HttpStatus.OK); } @Log("新增菜单") @ApiOperation("新增菜单") @PostMapping @PreAuthorize("hasAnyRole('ADMIN','MENU_ALL','MENU_CREATE')") public ResponseEntity create(@Validated @RequestBody Menu resources){ if (resources.getId() != null) { throw new BadRequestException("A new "+ ENTITY_NAME +" cannot already have an ID"); } return new ResponseEntity<>(menuService.create(resources),HttpStatus.CREATED); } @Log("修改菜单") @ApiOperation("修改菜单") @PutMapping @PreAuthorize("hasAnyRole('ADMIN','MENU_ALL','MENU_EDIT')") public ResponseEntity update(@Validated(Menu.Update.class) @RequestBody Menu resources){ menuService.update(resources); return new ResponseEntity(HttpStatus.NO_CONTENT); } @Log("删除菜单") @ApiOperation("删除菜单") @DeleteMapping(value = "/{id}") @PreAuthorize("hasAnyRole('ADMIN','MENU_ALL','MENU_DELETE')") public ResponseEntity delete(@PathVariable Long id){ List menuList = menuService.findByPid(id); Set menuSet = new HashSet<>(); menuSet.add(menuService.findOne(id)); menuSet = menuService.getDeleteMenus(menuList, menuSet); menuService.delete(menuSet); return new ResponseEntity(HttpStatus.OK); } }