package com.stylefeng.guns.modular.system.controller; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.stylefeng.guns.core.base.controller.BaseController; import com.stylefeng.guns.core.base.tips.Tip; import com.stylefeng.guns.core.common.annotion.BussinessLog; import com.stylefeng.guns.core.common.annotion.Permission; import com.stylefeng.guns.core.common.constant.Const; import com.stylefeng.guns.core.common.constant.dictmap.MenuDict; import com.stylefeng.guns.core.common.constant.factory.ConstantFactory; import com.stylefeng.guns.core.common.constant.state.MenuStatus; import com.stylefeng.guns.core.common.exception.BizExceptionEnum; import com.stylefeng.guns.core.exception.GunsException; import com.stylefeng.guns.core.log.LogObjectHolder; import com.stylefeng.guns.core.node.ZTreeNode; import com.stylefeng.guns.core.support.BeanKit; import com.stylefeng.guns.core.util.ToolUtil; import com.stylefeng.guns.modular.system.model.Menu; import com.stylefeng.guns.modular.system.service.IMenuService; import com.stylefeng.guns.modular.system.warpper.MenuWarpper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import javax.validation.Valid; import java.util.List; import java.util.Map; /** * 菜单控制器 * * @author fengshuonan * @Date 2017年2月12日21:59:14 */ @Controller @RequestMapping("/menu") public class MenuController extends BaseController { private static String PREFIX = "/system/menu/"; @Autowired private IMenuService menuService; /** * 跳转到菜单列表列表页面 */ @RequestMapping("") public String index() { return PREFIX + "menu.html"; } /** * 跳转到菜单列表列表页面 */ @RequestMapping(value = "/menu_add") public String menuAdd() { return PREFIX + "menu_add.html"; } /** * 跳转到菜单详情列表页面 */ @Permission(Const.ADMIN_NAME) @RequestMapping(value = "/menu_edit/{menuId}") public String menuEdit(@PathVariable Long menuId, Model model) { if (ToolUtil.isEmpty(menuId)) { throw new GunsException(BizExceptionEnum.REQUEST_NULL); } Menu menu = this.menuService.selectById(menuId); //获取父级菜单的id Menu temp = new Menu(); temp.setCode(menu.getPcode()); Menu pMenu = this.menuService.selectOne(new EntityWrapper<>(temp)); //如果父级是顶级菜单 if (pMenu == null) { menu.setPcode("0"); } else { //设置父级菜单的code为父级菜单的id menu.setPcode(String.valueOf(pMenu.getId())); } Map menuMap = BeanKit.beanToMap(menu); menuMap.put("pcodeName", ConstantFactory.me().getMenuNameByCode(temp.getCode())); model.addAttribute("menu", menuMap); LogObjectHolder.me().set(menu); return PREFIX + "menu_edit.html"; } /** * 修该菜单 */ @Permission(Const.ADMIN_NAME) @RequestMapping(value = "/edit") @BussinessLog(value = "修改菜单", key = "name", dict = MenuDict.class) @ResponseBody public Tip edit(@Valid Menu menu, BindingResult result) { if (result.hasErrors()) { throw new GunsException(BizExceptionEnum.REQUEST_NULL); } //设置父级菜单编号 menuSetPcode(menu); this.menuService.updateById(menu); return SUCCESS_TIP; } /** * 获取菜单列表 */ @Permission(Const.ADMIN_NAME) @RequestMapping(value = "/list") @ResponseBody public Object list(@RequestParam(required = false) String menuName, @RequestParam(required = false) String level) { List> menus = this.menuService.selectMenus(menuName, level); return super.warpObject(new MenuWarpper(menus)); } /** * 新增菜单 */ @Permission(Const.ADMIN_NAME) @RequestMapping(value = "/add") @BussinessLog(value = "菜单新增", key = "name", dict = MenuDict.class) @ResponseBody public Tip add(@Valid Menu menu, BindingResult result) { if (result.hasErrors()) { throw new GunsException(BizExceptionEnum.REQUEST_NULL); } //判断是否存在该编号 String existedMenuName = ConstantFactory.me().getMenuNameByCode(menu.getCode()); if (ToolUtil.isNotEmpty(existedMenuName)) { throw new GunsException(BizExceptionEnum.EXISTED_THE_MENU); } //设置父级菜单编号 menuSetPcode(menu); menu.setStatus(MenuStatus.ENABLE.getCode()); this.menuService.insert(menu); return SUCCESS_TIP; } /** * 删除菜单 */ @Permission(Const.ADMIN_NAME) @RequestMapping(value = "/remove") @BussinessLog(value = "删除菜单", key = "menuId", dict = MenuDict.class) @ResponseBody public Tip remove(@RequestParam Long menuId) { if (ToolUtil.isEmpty(menuId)) { throw new GunsException(BizExceptionEnum.REQUEST_NULL); } //缓存菜单的名称 LogObjectHolder.me().set(ConstantFactory.me().getMenuName(menuId)); this.menuService.delMenuContainSubMenus(menuId); return SUCCESS_TIP; } /** * 查看菜单 */ @RequestMapping(value = "/view/{menuId}") @ResponseBody public Tip view(@PathVariable Long menuId) { if (ToolUtil.isEmpty(menuId)) { throw new GunsException(BizExceptionEnum.REQUEST_NULL); } this.menuService.selectById(menuId); return SUCCESS_TIP; } /** * 获取菜单列表(首页用) */ @RequestMapping(value = "/menuTreeList") @ResponseBody public List menuTreeList() { List roleTreeList = this.menuService.menuTreeList(); return roleTreeList; } /** * 获取菜单列表(选择父级菜单用) */ @RequestMapping(value = "/selectMenuTreeList") @ResponseBody public List selectMenuTreeList() { List roleTreeList = this.menuService.menuTreeList(); roleTreeList.add(ZTreeNode.createParent()); return roleTreeList; } /** * 获取角色列表 */ @RequestMapping(value = "/menuTreeListByRoleId/{roleId}") @ResponseBody public List menuTreeListByRoleId(@PathVariable Integer roleId) { List menuIds = this.menuService.getMenuIdsByRoleId(roleId); if (ToolUtil.isEmpty(menuIds)) { List roleTreeList = this.menuService.menuTreeList(); return roleTreeList; } else { List roleTreeListByUserId = this.menuService.menuTreeListByMenuIds(menuIds); return roleTreeListByUserId; } } /** * 根据请求的父级菜单编号设置pcode和层级 */ private void menuSetPcode(@Valid Menu menu) { if (ToolUtil.isEmpty(menu.getPcode()) || menu.getPcode().equals("0")) { menu.setPcode("0"); menu.setPcodes("[0],"); menu.setLevels(1); } else { long code = Long.parseLong(menu.getPcode()); Menu pMenu = menuService.selectById(code); Integer pLevels = pMenu.getLevels(); menu.setPcode(pMenu.getCode()); //如果编号和父编号一致会导致无限递归 if (menu.getCode().equals(menu.getPcode())) { throw new GunsException(BizExceptionEnum.MENU_PCODE_COINCIDENCE); } menu.setLevels(pLevels + 1); menu.setPcodes(pMenu.getPcodes() + "[" + pMenu.getCode() + "],"); } } }