瀏覽代碼

修复菜单遍历修改子应用的问题

fengshuonan 4 年之前
父節點
當前提交
80afca30a8

+ 17 - 5
guns-base-support/guns-system/src/main/java/cn/stylefeng/guns/sys/modular/menu/service/impl/SysMenuServiceImpl.java

@ -247,32 +247,44 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
    @Override
    public void edit(SysMenuParam sysMenuParam) {
        SysMenu sysMenu = this.querySysMenu(sysMenuParam);
        //校验参数
        checkParam(sysMenuParam, true);
        //如果应用有变化
        if (!sysMenuParam.getApplication().equals(sysMenu.getApplication())) {
            //如果该菜单不为叶子节点,则将其子节点的数据全部修改为该应用
            // 查找所有叶子节点,包含子节点的子节点
            LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.like(SysMenu::getPids, sysMenu.getId());
            List<SysMenu> list = this.list(queryWrapper);
            // 更新所有子节点的应用为当前菜单的应用
            if (ObjectUtil.isNotEmpty(list)) {
                list.forEach(child -> child.setApplication(sysMenu.getApplication()));
                list.forEach(child -> child.setApplication(sysMenuParam.getApplication()));
                this.updateBatchById(list);
            } else {
                //否则查询父节点
            }
            // 如果没有子几点,查询父节点
            else {
                Long pid = sysMenu.getPid();
                // 如果父节点不是根节点
                if (!pid.equals(0L)) {
                    SysMenu pSysMenu = this.getById(pid);
                    //如果父节点不属于该应用,则无法修改其为该应用
                    // 如果父节点不属于该应用,则无法修改其为该应用
                    if (!pSysMenu.getApplication().equals(sysMenu.getApplication())) {
                        throw new ServiceException(SysMenuExceptionEnum.MENU_PARENT_APPLICATION_ERROR);
                    }
                }
            }
        }
        BeanUtil.copyProperties(sysMenuParam, sysMenu);
        this.fillPids(sysMenu);
        this.updateById(sysMenu);
    }