浏览代码

修改组织架构和修改菜单,增加父节点不能为本节点的判断

fengshuonan 4 年之前
父节点
当前提交
e66e5cf212

+ 6 - 1
guns-base-support/guns-system/src/main/java/cn/stylefeng/guns/sys/modular/menu/enums/SysMenuExceptionEnum.java

@ -87,7 +87,12 @@ public enum SysMenuExceptionEnum implements AbstractBaseExceptionEnum {
    /**
     * 不能移动根节点
     */
    CANT_MOVE_APP(10, "父节点不是根节点不能移动应用");
    CANT_MOVE_APP(10, "父节点不是根节点不能移动应用"),
    /**
     * 父级菜单不能为当前节点,请从新选择父级菜单
     */
    PID_CANT_EQ_ID(11, "父级菜单不能为当前节点,请从新选择父级菜单");
    private final Integer code;

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

@ -24,7 +24,6 @@ Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意
 */
package cn.stylefeng.guns.sys.modular.menu.service.impl;
import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
@ -460,6 +459,13 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
            }
        }
        // 如果是编辑菜单时候,pid和id不能一致,一致会导致无限递归
        if (isExcludeSelf) {
            if (sysMenuParam.getId().equals(sysMenuParam.getPid())) {
                throw new ServiceException(SysMenuExceptionEnum.PID_CANT_EQ_ID);
            }
        }
        Long id = sysMenuParam.getId();
        String name = sysMenuParam.getName();
        String code = sysMenuParam.getCode();

+ 6 - 1
guns-base-support/guns-system/src/main/java/cn/stylefeng/guns/sys/modular/org/enums/SysOrgExceptionEnum.java

@ -57,7 +57,12 @@ public enum SysOrgExceptionEnum implements AbstractBaseExceptionEnum {
    /**
     * 该机构下有员工
     */
    ORG_CANNOT_DELETE(4, "该机构下有员工,无法删除");
    ORG_CANNOT_DELETE(4, "该机构下有员工,无法删除"),
    /**
     * 父节点不能和本节点一致,请从新选择父节点
     */
    ID_CANT_EQ_PID(5, "父节点不能和本节点一致,请从新选择父节点");
    private final Integer code;

+ 19 - 2
guns-base-support/guns-system/src/main/java/cn/stylefeng/guns/sys/modular/org/service/impl/SysOrgServiceImpl.java

@ -237,27 +237,35 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void edit(SysOrgParam sysOrgParam) {
        SysOrg sysOrg = this.querySysOrg(sysOrgParam);
        Long id = sysOrg.getId();
        // 检测此人数据范围能不能操作这个公司
        boolean superAdmin = LoginContextHolder.me().isSuperAdmin();
        if (!superAdmin) {
            List<Long> dataScope = sysOrgParam.getDataScope();
            //数据范围为空
            if (ObjectUtil.isEmpty(dataScope)) {
                throw new PermissionException(PermissionExceptionEnum.NO_PERMISSION_OPERATE);
            } else if (!dataScope.contains(id)) {
                //所操作的数据不在自己的数据范围内
            }
            //数据范围中不包含本公司
            else if (!dataScope.contains(id)) {
                throw new PermissionException(PermissionExceptionEnum.NO_PERMISSION_OPERATE);
            }
        }
        //校验参数,检查是否存在相同的名称和编码
        checkParam(sysOrgParam, true);
        //如果名称有变化,则修改对应员工的机构相关信息
        if (!sysOrg.getName().equals(sysOrgParam.getName())) {
            sysEmpService.updateEmpOrgInfo(sysOrg.getId(), sysOrg.getName());
        }
        BeanUtil.copyProperties(sysOrgParam, sysOrg);
        this.fillPids(sysOrg);
        //不能修改状态,用修改状态接口修改状态
        sysOrg.setStatus(null);
        this.updateById(sysOrg);
@ -358,6 +366,7 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
        String name = sysOrgParam.getName();
        String code = sysOrgParam.getCode();
        Long pid = sysOrgParam.getPid();
        //如果父id不是根节点
        if (!pid.equals(0L)) {
            SysOrg pOrg = this.getById(pid);
@ -366,6 +375,14 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
                throw new ServiceException(SysOrgExceptionEnum.ORG_NOT_EXIST);
            }
        }
        // 如果是编辑,父id和自己的id不能一致
        if (isExcludeSelf) {
            if (sysOrgParam.getId().equals(sysOrgParam.getPid())) {
                throw new ServiceException(SysOrgExceptionEnum.ID_CANT_EQ_PID);
            }
        }
        LambdaQueryWrapper<SysOrg> queryWrapperByName = new LambdaQueryWrapper<>();
        queryWrapperByName.eq(SysOrg::getName, name)
                .ne(SysOrg::getStatus, CommonStatusEnum.DELETED.getCode());