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<SysMenu> menuList = sysMenuService.getUserMenuList(getUserId());
|
Set<String> 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<SysMenu> list(@ApiParam(name="params",value="菜单",required=true)@RequestParam Map<String, Object> 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<SysMenu> menuList = sysMenuService.queryList(queryMenu);
|
if(StringUtils.isNotBlank(name) || StringUtils.isNotBlank(type) || StringUtils.isNotBlank(perms) /*|| StringUtils.isNotBlank(parentName)*/){
|
List<SysMenu> 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<SysMenu> 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<SysMenu> 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<String, Object> queryNoButtonListByParentId(@RequestParam Long parentid){
|
Map<String, Object> map = new HashMap<String,Object>();
|
List<SysMenu> 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<valueidList.length;i++){
|
SysMenu menu = new SysMenu();
|
menu.setId(Long.parseLong(valueidList[i]));
|
// menu.setOrderNum(Integer.parseInt(sortList[i]));
|
menu.setOrderNum(i);
|
sysMenuService.updateRorder(menu);
|
}
|
|
return Result.ok();
|
}
|
}
|