package com.landtool.lanbase.modules.sys.controller; import org.apache.commons.lang.StringUtils; import org.apache.shiro.authz.annotation.Logical; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.alibaba.fastjson.JSONObject; import com.landtool.lanbase.common.Constant.MenuType; import com.landtool.lanbase.common.annotation.LogAction; import com.landtool.lanbase.common.annotation.SysLog; import com.landtool.lanbase.common.exception.LanbaseException; import com.landtool.lanbase.common.utils.Result; import com.landtool.lanbase.config.LoginConfigProperties; import com.landtool.lanbase.modules.org.service.OrgUserService; import com.landtool.lanbase.modules.sys.entity.SysMenu; import com.landtool.lanbase.modules.sys.service.SysMenuService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; /** * @author lanbase * @Description: TODO(系统菜单) * @date 2017-6-23 15:07 */ @RestController @RequestMapping("/sys/menu") @Api(value = "", tags = {"系统菜单"}) public class SysMenuController extends AbstractController { @Autowired private OrgUserService orgUserService; @Autowired private SysMenuService sysMenuService; @Autowired private LoginConfigProperties loginConfig; /** * 导航菜单 */ @RequestMapping(value ="/nav", method ={RequestMethod.POST, RequestMethod.GET}) @ApiOperation( value = "导航菜单", notes = "返回导航菜单,带有权限,用于首页", response = Result.class ) public Result nav(){ List menuList = sysMenuService.getUserMenuList(getUserId()); Set permissions = orgUserService.getUserPermissions(getUserId()); Long appId = loginConfig.getAppId(); return Result.ok().put("menuList", menuList).put("permissions", permissions).put("appId",appId); } /** * 所有菜单列表 */ @RequestMapping(value ="/list", method ={RequestMethod.POST, RequestMethod.GET}) // @RequiresPermissions("sys:menu:list") @RequiresPermissions(value = {"sys:menu:list","sys:menu:edit"}, logical = Logical.OR) @ApiOperation( value = "菜单列表", notes = "所有菜单列表" ) @LogAction("平台管理,平台菜单管理,平台菜单查询,查询") public List list(@ApiParam(name="params",value="菜单",required=true)@RequestParam Map params){ String name = (String)params.get("name"); String type = (String)params.get("type"); String perms=(String)params.get("perms"); String parentName=(String)params.get("parentName"); //查询列表数据 SysMenu queryMenu = new SysMenu(); queryMenu.setName(name); if(StringUtils.isNotBlank(type)){ queryMenu.setType(Integer.parseInt(type)); } queryMenu.setPerms(perms); queryMenu.setParentName(parentName); List menuList = sysMenuService.queryList(queryMenu); if(StringUtils.isNotBlank(name) || StringUtils.isNotBlank(type) || StringUtils.isNotBlank(perms) /*|| StringUtils.isNotBlank(parentName)*/){ List menuChildList = sysMenuService.queryChildList( queryMenu); menuList.addAll(menuChildList); } return menuList; } /** * 选择菜单(添加、修改菜单) */ @GetMapping("/select") // @RequiresPermissions("sys:menu:list") @RequiresPermissions(value = {"sys:menu:list","sys:menu:edit"}, logical = Logical.OR) @ApiOperation( value = "选择菜单", notes = "选择菜单(添加、修改菜单)" ) public Result select(){ //查询列表数据 List menuList = sysMenuService.queryNotButtonList(); //添加顶级菜单 SysMenu root = new SysMenu(); root.setId(0L); root.setName("一级菜单"); root.setParentId(-1L); root.setOpen(true); menuList.add(root); return Result.ok().put("menuList", menuList); } /** * 菜单信息 */ @GetMapping("/info/{menuId}") // @RequiresPermissions("sys:menu:list") @RequiresPermissions(value = {"sys:menu:list","sys:menu:edit"}, logical = Logical.OR) @ApiOperation( value = "菜单信息", notes = "" ) public Result info(@ApiParam(name="menuId",value="菜单id",required=true)@PathVariable("menuId") Long menuId){ SysMenu menu = sysMenuService.queryObject(menuId); return Result.ok().put("menu", menu); } /** * 保存 */ @LogAction("平台管理,平台菜单管理,平台菜单新增,新增") @PostMapping("/save") @RequiresPermissions("sys:menu:edit") @ApiOperation( value = "保存菜单", notes = "" ) public Result save(@RequestBody SysMenu menu){ //数据校验 verifyForm(menu); int rorder = sysMenuService.queryMaxRorder(menu.getParentId())+1; menu.setOrderNum(rorder); sysMenuService.save(menu); //保存后获取自增的id值 int id = sysMenuService.queryUserWithSEQ(); return Result.ok().put("id",id); } /** * 修改 */ @LogAction("平台管理,平台菜单管理,平台菜单修改,修改") @RequestMapping("/update") @RequiresPermissions("sys:menu:edit") public Result update(@RequestBody SysMenu menu){ //数据校验 verifyForm(menu); sysMenuService.update(menu); return Result.ok(); } /** * 删除 */ @LogAction("平台管理,平台菜单管理,平台菜单删除,删除") @SysLog("删除菜单") @PostMapping("/delete") @RequiresPermissions("sys:menu:edit") @ApiOperation( value = "删除菜单", notes = "" ) public Result delete(@ApiParam(name="menuId",value="菜单id",required=true)long menuId){ //判断是否有子菜单或按钮 List menuList = sysMenuService.queryAllListByParentId(menuId); SysMenu menu = sysMenuService.queryObject(menuId); //当前菜单 SysMenu rootMenu = sysMenuService.queryObject(menuId); //一级菜单 while (rootMenu.getParentId() != 0) { rootMenu = sysMenuService.queryObject(rootMenu.getParentId()); } if (menuList.size() > 0) { return Result.error("请先删除子菜单或按钮"); } sysMenuService.deleteBatch(new Long[]{menuId}); return Result.ok(); } /** * 验证参数是否正确 */ private void verifyForm(SysMenu menu){ if(StringUtils.isBlank(menu.getName())){ throw new LanbaseException("保存失败,存在特殊字符,请重新输入!"); } if(menu.getParentId() == null){ throw new LanbaseException("上级菜单不能为空"); } //菜单 if(menu.getType() == MenuType.MENU.getValue()){ if(StringUtils.isBlank(menu.getUrl())){ throw new LanbaseException("菜单URL不能为空"); } } //上级菜单类型 int parentType = MenuType.CATALOG.getValue(); if(menu.getParentId() != 0){ SysMenu parentMenu = sysMenuService.queryObject(menu.getParentId()); parentType = parentMenu.getType(); } //目录、菜单 if(menu.getType() == MenuType.CATALOG.getValue() || menu.getType() == MenuType.MENU.getValue()){ if(parentType != MenuType.CATALOG.getValue()){ throw new LanbaseException("上级菜单只能为目录类型"); } return ; } //按钮 if(menu.getType() == MenuType.BUTTON.getValue()){ if(parentType != MenuType.MENU.getValue()){ throw new LanbaseException("上级菜单只能为菜单类型"); } return ; } } /** * 查询节点下一级子节点 */ @RequestMapping(value ="/queryNoButtonListByParentId", method ={RequestMethod.GET}) // @RequiresPermissions("sys:menu:list") @RequiresPermissions(value = {"sys:menu:list","sys:menu:edit"}, logical = Logical.OR) public Map queryNoButtonListByParentId(@RequestParam Long parentid){ Map map = new HashMap(); List sysMenuList = sysMenuService.queryNoButtonListByParentId(parentid); map.put("sysMenuList", sysMenuList); return map; } /** * 修改排序 */ @LogAction("平台管理,平台菜单管理,平台菜单排序修改,修改") @PostMapping("/updateRorder") @RequiresPermissions("sys:menu:edit") @ApiOperation( value = "修改字典字段值排序", notes = "" ) public Result updateRorder(@ApiParam(name="复合对象",value="传入json格式",required=true)@RequestBody JSONObject json){ String valueids = json.getString("valueids"); // String sorts = json.getString("sorts"); String[] valueidList = valueids.split(","); // String[] sortList=sorts.split(","); for(int i =0;i