package com.qianwen.smartman.modules.system.controller; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import javax.validation.Valid; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.qianwen.core.boot.ctrl.BladeController; import com.qianwen.core.cache.utils.CacheUtil; import com.qianwen.core.mp.support.Condition; import com.qianwen.core.scanner.modular.annotation.GetResource; import com.qianwen.core.scanner.modular.annotation.PostResource; import com.qianwen.core.scanner.modular.stereotype.ApiResource; import com.qianwen.core.secure.BladeUser; import com.qianwen.core.secure.annotation.PreAuth; import com.qianwen.core.tenant.annotation.NonDS; import com.qianwen.core.tool.api.R; import com.qianwen.core.tool.support.Kv; import com.qianwen.core.tool.utils.Func; import com.qianwen.smartman.common.cache.RegionCache; import com.qianwen.smartman.common.constant.ExtCacheConstant; import com.qianwen.smartman.common.constant.MenuConstant; import com.qianwen.smartman.common.enums.MenuCategoryEnum; import com.qianwen.smartman.modules.system.entity.Menu; import com.qianwen.smartman.modules.system.entity.TopMenu; import com.qianwen.smartman.modules.system.service.IMenuService; import com.qianwen.smartman.modules.system.service.ITopMenuService; import com.qianwen.smartman.modules.system.vo.CheckedTreeVO; import com.qianwen.smartman.modules.system.vo.GrantTreeVO; import com.qianwen.smartman.modules.system.vo.MenuVO; import com.qianwen.smartman.modules.system.wrapper.MenuWrapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import springfox.documentation.annotations.ApiIgnore; @Api(value = "菜单", tags = {"菜单"}) @RestController @ApiResource({"blade-system/menu"}) @NonDS /* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/system/controller/MenuController.class */ public class MenuController extends BladeController { private final IMenuService menuService; private final ITopMenuService topMenuService; public MenuController(final IMenuService menuService, final ITopMenuService topMenuService) { this.menuService = menuService; this.topMenuService = topMenuService; } @ApiOperationSupport(order = 1) @GetResource({"/detail"}) @ApiOperation(value = "详情", notes = "传入menu") @PreAuth public R detail(Menu menu) { Menu detail = (Menu) this.menuService.getOne(Condition.getQueryWrapper(menu)); return R.data(MenuWrapper.build().entityVO(detail)); } @ApiOperationSupport(order = 2) @ApiImplicitParams({@ApiImplicitParam(name = "code", value = "菜单编号", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "name", value = "菜单名称", paramType = "query", dataType = "string")}) @GetResource({"/list"}) @ApiOperation(value = "列表", notes = "传入menu") public R> list(@RequestParam @ApiIgnore Map menu) { List list = this.menuService.list(Condition.getQueryWrapper(menu, Menu.class).lambda().orderByAsc((v0) -> { return v0.getSort(); })); return R.data(MenuWrapper.build().listNodeVO(list)); } @ApiOperationSupport(order = 3) @ApiImplicitParams({@ApiImplicitParam(name = "code", value = "菜单编号", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "name", value = "菜单名称", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "belongApplication", value = "所属应用 CPS:FMS:VISION", paramType = "query", dataType = "string")}) @GetResource({"/lazy-list"}) @ApiOperation(value = "懒加载列表", notes = "传入menu") public R> lazyList(Long parentId, @RequestParam @ApiIgnore Map menu) { List list = this.menuService.lazyList(parentId, menu); return R.data(MenuWrapper.build().listNodeLazyVO(list)); } @ApiOperationSupport(order = 4) @ApiImplicitParams({@ApiImplicitParam(name = "code", value = "菜单编号", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "name", value = "菜单名称", paramType = "query", dataType = "string")}) @GetResource({"/menu-list"}) @ApiOperation(value = "菜单列表", notes = "传入menu") public R> menuList(@RequestParam @ApiIgnore Map menu) { List list = this.menuService.list(Condition.getQueryWrapper(menu, Menu.class).lambda().eq(Menu::getCategory, Integer.valueOf(1)).orderByAsc(Menu::getSort)); /* List list = this.menuService.list((Wrapper) ((LambdaQueryWrapper) Condition.getQueryWrapper(menu, Menu.class).lambda().eq((v0) -> { return v0.getCategory(); }, 1)).orderByAsc((v0) -> { return v0.getSort(); }));*/ return R.data(MenuWrapper.build().listNodeVO(list)); } @ApiOperationSupport(order = RegionCache.VILLAGE_LEVEL) @ApiImplicitParams({@ApiImplicitParam(name = "code", value = "菜单编号", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "name", value = "菜单名称", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "belongApplication", value = "所属应用 CPS:FMS:VISION", paramType = "query", dataType = "string")}) @GetResource({"/lazy-menu-list"}) @ApiOperation(value = "懒加载菜单列表", notes = "传入menu") public R> lazyMenuList(Long parentId, @RequestParam @ApiIgnore Map menu) { List list = this.menuService.lazyMenuList(parentId, menu); return R.data(MenuWrapper.build().listNodeLazyVO(list)); } @ApiOperationSupport(order = 6) @PostResource({"/submit"}) @ApiOperation(value = "新增或修改", notes = "传入menu") @PreAuth public R submit(@Valid @RequestBody Menu menu) { if (this.menuService.submit(menu)) { CacheUtil.clear("blade:menu", ExtCacheConstant.TENANT_MODE); Kv kv = Kv.create().set("id", String.valueOf(menu.getId())); return R.data(kv); } return R.fail("操作失败"); } @ApiOperationSupport(order = 7) @PostResource({"/remove"}) @ApiOperation(value = "删除", notes = "传入ids") @PreAuth public R remove(@RequestParam @ApiParam(value = "主键集合", required = true) String ids) { CacheUtil.clear("blade:menu", ExtCacheConstant.TENANT_MODE); return R.status(this.menuService.removeMenu(ids)); } @ApiOperationSupport(order = 8) @GetResource({"/routes"}) @ApiOperation(value = "前端菜单数据", notes = "前端菜单数据") public R> routes(BladeUser user, Long topMenuId, String appCode) { List list = this.menuService.routes(user == null ? null : user.getRoleId(), topMenuId); List vos = list.stream().filter(menu -> { return MenuConstant.DESK.equals(menu.getCode()) || Func.isNotEmpty(menu.getChildren()); }).collect(Collectors.toList()); if (Func.isNotEmpty(appCode)) { vos = vos.stream().filter(menuVO -> { return appCode.equals(menuVO.getBelongApplication()); }).collect(Collectors.toList()); } return R.data(vos); } @ApiOperationSupport(order = 9) @GetResource({"/routes-ext"}) @ApiOperation(value = "前端菜单数据", notes = "前端菜单数据") public R> routesExt(BladeUser user, Long topMenuId) { List list = this.menuService.routesExt(user.getRoleId(), topMenuId); return R.data(list); } @ApiOperationSupport(order = 10) @GetResource({"/buttons"}) @ApiOperation(value = "前端按钮数据", notes = "前端按钮数据") public R> buttons(BladeUser user) { List list = this.menuService.buttons(user.getRoleId()); return R.data(list); } @ApiOperationSupport(order = 11) @GetResource({"/tree"}) @ApiOperation(value = "树形结构", notes = "树形结构") public R> tree() { List tree = this.menuService.tree(); return R.data(tree); } @ApiOperationSupport(order = 12) @GetResource({"/grant-tree"}) @ApiOperation(value = "权限分配树形结构", notes = "权限分配树形结构") public R grantTree(BladeUser user) { GrantTreeVO vo = new GrantTreeVO(); vo.setDataScope(this.menuService.grantDataScopeTree(user)); vo.setApiScope(this.menuService.grantApiScopeTree(user)); vo.setMenu(this.menuService.grantTreeByCategory(user, MenuCategoryEnum.getMenusOutofCard())); vo.setCard(this.menuService.grantTreeByCategory(user, MenuCategoryEnum.getMenusWithCard())); return R.data(vo); } @ApiOperationSupport(order = 13) @GetResource({"/role-tree-keys"}) @ApiOperation(value = "角色所分配的树", notes = "角色所分配的树") public R roleTreeKeys(String roleIds) { CheckedTreeVO vo = new CheckedTreeVO(); vo.setMenu(this.menuService.getRoleMenuByCondition(roleIds, MenuCategoryEnum.getMenusOutofCard())); vo.setCard(this.menuService.getRoleMenuByCondition(roleIds, MenuCategoryEnum.getMenusWithCard())); vo.setDataScope(this.menuService.dataScopeTreeKeys(roleIds)); vo.setApiScope(this.menuService.apiScopeTreeKeys(roleIds)); return R.data(vo); } @ApiOperationSupport(order = 14) @GetResource({"/grant-top-tree"}) @ApiOperation(value = "顶部菜单树形结构", notes = "顶部菜单树形结构") public R grantTopTree(BladeUser user) { GrantTreeVO vo = new GrantTreeVO(); vo.setMenu(this.menuService.grantTopTree(user)); return R.data(vo); } @ApiOperationSupport(order = 15) @GetResource({"/top-tree-keys"}) @ApiOperation(value = "顶部菜单所分配的树", notes = "顶部菜单所分配的树") public R topTreeKeys(String topMenuIds) { CheckedTreeVO vo = new CheckedTreeVO(); vo.setMenu(this.menuService.topTreeKeys(topMenuIds)); return R.data(vo); } @ApiOperationSupport(order = 16) @GetResource({"/top-menu"}) @ApiOperation(value = "顶部菜单数据", notes = "顶部菜单数据") public R> topMenu(BladeUser user) { if (Func.isEmpty(user)) { return null; } List list = this.topMenuService.list(Wrappers.query().lambda().orderByAsc(TopMenu::getSort)); /* List list = this.topMenuService.list((Wrapper) Wrappers.query().lambda().orderByAsc((v0) -> { return v0.getSort(); }));*/ return R.data(list); } @ApiOperationSupport(order = 17) @GetResource({"auth-routes"}) @ApiOperation("菜单的角色权限") public R> authRoutes(BladeUser user) { if (Func.isEmpty(user)) { return null; } return R.data(this.menuService.authRoutes(user)); } @ApiOperationSupport(order = 2) @ApiImplicitParams({@ApiImplicitParam(name = "code", value = "菜单编号", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "name", value = "菜单名称", paramType = "query", dataType = "string")}) @GetResource({"/list-not-radio"}) @ApiOperation(value = "列表(无按钮)", notes = "传入menu") public R> listNotRadio(@RequestParam @ApiIgnore Map menu) { List list = this.menuService.list(Condition.getQueryWrapper(menu, Menu.class).lambda().in(Menu::getCategory, MenuCategoryEnum.getMenus()).orderByAsc(Menu::getSort)); /* List list = this.menuService.list((Wrapper) ((LambdaQueryWrapper) Condition.getQueryWrapper(menu, Menu.class).lambda().in((v0) -> { return v0.getCategory(); }, MenuCategoryEnum.getMenus())).orderByAsc((v0) -> { return v0.getSort(); }));*/ return R.data(MenuWrapper.build().listNodeVO(list)); } @GetResource({"/grant-tree-card"}) @ApiOperation(value = "权限分配树形结构(卡片)", notes = "权限分配树形结构(卡片)") public R grantTreeCard(BladeUser user) { GrantTreeVO vo = new GrantTreeVO(); vo.setCard(this.menuService.grantTreeCard(user, MenuCategoryEnum.getMenusWithCard())); return R.data(vo); } }