Commit 528db9bb by fengshuonan

修复菜单修改的bug

parent 95ed6da9
package cn.stylefeng.guns.modular.system.service; package cn.stylefeng.guns.modular.system.service;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory; import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import cn.stylefeng.guns.core.common.constant.state.MenuStatus; import cn.stylefeng.guns.core.common.constant.state.MenuStatus;
import cn.stylefeng.guns.core.common.exception.BizExceptionEnum; import cn.stylefeng.guns.core.common.exception.BizExceptionEnum;
...@@ -88,39 +89,47 @@ public class MenuService extends ServiceImpl<MenuMapper, Menu> { ...@@ -88,39 +89,47 @@ public class MenuService extends ServiceImpl<MenuMapper, Menu> {
throw new RequestEmptyException(); throw new RequestEmptyException();
} }
//如果菜单编号修改了,则遍历该菜单的所有子菜单,把对应的编码改了
if (!menu.getCode().equals(menuDto.getCode())) {
this.updateSubMenuCodes(menu.getCode(), menuDto.getCode());
}
//设置父级菜单编号 //设置父级菜单编号
Menu resultMenu = this.menuSetPcode(menuDto); Menu resultMenu = this.menuSetPcode(menuDto);
//查找该节点的子集合,并修改相应的pcodes和level(因为修改菜单后,层级可能变化了)
updateSubMenuLevels(menu, resultMenu);
this.updateById(resultMenu); this.updateById(resultMenu);
} }
/** /**
* 更新所有子菜单的编码 * 更新所有子菜单的结构
* *
* @param code 原编码 * @param oldMenu 原来的菜单
* @param newCode 新编码 * @param newMenu 新菜单
* @author fengshuonan * @author fengshuonan
* @Date 2019/2/27 4:25 PM * @Date 2019/2/27 4:25 PM
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void updateSubMenuCodes(String code, String newCode) { public void updateSubMenuLevels(Menu oldMenu, Menu newMenu) {
QueryWrapper<Menu> wrapper = new QueryWrapper<>(); QueryWrapper<Menu> wrapper = new QueryWrapper<>();
wrapper = wrapper.like("PCODES", "%[" + code + "]%"); wrapper = wrapper.like("PCODES", "%[" + oldMenu.getCode() + "]%");
List<Menu> menus = menuMapper.selectList(wrapper); List<Menu> menus = menuMapper.selectList(wrapper);
for (Menu menu : menus) { for (Menu menu : menus) {
if (code.equals(menu.getPcode())) {
menu.setPcode(newCode); //更新pcode
if (oldMenu.getCode().equals(menu.getPcode())) {
menu.setPcode(newMenu.getCode());
} }
String pcodes = menu.getPcodes();
String resultPcodes = pcodes.replaceFirst("\\[" + code + "\\]", "\\[" + newCode + "\\]"); //更新pcodes
menu.setPcodes(resultPcodes); String oldPcodesPrefix = oldMenu.getPcodes() + "[" + oldMenu.getCode() + "],";
String oldPcodesSuffix = menu.getPcodes().substring(oldPcodesPrefix.length());
String menuPcodes = newMenu.getPcodes() + "[" + newMenu.getCode() + "]," + oldPcodesSuffix;
menu.setPcodes(menuPcodes);
//更新levels
int level = StrUtil.count(menuPcodes, "[");
menu.setLevels(level);
this.updateById(menu); this.updateById(menu);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment