Search in sources :

Example 1 with ModuleResources

use of io.nerv.web.sys.module.entity.ModuleResources in project EVA-API by PKAQ-LAB.

the class ModuleService method editModule.

/**
 * 新增/编辑一条模块信息
 * @param module 要 新增/编辑 得模块对象
 * @return 重新查询模块列表
 */
public void editModule(ModuleEntity module) {
    String moduleId = module.getId();
    ModuleEntity originModule = this.getById(moduleId);
    // 获取上级节点
    String pid = module.getParentId();
    if (StrUtil.isNotBlank(moduleId)) {
        // 是否启用的逻辑
        if (StrUtil.isNotBlank(module.getStatus()) && LockEnumm.UNLOCK.getIndex().equals(module.getStatus())) {
            if (!isDisable(module)) {
                // 如果父节点状态为禁用,则子节点状态也只能为禁用
                throw new BizException(BizCodeEnum.PARENT_NOT_AVAILABLE);
            }
        }
        // 是否禁用的逻辑
        disableChild(module);
    } else {
        // 新增设置orders为同级模块中最大的orders+1
        module.setIsleaf(true);
        module.setOrders(this.mapper.listOrder(pid) + 1);
    }
    String root = "0";
    // 当前编辑节点为子节点
    if (!root.equals(pid) && StrUtil.isNotBlank(pid)) {
        // 查询新父节点信息
        ModuleEntity parentModule = this.getModule(pid);
        // 设置当前节点信息
        module.setPathId(StrUtil.isNotBlank(parentModule.getPathId()) ? parentModule.getPathId() + "," + parentModule.getId() : parentModule.getId());
        // pathName
        String pathName = StrUtil.format("{}/{}", parentModule.getName(), module.getName());
        String oldFatherPath = null;
        if (moduleId != null && originModule != null && StrUtil.isNotBlank(originModule.getParentId())) {
            // 得到原来父节点的path路径
            ModuleEntity oldParent = this.mapper.selectById(originModule.getParentId());
            oldFatherPath = oldParent != null ? oldParent.getPath() : null;
        }
        module.setPath(TreeHelper.assemblePath(parentModule.getPath(), module.getPath(), oldFatherPath));
        module.setPathName(pathName);
        module.setParentName(parentModule.getName());
    }
    // 如果更换了父节点 重新确定原父节点的 leaf属性,以及所修改节点的orders属性
    if (null != originModule && this.parentChanged(originModule.getParentId(), pid)) {
        // 更新原节点
        // 检查原父节点是否还存在子节点 来重新确定原始父节点得isleaf属性
        // 由于数据还未提交 节点仍然挂载在原始节点上 所以这里要 -1
        int originParentChilds = this.mapper.countPrantLeaf(originModule.getParentId()) - 1;
        if (originParentChilds < 1) {
            ModuleEntity originParentModule = new ModuleEntity();
            originParentModule.setIsleaf(true);
            originParentModule.setId(originModule.getParentId());
            this.mapper.updateById(originParentModule);
        }
        // 更新新节点 isleaf属性
        int newParentChilds = this.mapper.countPrantLeaf(pid);
        ModuleEntity newParentModule = new ModuleEntity();
        newParentModule.setIsleaf(false);
        newParentModule.setId(pid);
        this.mapper.updateById(newParentModule);
        // 重新设置节点顺序
        module.setOrders(newParentChilds + 1);
    }
    // 持久化
    if (StrUtil.isBlank(moduleId)) {
        moduleId = IdWorker.getIdStr();
        module.setId(moduleId);
        this.mapper.insert(module);
    } else {
        this.mapper.updateById(module);
    }
    /**
     *         写入资源信息, 先删除
     *         有id 更新
     *         无id 新增
     */
    List<ModuleResources> resources = module.getResources();
    if (CollUtil.isNotEmpty(resources)) {
        List<String> ids = new ArrayList<>(resources.size());
        for (ModuleResources item : resources) {
            if (StrUtil.isNotBlank(item.getId())) {
                this.moduleResourceMapper.updateById(item);
            } else {
                item.setId(IdWorker.getIdStr());
                item.setModuleId(moduleId);
                this.moduleResourceMapper.insert(item);
            }
            ids.add(item.getId());
        }
        // 移除被删除的
        if (StrUtil.isNotBlank(moduleId)) {
            QueryWrapper<ModuleResources> deleteWrapper = new QueryWrapper();
            deleteWrapper.notIn("id", ids);
            deleteWrapper.eq("module_id", moduleId);
            try {
                this.moduleResourceMapper.delete(deleteWrapper);
            } catch (Exception e) {
                throw new BizException(BizCodeEnum.RESOURCE_USED);
            }
        }
    }
    // 刷新所有子节点的 path parent_name path_name 当修改状态的时候不用刷新子节点信息
    if (StrUtil.isNotBlank(module.getId()) && null != originModule) {
        this.refreshChild(module, originModule);
    }
}
Also used : ModuleResources(io.nerv.web.sys.module.entity.ModuleResources) QueryWrapper(com.baomidou.mybatisplus.core.conditions.query.QueryWrapper) BizException(io.nerv.core.exception.BizException) ArrayList(java.util.ArrayList) ModuleEntity(io.nerv.web.sys.module.entity.ModuleEntity) BizException(io.nerv.core.exception.BizException)

Example 2 with ModuleResources

use of io.nerv.web.sys.module.entity.ModuleResources in project EVA-API by PKAQ-LAB.

the class ModuleService method getModule.

/**
 * 根据ID获取一条模块信息
 * @param id 模块ID
 * @return 模块信息
 */
public ModuleEntity getModule(String id) {
    ModuleEntity module = this.getById(id);
    // 获取资源信息
    QueryWrapper queryWrapper = new QueryWrapper();
    queryWrapper.eq("module_id", id);
    List<ModuleResources> resourceList = this.moduleResourceMapper.selectList(queryWrapper);
    module.setResources(resourceList);
    return module;
}
Also used : QueryWrapper(com.baomidou.mybatisplus.core.conditions.query.QueryWrapper) ModuleResources(io.nerv.web.sys.module.entity.ModuleResources) ModuleEntity(io.nerv.web.sys.module.entity.ModuleEntity)

Example 3 with ModuleResources

use of io.nerv.web.sys.module.entity.ModuleResources in project EVA-API by PKAQ-LAB.

the class ModuleService method deleteModule.

/**
 * 根据ID批量删除
 * @param ids
 * @return
 */
public void deleteModule(ArrayList<String> ids) {
    // 检查是否存在子节点,存在子节点不允许删除
    QueryWrapper<ModuleEntity> oew = new QueryWrapper<>();
    oew.setEntity(new ModuleEntity());
    oew.in("parent_ID", ids);
    List<ModuleEntity> leafList = this.mapper.selectList(oew);
    if (CollectionUtil.isNotEmpty(leafList)) {
        // 获取存在子节点的节点名称
        List<Object> list = CollectionUtil.getFieldValues(leafList, "parentName");
        // 拼接名称
        String name = CollectionUtil.join(list, ",");
        throw new BizException(BizCodeEnum.CHILD_EXIST.getIndex(), StrUtil.format(BizCodeEnum.CHILD_EXIST.getName(), name));
    } else {
        try {
            // 删除相关资源
            QueryWrapper<ModuleResources> deleteWrapper = new QueryWrapper<>();
            deleteWrapper.in("module_id", ids);
            this.moduleResourceMapper.delete(deleteWrapper);
            // 删除模块
            this.mapper.deleteBatchIds(ids);
        } catch (Exception e) {
            throw new BizException(BizCodeEnum.MODULE_RESOURCE_USED);
        }
    }
}
Also used : QueryWrapper(com.baomidou.mybatisplus.core.conditions.query.QueryWrapper) ModuleResources(io.nerv.web.sys.module.entity.ModuleResources) BizException(io.nerv.core.exception.BizException) ModuleEntity(io.nerv.web.sys.module.entity.ModuleEntity) BizException(io.nerv.core.exception.BizException)

Aggregations

QueryWrapper (com.baomidou.mybatisplus.core.conditions.query.QueryWrapper)3 ModuleEntity (io.nerv.web.sys.module.entity.ModuleEntity)3 ModuleResources (io.nerv.web.sys.module.entity.ModuleResources)3 BizException (io.nerv.core.exception.BizException)2 ArrayList (java.util.ArrayList)1