/* * Copyright 2019-2020 Zheng Jie * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package admin.rest; import admin.annotation.Log; import admin.exception.BadRequestException; import admin.model.menu.ShowNavModel; import admin.model.response.ApiResponse; import admin.modules.system.domain.Menu; import admin.modules.system.service.MenuService; import admin.modules.system.service.dto.MenuDto; import admin.modules.system.service.dto.MenuQueryCriteria; import admin.modules.system.service.mapper.MenuMapper; import admin.utils.ConvertUtil; import admin.utils.PageUtil; import admin.utils.SecurityUtils; import cn.hutool.core.collection.CollectionUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; 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 javax.servlet.http.HttpServletResponse; import java.util.*; /** * @date 2018-12-03 */ @RestController @RequiredArgsConstructor @Api(tags = "系统:菜单管理") @RequestMapping("/api/menus") public class MenuController { private final MenuService menuService; private final MenuMapper menuMapper; private static final String ENTITY_NAME = "menu"; @Log("导出菜单数据") @ApiOperation("导出菜单数据") @GetMapping(value = "/download") @PreAuthorize("@el.check('menu:list')") public void download(HttpServletResponse response, MenuQueryCriteria criteria) throws Exception { menuService.download(menuService.queryAll(criteria, false), response); } @GetMapping(value = "/build") @ApiOperation("获取前端所需菜单") public ResponseEntity<Object> buildMenus(){ List<MenuDto> menuDtoList = menuService.findByUser(SecurityUtils.getCurrentUserId()); List<MenuDto> menuDtos = menuService.buildTree(menuDtoList); return new ResponseEntity<>(menuService.buildMenus(menuDtos),HttpStatus.OK); } @ApiOperation("返回全部的菜单") @GetMapping(value = "/lazy") @PreAuthorize("@el.check('menu:list','roles:list')") public ResponseEntity<Object> query(@RequestParam Long pid){ return new ResponseEntity<>(menuService.getMenus(pid),HttpStatus.OK); } @Log("查询菜单") @ApiOperation("查询菜单") @GetMapping @PreAuthorize("@el.check('menu:list')") public ResponseEntity<Object> query(MenuQueryCriteria criteria) throws Exception { List<MenuDto> menuDtoList = menuService.queryAll(criteria, true); return new ResponseEntity<>(PageUtil.toPage(menuDtoList, menuDtoList.size()),HttpStatus.OK); } @Log("查询菜单") @ApiOperation("查询菜单:根据ID获取同级与上级数据") @PostMapping("/superior") @PreAuthorize("@el.check('menu:list')") public ResponseEntity<Object> getSuperior(@RequestBody List<Long> ids) { Set<MenuDto> menuDtos = new LinkedHashSet<>(); if(CollectionUtil.isNotEmpty(ids)){ for (Long id : ids) { MenuDto menuDto = menuService.findById(id); menuDtos.addAll(menuService.getSuperior(menuDto, new ArrayList<>())); } return new ResponseEntity<>(menuService.buildTree(new ArrayList<>(menuDtos)),HttpStatus.OK); } return new ResponseEntity<>(menuService.getMenus(null),HttpStatus.OK); } @Log("新增菜单") @ApiOperation("新增菜单") @PostMapping @PreAuthorize("@el.check('menu:add')") public ResponseEntity<Object> create(@Validated @RequestBody Menu resources){ if (resources.getId() != null) { throw new BadRequestException("A new "+ ENTITY_NAME +" cannot already have an ID"); } menuService.create(resources); return new ResponseEntity<>(HttpStatus.CREATED); } @Log("修改菜单") @ApiOperation("修改菜单") @PutMapping @PreAuthorize("@el.check('menu:edit')") public ResponseEntity<Object> update(@Validated(Menu.Update.class) @RequestBody Menu resources){ menuService.update(resources); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除菜单") @ApiOperation("删除菜单") @DeleteMapping @PreAuthorize("@el.check('menu:del')") public ResponseEntity<Object> delete(@RequestBody Set<Long> ids){ Set<Menu> menuSet = new HashSet<>(); for (Long id : ids) { List<MenuDto> menuList = menuService.getMenus(id); menuSet.add(menuService.findOne(id)); menuSet = menuService.getDeleteMenus(ConvertUtil.convertList(menuList, Menu.class), menuSet); } menuService.delete(menuSet); return new ResponseEntity<>(HttpStatus.OK); } @GetMapping(value = "/show") @PreAuthorize("@el.check('get:home')") @ApiOperation("获取导航菜单") public ApiResponse<List<ShowNavModel>> getShowNav(){ return ApiResponse.buildSuccess(menuService.getShowNav()); } @PostMapping(value = "/updateQuick") @PreAuthorize("@el.check('get:home')") @ApiOperation("更新快捷导航") public ApiResponse addQuickNav(@RequestBody Set<Long> ids){ menuService.updateQuickNav(ids); return ApiResponse.buildSuccess(); } }